PageSourceSearch

https://comunidadatenea.com/atenea/js/Controllers/Public/FeedController.js

js comunidadatenea.com collected 2026-10-05 23:42:33 UTC 100,075 bytes, 1,887 lines download raw bytes

1var FeedController = (function (c=null,uLogId = 0, uLogFoto = '', uLogRole = 0, where = 'home', publicacionId = 0, tagName='') {
2
3    var usuarioLogId = uLogId;//$("#usuarioLogId").val();
4    var usuarioLogFoto = uLogFoto;//$("#usuarioLog").val();
5    var usuarioLogRole = uLogRole;//$("#usuarioLogRole").val();
6
7    var pubId = publicacionId;
8    var tagNombre = tagName;
9
10    var commons = (c == null) ? new Commons() : c;
11    var totalPages = 0;
12    var alreadyLoadedPage = 0;
13    var contador = 0;
14    var nd1 = new Date();var g1 = nd1.getSeconds();
15
16    var creaImgAutor =function (post, tipo, usuario=null)  {
17        let aImgAutor = document.createElement("A");
18        
19        aImgAutor.setAttribute("target","_blank");
20
21        let imgAutor = document.createElement("IMG");
22        imgAutor.classList.add("align-self-center","imgAutor","rounded-circle","d-inline-block","p-0");
23        
24        imgAutor.setAttribute("alt", "fotoUsuario_"+tipo);                        
25        aImgAutor.appendChild(imgAutor);
26
27        var href = "";
28        var srcRaw = "/uploads/usuarios/logo_usuario.png";
29        var src = commons.GetAsset(srcRaw);
30        //var src = commons.GetAsset("/uploads/usuarios/logo_usuario.png");
31        switch (tipo) {
32            case "usuario":
33            case "loggin"://TODO - modificar la palabra loggin por login
34                href = (baseUrl+"docente/"+usuarioLogId+"/detalle");
35                //src = baseUrl+usuarioLogFoto;
36                srcRaw = usuarioLogFoto;
37                //src = commons.GetAsset(usuarioLogFoto);
38            break;
39            case "autor":
40                href = (baseUrl+"docente/"+post.autorId+"/detalle");
41                //src = baseUrl+post.autorFoto;
42                let fotoChat = post.autorFoto.replace(".", "-resize-55-55.");
43                //srcRaw = post.autorFoto;
44                srcRaw = fotoChat;
45                //src = commons.GetAsset(post.autorFoto);
46            break;
47        }
48        src = commons.GetAsset(srcRaw);
49        aImgAutor.setAttribute("href",href);
50        let urlShowPost = baseUrl+'showpost?pubId='+post.id+'&urlImg='+srcRaw;
51        imgAutor.setAttribute("src", src);
52        imgAutor.setAttribute("data-original", urlShowPost);
53        imgAutor.classList.add("lazyload");
54        return aImgAutor;
55    };//end - creaImgAutor
56
57
58    var crearLinkDetalle = function (data_id,data_fechaCreacion_timestamp,data_publicacionId){
59        //let spanHora = document.createElement("SPAN");
60        let spanHora = document.createElement("A");
61        spanHora.classList.add("ml-1", "spanHora");
62        let fechaPub = commons.fechaPublicacion(data_fechaCreacion_timestamp);
63        let fechaPubTexto = new Date(data_fechaCreacion_timestamp*1000);
64        spanHoraTxt = document.createTextNode(fechaPub);
65        if(data_publicacionId === undefined){
66            let linkPost = baseUrl+"publicacion/"+data_id+"/detalle";
67            spanHora.setAttribute("style",'cursor:pointer;');
68            spanHora.setAttribute("title",'click para ver la publicación ('+fechaPubTexto.toLocaleString()+')');
69            //spanHora.setAttribute("onclick",'location.href="'+linkPost+'"')
70            spanHora.setAttribute("href",linkPost);
71            spanHora.setAttribute("target",'_blank');
72            spanHora.setAttribute("rel",'follow');
73        }
74        spanHora.appendChild(spanHoraTxt);
75        return spanHora;
76    };
77
78    var creaHeaderDePostCommRes = function (elementoDondeSeAgrega, tipo, data){
79        var divImgAutor= document.createElement("DIV");
80        
81        // Nombre del Autor
82        var divNombreAutor = document.createElement("DIV");
83        divNombreAutor.classList.add("ml-1","pl-1","pl-sm-2","row","col","justify-content-start","align-self-center", "divNombreAutor");
84        
85        var aNombre = document.createElement("A");        
86        aNombre.setAttribute("target","_blank");
87
88        var h4Size = (tipo != "post" && tipo != "comm") ? "H4" : "H3";
89        var h4Nombre = document.createElement(h4Size);
90
91        // span de la hora de publicacion
92        var spanHora = crearLinkDetalle(data.id,data.fechaCreacion.timestamp,data.publicacionId);
93        /*
94        var spanHora = document.createElement("SPAN");
95        spanHora.classList.add("ml-1", "spanHora")        
96        spanHoraTxt = document.createTextNode(commons.fechaPublicacion(data.fechaCreacion.timestamp));
97        if(data.publicacionId === undefined){
98            var linkPost = baseUrl+"publicacion/"+data.id+"/detalle";
99            spanHora.setAttribute("style",'cursor:pointer;');
100            spanHora.setAttribute("title",'click para ver la publicación');
101            spanHora.setAttribute("onclick",'location.href="'+linkPost+'"')
102        }
103        spanHora.appendChild(spanHoraTxt);
104        */
105
106        aNombre.appendChild(h4Nombre);                        
107        divNombreAutor.appendChild(aNombre);
108        divNombreAutor.appendChild(spanHora);
109
110        // se agregarn al header de la publicacion la foto y nombre del autor
111        var autorNombreApellido = (data.publicacionId === undefined) ? (data.autorNombre+' '+data.autorApellido) : (data.usuarioNombre+' '+data.usuarioApellido);
112        //var linkDocente = baseUrl+"docente/"+data.autorId+"/detalle";
113        var linkDocente = commons.getDocenteLink(data.autorId);
114        var h4NombreTxt = '...';
115        var claseFoto = '';
116        var cia = '';
117
118        elementoDondeSeAgrega.appendChild(divImgAutor);
119        elementoDondeSeAgrega.appendChild(divNombreAutor);
120
121        switch (tipo) {
122            case 'post':
123                claseFoto = 'fotoPost';
124                cia = 'autor';
125                divImgAutor.classList.add("pl-0");
126            break;
127            case 'comm':
128            case 'ultimoCOmm':
129                claseFoto = 'fotoComm';
130                cia = 'autor';
131                divImgAutor.classList.add("pl-0");
132            break;
133            case 'res':
134                claseFoto = 'fotoComm';
135                cia = 'ultimoComm';
136                divNombreAutor.classList.add("divNombreAutorRes");
137                divImgAutor.classList.add("pl-2");
138            break;
139            default:
140                claseFoto = 'fotoPost fotoPostDefault';
141                cia = 'autor ciaDefault'
142        }
143
144        divImgAutor.classList.add("justify-content-start","align-self-center", claseFoto);
145        divImgAutor.appendChild(creaImgAutor(data, cia));
146        aNombre.setAttribute("href",linkDocente);
147        h4NombreTxt = document.createTextNode(autorNombreApellido);
148        h4Nombre.appendChild(h4NombreTxt);  
149
150        var contenedorMiniMenu = document.createElement("DIV");
151        contenedorMiniMenu.classList.add("text-right");
152        elementoDondeSeAgrega.appendChild(contenedorMiniMenu);
153
154        /*
155        aca se crean los 3 puntos para 
156        los usuarios autores del post y/o administradores, 
157        esto permite editar, borrar o fijar (solo admin) una publicacion.
158        */
159        if((data.autorId == usuarioLogId) || (usuarioLogRole == 1)){
160        //if((data.autorId == usuarioLogId) || (commons.chequearRolUsuario('',usuarioLogRole)){
161        //            contenedorMiniMenu.appendChild(crearGrupoBotonMenu(contenedorMiniMenu,data.id,tipo,data.estado));
162        }
163        contenedorMiniMenu.appendChild(crearGrupoBotonMenu(data.autorId,usuarioLogId,usuarioLogRole,data.id,tipo,data.estado,data.publicacionId));
164    };//end - creaHeaderDePostCommRes
165
166    var crearComm = function (elementoDondeSeAgrega, data, tipo, idOriginal){
167        //console.log("paso por crearComm:",idOriginal, tipo, elementoDondeSeAgrega, data);
168        // creo el div contenedor del header del comentario y lo agrego al bloque de comentario
169        var contComm = document.createElement("DIV");
170        contComm.classList.add("contenido-post-gris",'dcode-js-crearComm-contComm','pt-2','pr-2','pb-2','pl-3');
171        elementoDondeSeAgrega.appendChild(contComm);
172        var divHeaderComm = document.createElement("DIV");
173        divHeaderComm.classList.add("debug_creaComm_"+contador,"row","col-12","divHeaderResComm","dcode-js-divHeaderResComm-divHeaderComm-crearComm");
174        divHeaderComm.style.marginLeft = "-5px !important";
175        divHeaderComm.style.paddingRight = "0 !important";
176        divHeaderComm.style.paddingLeft = "0 !important";
177        contComm.appendChild(divHeaderComm);
178        // llama a funcion que crea div del contenido del comentario y lo agrego al bloque de comentarios
179        // if (tipo == "ultimoComm"){                        
180        //     // llamo a la funcion que crea el header de las publicacion Comentarios, Respuestas
181        //     creaHeaderDePostCommRes(divHeaderComm, "ultimoComm", data);
182        //     divContenidoDelPostCommRes( data, contComm, "pl-4", "ultimoComm");
183        //     creaBarraComm(elementoDondeSeAgrega, data, idOriginal);                    
184        //     creaInputComm(elementoDondeSeAgrega, data, "comm", idOriginal);
185        // } else if( tipo == "comm"){
186        // llamo a la funcion que crea el header de las publicacion Comentarios, Respuestas
187        creaHeaderDePostCommRes(divHeaderComm, "comm", data);
188        divContenidoDelPostCommRes( data, contComm, "pl-4", "comm");
189        creaBarraComm(elementoDondeSeAgrega, data, idOriginal);
190        //creaInputComm(elementoDondeSeAgrega, data, tipo, idOriginal);
191        //var botonesPostId = (tipo == "respuesta") ? data.id+"-"+data.publicacionid : data.id+"-";
192        var botonesPostId = (tipo == "respuesta") ? data.id+"-"+data.publicacionId : data.publicacionId+"-";
193        //var btnPost = document.getElementById('botonesPost-'+botonesPostId);
194        var btnPost = document.getElementById(botonesPostId+'barraComm');
195        /*
196                console.log("----------------------------------------------------------",(btnPost != null));
197                console.log("(btnPost != null):",(btnPost != null));
198                console.log("esta es la llamada numero 3 - crearComm linea 117 - antes del IF:",data.id,data.publicacionId,tipo,btnPost,botonesPostId,data);
199        */
200        if(btnPost != null){
201            //            console.log("paso por IF:",btnPost);            console.log("esta es la llamada numero 3 - crearComm linea 117 - ADENTRO del IF:",tipo,btnPost,botonesPostId);
202            creaInputComm(btnPost, data, tipo, idOriginal);
203        }
204        //        console.log("__________________________________________________________",(btnPost != null));
205
206        var contenedorFormResponder = document.createElement("DIV");
207        contenedorFormResponder.classList.add("row-2","dcode-js-crearComm-contenedorFormResponder-"+data.id);
208        contenedorFormResponder.setAttribute('id',`contenedorFormResponder-${data.id}`);
209        elementoDondeSeAgrega.appendChild(contenedorFormResponder);
210
211        creaInputComm(contenedorFormResponder, data, tipo, data.publicacionId);
212
213        var contenedorRespuestas = document.createElement("DIV");
214        contenedorRespuestas.classList.add("row-2","dcode-js-crearComm-contenedorRespuestas-"+data.id);
215        contenedorRespuestas.setAttribute('id',`contenedorRespuestas-${data.id}`)
216        elementoDondeSeAgrega.appendChild(contenedorRespuestas)
217        if (data.respuestas.length >0){
218            data.respuestas.forEach(res =>{
219                    crearResp(contenedorRespuestas,res);                                    
220                }
221            )
222        }
223        commons.animarElemento(contComm);
224    };//end - crearComm
225
226    var crearResp = function(contenedorRespuestas,res){
227        //        console.log('paso por crearResp:', contenedorRespuestas, res);
228        divRespuesta = document.createElement("DIV");
229        createObject(divRespuesta, new Array('respuesta','dcode-js-divRespuesta'), {"id":`divRespuesta-${res.id}`});
230
231        divHeaderRes = document.createElement("DIV");//divHeaderRes.classList.add("row", "justify-content-end");
232        createObject(divHeaderRes, new Array("row", "justify-content-end"));
233        creaHeaderDePostCommRes(divHeaderRes, "res", res);
234
235        divRespuesta.appendChild(divHeaderRes);
236        divContenidoDelPostCommRes( res, divRespuesta, "ml-auto", "respuesta",'dcode-crearResp-divRespuesta');
237
238        divLikeRespuesta = document.createElement("DIV");
239        //createObject(divLikeRespuesta, new Array("justify-content-center", "row", "btnLikeRes",'dcode-js-crearResp-divLikeRespuesta-btnLikeRes'));
240        createObject(divLikeRespuesta, new Array("likeRespuesta", "block", "btnLikeRes",'dcode-js-crearResp-divLikeRespuesta-btnLikeRes'), {"id":`divLikeRespuesta-${res.id}`});
241
242        //divRespuesta.appendChild(divLikeRespuesta);
243
244        pTxtLike = document.createElement("DIV");
245        let spanLikes = document.createElement("SPAN");
246        createObject(spanLikes, null, {'id':'ctnLikes-'+res.id+"-"+commons.getConstante('TipoNotificacion','LikeRespuesta')});
247
248        let ctnLikes = document.createTextNode(res.likes);
249
250        spanLikes.appendChild(ctnLikes);
251        pTxtLike.appendChild(spanLikes);
252
253        let aon = (res.tieneLike >= 1) ? true : false;
254        btnInteractivos(res, "btnLike", aon, pTxtLike, "respuesta", res.publicacionId);
255
256        divLikeRespuesta.appendChild(pTxtLike);
257        if(contenedorRespuestas != null){
258            contenedorRespuestas.prepend(divLikeRespuesta);
259            contenedorRespuestas.prepend(divRespuesta);
260            //divRespuesta.appendChild(divLikeRespuesta);
261        }
262        commons.animarElemento(divRespuesta);
263        /*
264            contenedorRespuestas.appendChild(divRespuesta);//divRespuesta.scrollIntoView();//divLikeRespuesta.scrollIntoView();console.log("divLikeRespuesta.offsetTop:",divLikeRespuesta.offsetTop);console.log("__divLikeRespuesta.scrollTop:",divLikeRespuesta.scrollTop);console.log("divRespuesta.offsetTop:",divRespuesta.offsetTop);console.log("__divRespuesta.scrollTop:",divRespuesta.scrollTop);console.log("contenedorRespuestas.offsetTop:",contenedorRespuestas.offsetTop);console.log("__contenedorRespuestas.scrollTop:",contenedorRespuestas.scrollTop);
264//contenedorRespuestaswindow.scrollTo(0,divRespuesta.offsetTop);
265        */
266    };//end - crearResp
267
268    var creaBarraComm = function (elementoDondeSeAgrega, dataComm, idPostOriginal){
269        var barraComm = document.createElement("DIV");
270        barraComm.classList.add("barraComm", "text-center");
271        barraComm.setAttribute("id", dataComm.id+"barraComm");
272        barraComm.setAttribute("data-rel", dataComm.id+"_")
273        if(dataComm.publicacionId !== undefined){
274            barraComm.setAttribute("data-rel", dataComm.id+"_"+dataComm.publicacionId);
275        }
276        elementoDondeSeAgrega.appendChild(barraComm);
277        // botones
278        var btnsComm = document.createElement("DIV");
279        btnsComm.classList.add("btnsComm", "text-left", "ml-3");
280
281        let likes = document.createElement("SPAN");
282        likes.setAttribute('id','ctnLikes-'+dataComm.id+"-"+commons.getConstante('TipoNotificacion','LikeComentario'));
283        let ctnLikes = document.createTextNode(dataComm.likes);
284        likes.appendChild(ctnLikes);          
285        btnsComm.appendChild(likes);
286        var commTieneLike = (dataComm.tieneLike == 0) ? false : true;
287        btnInteractivos(dataComm, "btnLike", commTieneLike, btnsComm, "LikeComentario", "",commons.getConstante('TipoNotificacion','LikeComentario'));
288
289        let comms = document.createElement("SPAN");
290        comms.setAttribute('id', 'ctnResp-'+dataComm.publicacionId+"-"+dataComm.id);
291        let ctnComms = document.createTextNode(dataComm.respuestas.length);
292        comms.appendChild(ctnComms);          
293        btnsComm.appendChild(comms)
294        btnInteractivos(dataComm, "btnComm", false, btnsComm, "respuesta", idPostOriginal);
295        barraComm.appendChild(btnsComm);
296    };//end - barraComm
297
298    var btnInteractivos = function ( post, tipo, activoOno, elementoDondeSeAgrega, originalORespuesta, idpostorginal,tipoLike=null){
299        var btn = document.createElement("BUTTON");
300        btn.classList.add(tipo,"btn", "btn-transparent", "px-1", "px-sm-2", "mr-0", "mr-sm-4", "dcode-js-btn-"+tipo );
301
302        var icono = document.createElement("IMG")
303        btn.setAttribute( "data-idrelacion", post.id);
304        btn.setAttribute( "data-idautor", post.autorId);
305        btn.setAttribute( "data-idpublicacion", post.id);
306        btn.setAttribute( "data-idcomentario", 0);
307        if(post.publicacionId !== undefined){
308            btn.setAttribute( "data-idcomentario", post.id);
309            btn.setAttribute( "data-idpublicacion", post.publicacionId);
310        }
311
312        switch(tipo){
313            case 'btnLike':
314                let claseLike = "darLike";
315                let dataLike = 0;
316                let imgLike = commons.GetAsset("atenea/images/feed/Like_des.png");
317                if (activoOno){
318                    claseLike = "darDislike";
319                    dataLike = post.tieneLike;
320                    imgLike = commons.GetAsset("atenea/images/feed/Like_selecc.png");
321                }
322                btn.classList.add(claseLike);
323                btn.setAttribute( "data-like", dataLike);
324                icono.setAttribute("width", 24);
325                icono.setAttribute("src", imgLike);
326            break;
327            case 'btnComm':
328                let esResp = (post.tipoLike == 1) ? false : true;
329                let targetName = (esResp) ? "#inputCommRes-" : '#inputComm-';
330                let focusName = (esResp) ? "inputTxtRes-" : "inputTxt-";
331                let mixId = (esResp) ? idpostorginal+'-'+post.id : post.id+'-';
332                let target = targetName+mixId;
333                let focus = focusName+mixId;
334                btn.setAttribute( "aria-controls", target);
335                btn.setAttribute( "data-focus", focus);
336                btn.setAttribute( "aria-expanded", "false"); 
337                var comSel = (activoOno) ? commons.GetAsset("atenea/images/feed/Comment_selecc.png") : commons.GetAsset("atenea/images/feed/Comment_des.png");
338                icono.setAttribute("src", comSel);
339                let dataTarget = "#loginModal";
340                let dataToggle = "modal";
341                if(usuarioLogId != 0){
342                    dataTarget = target;
343                    dataToggle = "collapse";
344                }
345                btn.setAttribute( "data-target", dataTarget);
346                btn.setAttribute( "data-toggle", dataToggle);
347            break;
348            case 'btnShare':
349                btn.setAttribute( "data-toggle", "modal");
350                btn.setAttribute( "data-target", "#modal-socialmedia");
351                icono.setAttribute("src", commons.GetAsset('atenea/images/feed/Compartir.png'));
352            break;
353        }
354        btn.setAttribute( "data-tipo",post.tipo);
355        btn.setAttribute( "data-tipolike",post.tipoLike);
356        btn.appendChild(icono);
357        elementoDondeSeAgrega.appendChild(btn);
358    };//end - btnInteractivos
359
360    var onlyUnique = function (value, index, self) {
361        return self.indexOf(value) === index;
362    };
363
364    var divContenidoDelPostCommRes =  function (data, elementoDondeSeAgrega, claseAdicional, tipoPostCommRes, unicoItem){
365        let limiteCaracteres = 2000;
366        /*
367        console.log('inicio------------------------------------');
368        console.log('data.id: ',data.id);
369        //console.log(data);
370        console.log('data++++++++++++++');
371        */
372        // div del contenido texto de la publicacion
373        let multiCollpase = "multi-collapse"+data.id;
374        var divTextPublicacion = document.createElement("DIV");
375        divTextPublicacion.setAttribute("id", "divTextPublicacion-"+data.id);
376        divTextPublicacion.classList.add("textPublicacion","text-justify","textoCompletoPost","dcode-js-divTextPublicacion-divContenidoDelPostCommRes-textoCompletoPost",multiCollpase,"collapse");//,"collapse"
377
378        var divTextPublicacionVerMas = document.createElement("DIV");
379        divTextPublicacionVerMas.setAttribute("id", "divTextPublicacionVerMas-"+data.id);
380        divTextPublicacionVerMas.classList.add("textPublicacion","text-justify","textoVerMasPost","dcode-js-divTextPublicacionVerMas-divContenidoDelPostCommRes-textoVerMasPost",multiCollpase,"collapse","show");
381
382        // div del contenido texto de la publicacion
383        var divPreview = document.createElement("DIV");
384        divPreview.classList.add("text-justify","dcode-js-divPreview-divContenidoDelPostCommRes");
385        // crea elemento p del contenido
386        var pPost = document.createElement("P");
387        pPost.classList.add("dcode-js-pPost-divContenidoDelPostCommRes")
388        // pPost.classList.add("mt-3")
389        var pPostVerMas = document.createElement("P");
390        pPostVerMas.classList.add("dcode-js-pPostVerMas-divContenidoDelPostCommRes")
391
392        // dependiendo del tipo agrega el contenido de post original, comentario o respuesta del comentario
393        var pPostTxt = "";
394        var pPostTxtVerMas = "";
395        //console.log(data);
396        //console.log('cant ',data.contenido.length);
397        let dataContenido = data.contenido;
398        //console.log("aca 1+++");
399        if (tipoPostCommRes == "post"){
400            if(data.tipo == 5){
401                pPostTxt = dataContenido;
402            }else{
403                /*
404                console.log("aca 4");
405                */
406                if(dataContenido.length >= limiteCaracteres){
407                    pPostTxt = dataContenido;
408                    pPostTxtVerMas = dataContenido.substr(0,limiteCaracteres);//se podria configurar un limite con alguna variable de .env .env.local
409                }else{
410                    pPostTxt = dataContenido;
411                    pPostTxtVerMas = "";
412                }
413                let matchesHREF;
414                let matchesHREFclean;
415                //console.log('pPostTxtVerMas',pPostTxtVerMas);
416                //pPostTxt = commons.getUrlText(data.contenido,'a-contenido');
417                //var matches = data.contenido.match(/\bhttps?:\/\/\S+/gi);
418                //var matches = data.contenido.match(/\bhttps?:\/\/\S+/gi);
419                //var matches = data.contenido.match(/\bhref?=\/\/\S+/gi);
420                var matches = data.contenido.match(/<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1/g);
421                if(matches != null){
422                    /*
423                    console.log("aca 5 - se encontro algo con https");
424                    console.log(matches);
425                    console.log(".................................................................");
426                    */
427                    let contPostFancybox = document.getElementById("carouselInner-"+data.id);
428                    contPostFancybox.classList.add("mt-2");
429                    //crearPrevisualiacionLink(matches[0],divPreview,data.id);
430                    ///console.log(contPostFancybox);
431                    //crearPrevisualiacionLink(matches[0], contPostFancybox, data.id, unicoItem);
432                    let unicos = new Array();
433                    let encontrados = new Array();
434                    let incluye = false;
435                    for (x in matches) {
436                        if(matches[x].includes("nofollow")){
437                            matchesHREF = data.contenido.match(/\https?:\/\/\S+/gi);
438                            //console.log(matchesHREF);
439                            for (y in matchesHREF) {
440                                matchesHREFclean = matchesHREF[y].replace(/['"]+/g, '');
441                                matchesHREFclean = matchesHREFclean.replace('</a>','');
442                                let ori = matchesHREFclean;
443                                //let tempo = matchesHREFclean+'>'+matchesHREFclean+'</a>';
444                                let tempo = ori+'>'+ori+'</a>';
445                                //console.log('tempooooo:',tempo);
446                                matchesHREFclean = matchesHREFclean.replace(tempo,'');
447                                //tempo = matchesHREFclean+'>'+matchesHREFclean;
448                                tempo = ori+'>'+ori;
449                                matchesHREFclean = matchesHREFclean.replace(tempo,'');
450                                //tempo = matchesHREFclean+'%3E'+matchesHREFclean;
451                                tempo = ori+'%3E'+ori;
452                                matchesHREFclean = matchesHREFclean.replace(tempo,'');
453                                //matchesHREFclean = matchesHREFclean.replace('>','');
454                                if ( matchesHREFclean.includes(">") == false) {
455                                    //console.log('tempo es: ',tempo);console.log('matchesHREFclean:',matchesHREFclean);
456                                    //console.log('paso por if',matchesHREFclean);
457                                    //console.log('---------------------');
458                                    encontrados.push(matchesHREFclean);
459                                }
460                                /*
461                                incluye = matchesHREFclean.includes("</a>");
462                                if(incluye){
463                                    //console.log('por IF no hace nada porque encontro el a final');
464                                }else{
465                                    //console.log('va por ELSE y se agrega a encontrados');
466                                    //crearPrevisualiacionLink(matches[x], contPostFancybox, data.id, unicoItem);
467                                    //crearPrevisualiacionLink(matchesHREFclean, contPostFancybox, data.id, unicoItem);
468                                }
469                                */
470                            }
471                        }
472                    }
473                    unicos = encontrados.filter(onlyUnique);
474                    //unicoItemFinal = ((unicoItem == true) && (z == 0))  ? true : false;
475                    /*
476                    console.log('unicos',unicos);
477                    console.log('encontrados',encontrados);
478                    console.log('.......................................');
479                    console.log('encontrados',encontrados);
480                    */
481                    for (z in unicos) {
482                        //unicoItem = ((unicos.length >= 1) && (z == 0)) ? false : true;
483                        unicoItemFinal = (z == 0)  ? unicoItem : false;
484                        /*
485                        console.log('unicoItemFinal',unicoItemFinal);
486                        console.log('.......................................');
487                        console.log('encontrados[z]',encontrados[z]);
488                        */
489                        crearPrevisualiacionLink(encontrados[z], contPostFancybox, data.id, unicoItemFinal);
490                    }
491                }
492            }
493        } else {
494            //console.log("aca 6");
495            pPost.classList.add("pCommRes");
496            pPostTxt = dataContenido;
497        }
498        //console.log("aca 7---");
499        //pPost.insertAdjacentHTML('beforeend',pPostTxt);
500        if(dataContenido.length >= limiteCaracteres){
501            pPost.insertAdjacentHTML('beforeend',pPostTxt);
502            pPostVerMas.insertAdjacentHTML('beforeend',pPostTxtVerMas);
503            //pPost.insertAdjacentHTML('beforeend',pPostTxtVerMas);
504        }else{
505            pPost.insertAdjacentHTML('beforeend',pPostTxt);
506        }
507        divTextPublicacion.appendChild(pPost);
508        if(dataContenido.length >= limiteCaracteres){
509            divTextPublicacionVerMas.appendChild(pPostVerMas);
510        }
511
512        // se agrega el el contenido texto al div contenedor del contenido de post
513        elementoDondeSeAgrega.appendChild(divTextPublicacion);
514        if(dataContenido.length >= limiteCaracteres){
515            elementoDondeSeAgrega.appendChild(divTextPublicacionVerMas);
516
517            let divVerMasContenidoPost = document.createElement("DIV");
518            divVerMasContenidoPost.classList.add("textPublicacion","text-center","mb-4","mp-4","dcode-js-divVerMasContenidoPost");
519            let pVerMasContenidoPost = document.createElement("BUTTON");
520            pVerMasContenidoPost.setAttribute("id", "verMasContenido-"+data.id);
521            pVerMasContenidoPost.classList.add("btn","btn-primary","botonVerMasContenido","dcode-js-a-pVerMasContenidoPost");
522            pVerMasContenidoPost.setAttribute("type", "button");
523            pVerMasContenidoPost.setAttribute("data-toggle", "collapse");
524            pVerMasContenidoPost.setAttribute("data-target", ".multi-collapse"+d
524ata.id);
525            pVerMasContenidoPost.setAttribute("aria-expanded", "false");
526            pVerMasContenidoPost.setAttribute("aria-controls", "divTextPublicacion-"+data.id+" divTextPublicacionVerMas-"+data.id);
527            //let pVerMasContenidoPostTxtNode = dataContenido.substr(0,2000);//se podria configurar un limite con alguna variable de .env .env.local
528            let pVerMasContenidoPostTxtNode = "Ver Más";//se podria configurar un limite con alguna variable de .env .env.local
529            let pVerMasContenidoPostTxt = document.createTextNode(pVerMasContenidoPostTxtNode);
530
531            var divTextPublicacion = document.createElement("DIV");
532            divTextPublicacion.classList.add("textPublicacion","text-justify","textoCompletoPost","dcode-js-divTextPublicacion-divContenidoDelPostCommRes-textoCompletoPost",multiCollpase,"collapse");
533
534
535            pVerMasContenidoPost.appendChild(pVerMasContenidoPostTxt);
536            divVerMasContenidoPost.appendChild(pVerMasContenidoPost);
537            elementoDondeSeAgrega.appendChild(divVerMasContenidoPost);
538        }else{
539            divTextPublicacion.classList.add("show");//,"collapse"
540        }
541
542        elementoDondeSeAgrega.appendChild(divPreview);
543        // si tiene archivo
544        /* #############  POR AHORA NO MOSTRAR IMAGEN EN COMENTARIOS   ##############################
545        if (tipoPostCommRes != "respuesta" && tipoPostCommRes != "post"){
546            if (data.archivos.length>0){
547                var divArch = document.createElement("DIV");
548                divArch.classList.add("text-center")
549
550                var imgEditar = document.createElement("IMG")
551                imgEditar.setAttribute("src", data.archivos[0].ruta)
552                imgEditar.classList.add("imgComm");
553                divArch.appendChild(imgEditar);
554                elementoDondeSeAgrega.appendChild(divArch)
555            }
556        }
557        */
558    };//end - divContenidoDelPostCommRes
559
560    var crearGrupoBotonMenu = function(data_autorId, usuarioLogId, usuarioLogRole , id, tipo, estado,postId){
561        var grupoBtns = document.createElement("DIV");
562        grupoBtns.classList.add("GrupoBotonMenu");
563        grupoBtns.setAttribute("id", id+'_'+tipo+'_'+estado);
564
565        let mostrarBotones = false;
566
567        if (estado == commons.getConstante('EstadoPublicacion','Fijada')){
568            mostrarBotones = true;
569        }
570
571        if (data_autorId == usuarioLogId){
572            mostrarBotones = true;
573        }
574
575        if (usuarioLogRole == 1){
576            mostrarBotones = true;
577        }
578
579        if (mostrarBotones){
580            grupoBtns.classList.add("btn-group");
581            var btnPuntitos = document.createElement("BUTTON");
582            btnPuntitos.classList.add("btn", "btn-publicacion-menu", "dropdown-toggle","justify-content-start","align-self-center","btn-publicacion-menu-"+tipo+"-"+postId);
583            btnPuntitos.setAttribute("data-toggle", "dropdown");
584            btnPuntitos.setAttribute("data-tipo", tipo);
585            btnPuntitos.setAttribute("aria-haspopup", "true");
586            btnPuntitos.setAttribute("aria-expanded", "false");
587            btnPuntitos.setAttribute("id", id);
588            if( estado == commons.getConstante('EstadoPublicacion','Fijada') ){
589                var elemI = document.createElement("IMG");
590                elemI.setAttribute("src",commons.GetAsset("atenea/images/Icono_Fijado.png"));
591                elemI.setAttribute("width","24");
592            }else{
593                var elemI = document.createElement("I");
594                elemI.classList.add("fas", "fa-ellipsis-v");
595            }
596            btnPuntitos.appendChild(elemI);
597            grupoBtns.appendChild(btnPuntitos);
598        }
599
600        var dropdown = document.createElement("DIV");
601        dropdown.classList.add("dropdown-menu", "dropdown-publicaciones");
602        grupoBtns.appendChild(dropdown);
603
604        if ( (data_autorId == usuarioLogId) || (usuarioLogRole == 1) ){
605            var item2 = document.createElement("A");
606            var txtTipo = (tipo == "post") ? "Publicación" : "";
607            var actionDelete = (tipo == "post") ? "actionDeletePublicacion" : "actionDeleteComentario";
608            item2.classList.add("dropdown-item", "dropdown-publicaciones-item", "btn", "text-muted", actionDelete);
609            var item2Txt = document.createTextNode("Eliminar "+txtTipo);
610            item2.setAttribute("id", id);
611            item2.appendChild(item2Txt);
612            dropdown.appendChild(item2);
613        }
614
615        //        console.log('tipo: ',tipo);
616
617        if ( (usuarioLogRole == 1) && (tipo == "post") ){
618            let item3 = document.createElement("A");
619            //item3.classList.add("dropdown-item", "dropdown-publicaciones-item","btn","actionFijar","text-danger");
620            item3.classList.add("dropdown-item", "dropdown-publicaciones-item","btn");
621            item3.setAttribute('data-publicacion',id);
622            let item3TxtNode = "Fijar Publicación";
623            if(estado == commons.getConstante('EstadoPublicacion','Fijada')){
624                item3.classList.add("actionQuitarFijado","text-danger");
625                item3TxtNode = "Desfijar Publicación";
626            }else{
627                item3.classList.add("actionFijar","text-warning");
628            }
629            let item3Txt = document.createTextNode(item3TxtNode);
630            item3.appendChild(item3Txt);
631            dropdown.appendChild(item3);
632        }
633
634        if (tipo == "post"){
635            /*
636            //por el momento no hay opcion de editar post
637            btnPuntitos.classList.add("miniMenuPost");                     
638            var item1 = document.createElement("A");
639            item1.classList.add("dropdown-item", "dropdown-publicaciones-item", "actionEditar");
640            item2.classList.add("actionDelete");
641            item1.setAttribute("type", "button");
642            item1.setAttribute("data-toggle","modal" );
643            item1.setAttribute("data-target",".modificarPost");
644            item1.setAttribute("dataIdPost", id);
645            var item1Txt = document.createTextNode("Editar");
646            item1.appendChild(item1Txt);
647            dropdown.appendChild(item1);
648            */
649        } else{
650            if ( (data_autorId == usuarioLogId) || (usuarioLogRole == 1) ){
651                item2.classList.add("btn");
652                //item2.classList.add("actionDeleteComentario");
653                txtTipo = (tipo == 'comm') ? ' Comentario' : ' Respuesta';
654                let item2Txt = document.createTextNode(txtTipo);//let comResTxt = (tipo == 'comm') ? 'Comentario' : 'Respuesta';//let item2Txt = document.createTextNode(comResTxt);
655                item2.appendChild(item2Txt);
656                item2.setAttribute("id", id);
657            }
658        }
659        return grupoBtns;
660    };//end - creeate3PointDots
661
662    var crearItemCarrusel = function(indexItem,pId,pArchivos,contDeImg){
663        var divImg = document.createElement("DIV");
664        divImg.classList.add("carousel-item");
665        // si es la primera imagen agregale la clase active
666        if(indexItem == 0){
667            divImg.classList.add("active");
668        }
669        // crea la imagen o video
670        var divImgA = document.createElement("A");
671        divImgA.classList.add("fancybox");
672        let tipoArchivo = pArchivos[indexItem].tipo.slice(0,5);
673        let tipoArchivo2 = pArchivos[indexItem].tipo;
674        //console.log('+++++++++++++++++++++++++++++++++++++++++++++++tipoArchivo:',tipoArchivo);
675        //console.log('tipoArchivo2: --------------------------------> ',tipoArchivo2);
676        switch(tipoArchivo){
677            case 'video':
678                var img = document.createElement("VIDEO");
679                img.setAttribute("alt", "videoPost");
680                img.setAttribute("controls", "");
681                // img.setAttribute("type", pArchivos[indexItem].tipo.slice(0,5));
682            break;
683
684            case 'appli'://pdfs - esto hay que cambiarlo para que funcione meindexItemor
685                var img = document.createElement("IMG");
686                img.setAttribute("alt", "click para ver el pdf");
687                img.setAttribute("title", "click para ver el pdf");
688                //img.setAttribute("type", pArchivos[indexItem].tipo.slice(0,5));
689                img.setAttribute("type", 'image');
690            break;
691
692            default:
693            case 'img':
694                var img = document.createElement("IMG");                                
695                img.setAttribute("alt", "imgPost");
696                img.setAttribute("type", pArchivos[indexItem].tipo.slice(0,5));
697                // img.setAttribute("data-toggle", "popover");
698                // img.setAttribute("data-content", `<img style="max-width: 200%; max-height: 200%; margin: auto; min-width: 50%; max-height: 50%;" src="${baseUrl+pArchivos[indexItem].ruta}"></img>`);
699                // ="" title="Modal Short Text" data-content=
700            break;
701        }
702        /*
703        if (pArchivos[indexItem].tipo.slice(0,5)  == "video"){
704            var img = document.createElement("VIDEO");
705            img.setAttribute("alt", "videoPost");
706            img.setAttribute("controls", "");
707            // img.setAttribute("type", pArchivos[indexItem].tipo.slice(0,5));
708        } else {
709            var img = document.createElement("IMG");                                
710            img.setAttribute("alt", "imgPost");
711            img.setAttribute("type", pArchivos[indexItem].tipo.slice(0,5));
712            // img.setAttribute("data-toggle", "popover");
713            // img.setAttribute("data-content", `<img style="max-width: 200%; max-height: 200%; margin: auto; min-width: 50%; max-height: 50%;" src="${baseUrl+pArchivos[indexItem].ruta}"></img>`);
714            // ="" title="Modal Short Text" data-content=
715        } // cierra if de video p imagen
716        */
717        divImgA.setAttribute("data-fancybox", "group"+pId);
718        divImgA.setAttribute("href", baseUrl+pArchivos[indexItem].ruta);
719        //img.setAttribute("src", baseUrl+pArchivos[indexItem].ruta);
720        img.setAttribute("width", 394);
721        img.setAttribute("height", 263);
722        img.setAttribute("src", commons.GetAsset('atenea/images/tenor.gif'));
723        //img.setAttribute("data-original", baseUrl+pArchivos[indexItem].ruta);
724        if(tipoArchivo == 'appli'){
725            switch(tipoArchivo2){
726                case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':
727                    img.setAttribute("data-original", commons.GetAsset('atenea/images/pptx.png'));
728                break;
729                case 'application/pdf':
730                default:
731                    img.setAttribute("data-original", commons.GetAsset('atenea/images/pdf.png'));
732                break;
733            }
734            img.setAttribute("data-toggle", 'tooltip');
735            img.setAttribute("data-placement", 'right');
736            img.classList.add("pdf");
737            img.classList.add("tt");
738        }else{
739            img.setAttribute("data-original", baseUrl+pArchivos[indexItem].ruta);
740        }
741        img.classList.add("d-block", "imgCarrusel", "mx-auto","lazyload","rounded");
742        // agrega la imagen o video al div de la imgen
743        divImg.appendChild(divImgA);
744        divImgA.appendChild(img);
745        // agrega al contenedor de imagenes el div 
746        contDeImg.appendChild(divImg)
747    };//end - crearItemCarrusel
748
749    var crearCarruselInner = function (postId,carDiv) {
750        carDiv.setAttribute("id", "carouselPublicaciones"+postId);
751        carDiv.classList.add("carousel","slide", "w-100");
752        carDiv.setAttribute("data-ride", "carousel");
753        carDiv.setAttribute("data-interval", "false");
754        carDiv.setAttribute("style","margin:0 0 20px 0 !important;");
755    };//end - crearCarruselInner
756
757    var crearCarrusel = function (postId,postArchivos){
758        // crea carrusel- contenedor general de imagenes en carrusel
759        var carousel = document.createElement("DIV");
760        crearCarruselInner(postId,carousel);
761        // crea el contenedor de las imagenes que forman el carrusel
762        var contenedorDeImg = document.createElement("DIV");
763        contenedorDeImg.classList.add("carousel-inner");
764        contenedorDeImg.setAttribute("id","carouselInner-"+postId);
765        // agrega el contenedor de imagenes al div de carrusel
766        carousel.appendChild(contenedorDeImg);
767        // para cada archivo S
768        for (let j = 0; j < postArchivos.length; j++) {
769            // crea div que contiene la imagen
770            crearItemCarrusel(j,postId,postArchivos,contenedorDeImg);
771        }//cierra el for de cada archivo
772        if (postArchivos.length >1){
773            // crea botones del carrusel
774            var btnNext = document.createElement("A");
775            btnNext.classList.add("carousel-control-next");
776            btnNext.setAttribute("href", "#carouselPublicaciones"+postId);
777            btnNext.setAttribute("role", "button");
778            btnNext.setAttribute("data-slide", "next");
779            var spanNext1 = document.createElement("SPAN");
780            spanNext1.classList.add("carousel-control-next-icon");
781            spanNext1.setAttribute("aria-hidden", "true");
782            var spanNext2 = document.createElement("SPAN");
783            spanNext2.classList.add("sr-only");
784            spanNext2.innerHtml = "Next";
785            btnNext.appendChild(spanNext1);
786            btnNext.appendChild(spanNext2);
787            var btnPrev = document.createElement("A");
788            btnPrev.classList.add("carousel-control-prev");
789            btnPrev.setAttribute("href", "#carouselPublicaciones"+postId);
790            btnPrev.setAttribute("role", "button");
791            btnPrev.setAttribute("data-slide", "prev");
792            var spanPrev1 = document.createElement("SPAN");
793            spanPrev1.classList.add("carousel-control-prev-icon");
794            spanPrev1.setAttribute("aria-hidden", "true");
795            var spanPrev2 = document.createElement("SPAN");
796            spanPrev2.classList.add("sr-only");
797            spanPrev2.innerHtml = "Previous";
798            btnPrev.appendChild(spanPrev1);
799            btnPrev.appendChild(spanPrev2);
800            // agrego botones
801            carousel.appendChild(btnPrev);
802            carousel.appendChild(btnNext); 
803        }
804        // agrego el carrusel al contenido del post
805        return carousel;
806    };//end - crearCarrusel
807
808    const crearNuevoComentario = function(comentario){
809        let id = 'ctnComms-'+comentario.publicacionId;
810        ////--------console.log('pase por crearNuevoComentario ANTES del if:',comentario);
811        //        console.dir(comentario);
812        if (comentario.comentario !== null){
813        //            console.log('pase por crearNuevoComentario por el IF');
814            var contenedorRespuestas = document.createElement("DIV");
815            contenedorRespuestas.classList.add("row-2","dcode-js-crearNuevoComentario-contenedorRespuestas-"+comentario.id);
816            contenedorRespuestas.setAttribute('id',`contenedorRespuestas-${comentario.comentario}`);
817            $(`#bloqueComentario-${comentario.comentario}`).append(contenedorRespuestas);
818            //crearResp(document.getElementById(`contenedorRespuestas-${comentario.comentario}`), comentario);
819        }else{
820        //            console.log('pase por crearNuevoComentario por el ELSE');
821            let nuevoComentario = document.createElement("DIV");
822            //nuevoComentario.classList.add("m-3", "bloqueComm");
823            nuevoComentario.classList.add("bloqueComm");
824            nuevoComentario.setAttribute('id',`bloqueComentario-${comentario.id}`)
825            crearComm(nuevoComentario, comentario, 'comm', comentario.publicacionId);
826            $(`#contenedorComm${comentario.publicacionId}`).append(nuevoComentario);
827        }
828        /*
829        let pCant = document.getElementById(`cntCom-${comentario.publicacionId}`);
830        let nCant = parseInt(pCant.textContent)+1;
831        pCant.textContent = nCant;
832        */
833    };//end - crearNuevoComentario
834
835    const guardarComentario = function(comentario) {
836        let formC;
837        //formC = document.getElementById(comentario.formularioid);
838        formC = $('#'+comentario.formularioid);
839        ////--------console.log("comentario:",comentario);
840        let formulario = (formC.length >= 1) ? formC[0] : formC;
841        let nfdata = new FormData(formulario);
842        /*
843                if (comentario.tipo == "original"){
844                    formC = document.getElementById(comentario.origen+"inputComm");
845                } else{
846                    formC = document.getElementById(comentario.id+"inputCommRes"+comentario.origen);
847                }// cierra if original o respuesta
848        let nfdata = new FormData(formC)
849        */
850        formulario.reset();
851        let inputId = comentario.formularioid;
852            ////--------console.log('---------------inputId:',inputId);
853        let inp = $('#'+inputId);
854        inp.attr('placeholder','Enviando...');
855        inp.attr('disabled','disabled');
856        inp.animate({
857            opacity: 0.01,
858        }, 500, function() {
859            formC.removeClass("show");
860            $(this).css('opacity',1);
861            ////--------console.log('Animation complete.');
862        });
863        //commons.animarElemento(document.getElementById(comentario.formularioid).parentNode,'out');
864        $.ajax({
865            url: baseUrl+"secure/comentariors/nuevo",
866            type: 'POST',
867            data: nfdata,
868            processData: false,
869            contentType: false,
870            dataType: 'json',
871            success: function (data) {
872            //                ////console.log("data", data)
873                if (data.status === 'Ok') {
874                    let esComentario = (comentario.tipo == 'original') ? true : false;//el tipo original se utiliza en otra funcion, para saber si es un comentario o una respuesta, pero se hace el if inverso chequeando por respuesta
875                    let tMsg = (esComentario) ? 'Comentario agregado' : 'Respuesta agregada';
876                    toastr.success(tMsg);
877                    if(esComentario){
878                        crearNuevoComentario(data.data);
879                    }else {
880                        //let cr = $("#contenedorRespuestas-"+data.data.comentario);
881                        let cr = document.getElementById("contenedorRespuestas-"+data.data.comentario);
882                        crearResp(cr,data.data);
883                    }
884                    refrescarCantidadComentariosPublicacion('ctnComms-'+data.data.publicacionId,data.data.cantComentarios,data.data.cantRespuestasTotales);
885                    //formC.reset();
886                    //$('#containerDivFormRespuesta'+comentario.formulario+'-'+comentario.comentario).removeClass;
887                    //formC.collapse();
888                    //                        let fid = '#inputCommRes-'+comentario.formularioid+'-'+comentario.comentario;
889                    //$(fid).removeClass('show');
890                    //fid.hide();
891                    //$('#'+comentario.formularioid).removeClass("show");
892                    // window.location.reload()
893                }else {
894                    commons.showErrorsServer(data);
895                }                      
896            } //cierra success
897        }) //cierra ajax respuesta
898    };//end - guardarComentario
899
900    const crearPrevisualiacionLink = function(link,contenedorPadre,pubId,unicoItem){
901        let publicacionId = pubId;
902        let urlPubId = "pubId="+pubId+"&";
903        ////--------console.log('acaa-------------------^^^^');
904        ////--------console.log(contenedorPadre);
905        ////--------console.log('acaa ARRIBA-------------------^^^^');
906        let ajaxUrl = baseUrl+"previewlink?"+urlPubId+"url="+link;
907        if(ajaxUrl.substr(-3) == '<br'){
908            return true;
909        }
910        $.ajax({
911            url: ajaxUrl,
912            dataType: 'json',
913            type: 'GET',
914            success: function (data) {
915                let videoFrom = '';
916
917                if(link.includes('youtube')||link.includes('youtu.be')){
918                    videoFrom = 'youtube';
919                }else if(link.includes('vimeo')){
920                    videoFrom = 'vimeo';
921                }
922                if(link.includes('youtube')||link.includes('youtu.be')||link.includes('vimeo')){
923                    //console.log(data);
924                    let videoDIV = document.createElement('DIV');
925                    let videoA = document.createElement('A');
926                    let videoIMG = document.createElement('IMG');
927 
928                    videoDIV.classList.add("carousel-item");
929                    if(unicoItem){
930                        videoDIV.classList.add("active");
931                    }
932
933                    videoA.classList.add("fancybox");
934                    videoA.setAttribute("data-fancybox","group"+publicacionId);
935                    videoA.setAttribute("href",link);
936                    if(data.title !== undefined){
937                        $('a[href^="'+link+'"]').each(function(){
938                            let tieneClase = $(this).hasClass('fancybox');
939                            if(tieneClase == false){
940                                $(this).html(data.title);
941                                $(this).attr('title','Click para ver: '+data.title);
942                            }
943                        });
944                    }
945 
946                    videoIMG.classList.add("d-block","mx-auto");
947                    videoIMG.setAttribute("alt","imgPost");
948                    videoIMG.setAttribute("type","image");
949                    videoIMG.setAttribute("style","width:90%");
950                    if(data.image == ''){
951                        videoIMG.setAttribute("src",'/img/noVideo.png');
952                        videoIMG.setAttribute("title","ocurrio un error al cargar el video");
953                    }else{
954                        videoIMG.setAttribute("src",data.image);
955                    }
956
957                    videoA.appendChild(videoIMG);
958
959                    if(videoFrom == 'youtube' && data.image != ''){
960                        videoPlayIMG = document.createElement('IMG');
961                        //videoPlayIMG.setAttribute("src",commons.GetAsset("atenea/images/youtube-play-image-normal.png"));
962                        videoPlayIMG.setAttribute("src",commons.GetAsset("atenea/images/play-button-vimeo.png"));
963                        videoPlayIMG.setAttribute("width",'100');
964                        videoPlayIMG.setAttribute("height",'100');
965                        videoPlayIMG.setAttribute("style",'position:absolute;top:40%;left:42%;width:100px !important;height:62px !important;');
966                        videoA.appendChild(videoPlayIMG);
967                    }
968
969                    videoDIV.appendChild(videoA);
970                    if(contenedorPadre != null){
971                        contenedorPadre.appendChild(videoDIV);
972                    }
973                    /*
974                    let html = `<a class="fancybox" data-fancybox="group${publicacionId}" href="${link}">
975                                    <img alt="imgPost" type="image" class="d-block mx-auto" style="width:90%" src="${data.image}">
976                                </a>`;
977                    //contenedorPadre.innerHTML =innerHTML+html;
978                    */
979                }else{
980                    if (data.title!='' && data.image !=''){
981                        let html = `<a href="${link}" class="link-preview" target="_blank" rel="nofollow">
982                                        <div class="link-area">
983                                        <div class="og-image">
984                                            <img src="${data.image}" title="click para visitar ${data.title}">
985                                        </div>
986                                        <div class="descriptions-preview p-1 ttfeed" title="${data.title}" data-toggle="tooltip" data-placement="bottom">
987                                            <div class="og-title text-truncate">${data.title}</div>
988                                            <div class="og-description invisible">${data.description}</div>
989                                        </div>
990                                        </div>
991                                    </a>`
992                        contenedorPadre.innerHTML =html;
993                    }
994                }
995                ////console.log(data.match(/<title>(.*?)<\/title>/));
996            }
997        });
998    };//end - crearPrevisualiacionLink
999
1000    const copyToClipboardFeed = function(selector) {
1001        var $temp = $("<div style='display:block;'>");
1002        $("body").append($temp);
1003        $temp.attr("contenteditable", true);
1004        $temp.html(selector);
1005        $temp.select()
1006            .on("focus", function() { document.execCommand('selectAll',false,null); })
1007            .focus();
1008        document.execCommand("copy");
1009        $temp.remove();
1010    };//end - copyToClipboardFeed
1011
1012    var loadPage = function (page_num, loading, where){
1013        // if(loading==false){
1014            // loading = true;
1015            //console.log("where=",where);
1016
1017            var w = (where == 'home') ? 'home' : '';
1018            page_num = (where == 'home') ? 1 : page_num;
1019            //console.log('alreadyLoadedPage',alreadyLoadedPage,'page_num',page_num);
1020            if(alreadyLoadedPage == page_num){
1021                return true;
1022            }
1023
1024            var buscarPorPublicacionId = "";
1025            var buscarPorTagNombre = "";
1026            //console.log("w",w,"page_num",page_num);
1027            switch (where) {
1028                case 'feed':
1029                    w = where;
1030                    page_num = (where == 'home') ? 1 : page_num;
1031                    ////--------console.log("desde FEED: ",where,w,page_num);
1032                    break;
1033
1034                case 'detalle':
1035                    w = 'detalle';
1036                    page_num = 1;
1037                    buscarPorPublicacionId = "&idpub="+pubId;//pubId es global
1038                    ////--------console.log("desde DETALLE: ",where,w,page_num);
1039                    break;
1040
1041                case 'tag':
1042                    w = 'tag';
1043                    page_num = (where == 'home') ? 1 : page_num;
1044                    buscarPorTagNombre = "&tag="+tagNombre;//tagNombre es global
1045                    ////--------console.log("desde FEED: ",where,w,page_num);
1046                    break;
1047
1048                case 'usuario':
1049                    w = 'usuario';
1050                    page_num = (where == 'home') ? 1 : page_num;
1051                    buscarPorPublicacionId = "&idpub="+pubId;//por el momento se utiliza el idpub como iduser, pero el where es usuario
1052                    ////--------console.log("desde FEED: ",where,w,page_num);
1053                    break;
1054
1055                case 'home':
1056                default:
1057                    w = (where == 'home') ? 'home' : '';
1058                    page_num = (where == 'home') ? 1 : page_num;
1059                    ////--------console.log("desde HOME: ",where,w,page_num);
1060                    break;
1061            }
1062            $.ajax({
1063                url: baseUrl+"api/publicaciones?w="+w+"&page="+page_num+buscarPorPublicacionId+buscarPorTagNombre,
1064                type: "GET",
1065                beforeSend: function(){
1066                    $("#ajax-loader").show();
1067                    return;
1068                }
1069            }).done(function(data){
1070                alreadyLoadedPage = page_num;
1071                //console.log('in AJAX done -> alreadyLoadedPage = page_num',alreadyLoadedPage,'=',page_num);
1072                totalPages = data.total_pages;
1073                $("#ajax-loader").hide();
1074                var publicaciones = data.data;
1075                // loading = false;
1076                div="";
1077                var pubLen = publicaciones.length;
1078                /*
1079                if(where == "home"){
1080                    pubLen = 4;
1081                }
1082                */
1083                //if(pubLen != 0){
1084                    //console.log(where);
1085                    //console.log(pubLen);
1086                if(pubLen >= 0 && where == 'usuario'){
1087                    let secDocPub = $('#section-docente-publicaciones');
1088                    let lblDocPub = $('#label-docente-publicaciones');
1089                    //console.log(secDocPub);
1090                    //console.log(lblDocPub);
1091                    if(pubLen >= 1){
1092                        secDocPub.removeClass('hide');
1093                        lblDocPub.removeClass('hide');
1094                        secDocPub.addClass('show');
1095                        lblDocPub.addClass('show');
1096                    }else{
1097                        secDocPub.removeClass('show');
1098                        lblDocPub.removeClass('show');
1099                        secDocPub.addClass('hide');
1100                        lblDocPub.addClass('hide');
1101                    }
1102                }
1103                if(pubLen <= 0 && where != 'usuario'){
1104                    //esto es para cuando no se encuentran datos de la publicacion, o sea que puede estar borrada o algo mas
1105                    //window.location.href = `${baseUrl}`;
1106                    var contenedor = document.createElement("DIV");
1107                    contenedor.classList.add("bordeNaranja","divContenedorPublicaciones","divGral","m-0","p-3","row","justify-content-around","h-100","dcode-js-contenedor-bordeNaranja-divGral-loadPage");
1108                    contenedor.setAttribute("id","contenedorPublicacion-0");
1109                    contenedor.innerHTML = "No existe ninguna publicación todavía, sé el primero haciendo click en el formulario de arriba!!!";
1110                    $("#div-publicacionesHome").append(contenedor);
1111                    /*
1112                        var contenedor = document.createElement("DIV");
1113                            contenedor.classList.add("bordeNaranja","divContenedorPublicaciones","divGral","m-0","p-3","row","justify-content-around","h-100","dcode-js-contenedor-bordeNaranja-divGral-loadPage");
1114                            contenedor.setAttribute("id","contenedorPublicacion-0");
1115
1116                        var divHeaderPost = document.createElement("DIV");
1117                            divHeaderPost.classList.add("divHeaderPost","row","col-12", "p-0", "dcode-js-divHeaderPost-loadPage");
1118                            divHeaderPost.setAttribute('data-prueba','esto_es_una_prueba');
1119                            divHeaderPost.setAttribute('data-id','pub_0');
1120
1121                        var verMasTxt = document.createTextNode("Error no se encuentra la publicacion");
1122                        
1123                            divHeaderPost.appendChild(verMasTxt);
1124                        contenedor.appendChild(divHeaderPost);
1125
1126                        $("#div-publicacionesHome").append(contenedor);
1127                        */
1128                }else{
1129                    for (var i = 0; i < pubLen; i++) {
1130                        let post = publicaciones[i];
1131                        //let comentariosRS = publicaciones[i].ultimoComentario[0];//lo comente porque parece que no se utiliza en ning lado - 
1132
1133                        // CREATE ELEMENT
1134                        // contenedor general de la publicacion
1135                        var contenedor = document.createElement("DIV");
1136                        ////--------console.log("-.-.-.-.-.-.-.-.-.-.-.-");
1137                        ////--------console.log(post);
1138                        ////--------console.log("-.-.-.-.-.-.-.-.-.-.-.-");
1139                        contenedor.classList.add("bordeNaranja","divContenedorPublicaciones","divGral","m-0","p-3","row","justify-content-around","h-100","dcode-js-contenedor-bordeNaranja-divGral-loadPage");
1140                        contenedor.setAttribute("id","contenedorPublicacion-"+post.id);
1141
1142                        // se agrega al div de publicacion
1143                        $("#div-publicacionesHome").append(contenedor);
1144
1145                        // div del header de la publicacion
1146                        var divHeaderPost = document.createElement("DIV");
1147                        divHeaderPost.classList.add("divHeaderPost","row","col-12", "p-0", "dcode-js-divHeaderPost-loadPage");
1148                        divHeaderPost.setAttribute('data-prueba','esto_es_una_prueba');
1149                        divHeaderPost.setAttribute('data-id','pub_'+i);
1150
1151                        // se agrega el header al contenedor
1152                        contenedor.appendChild(divHeaderPost);
1153
1154                        creaHeaderDePostCommRes(divHeaderPost, "post", post);    
1155                        // div del Contenido de post
1156                        var divContenidoPostGral = document.createElement("DIV");
1157                        divContenidoPostGral.classList.add("row","col","dcode-divContenidoPostGral-loadPage");
1158
1159                        // se agrega el contenido al contenedor principal
1160                        contenedor.appendChild(divContenidoPostGral);
1161
1162                        // si tiene archivos crea el carrusel
1163                        let unicoItem=false;
1164                        if( post.archivos.length > 0){
1165                            divContenidoPostGral.appendChild(crearCarrusel(post.id, post.archivos));
1166                        }else{
1167                            unicoItem=true;
1168                            divContenidoPostGral.appendChild(crearCarrusel(post.id, new Array()));
1169                        }
1170                        divContenidoDelPostCommRes(post, divContenidoPostGral, "", "post", unicoItem);
1171                        // creo div de botones de interaccion
1172                        var botones = document.createElement("DIV");
1173                        botones.classList.add("botonesPost","row","text-center","justify-content-around","d-inline-block","dcode-js-div-botones-botonesPost-loadPage","ml-4");
1174                        botones.setAttribute("id","botonesPost-"+post.id+"-");
1175
1176                        /*
1177                        // se agrega el lazyload para la tabla publicacion_views
1178                        var pubViewLazyLoad = document.createElement("IMG");
1179                        pubViewLazyLoad.classList.add("lazyload","publicacion-views","dcode-js-img-lazyload-publicacion-views-loadPage","ml-4");
1180                        pubViewLazyLoad.setAttribute("src",baseUrl+"/api/publicaciones/view/"+post.id+"/publicacion_view_lazyload");
1181                        pubViewLazyLoad.setAttribute("width","1");
1182                        pubViewLazyLoad.setAttribute("height","1");
1183                        // agrego el div de los botones al contenedor de contendio de la publicacion
1184                        divContenidoPostGral.appendChild(pubViewLazyLoad);
1185                        */
1186
1187                        // agrego el div de los botones al contenedor de contendio de la publicacion
1188                        divContenidoPostGral.appendChild(botones);
1189
1190                        // crear span de la cantodad de likes
1191
1192                        let likes = document.createElement("SPAN");
1193                        likes.setAttribute("id","ctnLikes-"+post.id+"-"+post.tipoLike);
1194                        let ctnLikes = document.createTextNode(post.likes);
1195                        likes.appendChild(ctnLikes); 
1196                        botones.appendChild(likes);    
1197                        
1198                        // funciones que crean cada boton, el tipo de agrega btnLike btnComm btnShare                 
1199                        // creando los botones
1200                        var postTieneLike = (post.tieneLike == 0) ? false : true;
1201                        btnInteractivos( post, "btnLike", postTieneLike, botones, "LikePublicacion", "",commons.getConstante('TipoNotificacion','LikePublicacion'));
1202                        ////console.info('loadPage - btnInter_btnLike: '+post.id+' - tieneLike: '+post.tieneLike);
1203
1204                        // span cantidad de comentarios
1205                        let comms = document.createElement("SPAN");
1206                        comms.setAttribute("id","ctnComms-"+post.id);
1207                        let ctnComms = document.createTextNode(post.comentarios);
1208                        comms.appendChild(ctnComms);          
1209                        botones.appendChild(comms);
1210                        btnInteractivos(post, "btnComm", false, botones, "", "");
1211                        btnInteractivos(post, "btnShare", true, botones, "");
1212
1213                        // cantidad de comentarios
1214                        /*
1215                        var ctnLikesYComm = document.createElement("DIV");
1216                        ctnLikesYComm.setAttribute("id","ctnLikesYCommContainer-"+post.id);
1217                        ctnLikesYComm.setAttribute("data-idpublicacion",post.id);
1218                        ctnLikesYComm.classList.add("ctnLikesYComm","p-0","text-center","align-self-center");
1219                        botones.appendChild(ctnLikesYComm);
1220                        var pCtnLikesYComm = document.createElement("P");                    
1221                        var pCtnLikesYCommTxt = `<span id='ctnLikes-${post.id}'>${post.likes}</span> Me gusta | <span id='cntCom-${post.id}'>${post.comentarios}</span> comentarios`;
1222                        ctnLikesYComm.appendChild(pCtnLikesYComm);
1223                        pCtnLikesYComm.innerHTML = pCtnLikesYCommTxt;
1224                        */
1225
1226                        // Contenedor de comentarios de la publicacion // agrego el contenedor de comentarios al contenedor general de la publicacion
1227                        var divContenedorComm = document.createElement("DIV");
1228                        divContenedorComm.classList.add("col-12", "contenedorComm", "dcode-js-contenedorComm-divContenedorComm");
1229                        divContenedorComm.setAttribute("id", "contenedorComm"+post.id);
1230                        //contenedor.appendChild(divContenedorComm);
1231
1232                        // creo el hr del diseño y lo agrego al contenedor de comentarios
1233                        var hr = document.createElement("HR");
1234                        hr.classList.add("my-3");
1235
1236                        // div contenedor bloque de respuesta del comentario lo agrego al contenedor de comm
1237                        var bloqueComentario = document.createElement("DIV");
1238                        bloqueComentario.classList.add("bloqueComm", "dcode-js-bloqueComm-bloqueComentario","mr-md-4", "mr-sm-2");
1239
1240                        //                        console.log("esta es la llamada numero 4 - loadPage linea 586 - antes del IF:",botones);
1241                        if(botones != null){
1242                            //console.info('ANTES del if * por botones != null');
1243                            //                            console.log("esta es la llamada numero 4 - loadPage linea 586 - ADENTRO del IF:",botones);
1244                            creaInputComm(botones, post, "post", post.id);
1245                        }
1246                        botones.appendChild(hr);
1247                        if (post.comentarios >0){
1248                            if(post.ultimoComentario[0] !== undefined){
1249                                bloqueComentario.setAttribute('id',`bloqueComentario-${post.ultimoComentario[0].id}`);
1250                                // creaBarraComm(bloqueComentario, post.ultimoComentario[0], "comm"); 
1251                                //creaInputComm(bloqueComentario, post.ultimoComentario[0], "ultimoComm",  post.id);
1252                                crearComm(bloqueComentario, post.ultimoComentario[0], "ultimoComm", post.id);
1253
1254                                //                                console.log("esta es la llamada numero 6 - loadPage linea 586 - antes del IF:",bloqueComentario);
1255                                if(bloqueComentario != null){
1256                                    //                                    console.log("esta es la llamada numero 6 - loadPage linea 586 - ADENTRO del IF:",bloqueComentario);
1257                                    //let contenedorFormResponder = $('#contenedorFormResponder-'+post.id);
1258                                    let contenedorFormResponder = document.getElementById('contenedorFormResponder-'+post.id);
1259                                    //                                    console.log('contenedorFormResponder:',contenedorFormResponder);
1260                                    //creaInputComm(bloqueComentario, post.ultimoComentario[0], "ultimoComm",  post.id);
1261                                    //creaInputComm(contenedorFormResponder, post.ultimoComentario[0], "ultimoComm",  post.id);
1262                                }
1263
1264                            //aca esta el codigo
1265
1266                                var gifLoad = document.createElement("IMG");
1267                                gifLoad.classList.add("mx-auto", "gif");
1268                                gifLoad.setAttribute("src", commons.GetAsset("atenea/images/feed/ajax-loader.gif"));
1269                                gifLoad.setAttribute("width", "16");
1270                                gifLoad.setAttribute("height", "16");
1271                                gifLoad.setAttribute("style", "width:16px;");
1272                                gifLoad.style.height="16px";
1273                                gifLoad.setAttribute("id", post.id+"loading");
1274                                gifLoad.style.display = "none";                    
1275                                contenedor.appendChild(gifLoad);
1276                            }
1277                        }
1278                        contenedor.appendChild(divContenedorComm);
1279                        //if(post.comentarios > 1 ){
1280                        // cierra if de Si tiene comentarios
1281                        divContenedorComm.appendChild(bloqueComentario);
1282
1283                        let cantComm = $('.btn-publicacion-menu-comm-'+post.id).length;
1284                        let cantRes = $('.btn-publicacion-menu-res-'+post.id).length;
1285                        let commResTotal = (cantComm + cantRes);
1286                        //let hayMasComentarios = (post.comentarios >= 2) ? true : false;
1287                        let hayMasComentarios = (post.comentarios > commResTotal) ? true : false;
1288                        /*
1289                        console.log('cantComm',cantComm);
1290                        console.log('cantRes',cantRes);
1291                        console.log('commResTotal',commResTotal);
1292                        console.log('hayMasComentarios',hayMasComentarios);
1293                        console.log('post.comentarios',post.comentarios);
1294                        console.log('-------------------------------------------------');
1295                        */
1296
1297                        // a la barra se agregan Ver mas, botones y cantidad de coemntarios
1298                        // ver mas
1299                        //if(post.comentarios >= 2 ){
1300                        if(hayMasComentarios){
1301                            var verMas = document.createElement("DIV");
1302                            verMas.classList.add("col-12","align-self-center", "text-left");
1303                            verMas.setAttribute("id", post.id+"verMasDiv")
1304                            var aVerMas = document.createElement("A");
1305                            aVerMas.classList.add("m-0");
1306                            aVerMas.setAttribute("data-pag", "1" )
1307                            aVerMas.setAttribute("data-id", post.id );
1308                            aVerMas.classList.add("verMas");
1309                            aVerMas.setAttribute("data-idPostOrginal", post.id);
1310                            aVerMas.setAttribute("id", post.id+"verMas");
1311                            var verMasTxt = document.createTextNode("Ver más comentarios");
1312                            verMas.appendChild(aVerMas);
1313                            aVerMas.appendChild(verMasTxt);
1314                            //console.log('ifffffffffffff')
1315    
1316                            //console.log('verMas ++++++++++++++++++++++++++ ',verMas)
1317                            if(verMas != null){
1318                                contenedor.appendChild(verMas)
1319                            }
1320                        }
1321
1322                        //contenedor de input  queQuieresCompartir contiene: imagen del autor, div con queQuieresCompartir
1323                    }
1324                    //cierra el for
1325                    //console.log(':::::::::::::::::::::::: end FOR ::::::::::::::::::::::::::::::::')
1326                }
1327                //console.log('__________ end IF ________')
1328                //cierre del if
1329                $("img.lazyload").lazyload();
1330            })
1331            .fail(function(jqXHR, ajaxOptions, thrownError){
1332                $("#ajax-loader").hide();
1333                
1334            });
1335        // }
1336    };//end - LoadPage
1337
1338    var createObject = function(elemento, paramsClass=null, paramsAttr=null){
1339        if(paramsClass != null)
1340            setHtmlClass(elemento,paramsClass);
1341        if(paramsAttr != null)
1342            setHtmlAttribrute(elemento,paramsAttr);
1343    };//end - createObject
1344
1345    var setHtmlClass = function(elemento, params=null){
1346        if(params.length >= 1){
1347            for(x in params){
1348                elemento.classList.add(params[x]);
1349            }
1350        }
1351    };//end - setHtmlClass
1352
1353    var setHtmlAttribrute = function(elemento, params=null){
1354        if(params != null){
1355            for(x in params){
1356                elemento.setAttribute(x,params[x]);////console.log("x: ",x," - params[x]: ",params[x]);
1357            }
1358        }
1359    };//end - setHtmlAttribrute
1360
1361    var creaInputComm = function (elementoDondeSeAgrega, post, tipo, idpostorginal){
1362        //console.log('paso por creaInputComm:', tipo, idpostorginal, elementoDondeSeAgrega, post);
1363        contador++;
1364        var checkRespuestaTipo = (tipo == "respuesta" || tipo == "ultimoComm" || tipo == 'comm') ? true : false;
1365        //var checkRespuestaTipo = (tipo == "respuesta") ? true : false;
1366        let fullId = (checkRespuestaTipo) ? idpostorginal+'-'+post.id : idpostorginal+'-';
1367
1368        var contenedorInput = document.createElement("DIV");//containerDivFormRespuesta
1369        var formRes = document.createElement("FORM");//.formRespuesta
1370            var divAutorCom = document.createElement("DIV");
1371                var autorComm = creaImgAutor(post, "usuario"); // !!!ACA DEBE IR LA IMAGEN DEL USUARIO LOGUEADO!!!!
1372            var bordeNaranja = document.createElement("DIV");//.bordeNaranja .divInput
1373                var divInputContenido = document.createElement("INPUT");//.txtComentario
1374                var buttonComm = document.createElement("BUTTON");//.comentar .btnInput
1375                    var labelIconoImg = document.createElement("LABEL");//imagen avion de papel
1376                var divInputUsuario = document.createElement("INPUT");//hidden usuario
1377                var divInputPublicacion = document.createElement("INPUT");//hidden puiblicacion
1378                var divInputNumComentario = document.createElement("INPUT");//hidden comentario
1379        var iconoImg = document.createElement("IMG");
1380
1381        var arrayClass = new Array();
1382        var obj = {};
1383
1384
1385        // DIV - contenedor general - arrayClass = new Array('col-12');setHtmlClass(contenedorInput,arrayClass);//contenedorInput.classList.add('col-12');
1386        createObject(contenedorInput,new Array('col-12','dcode-js-containerDivFormRespuesta-contenedorInput'+'-'+tipo+'-creaInputComm'));
1387
1388
1389        // DIV - imagen autor - arrayClass = new Array("mr-1");setHtmlClass(autorComm,arrayClass);//autorComm.classList.add("mr-1");
1390        createObject(autorComm,new Array('mr-1',"dcode-js-autoComm1"+'-'+tipo+'-creaInputComm'));
1391        createObject(divAutorCom,new Array("col-1", "d-inline-block","pt-1","dcode-js-divAutoCom"+'-'+tipo+'-creaInputComm'));
1392
1393
1394        // DIV - borde naranja
1395        createObject(bordeNaranja,new Array("p-1", "col-9","d-inline-block", "ml-5", "bordeNaranja", "row", "divInput","justify-content-between","dcode-js-bordeNaranja"+'-'+tipo+'-creaInputComm'),{"data-id":post.id,"action":(baseUrl+"secure/comentariors/nuevo")});
1396
1397
1398        //arrayClass = new Array("p-1", "col-9","d-inline-block", "ml-5", "bordeNaranja", "row", "divInput","justify-content-between");
1399        //obj = {"data-id":post.id,"action":(baseUrl+"secure/comentariors/nuevo")};
1400        //createObject(arrayClass, obj);
1401
1402        
1403        // FORM - .formRespuesta
1404        createObject(autorComm,new Array("collapse","formRespuesta","row","justify-content-around","p-0","ml-auto","dcode-js-autorComm2"+'-'+tipo+'-creaInputComm'),{"data-id":post.id,"action":(baseUrl+"secure/comentariors/nuevo"),"method":"POST","enctype":"multipart/form-data","autocomplete":"off"});
1405
1406
1407        // INPUT - *****creo input TXT para contenido - .txtComentario
1408        var inputTxt = "inputTxt-";
1409        var inputComm = "inputComm-";
1410        var txtcomentarioid = "inputTxt-";
1411        var dataTipo = "comentario";
1412        var placeholder = "¿Quieres comentar?";
1413        if (checkRespuestaTipo){
1414            inputTxt = "inputTxtRes-";
1415            inputComm = "inputCommRes-";
1416            txtcomentarioid = "inputTxtRes-";
1417            dataTipo = "respuesta";
1418            placeholder = "¿Quieres responder?";
1419        }
1420        createObject(divInputContenido,new Array("col-9", "font-weight-light", "pl-0", "ml-1", "txtComentario", "emojis","dcode-js-divInputContenido"+'-'+tipo+'-creaInputComm',"dcode-js-inputComm-divInputContenidocreateObject"+"-"+dataTipo),{"type":"text","data-origen":idpostorginal,"data-id":post.id,"name":"contenido","id":inputTxt+fullId,"data-formularioid":inputComm+fullId,"data-txtcomentarioid":txtcomentarioid+fullId,"data-tipo":dataTipo,"placeholder":placeholder});
1421
1422
1423        // LABEL - ****creo input para file img - .btnInput
1424        labelIconoImg.style.visibility = "none";
1425        createObject(labelIconoImg,new Array("float-right", "btnInput"),{"for":("inputFile-"+fullId)});
1426
1427
1428        // icon - ****creo input para file img - .btnInput
1429        createObject(iconoImg,new Array("iconInputImg"),{"for":("inputFile-"+fullId),"src":commons.GetAsset("atenea/images/feed/iconImageDark.svg"),"id":"labelInputFile-"+fullId});
1430
1431
1432        //INPUT - file para cargar archivo al comentario - por ahora no existe esta funcionalidad
1433
1434
1435        // INPUT hidden - input usuario
1436        createObject(divInputUsuario,new Array('dcode-js-divInputUsuario'+'-'+tipo+'-creaInputComm'),{"type":"hidden","value":usuarioLogId,"name":"usuario"});
1437
1438
1439        // INPUT hidden - input Publicacion
1440        createObject(divInputPublicacion,new Array('dcode-js-divInputPublicacion'+'-'+tipo+'-creaInputComm'),{"type":"hidden","value":idpostorginal,"name":"publicacion"});
1441
1442
1443        // INPUT hidden - input Comentario
1444        var divInputComentarioValue = (checkRespuestaTipo) ? post.id : "";
1445        createObject(divInputNumComentario,new Array('dcode-js-divInputNumComentario'+'-'+tipo+'-creaInputComm'),{"type":"hidden","value":divInputComentarioValue,"name":"comentario"});
1446
1447
1448        // BUTTON - button enviar - icono de avion de papel 
1449        arrayClass = new Array("comentar", "btn-transparent", "float-right", "btnInput", "btn");
1450            setHtmlClass(buttonComm,arrayClass);
1451        obj = {"type":"button","data-origen":idpostorginal,"data-id":post.id};
1452            setHtmlAttribrute(buttonComm,obj);
1453        buttonComm.innerHTML = "<i class='far fa-lg fa-paper-plane'></i>";
1454        createObject(buttonComm,new Array('buttonComm'+'-'+tipo+'-creaInputComm'),{"type":"hidden","value":divInputComentarioValue,"name":"comentario","data-txtcomentarioid":inputTxt+fullId});
1455
1456
1457
1458        // POR AHORA NO AGREGAR IMG CON LOS COMENTARIOS/* bordeNaranja.appendChi// POR AHORA NO AGREGAR IMG CON LOS COMENTARIOSld(labelIconoImg);bordeNaranja.appendChild(divInputArch);*/
1459        
1460        //var formResId                 = (checkRespuestaTipo) ? {"id":("inputCommRes-"+fullId)} : {"id":("inputComm-"+fullId)};
1461        var formResId                 = (checkRespuestaTipo) ? ("inputCommRes-"+fullId) : ("inputComm-"+fullId);
1462        var buttonCommDataTipo        = (checkRespuestaTipo) ? {"data-tipo":"respuesta"} : {"data-tipo":"original"};
1463        var divInputContenidoDataTipo = (checkRespuestaTipo) ? {"data-tipo":"respuesta"} : {"data-tipo":"original"};
1464        ////-----console.info('tipo:',tipo);
1465        ////-----console.info('checkRespuestaTipo:',checkRespuestaTipo);
1466        ////-----console.info('formResId:',formResId);
1467        createObject(formRes,new Array("formRespuesta","row","justify-content-around","p-0","ml-auto","dcode-js-formRespuesta-creaInputComm","collapse"),{'method':'POST','enctype':'multipart/form-data','autocomplete':'off','id':formResId});
1468        //setHtmlAttribrute(formRes, formResId);
1469        setHtmlAttribrute(buttonComm, buttonCommDataTipo);
1470        setHtmlAttribrute(divInputContenido, divInputContenidoDataTipo);
1471
1472
1473        //divAutorCom.appendChild(autorComm);
1474        //labelIconoImg.appendChild(iconoImg);
1475        bordeNaranja.appendChild(divInputContenido);
1476        bordeNaranja.appendChild(buttonComm);
1477        bordeNaranja.appendChild(divInputUsuario);
1478        bordeNaranja.appendChild(divInputPublicacion);
1479        bordeNaranja.appendChild(divInputNumComentario);
1480        formRes.appendChild(divAutorCom);
1481        formRes.appendChild(bordeNaranja);
1482        contenedorInput.appendChild(formRes);
1483
1484        elementoDondeSeAgrega.appendChild(contenedorInput);
1485
1486        let contenedorRespuestaId = post.id+"barraComm";
1487        var dtemp = document.createElement("DIV");
1488        let dtempId = post.id+"barraComm-dtemp";
1489        createObject(dtemp,new Array('dcode-js-dtemp'+'-'+tipo+'-creaInputComm'),{"id":dtempId});
1490
1491        //let contenedorRespuestaId = "contenedorRespuestas-"+fullId;
1492        //        console.log('contenedorRespuestaId:',contenedorRespuestaId);        console.log('post.id:',post.id);        console.log('divInputComentarioValue:',divInputComentarioValue);
1493        //$('#'+contenedorRespuestaId).insertAfter(contenedorInput);
1494        //$('#'+dtempId).insertAfter(contenedorInput);
1495    };//end - creaInputComm
1496
1497    var loadComm = function(data,  loading){
1498        //        console.log('paso por loadComm:', data, loading);
1499        commons.debugtf('FeedController_loadComm',new Array(data,  loading));
1500        if(loading==false){
1501            loading = true;
1502            post = data.dataset.idpostorginal;
1503            pageComm_num = data.dataset.pag
1504            pageComm_num == 1 ? completo = false : completo = true
1505            console.log("pageComm_num",pageComm_num);
1506            $.ajax({
1507                url: baseUrl+"comentarios/"+post+"/publicacion?page="+pageComm_num,
1508                type: "GET",
1509                beforeSend: function(){
1510                    document.getElementById(post+"loading").style.display = "block";
1511                    return;
1512                },
1513                complete: function(){
1514                    document.getElementById(post+"loading").style.display = "none";}
1515            }).done(function(data){
1516                var totalComm = data.total_pages;
1517                listaComentarios = data.data;
1518                document.getElementById(post+"loading").style.display = "none";//none
1519                var elemContendor = document.getElementById("contenedorComm"+post);
1520                eleVerMas = document.getElementById(post+'verMasDiv');
1521                if (pageComm_num == 1){
1522                       listaComentarios.shift();
1523                   }
1524                //$("#"+post+"loading").remove()
1525                    loading = false;
1526                    listaComentarios.forEach(comm => {
1527                        var bloqueComentario = document.createElement("DIV");
1528                        bloqueComentario.classList.add("bloqueComm");
1529                        bloqueComentario.setAttribute('id',`bloqueComentario-${comm.id}`)
1530                        elemContendor.appendChild(bloqueComentario);  
1531                        //crearComm(bloqueComentario, comm, "comm", post);
1532                        crearComm(bloqueComentario, comm, "respuesta", post);
1533                    })// cierra for de cada comentario
1534                    var commentsLeft = ((data.total_items_count) - (data.items_per_pege * data.page_actual));
1535                    commentsLeft = (commentsLeft <= 0) ? 0 : commentsLeft;
1536                    $("#"+post+'verMas').attr({"data-pag": (parseInt(pageComm_num) + 1),"title":"Ver más comentarios (quedan "+commentsLeft+")"});
1537                    /*
1538                    var verMasSpan = document.createElement("SPAN");
1539                    verMasSpan.setAttribute("id", post+"verMasSpan");
1540                    verMasSpan.innerHTML = " ("+commentsLeft+")-";
1541                    $("#"+post+'verMasSpan').replaceWith(verMasSpan);
1542                    //$("#"+post+'verMasSpan').replaceWith(" ("+commentsLeft+")");
1543                    */
1544                    if($('#'+post+'loading') == false){
1545                        var gifLoad = document.createElement("IMG");
1546                        gifLoad.classList.add("mx-auto----", "gif----");
1547                        gifLoad.setAttribute("src", commons.GetAsset("atenea/images/feed/ajax-loader.gif"));
1548                        gifLoad.setAttribute("width", "16");
1549                        gifLoad.setAttribute("height", "16");
1550                        gifLoad.setAttribute("style", "width:16px;");
1551                        //gifLoad.style.width="16px";
1552                        gifLoad.style.height="16px";
1553                        gifLoad.style.display = "none";
1554                        gifLoad.setAttribute("id", post+"loading");
1555                        let ec = document.getElementById('#'+post+"verMasDiv");
1556                        if(ec != null){
1557                            ec.appendChild(gifLoad);
1558                        }
1559                        /*
1560                        if(elemContendor != null){
1561                            elemContendor.appendChild(gifLoad);
1562                        }
1563                        */
1564                    }
1565                    if (pageComm_num == totalComm){
1566                        $("#"+post+'verMas').remove()
1567                    }
1568            }) //cierra Ajax Listar comentarios
1569        } //end IF loading 
1570    };//end - loadComm
1571
1572    var carouselStart = function(){
1573        var nd2 = new Date();var g2 = nd2.getSeconds();
1574        $('.carruIndex').slick({
1575            slidesToShow: 3,
1576            slidesToScroll: 1,
1577            autoplay: true,
1578            dots:false,
1579            autoplaySpeed: 3000,              
1580            nextArrow: `<button class="btn-transparent nextNov " href="" role="button">
1581                            <span class="carousel-control-next-icon" aria-hidden="true"></span>
1582                            <span class="sr-only">Next</span>
1583                        </button>`,
1584            prevArrow: `<button class="btn-transparent prevNov " href="" role="button">
1585                            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
1586                            <span class="sr-only">prev</span>
1587                        </button>`,
1588            responsive: [
1589                {
1590                    breakpoint: 1024,
1591                    settings: {
1592                        slidesToShow: 3,
1593                        slidesToScroll: 1,
1594                        infinite: true,
1595                        dots: false
1596                    }
1597                },
1598                {
1599                    breakpoint: 600,
1600                    settings: {
1601                        slidesToShow: 2,
1602                        slidesToScroll: 1
1603                    }
1604                },
1605                {
1606                    breakpoint: 480,
1607                    settings: {
1608                        slidesToShow: 1,
1609                        slidesToScroll: 1
1610                    }
1611                }
1612                // You can unslick at a given breakpoint now by adding:
1613                // settings: "unslick"
1614                // instead of a settings object
1615            ]
1616        });//end - slick
1617        $('.carruIndex').show();
1618        //console.info('cargando pagina...'+g2);
1619    };//end - carouselStart
1620
1621    const eliminarPublicacion = function (btn,p_url) {
1622        $.ajax({
1623            type: "DELETE",
1624            url: p_url,
1625        }).done(function (data) {
1626            if (data.code == 200) {
1627                toastr.options = {
1628                    positionClass: 'toast-top-center',
1629                };
1630                toastr["success"]("Publicacion Eliminada", "");
1631                //toastr.success('Publicacion Eliminada');
1632                let elem = document.getElementById('contenedorPublicacion-'+data.data.publicacion);
1633                elem.classList.add('animated','backOutRight','slow');
1634                elem.addEventListener('animationend', () => {
1635                    elem.remove();
1636                });
1637            };
1638        });
1639    };//end - eliminarPublicacion
1640
1641    const refrescarCantidadComentariosPublicacion = function(id,comentarios,respuestas){
1642        ////--------console.log('id:',id,'comentarios:',comentarios,'respuestas:',respuestas);
1643        let elemento = document.getElementById(id);
1644        //let texto = (respuestas >= 1) ? (comentarios+'&nbsp;<sub>('+respuestas+')</sub>') : comentarios;
1645        //        let texto = (comentarios+'&nbsp;<sub>('+respuestas+')</sub>');
1646        let texto = ( comentarios + respuestas );
1647        elemento.innerHTML = texto;
1648        commons.animarElemento(elemento,'tada','slow',true);
1649        //elemento.textContent = comentarios;
1650        /*
1651        elemento.classList.remove('animated');
1652        elemento.classList.add('d-inline-block','animated','slower',item);
1653        */
1654    };//end - refrescarCantidadComentariosPublicacion
1655
1656    const eliminarComentarioRespuesta = function (btn,p_url) {
1657        let mensaje = "Error al Eliminar el comentario o respuesta!!!";
1658        $.ajax({
1659            url: p_url,
1660            type: 'GET',
1661            success: function (data) {
1662                if (data.code == 200){
1663                    refrescarCantidadComentariosPublicacion(`ctnComms-${data.data.publicacion}`,data.data.cantComentarios,data.data.cantRespuestasTotales);
1664                    let id = "";
1665                    let idLikeResp = "";
1666                    if(data.data.tipo ==="comentario"){
1667                        mensaje = "Comentario eliminado correctamente";
1668                        id = "bloqueComentario-"+data.data.comentario;
1669                    }else{
1670                        mensaje = "Respuesta eliminada correctamente";
1671                        id = "divRespuesta-"+data.data.comentario;
1672                        idLikeResp = "divLikeRespuesta-"+data.data.comentario;
1673                    }
1674                    let elem = document.getElementById(id);
1675                    elem.classList.add('animated','backOutRight','slow');
1676                    elem.addEventListener('animationend', () => {
1677                        elem.remove();
1678                    });
1679                    if(idLikeResp != ""){
1680                        let elemLR = document.getElementById(idLikeResp);
1681                        elemLR.classList.add('animated','backOutRight','slow');
1682                        elemLR.addEventListener('animationend', () => {
1683                            elemLR.remove();
1684                        });
1685                    }
1686                }
1687                ////console.log(data.match(/<title>(.*?)<\/title>/));
1688            },
1689            complete: function (data) {
1690                toastr.success(mensaje);
1691            }
1692        }) // cierra ajax eliminar comentario
1693    };//end - eliminarComentarioRespuesta
1694
1695    const comentar = function(idInput){
1696        //        console.info('valor de idInput: '+idInput);
1697        if(usuarioLogId != "nulo"){
1698            var dataSet = document.getElementById(idInput).dataset;
1699        //            console.log(dataSet);
1700            guardarComentario(dataSet);
1701        } else{
1702            $("#loginModal").modal("show")
1703        }
1704        return false;
1705    };//end - comentar
1706
1707    var docReady = function(){
1708        var page_num = 1;
1709        ////--------console.log('page_num',page_num);
1710        $('.carruIndex').hide();
1711
1712        $(window).on('scroll', function() {
1713            //if ($(window).scrollTop() >= $('#footer').offset().top + $('#footer').outerHeight() - window.innerHeight) {
1714                let windowScrollTop = Math.floor($(window).scrollTop());
1715                let footerOffsetTop = Math.floor($('#footer').offset().top);
1716                let footerOuterHeight = Math.floor($('#footer').outerHeight());
1717                let wInnerHeight = Math.floor(window.innerHeight);
1718                let diffScrollTop = Math.floor(( ( footerOffsetTop + footerOuterHeight ) - wInnerHeight ));
1719                diffScrollTop-=10;
1720                //console.log("windowScrollTop",windowScrollTop);console.log("diffScrollTop",diffScrollTop);console.log("footerOffsetTop",footerOffsetTop,"footerOuterHeight",footerOuterHeight,"wInnerHeight",wInnerHeight);
1721            if (windowScrollTop >= diffScrollTop) {
1722                //console.log("------------------------- windowScrollTop",windowScrollTop,' >= diffScrollTop',diffScrollTop);
1723                page_num++;
1724                //console.log("page_num",page_num);
1725                if(page_num <= totalPages){
1726                    loadPage(page_num,false,where);
1727                }
1728            }
1729        });
1730
1731        if(where != 'home'){
1732            loadPage(page_num,false,where);
1733        }
1734
1735        btnInter = new BtnInteractivo(commons, usuarioLogId, usuarioLogFoto, usuarioLogRole, where);
1736        btnInter.init();
1737        $('.ttfeed').tooltip({container:'body'});
1738        //btnInter.addLike();
1739        //setTimeout(function(){ carouselStart(); }, 1000);
1740        if(where == 'home'){
1741            carouselStart();
1742        }
1743
1744        //setea el focus cuando se muestra el modal para publicacion nueva
1745        $('#PostNuevo').on('shown.bs.modal', function (e) {
1746            $('.emojionearea-editor').focus();//hay que cambiar la clase por un id
1747        });
1748
1749         $('.animated').on('animationend', function() {
1750            /*
1751            console.log('esto es el valor de (this):',$(this));
1752            console.log('esto es el valor de ($(this) != undefined):',($(this) != undefined));
1753            console.log('esto es el valor de (this).classList:',$(this).classList);
1754            console.log('esto es el valor de ($(this).classList != undefined):',($(this).classList != undefined));
1755            */
1756            if( ($(this) != undefined) && ($(this).classList != undefined) ){
1757                $(this).classList.remove('animated');
1758            }
1759            /*
1760            if($(this) != undefined){
1761                if($(this).classList != undefined){
1762                    $(this).classList.remove('animated');
1763                }
1764            }
1765            */
1766        });
1767
1768        // start - seccion Formulario Comentar boton e input
1769            $(document).on('keypress','.txtComentario', function(e) {
1770                var keycode = (e.keyCode ? e.keyCode : e.which);
1771                if (keycode == '13') {
1772                    comentar($(this).data('txtcomentarioid'));
1773                    e.preventDefault();
1774                }
1775            });
1776        
1777            $(document).on('click','.comentar',function(e){
1778                comentar($(this).data('txtcomentarioid'));
1779                e.preventDefault();
1780            });// cierra comentar
1781
1782            $(document).on('submit','.formRespuesta',function(e){
1783                if(usuarioLogId != "nulo"){
1784                    //$(this).hide();
1785                    e.preventDefault();
1786                    return false;
1787                } else{
1788                    $("#loginModal").modal("show")
1789                } 
1790            });
1791            
1792            $(document).on('click','.btnComm',function(){
1793                var t = $(this);
1794                //                        var idrel = t.data('idrelacion');
1795                var idfocus = '#'+t.data('focus');
1796                if(!t.hasClass('collapsed')){
1797                    //$('#'+idrel+'inputTxtRes').focus();
1798                    $(idfocus).focus();
1799                }
1800            });
1801        // end - seccion Formulario Comentar boton e input
1802
1803
1804        $(document).on('click','.verMas',function(){
1805            commons.debugtf('FeedController_init-click-.verMas - usuarioLogId: '+usuarioLogId);
1806            console.info('FeedController_init-click-.verMas - usuarioLogId: '+usuarioLogId);
1807            if(usuarioLogId != "nulo"){
1808                let btn = $(this);
1809                let pageComm_num = 1;
1810                let thisPost = btn[0];
1811                loadComm(thisPost,false);
1812            } else{
1813                $("#loginModal").modal("show")
1814            }    
1815        });// cierra VERMAS
1816
1817        $(document).on('click','.actionDeleteComentario',function(){
1818            let btn = $(this); 
1819            //            console.log('btn: ',btn);
1820            let url = baseUrl+"secure/comentariors/"+btn[0].id+"/eliminar";
1821            eliminarComentarioRespuesta(btn,url);
1822        });//end - actionDeleteComentario
1823
1824        $(document).on('click','.pdf',function(e){
1825            let btn = $(this); 
1826            window.open(btn.parent().attr('href'));
1827            e.preventDefault();
1828        });
1829
1830        $(document).on('click','.actionDeletePublicacion',function(){
1831            let btn = $(this); 
1832            /*
1833                        console.log('btn: ',btn);
1834                        console.log('btn[0].id: ',btn[0].id);
1835                        console.info(btn[0].id);
1836                        console.log(btn[0].id);
1837                        console.dir(btn[0].id);
1838            */
1839            let url = baseUrl+"secure/publicacion/"+btn[0].id+"/eliminar";
1840            eliminarPublicacion(btn,url);
1841        });//end - actionDeleteComentario
1842
1843        $(document).on('click','.botonVerMasContenido',function(e){
1844            $(this).hide();
1845        });
1846    };//end - docReady
1847
1848    return {
1849        
1850        init: function () {
1851            /*
1852            console.log(moment.tz.guess());
1853            if ("geolocation" in navigator){
1854                //navigator.geolocation.watchPosition(function(position){ 
1855                navigator.geolocation.getCurrentPosition(function(position){ 
1856                    console.log(position);
1857                    console.log("Found your location \nLat : "+position.coords.latitude+" \nLang :"+ position.coords.longitude);
1858                });
1859            }else{
1860                console.log("Browser doesn't support geolocation!");
1861            }
1862            */
1863            nd1 = new Date();g1 = nd1.getMinutes()+":"+nd1.getSeconds()+":"+nd1.getMilliseconds();
1864        //            console.info('cargando pagina... INIT()'+g1);
1865            //console.info('ANTES de cargando pagina...'+g1);
1866            /*
1867            setTimeout(function(){ 
1868                var nd2 = new Date();var g2 = nd2.getMinutes()+":"+nd2.getSeconds()+":"+nd2.getMilliseconds();
1869                console.info('cargando pagina...'+g2);
1870            }, 1000);
1871            */
1872            $(document).ready(function(){
1873                docReady();
1874
1875                /*
1876                setTimeout(function(){
1877                    var nd2 = new Date();var g2 = nd2.getSeconds();
1878                    console.info('cargando pagina... ANTES'+g2);
1879                    docReady();
1880                    var nd3 = new Date();var g3 = nd3.getMinutes()+":"+nd3.getSeconds()+":"+nd3.getMilliseconds();
1881                    console.info('cargando pagina... ------ DESPUES'+g3);
1882                }, 3000);
1883                */
1884            });//end - document.ready
1885        }//end - init
1886    }//end - return
1887});//end - FeedController

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.