1var $j = jQuery.noConflict(); 2 3function adaptarFormulario(idf){ 4 5 var options = { 6 beforeSubmit: function(arr, $form, options) { 7 jQuery('#form' + idf + ' .firma').each(function () { 8 jQuery(this).data('saveSignature')(); 9 }); 10 11 if(jQuery("#form"+idf+" .o").filter(function(index) { return jQuery(this).val()==""; }).length>0){ 12 jQuery("#form"+idf+" .o").filter(function(index) { return jQuery(this).val()==""; }).first().focus(); 13 sweetAlert("","Debes rellenar los campos obligatorios * antes de enviar","info"); 14 return false; 15 } else if(jQuery("#form"+idf+" input:checkbox.o:not(:checked)").filter(function(index) { return !jQuery(this).is(":checked"); }).length>0){ 16 sweetAlert("","Debes activar las casillas obligatorias * antes de enviar","info"); 17 return false; 18 } else if(jQuery("#form"+idf+" input:file").filter(function(index) { return !checkFileSize(jQuery(this).attr('id'),5000000); }).length>0){ 19 sweetAlert("","Tamaño de archivo demasiado grande, no puede superar 5MB","info"); 20 return false; 21 } else if(document.getElementById('g-recaptcha-response'+idf).value==''){ 22 sweetAlert("","Fallo de seguridad, no se puede enviar.","error"); 23 return false; 24 } else { 25 26 if(confirm("¿Enviar formulario?")){ 27 jQuery("#form"+idf+" .benviar").attr("disabled",true); 28 jQuery("#form"+idf+" .benviar").val("Enviando ..."); 29 } else return false; 30 31 } 32 // return false to cancel submit 33 }, 34 success: function(data, statusText, xhr, $form) { 35 if(data.error!=""){ 36 sweetAlert("ERROR",data.error,"error"); 37 grecaptcha.enterprise.execute('6LfT0qUeAAAAAHjps_iyLbtGLJv778h-fMVYgnRu', {action: 'send'}).then(function(token) { jQuery('#g-recaptcha-response'+idf).val(token); }); 38 } else { 39 if(data.url!="" && data.url!=null){ 40 document.location.href=data.url; 41 } else { 42 grecaptcha.enterprise.execute('6LfT0qUeAAAAAHjps_iyLbtGLJv778h-fMVYgnRu', {action: 'send'}).then(function(token) { jQuery('#g-recaptcha-response'+idf).val(token); }); 43 if(typeof successSubmit == 'function'){ 44 successSubmit(data.text); 45 } else { 46 sweetAlert(data.text); 47 } 48 } 49 } 50 //jQuery('#seguridad'+idf+'_img').attr('src','/include/securimage/securimage_show.php?'+Math.random()+'&f='+idf+'&fcod='+jQuery('#fsecurecod'+idf).val()); 51 //jQuery('#seguridad'+idf).val(""); 52 jQuery("#form"+idf+" .benviar").attr("disabled",false); 53 jQuery("#form"+idf+" .benviar").val("Enviar"); 54 }, 55 clearForm: false, // clear all form fields after successful submit 56 resetForm: false, // reset the form after successful submit 57 dataType: 'json', 58 error: function (xhr, ajaxOptions, thrownError) { 59 sweetAlert(xhr.status,thrownError); 60 } 61 62 }; 63 64 jQuery("#form"+idf).ajaxForm(options); 65 jQuery("#form"+idf+" .chkShowCond").click(function(e) { 66 jQuery("#chkCond"+jQuery(this).attr('idc')).toggle(100); 67 return false; 68 }); 69 70 jQuery("#form"+idf+" .img-upload").each(function(index, element) { 71 jQuery("input",this).change(function(evt){ 72 if(!checkFileExtension(jQuery(this).attr('id'),Array(".jpg",".gif",".png"))) sweetAlert("Formato incorrecto","Elige un archivo JPG, PNG o GIF","info"); 73 else if(!checkFileSize(jQuery(this).attr('id'),8000000)) sweetAlert("Demasiado grande","El archivo seleccionado es demasiado grande. No puede superar 8MB.","info"); 74 else { 75 var reader = new FileReader(); 76 var label = jQuery("label",jQuery(this).parent()); 77 reader.onload = function(ev) { 78 var image = ev.target.result; 79 label.css('background-image', 'url("'+image+'")'); 80 }; 81 var file = evt.target.files[0]; 82 reader.readAsDataURL(file); 83 } 84 }); 85 }); 86 87 jQuery("#form"+idf+" .campo.fecha input").each(function(index, element) { 88 jQuery(this).datepicker({ language: 'es' }); 89 }); 90 91 jQuery('#form' + idf + ' .firma').each(function () { 92 const $firma = jQuery(this); 93 const $canvas = $firma.find('canvas'); 94 const ctx = $canvas[0].getContext('2d'); 95 const $input = $firma.find('input[type="hidden"]'); 96 let drawing = false;
97 98 function resizeCanvas() { 99 const width = $canvas.width(); 100 const height = $canvas.height(); 101 $canvas[0].width = width; 102 $canvas[0].height = height; 103 } 104 105 resizeCanvas(); 106 jQuery(window).on('resize', resizeCanvas); 107 108 function getPos(e) { 109 const rect = $canvas[0].getBoundingClientRect(); 110 const x = e.type.startsWith('touch') ? e.originalEvent.touches[0].clientX : e.clientX; 111 const y = e.type.startsWith('touch') ? e.originalEvent.touches[0].clientY : e.clientY; 112 return { 113 x: x - rect.left, 114 y: y - rect.top 115 }; 116 } 117 118 $canvas.on('mousedown touchstart', function (e) { 119 e.preventDefault(); 120 drawing = true; 121 const pos = getPos(e); 122 ctx.beginPath(); 123 ctx.moveTo(pos.x, pos.y); 124 }); 125 126 $canvas.on('mousemove touchmove', function (e) { 127 if (!drawing) return; 128 e.preventDefault(); 129 const pos = getPos(e); 130 ctx.lineTo(pos.x, pos.y); 131 ctx.stroke(); 132 }); 133 134 jQuery(document).on('mouseup touchend', function () { 135 drawing = false; 136 }); 137 138 $firma.find('.borrar').on('click', function () { 139 ctx.clearRect(0, 0, $canvas[0].width, $canvas[0].height); 140 }); 141 142 $firma.data('saveSignature', function () { 143 $input.val($canvas[0].toDataURL()); 144 }); 145 }); 146} 147 148function cadenaLimpia(cad){ 149 cad = String(cad==null?"":cad); 150 // Misma normalización que FG_limpia en PHP: una tilde combinada (texto pegado desde Mac) pasa a un solo carácter 151 if(cad.normalize) cad = cad.normalize('NFC'); 152 cad = strtr(cad,"ÃÃÃÃÃà à áâãäåÃÃÃÃÃÃòóôõöøÃÃÃÃèéêëÃçÃÃÃÃìÃîïÃÃÃÃùúûüÿÃñ","aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn"); 153 cad = cad.toLowerCase(); 154 cad = cad.replace(/([^a-z0-9]+)/g,'-'); 155 cad = cad.replace(/-{2,}/g,'-'); 156 cad = cad.replace(/-$/g,''); 157 cad = cad.replace(/^-/g,''); 158 return cad; 159} 160 161function calendarioDia(cal,f,d,m){ 162 jQuery(".calendar .detalles_d_"+cal).fadeOut(250); 163 jQuery(".calendar .detalles_fila_"+cal).slideUp(250); 164 jQuery(".calendar .dia").removeClass('act'); 165 jQuery(".calendar #dia"+d+"_"+m+"_"+cal).addClass('act'); 166 jQuery(".calendar #detalles_d"+d+"_"+cal).fadeIn(250); 167 jQuery(".calendar #detalles_fila"+f+"_"+m+"_"+cal).slideDown(250); 168} 169 170function calendarioMes(id,c,cal,m){ 171 jQuery("#cmm"+cal+" .load").fadeIn(150); 172 173 jQuery.ajax({ 174 url: '/ajax/calendario.php?'+(Math.random()*100)+"&id="+id+"&cod="+c+"&m="+m+"&cal="+cal, 175 dataType:"json", 176 success: function (data){ 177 jQuery("#cmm"+cal).replaceWith(data.html); 178 jQuery("#cmm"+cal+" .load").fadeOut(150); 179 }, 180 error: function(){ sweetAlert("ERROR","","error"); } 181 }); 182 183} 184 185var callisp=0; 186function calListado(id,c,i,cml){ 187 jQuery("#cml"+cml+" .haymas").replaceWith("<div class='loading' style='text-align:center; margin:20px 0px;'><img src='/images/loading.gif'></div>"); 188 jQuery.ajax({ 189 url: '/ajax/calendario.eventos.php?'+(Math.random()*100)+"&id="+id+"&cod="+c+"&idioma="+i+"&cml="+cml+"&p="+(callisp+1), 190 success: function (data){ jQuery("#cml"+cml+" .loading").replaceWith(data); callisp++; }, 191 error: function(){ sweetAlert("ERROR","","error"); } 192 }); 193} 194 195 196 197 198function checkFileExtension(id,exts){ 199 extension = (document.getElementById(id).value.substring(document.getElementById(id).value.lastIndexOf("."))).toLowerCase(); 200 ok = false; 201 for (var i = 0; i < exts.length; i++) { 202 if (exts[i] == extension) { 203 ok = true; 204 break; 205 } 206 } 207 return ok; 208} 209 210function checkFileSize(id,maxsize) { 211 var input, file; 212 if (!window.FileReader) return true; 213 214 input = document.getElementById(id); 215 if(!input) return true; 216 else if (!input.files) return true; 217 else if (!input.files[0]) return true; 218 else return (input.files[0].size<=maxsize); 219} 220 221function e(url){ enlaceSelf(url); } 222 223function enlace(url){ 224 window.open(url, "_blank"); 225} 226 227function enlaceSelf(url){ 228 document.location.href = url; 229} 230 231function firmasNuevaOpinionShow(fid){ 232 jQuery("#tOpiniones"+fid+" .form .button").hide(); 233 jQuery("#tOpiniones"+fid+" .form .formulario").slideToggle(300); 234} 235 236function firmasNuevaOpinionHide(fid){ 237 jQuery("#tOpiniones"+fid+" .form .formulario").slideToggle(300,null,function(){ 238 jQuery("#tOpiniones"+fid+" .form .button").slideToggle(50); 239 }); 240} 241 242function fotoZoom(id){ 243 jQuery("#zoomfoto").remove(); 244 jQuery("body").append("<div id='zoomfoto'><div class='close' onclick='fotoZoomClose();'></div><div class='imgbefore'></div><img onclick='' src='"+jQuery("#img"+id).attr('srczoom')+"'></div>"); 245} 246 247function fotoZoomClose(){ 248 jQuery("#zoomfoto").remove(); 249} 250 251function fSubMenu(idm){ 252 if(jQuery(document).width()>480){ 253 if(jQuery("#ulsubmenu"+idm).is(':visible')){ 254 jQuery("#li"+idm).removeClass('over'); 255 } else { 256 jQuery("#ulmenu > li[id!='li"+idm+"']").removeClass('over'); 257 //jQuery("#menu a.concont[seid!='"+idm+"']").attr('despl','0'); 258 jQuery("#li"+idm).addClass('over'); 259 } 260 } 261} 262 263function generaMenu(){ 264 if(jQuery("#ulmenu > li").length>1){ 265 jQuery("#menu").append("<div id='menumovil'><select id='selectmenu'></select></div>"); 266 jQuery("#ulmenu > li").each(function(index, element) { 267 var txt = jQuery("> a",this).html(); 268 var url = jQuery("> a",this).attr('href'); 269 if(url!="#"){ 270 jQuery("#menumovil select").append("<option "+(jQuery(this).hasClass('actual')?"selected":"")+" onclick='document.location.href=\""+url+"\"'>"+txt+"</option>"); 271 } else { 272 if(!jQuery(this).hasClass('concont')) jQuery("#menumovil select").append("<option disabled>"+txt+"</option>"); 273 } 274 jQuery(".ulsubmenu li",this).each(function(index, element) { 275 var txt = jQuery("> a",this).html(); 276 var url = jQuery("> a",this).attr('href'); 277 jQuery("#menumovil select").append("<option "+(jQuery(this).hasClass('actual')?"selected":"")+" onclick='document.location.href=\""+url+"\"'>"+(jQuery(this).hasClass('main')?"":" • ")+txt+"</option>"); 278 }); 279 }); 280 jQuery("#selectmenu").change(function(e) { 281 jQuery("option:selected",this).click(); 282 }); 283 } 284} 285 286function generaMenu2(){ 287 if(jQuery("#ulmenu > li").length>1){ 288 jQuery("#menu").append("<div id='menumovil' class='menu2'><a class='showMenuM' href='#'></a><ul class='main' style='display:none;'></ul></div>"); 289 290 jQuery("#menumovil .main").html(generaMenuMUL()); 291 292 jQuery("#menumovil .showMenuM").click(function(e) { 293 jQuery("#menumovil .main").slideToggle(300); 294 }); 295 } 296} 297 298function generaMenu3(){ 299 if(jQuery("#ulmenu > li").length>1){ 300 jQuery("#menu").append("<div id='menumovil' class='menu3'><a class='showMenuM' href='#'></a><div class='slide'><div class='c1'><div class='cerrardiv'><a class='showMenuM cerrar'></a></div><ul class='main'></ul></div><div class='c2'></div></div></div>"); 301 302 jQuery("#menumovil .main").html(generaMenuMUL()); 303 jQuery("#menumovil .showMenuM, #menumovil .c2").click(function(e) { 304 if(jQuery("#menumovil .slide").hasClass('expand')){ 305 jQuery("#menumovil .slide").animate({"left": "-100%"}, 200); 306 jQuery("#menumovil .slide").removeClass('expand'); 307 } else { 308 jQuery("#menumovil .slide").animate({"left": "0px"}, 200); 309 jQuery("#menumovil .slide").addClass('expand'); 310 } 311 }); 312 } 313} 314 315function generaMenuMUL(){ 316 var htmlmain = ""; 317 jQuery("#ulmenu > li").each(function(index, element) { 318 var txt = jQuery("> a",this).html(); 319 var url = jQuery("> a",this).attr('href'); 320 var click = jQuery("> a",this).attr('onclick'); 321 var sb = ""; 322 if(url!="#") htmlmain+= "<li "+(jQuery(this).hasClass('actual')?"class='actual'":"")+"><a href='"+url+"'>"+txt+"</a>"; 323 else { 324 if(jQuery(this).hasClass('concont')){ 325 var primero = jQuery(".ulsubmenu li",this).first(); 326 txt = jQuery("> a",primero).html(); 327 url = jQuery("> a",primero).attr('href'); 328 if(url!="#"){ 329 htmlmain+= "<li "+(jQuery(this).hasClass('actual')?"class='actual'":"")+"><a href='"+url+"'>"+txt+"</a>"; 330 sb = url; 331 } 332 } else { 333 htmlmain+= "<li class='disabled'><a href='#' onclick='"+click+"; return false;'>"+txt+"</a>"; 334 } 335 } 336 337 if(jQuery(".ulsubmenu li",this).length){ 338 htmlmain+= "<ul class='sub'>"; 339 jQuery(".ulsubmenu li",this).each(function(index, element) { 340 var txt = jQuery("> a",this).html(); 341 var url = jQuery("> a",this).attr('href'); 342 if(url!=sb) htmlmain+= "<li "+(jQuery(this).hasClass('actual')?"class='actual'":"")+"><a href='"+url+"'>"+txt+"</a></li>"; 343 }); 344 htmlmain+= "</ul>"; 345 } 346 347 htmlmain+= "</li>"; 348 }); 349 return htmlmain; 350} 351 352function goBack() { window.history.back(); } 353 354var confadein = false;
355jQuery(document).ready(function(e) { 356 jQuery(window).scroll(function(){ scrollWindow(); }); 357 jQuery('.scrollup').click(function(){ jQuery("html, body").animate({ scrollTop: 0 }, 600); return false; }); 358 if(jQuery(".fadein").length){ confadein = true; checkFadeIn(); } 359}); 360 361function checkFadeIn(){ 362 var sc = jQuery(window).scrollTop(); 363 var he = jQuery(window).height(); 364 365 jQuery(".fadein").each(function(index, element) { 366 var arriba = jQuery(this).offset().top; 367 var abajo = arriba+jQuery(this).height(); 368 var medio = sc+(Math.round(he/2)); 369 var cuarto = Math.round(he/4); 370 if(Math.abs(medio-arriba)<cuarto || Math.abs(medio-abajo)<cuarto){ 371 jQuery(this).animate({opacity:1, filter:"alpha(opacity=100)"},1500); 372 jQuery(this).removeClass("fadein"); 373 } 374 }); 375} 376 377var menumstl = 1; 378var menufix = 0; 379//var menumfix = 0; 380jQuery(window).load(function(e) { 381 382 if(menumstl==1) generaMenu(); 383 else if(menumstl==2) generaMenu2(); 384 else if(menumstl==3) generaMenu3(); 385 386 jQuery("#bk2").prepend("<div id='mrgtop'></div>"); 387 388 /*jQuery(document).bind("contextmenu",function(e){ 389 if(e.target.nodeName == 'IMG'){ 390 //context menu attempt on top of an image element 391 return false; 392 } 393 });*/ 394 395}); 396 397function scrollWindow(){ 398 if (jQuery(this).scrollTop() > 100) jQuery('.scrollup, .fixbtn').fadeIn(); else jQuery('.scrollup, .fixbtn').fadeOut(); 399 400 scrolltop = jQuery(window).scrollTop(); 401 402 if(scrolltop>50) jQuery('#barcont').addClass('scroll'); 403 else jQuery('#barcont').removeClass('scroll'); 404 405 if(confadein) checkFadeIn(); 406} 407 408function manejoErroresAjax (obj, nerror, error){ 409 sweetAlert("ERROR DE AJAX", error, "error"); 410} 411 412function levent(id,c,i,p){ 413 jQuery("#bmaseve").replaceWith("<div class='loading' id='eveloading' style='text-align:center; margin:20px 0px;'><img src='/images/loading.gif'></div>"); 414 jQuery.ajax({ 415 url: '/ajax/eventos.php?'+(Math.random()*100)+"&id="+id+"&cod="+c+"&idioma="+i+"&p="+p, 416 success: function (data){ jQuery("#eveloading").replaceWith(data); }, 417 error: function(){ sweetAlert("ERROR","","error"); } 418 }); 419} 420 421var pupnor=1; 422function lpubliNor(id,c,i,cat,ord){ 423 jQuery("#loadMoreN").replaceWith("<div class='loading' id='publoading' style='text-align:center; margin:20px 0px;'><img src='/images/loading.gif'></div>"); 424 jQuery.ajax({ 425 url: '/ajax/publicaciones.php?'+(Math.random()*100)+"&id="+id+"&cod="+c+"&idioma="+i+"&cat="+cat+"&ord="+ord+"&p="+(pupnor+1), 426 success: function (data){ jQuery("#publoading").replaceWith(data); pupnor++; }, 427 error: function(){ sweetAlert("ERROR","","error"); } 428 }); 429} 430 431var pupdes=1; 432function lpubliDes(id,c,i,cat,ord){ 433 jQuery("#loadMoreD").replaceWith("<div class='loading' id='publoadingdes' style='text-align:center; margin:20px 0px;'><img src='/images/loading.gif'></div>"); 434 jQuery.ajax({ 435 url: '/ajax/publicaciones.des.php?'+(Math.random()*100)+"&id="+id+"&cod="+c+"&idioma="+i+"&cat="+cat+"&ord="+ord+"&p="+(pupdes+1), 436 success: function (data){ jQuery("#publoadingdes").replaceWith(data); pupdes++; }, 437 error: function(){ sweetAlert("ERROR","","error"); } 438 }); 439} 440 441function lfirmas(id,c,idf){ 442 jQuery("#loadMoreFirmas"+idf).replaceWith("<div class='loading' id='firloading' style='text-align:center; margin:20px 0px;'><img src='/images/loading.gif'></div>"); 443 jQuery.ajax({ 444 url: '/ajax/firmas.php?'+(Math.random()*100)+"&idf="+idf+"&id="+id+"&cod="+c+"&p="+(eval("pfir"+idf)+1), 445 success: function (data){ jQuery("#firloading").replaceWith(data); eval("pfir"+idf+"++"); lfirmasFotos(); }, 446 error: function(){ sweetAlert("ERROR","","error"); } 447 }); 448} 449 450function lfirmasFotos(){ 451 jQuery('.photolist').each( function() { 452 var pic = jQuery(this), getItems = function() { var items = []; pic.find('a').each(function() { var href = jQuery(this).attr('href'), size = jQuery(this).data('size').split('x'), width = size[0], height = size[1]; var item = { src : href, w : width, h : height } 453 454 items.push(item); 455 }); 456 return items; 457 } 458 459 var items = getItems(); 460 461 var pswp = jQuery('.pswp')[0]; 462 pic.on('click', 'figure', function(event) { event.preventDefault(); var index = jQuery(this).index(); var options = { index: index, bgOpacity: 0.7, showHideOpacity: true} 463 var lightBox = new PhotoSwipe(pswp, PhotoSwipeUI_Default, items, options); 464 lightBox.init(); 465 }); 466 467 }); 468} 469 470function loadJSDelay(ruta){ 471 var body = document.getElementsByTagName('body')[0]; 472 var se1 = document.createElement('script'); 473 se1.src = ruta; 474 body.appendChild(se1); 475} 476 477function tabs(t){ 478 jQuery("#"+t+" li").each(function(index, element) { 479 jQuery(this).click(function(e) { 480 id = jQuery(this).attr("id"); 481 jQuery("#"+t+" li").removeClass('act'); 482 jQuery("#"+id).addClass('act'); 483 jQuery(".tab_"+t).css('display','none'); 484 jQuery("#"+t+"_"+id).css('display','block'); 485 clk = jQuery(this).attr("click"); 486 eval(clk); 487 }); 488 }); 489} 490 491function scrollToId(id){ 492 var pos = jQuery("#"+id).offset().top; 493 jQuery('html, body').animate({ scrollTop: pos }, 800); 494} 495 496function setScrollTo(id,margin){ 497 var pos = jQuery("#"+id).offset().top - margin;// + $j("body").scrollTop() - 150; 498 jQuery('html, body').animate({ scrollTop: pos }, 800); 499} 500 501function strtr(str, from, to) { 502 var fr = '', i = 0, j = 0, lenStr = 0, lenFrom = 0, tmpStrictForIn = false, fromTypeStr = '', toTypeStr = '', istr = ''; 503 var tmpFrom = []; 504 var tmpTo = []; 505 var ret = ''; 506 var match = false;
507 if (typeof from === 'object') { 508 tmpStrictForIn = this.ini_set('phpjs.strictForIn', false); // Not thread-safe; temporarily set to true 509 from = this.krsort(from); 510 this.ini_set('phpjs.strictForIn', tmpStrictForIn); 511 for (fr in from) { 512 if (from.hasOwnProperty(fr)) { 513 tmpFrom.push(fr); 514 tmpTo.push(from[fr]); 515 } 516 } 517 from = tmpFrom; to = tmpTo; 518 } 519 520 lenStr = str.length; 521 lenFrom = from.length; 522 fromTypeStr = typeof from === 'string'; 523 toTypeStr = typeof to === 'string'; 524 525 for (i = 0; i < lenStr; i++) { 526 match = false; 527 if (fromTypeStr) { 528 istr = str.charAt(i); 529 for (j = 0; j < lenFrom; j++) { 530 if (istr == from.charAt(j)) { 531 match = true; break; 532 } 533 } 534 } else { 535 for (j = 0; j < lenFrom; j++) { 536 if (str.substr(i, from[j].length) == from[j]) { 537 match = true; i = (i + from[j].length) - 1; break; 538 } 539 } 540 } 541 if (match) { ret += toTypeStr ? to.charAt(j) : to[j]; 542 } else { ret += str.charAt(i); } 543 } 544 return ret; 545} 546 547function FG_movil() { 548 var check = false; 549 (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))check = true})(navigator.userAgent||navigator.vendor||window.opera); 550 return check; 551} 552 553/* EFECTOS */ 554 555(function(){ 556 const supportsIO = 'IntersectionObserver' in window; 557 const isReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 558 const DEFAULTS = { rootMargin:'0px 0px -10% 0px', threshold:0.1 }; 559 560 function setupElement(el, effect="fade", delay=0, duration=600, once=true){ 561 el.classList.add("os-init", "os-" + effect); 562 if (!isReduced) { 563 el.style.transition = `opacity ${duration}ms ease, transform ${duration}ms ease, filter ${duration}ms ease`; 564 if (delay) el.style.transitionDelay = `${delay}ms`; 565 } 566 el.dataset.osOnce = once; 567 } 568 569 function reveal(el){ 570 el.classList.add("os-in"); 571 el.classList.remove("os-init"); 572 if (el.dataset.osOnce === "true") el.dataset.__osDone = "1"; 573 } 574 575 function hide(el){ 576 if (el.dataset.osOnce === "false" && !el.dataset.__osDone) { 577 el.classList.remove("os-in"); 578 el.classList.add("os-init"); 579 } 580 } 581 582 window.crearEfecto = function(selector, efecto="fade", opts={}){ 583 const $els = jQuery(selector); // <- jQuery en lugar de $ 584 if ($els.length === 0) return console.warn("No se encontró:", selector); 585 586 const delay = opts.delay || 0; 587 const duration = opts.duration || 600; 588 const once = opts.once !== undefined ? opts.once : true; 589 590 $els.each(function(){ 591 const el = this; 592 setupElement(el, efecto, delay, duration, once); 593 594 if (isReduced){ reveal(el); return; } 595 if (!supportsIO){ reveal(el); return; } 596 597 const io = new IntersectionObserver((entries) => {
598 entries.forEach(entry => { 599 if (entry.isIntersecting) reveal(entry.target); 600 else hide(entry.target); 601 }); 602 }, DEFAULTS); 603 604 io.observe(el); 605 }); 606 }; 607})(); 608 609 610// Botón "Copiar enlace" de los botones de compartir (FG_redesSociales). 611// Copia la URL al portapapeles y muestra un aviso breve junto al botón. 612function FGcompartirCopiar(a){ 613 var url = a.getAttribute("data-url") || window.location.href; 614 var listo = function(){ 615 var aviso = document.createElement("span"); 616 aviso.className = "rs-copiado"; 617 aviso.textContent = a.getAttribute("data-ok") || "Enlace copiado"; 618 a.parentNode.insertBefore(aviso, a.nextSibling); 619 setTimeout(function(){ if(aviso.parentNode) aviso.parentNode.removeChild(aviso); }, 2000); 620 }; 621 if(navigator.clipboard && window.isSecureContext){ 622 navigator.clipboard.writeText(url).then(listo, function(){ FGcompartirCopiarViejo(url, listo); }); 623 } else { 624 FGcompartirCopiarViejo(url, listo); 625 } 626 return false; 627} 628 629// Alternativa para navegadores sin API de portapapeles o páginas sin https 630function FGcompartirCopiarViejo(url, listo){ 631 var ta = document.createElement("textarea"); 632 ta.value = url; 633 ta.setAttribute("readonly", ""); 634 ta.style.position = "fixed"; ta.style.left = "-9999px"; 635 document.body.appendChild(ta); 636 ta.select(); 637 try { if(document.execCommand("copy")) listo(); } catch(e){} 638 document.body.removeChild(ta); 639}
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.