1/** 2 * COMMON JAVASCRIPT 3 * Behaviour as expected 4 */ 5function _msg(key, alt, replacements) { 6 let string = ''; 7 string = 8 (typeof msg == 'undefined' || typeof msg[key] == 'undefined') 9 ? string = alt 10 : msg[key]; 11 12 if (!replacements) return string; 13 14 if ('object' === typeof replacements && !Array.isArray(replacements)) { 15 Object.keys(replacements).forEach(key => { 16 string = string.replaceAll(key, replacements[key]); 17 }); 18 } 19 20 return string; 21} 22 23function numberPadLeft(number, n, str) { 24 return Array(n - String(number).length + 1).join(str || '0') + number; 25} 26 27const PRISTINE_JS = { 28 BASIC_CONFIG: { 29 classTo: 'input-group', // class of the parent element where the error/success class is added 30 errorClass: 'input-group__input--error', 31 successClass: 'has-success', 32 errorTextParent: 'input-group', // class of the parent element where error text element is appended 33 errorTextTag: 'p', // type of element to create for the error text 34 errorTextClass: 'input-group__validation input-group__input--error' // class of the error text element 35 }, 36 CUSTOM_VALIDATORS: { 37 valid_url : (value, element) => { 38 // only for non required elements 39 if (!value) { 40 return true; 41 } 42 43 const urlPattern = new RegExp('^((ft|htt)ps?:\\/\\/)?'+ // protocol 44 '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name and extension 45 '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address 46 '(\\:\\d+)?'+ // port 47 '(\\/[-a-z\\d%@_.~+&:]*)*'+ // path 48 '(\\?[;&a-z\\d%@_.,~+&:=-]*)?'+ // query string 49 '(\\#[-a-z\\d_]*)?$','i'); // fragment locator 50 51 return urlPattern.test(value.trim()); 52 53 } 54 55 } 56} 57 58 59/** 60 get url param 61 optional url 62 example getAllUrlParams().eventId will return data or undefined if not found 63*/ 64function getAllUrlParams(url) { 65 // get query string from url (optional) or window 66 var queryString = url ? url.split("?")[1] : window.location.search.slice(1); 67 68 // we'll store the parameters here 69 var obj = {}; 70 71 // if query string exists 72 if (queryString) { 73 // stuff after # is not part of query string, so get rid of it 74 queryString = queryString.split("#")[0]; 75 76 // split our query string into its component parts 77 var arr = queryString.split("&"); 78 79 for (var i = 0; i < arr.length; i++) { 80 // separate the keys and the values 81 var a = arr[i].split("="); 82 83 // set parameter name and value (use 'true' if empty) 84 var paramName = a[0]; 85 var paramValue = typeof a[1] === "undefined" ? true : a[1]; 86 87 // (optional) keep case consistent 88 paramName = paramName.toLowerCase(); 89 if (typeof paramValue === "string") paramValue = paramValue.toLowerCase(); 90 91 // if the paramName ends with square brackets, e.g. colors[] or colors[2] 92 if (paramName.match(/\[(\d+)?\]$/)) { 93 // create key if it doesn't exist 94 var key = paramName.replace(/\[(\d+)?\]/, ""); 95 if (!obj[key]) obj[key] = []; 96 97 // if it's an indexed array e.g. colors[2] 98 if (paramName.match(/\[\d+\]$/)) { 99 // get the index value and add the entry at the appropriate position 100 var index = /\[(\d+)\]/.exec(paramName)[1]; 101 obj[key][index] = paramValue; 102 } else { 103 // otherwise add the value to the end of the array 104 obj[key].push(paramValue); 105 } 106 } else { 107 // we're dealing with a string 108 if (!obj[paramName]) { 109 // if it doesn't exist, create property 110 obj[paramName] = paramValue; 111 } else if (obj[paramName] && typeof obj[paramName] === "string") { 112 // if property does exist and it's a string, convert it to an array 113 obj[paramName] = [obj[paramName]]; 114 obj[paramName].push(paramValue); 115 } else { 116 // otherwise add the property 117 obj[paramName].push(paramValue); 118 } 119 } 120 } 121 } 122 123 return obj; 124} 125 126/** 127 * Method to remove params from current URL and updates navigator bar 128 * 129 * @param {array | string } params Params to be removed from URL 130 * @param {boolean} removeAllParams remove all parameters in url 131 */ 132function removeUrlParams(params = [], removeAllParams = false) { 133 134 const url = new URL(window.location.href); 135 const currentParams = new URLSearchParams(url.searchParams.toString()); 136 137 // lets remove all params 138 if (removeAllParams) { 139 const newUrl = url.origin + url.pathname; 140 history.replaceState('', '', newUrl); 141 return; 142 } 143 // if no params or empty array 144 if (!params || !params.length) { 145 return; 146 } 147 148 // manages a string 149 if (typeof(params) === 'string') {
150 currentParams.delete(params); 151 } 152 153 // manages an array 154 if (Array.isArray(params)) { 155 params.forEach(param => { 156 currentParams.delete(param); 157 }); 158 } 159 160 // update current URL in navigator 161 const newParams = Array.from(currentParams).length ? '?' + currentParams.toString() : ''; 162 const newUrl = url.origin + url.pathname + newParams; 163 history.replaceState('', '', newUrl); 164 165} 166 167/** 168 * Set default width to 100% to ckeditor table 169 * @param CKEDITOR 170 */ 171function setDefaultCkEditorTableWidth(CKEDITOR) { 172 CKEDITOR.on('dialogDefinition', function( ev ) { 173 174 const diagName = ev.data.name; 175 const diagDefn = ev.data.definition; 176 177 if(diagName === 'table') { 178 const infoTab = diagDefn.getContents('info'); 179 180 const width = infoTab.get('txtWidth'); 181 width['default'] = "100%"; 182 } 183 }); 184} 185 186// method to check if url has param to call google analytics 187function ga_analytics_from_component(eventTracker, data = null) { 188 189 console.log("llego", eventTracker, data); 190 if (data && eventTracker) { 191 SYM.TRACKER.trackEventObj(eventTracker, data); 192 } 193 194 } 195 196var JSON = JSON || {}; // make JSON object available if no native support 197 198var SYM = window.SYM || {}; // initialize namespace: SYM 199 200SYM = $.extend(SYM, function() { // declare namespace SYM 201 202 var ajax_load = false; 203 var ajax_load_offset = -6; 204 205 const plupload_input_file_default_selector = '.input_file'; 206 const plupload_pick_file_default_selector = '.btn_pickfiles'; 207 const plupload_default_options = { 208 runtimes : 'html5,flash,silverlight,html4,gears,browserplus', 209 browse_button : 'pickfiles', 210 container : 'container', 211 max_file_size : '100mb', 212 chunk_size: '2mb', 213 url : '/file_manager/plupload_receiver', 214 flash_swf_url : '/js/plupload/js/plupload.flash.swf', 215 silverlight_xap_url : '/js/plupload/js/plupload.silverlight.xap' 216 }; 217 218 return { 219 220 uploader: null, // plupload 221 uploader_autostart: true, // plupload 222 uploader_id: null, // plupload 223 224 uploader_alt: null, 225 uploader_alt_autostart: true, 226 uploader_alt_id: null, 227 228 uploader_multi: null, 229 uploader_multi_autostart: true, 230 uploader_multi_id: null, 231 232 timer_session: null, // keep the session alive 233 debugc: (typeof _IS_LOCAL !== 'undefined' && _IS_LOCAL) ? true : false, //enable or disable debugging 234 235 // AJAX progress bar 236 bind_ajax_progress_bar: function() { 237 if (typeof SYMJS != 'undefined' && typeof SYMJS.blocks_init != 'undefined') return; 238 if($('#template').hasClass('emagister')) { 239 ajax_load_offset = 0; 240 } 241 $(document).ajaxSend(function() { 242 if(!$('#ajax_load').length) { 243 $('<div></div>').attr('id', 'ajax_load').append( 244 $('<img>').attr('src', '/imgs/common/ajax_load.gif') 245 ).appendTo($('body').css('cursor', 'progress')).animate({ 246 top: ajax_load_offset 247 }, 900); 248 } 249 ajax_load = $('#ajax_load'); 250 //Hide element at 10 seconds without ajax response 251 setTimeout(function() { 252 if(ajax_load.length) { 253 $('body').trigger('ajaxStop'); 254 } 255 }, 10000); 256 }).ajaxStop(function() { 257 setTimeout(function() { 258 $('body').css('cursor', 'default'); 259 if(ajax_load.length) { 260 ajax_load.animate({ 261 top: -40 262 }, 700, function() { 263 ajax_load.remove(); 264 }); 265 } 266 }, 900); 267 }); 268 }, 269 270 // do not show progress bar while async requesting 271 unbind_ajax_progress_bar: function() { 272 $('body').unbind('ajaxSend ajaxStop'); 273 }, 274 275 // maintain session alive #WATCHDOG DEPRECATED? 276 keep_session: function() { 277 if (_IS_LOGGED) { 278 clearInterval(this.timer_session); 279 this.timer_session = setInterval(function() { 280 SYM.unbind_ajax_progress_bar(); 281 $.get(noCache('/login/renew_session'), function() { 282 SYM.bind_ajax_progress_bar(); 283 }); 284 }, 1800000); // 30 min. 285 } 286 }, 287 288 // go to proper partner login page 289 go_to_partner_login: function(partner_code, encoded_redirect) { 290 switch (partner_code) { 291 case 'um': case 'ull': 292 case 'demoupf': case 'upf': 293 case 'demoupc': case 'upc': case 'upc-pruebas' : 294 window.open(_SERVERURI + 'login/cas_' + partner_code + '/login?uri=' + _SERVERURI); 295 break; 296 case 'unizar': case 'demo-unizar':
297 window.open(_SERVERURI + 'login/cas_' + partner_code + '/login'); 298 break; 299 case 'usal': case 'uma': 300 window.open(_SERVERURI + 'login/papipoa'); 301 break; 302 case 'demo-unex': 303 break; 304 case 'unex': case 'urjc': case 'urjc-verano': 305 window.open(_SERVERURI + 'login/ldap'); 306 break; 307 case 'madrimasd': 308 window.open(_SERVERURI + 'login/sym_sso/madrimasd/' + encoded_redirect); 309 break; 310 case 'demomadrimasd': 311 window.open(_SERVERURI + 'login/sym_sso/demomadrimasd/' + encoded_redirect); 312 break; 313 default: 314 msgbox_close('all'); 315 msgbox_infotop(msg.COMING_SOON); 316 } 317 }, 318 319 get_partner_login: function(partner_code) { 320 switch (partner_code) { 321 case 'um': case 'ull': 322 case 'unizar': case 'demo-unizar': 323 case 'demoupf': case 'upf': 324 case 'demoupc': case 'upc': case 'upc-pruebas' : 325 url = _SERVERURI + 'login/cas_' + partner_code + '/login?uri=' + _SERVERURI; 326 break; 327 case 'usal': case 'uma': 328 url = _SERVERURI + 'login/papipoa'; 329 break; 330 case 'demo-unex': 331 url = false; 332 break; 333 case 'unex': case 'urjc': case 'urjc-verano': 334 url = _SERVERURI + 'login/ldap'; 335 break; 336 case 'madrimasd': 337 url = _SERVERURI + 'login/sym_sso/madrimasd'; 338 break; 339 case 'demomadrimasd': 340 url = _SERVERURI + 'login/sym_sso/demomadrimasd'; 341 break; 342 default: 343 url = false; 344 } 345 return url; 346 }, 347 348 // fill integer with zeros on the left 349 zero_fill: function(number, width) { 350 width -= number.toString().length; 351 if(width > 0) { 352 return new Array(width + (/\./.test(number) ? 2 : 1)).join('0') + number; 353 } 354 return number; 355 }, 356 357 // NOTE: it requires script "http://www.google.com/recaptcha/api/js/recaptcha_ajax.js?1" in order to work! 358 create_captcha: function() { 359 Recaptcha.create(_CAPTCHA_KEY, 'captcha', 360 { 361 theme : 'white', 362 lang : _LANGUAGE 363 }); 364 }, 365 366 // automatically set tooltips if any 367 activate_tooltips: function(selector) { 368 if ($(selector+'img.tooltip_trigger').length) { // user 369 if (!$('#tooltip_div').length) { 370 //create tooltip div 371 $('<div></div>').attr('id', 'tooltip_div').appendTo($('body')); 372 } 373 //activate tooltip 374 $(selector+'img.tooltip_trigger').tooltip({ 375 tip: '#tooltip_div', 376 direction: 'down', 377 bounce: true, 378 position: 'bottom center', 379 onBeforeShow: function (event) { 380 // Transform # symbol into line breaks in tooltip texts 381 if ($(event.srcElement).hasClass('line-break-tooltip')) { 382 $('#tooltip_div').html($('#tooltip_div').html().replace(/#/g, '<br/>')); 383 } 384 } 385 }); 386 } else if ($('a.tooltip_trigger').length) { // event_detail 387 if (!$('#tooltip_div').length) { 388 //create tooltip div 389 $('<div></div>').attr('id', 'tooltip_div').appendTo($('body')); 390 } 391 //activate tooltip 392 $('a.tooltip_trigger').tooltip({ 393 tip: '#tooltip_div', 394 direction: 'down', 395 bounce: true, 396 position: 'bottom center' 397 }).dynamic({ 398 bottom: { 399 direction: 'down' 400 }, 401 top: { 402 direction: 'up' 403 } 404 }); 405 } 406 }, 407 408 /** 409 * Generate a plupload uploader 410 * 411 * Include the following scripts AFTER jquery 412 * - /js/plupload/js/plupload.browserplus.js 413 * - /js/plupload/js/plupload.full.js 414 * 415 * Copy the same HTML markup from one of the example uploaders like event_detail/upload 416 * 417 * You will get an extra INPUT called UPLOAD which will have the path to the uploaded file (obfuscated, see Utils Helper) 418 * It uses YAV validation to make this INPUT REQUIRED 419 * Use SYM.reset_plupload_input() to reset the input after a succesful post or any other case you may need to 420 */ 421 pluploader_init: function(properties, callback) { 422 423 const debug = false; 424 const file_selector = plupload_input_file_default_selector; 425 const pick_files_selector = plupload_pick_file_default_selector; 426 427 if (!$(file_selector).length) { 428 if ('function' === typeof callback) callback('No files found'); 429 return null; 430 } 431 432 if (SYM.uploader != null) { 433 try { 434 SYM.uploader.destroy(); 435 if (debug) console.log('uploader destroyed', SYM.uploader); 436 SYM.uploader = null;
437 if (debug) console.log('uploader should be null by now', SYM.uploader); 438 } catch (e) { 439 console.error(e); 440 if ('function' === typeof callback) callback(e); 441 } 442 if (debug) console.log('pluploader_init_multi destroyed'); 443 $(file_selector).off(); 444 if ($(pick_files_selector).length) { 445 $(pick_files_selector).each((i, o) => { 446 const clone = $(o).clone(); 447 $(o).replaceWith(clone); 448 }); 449 } 450 if (debug) console.log('input files and button pickfiles events unbinded', file_selector, pick_files_selector); 451 } 452 453 $(file_selector).focus(function(){ 454 $('#pickfiles').focus(); 455 }); 456 457 if(typeof properties.autostart != 'undefined') { 458 SYM.uploader_autostart = properties.autostart; 459 delete properties.autostart; 460 } 461 462 properties = $.extend({}, plupload_default_options, properties); 463 464 try { 465 SYM.uploader = new plupload.Uploader(properties); 466 SYM.uploader.init(); 467 } catch (err) { 468 console.error(err); 469 if ('function' === typeof callback) callback(err); 470 return; 471 } 472 473 SYM.uploader.bind('FilesAdded', function(up, files) { 474 // clean previous errors 475 SYM.reset_plupload_input(); 476 $('#filelist .error').remove(); 477 // Limit to 1 file, the last added 478 var file_ext = ''; 479 if (SYM.uploader.files.length > 1) { 480 // keep in the array just the last file 481 SYM.uploader.files.splice(0,1); 482 SYM.uploader.stop(); 483 } 484 $(file_selector).val(files[0].name + ' (' + plupload.formatSize(files[0].size)+ ') '); 485 // Catch the file extension. If there is none, file_ext will be null. If there is one, it will be on the position 1 of an array. 486 file_ext = files[0].name.match(/\.([\w\d]+)$/); 487 // Forbidden extensions 488 var extensions = ['', 'exe', 'com', 'pif', 'src', 'dot', 'vbs', 'php', 'sh']; 489 // Tweak the value of the variable for easier comparison 490 if (file_ext == null) { 491 file_ext = ''; 492 } else file_ext = file_ext[1]; 493 // If the extension is not found, upload 494 if (extensions.indexOf(file_ext) == -1) { 495 if(SYM.uploader_autostart) { 496 SYM.uploader.start(); 497 } 498 } else { 499 $('#filelist').append('<p class="error">'+msg['INVALID_EXTENSION']+'</p>'); 500 } 501 up.refresh();
501 // Reposition Flash/Silverlight 502 503 SYM.uploader.trigger('FilesQueued'); 504 }); 505 506 SYM.uploader.bind('UploadProgress', function(up, file) { 507 $("#bar").css("display", "block"); 508 $("#bar").css("width", file.percent + "%"); 509 $("#percent").html(file.percent + "%"); 510 }); 511 512 SYM.uploader.bind('Error', function(up, err) { 513 var code_to_msg = ''; 514 switch(err.code) { 515 case -600: 516 code_to_msg = 'FILE_TOO_BIG'; 517 break; 518 case -601: 519 code_to_msg = 'INVALID_EXTENSION'; 520 break; 521 default: 522 code_to_msg = 'UPLOAD_BASE_ERROR'; 523 break; 524 } 525 SYM.reset_plupload_input(); 526 $('#filelist .error').remove(); 527 $('#filelist').append('<p class="error">'+msg[code_to_msg]+'</p>'); 528 529 up.refresh(); // Reposition Flash/Silverlight 530 }); 531 532 SYM.uploader.bind('FileUploaded', function(up, file, response) { 533 var data = JSON.parse(response.response); 534 $('#upload').val(data.MSG).trigger('change'); 535 }); 536 537 if ('function' === typeof callback) callback(null, SYM.uploader); 538 }, 539 540 pluploader_init_alt: function(properties, callback) { 541 const debug = false; 542 543 let suffix = 544 'undefined' != typeof properties.alternative 545 ? properties.alternative 546 : 'alt'; 547 548 const file_selector = plupload_input_file_default_selector + '_' + suffix; 549 const pick_files_selector = '#pickfiles_' + suffix; 550 const uploader_identifier = 'uploader_' + suffix; 551 552 if(!$(file_selector).length){ 553 if ('function' === typeof callback) callback('No files found'); 554 return null; 555 } 556 557 if (!SYM.uploader_alt) { 558 SYM.uploader_alt = {}; 559 } 560 561 if (SYM.uploader_alt[uploader_identifier]) { 562 try { 563 SYM.uploader_alt[uploader_identifier].destroy(); 564 if (debug) console.log('uploader destroyed', SYM.uploader_alt[uploader_identifier]); 565 SYM.uploader_alt[uploader_identifier] = null; 566 if (debug) console.log('uploader should be null by now', SYM.uploader_alt[uploader_identifier]); 567 } catch (e) { 568 console.error(e); 569 if ('function' === typeof callback) callback(e); 570 } 571 if (debug) console.log('pluploader_init_multi destroyed'); 572 $(file_selector).off(); 573 if ($(pick_files_selector).length) { 574 $(pick_files_selector).each((i, o) => { 575 const clone = $(o).clone(); 576 $(o).replaceWith(clone); 577 }); 578 } 579 if (debug) console.log('input files and button pickfiles events unbinded', file_selector, pick_files_selector); 580 } 581 582 $(file_selector).focus(function(){ 583 $(pick_files_selector).focus(); 584 }); 585 586 if(typeof properties.autostart != 'undefined') { 587 SYM.uploader_alt_autostart = properties.autostart; 588 delete properties.autostart; 589 } 590 591 properties = $.extend({}, plupload_default_options, { 592 browse_button : 'pickfiles_'+suffix, 593 container : 'container_'+suffix, 594 }, properties); 595 596 try { 597 SYM.uploader_alt[uploader_identifier] = new plupload.Uploader(properties); 598 SYM.uploader_alt[uploader_identifier].init(); 599 } catch (err) { 600 console.error(err); 601 if ('function' === typeof callback) callback(err); 602 return; 603 } 604 605 SYM.uploader_alt[uploader_identifier].bind('FilesAdded', function(up, files) { 606 // clean previous errors 607 SYM.reset_plupload_alt_input({alternative: suffix}); 608 $('#filelist_'+suffix+' .error').remove(); 609 // Limit to 1 file, the last added 610 var file_ext = ''; 611 if (SYM.uploader_alt[uploader_identifier].files.length > 1) { 612 // keep in the array just the last file 613 SYM.uploader_alt[uploader_identifier].files.splice(0,1); 614 SYM.uploader_alt[uploader_identifier].stop(); 615 } 616 $(file_selector).val(files[0].name + ' (' + plupload.formatSize(files[0].size)+ ') '); 617 // Catch the file extension. If there is none, file_ext will be null. If there is one, it will be on the position 1 of an array. 618 file_ext = files[0].name.match(/\.([\w\d]+)$/); 619 // Forbidden extensions 620 var extensions = ['', 'exe', 'com', 'pif', 'src', 'dot', 'vbs', 'php', 'sh']; 621 // Tweak the value of the variable for easier comparison 622 if (file_ext == null) { 623 file_ext = ''; 624 } else file_ext = file_ext[1]; 625 // If the extension is not found, upload 626 if (extensions.indexOf(file_ext) == -1) { 627 if(SYM.uploader_alt_autostart) { 628 SYM.uploader_alt[uploader_identifier].start(); 629 } 630 } else { 631 $('#filelist_'+suffix).append('<p class="error">'+msg['INVALID_EXTENSION']+'</p>'); 632 } 633 up.refresh();
633 // Reposition Flash/Silverlight 634 635 SYM.uploader_alt[uploader_identifier].trigger('FilesQueued'); 636 }); 637 638 SYM.uploader_alt[uploader_identifier].bind('UploadProgress', function(up, file) { 639 $("#bar_"+suffix).css("display", "block"); 640 $("#bar_"+suffix).css("width", file.percent + "%"); 641 $("#percent_"+suffix).html(file.percent + "%"); 642 }); 643 644 SYM.uploader_alt[uploader_identifier].bind('Error', function(up, err) { 645 var code_to_msg = ''; 646 switch(err.code) { 647 case -600: 648 code_to_msg = 'FILE_TOO_BIG'; 649 break; 650 case -601: 651 code_to_msg = 'INVALID_EXTENSION'; 652 break; 653 default: 654 code_to_msg = 'UPLOAD_BASE_ERROR'; 655 break; 656 } 657 SYM.reset_plupload_alt_input({alternative: suffix}); 658 $('#filelist_'+suffix+' .error').remove(); 659 $('#filelist_'+suffix).append('<p class="error">'+msg[code_to_msg]+'</p>'); 660 661 up.refresh(); // Reposition Flash/Silverlight 662 }); 663 664 SYM.uploader_alt[uploader_identifier].bind('FileUploaded', function(up, file, response) { 665 var data = JSON.parse(response.response); 666 $('#filelist_' + suffix + ' .error').remove(); 667 if (data.STAT == 'OK') { 668 $('#upload_' + suffix).val(data.MSG); 669 $('#field_' + suffix + '_file').val(data.MSG); 670 } else { 671 $('#upload_' + suffix).val(''); 672 $('#field_' + suffix + '_file').val(''); 673 674 $("#bar_" + suffix).css('width', '0%'); 675 $("#percent_" + suffix).html(''); 676 $('#filelist_' + suffix).append('<p class="error">' + data.MSG + '</p>'); // plain English 677 } 678 }); 679 680 if ('function' === typeof callback) { 681 callback(null, SYM.uploader_alt[uploader_identifier]); 682 } 683 }, 684 685 pluploader_init_multi: function(properties, callback) { 686 const debug = false; 687 const file_selector = '.input_file'; 688 const pick_files_selector = plupload_pick_file_default_selector; 689 690 if (!$(file_selector).length) { 691 // Nothing to do. 692 return; 693 } 694 695 const first_uploader_id = $(file_selector).eq(0).data('field'); 696 if (debug) console.log('Initialize pluploader_init_multi = ', first_uploader_id); 697 698 if (SYM.uploader_multi != null) { 699 try { 700 SYM.uploader_multi.destroy(); 701 if (debug) console.log('uploader destroyed', SYM.uploader_multi); 702 SYM.uploader_multi = null; 703 if (debug) console.log('uploader should be null by now', SYM.uploader_multi); 704 } catch (e) { console.log(e); } 705 if (debug) console.log('pluploader_init_multi destroyed'); 706 $(file_selector).off(); 707 if ($(pick_files_selector).length) { 708 $(pick_files_selector).each((i, o) => { 709 const clone = $(o).clone(); 710 $(o).replaceWith(clone); 711 }); 712 } 713 if (debug) console.log('input files and button pickfiles events unbinded', file_selector, pick_files_selector); 714 } 715 716 // prepare buttons for picking up files 717 $(file_selector) 718 .off('focus') 719 .on('focus', function(){ 720 if (debug) console.log('Focus = ', $(this)); 721 $('#pickfiles_'+$(this).data('field')).focus(); 722 }); 723 724 $(pick_files_selector) 725 .off('mouseenter') 726 .on('mouseenter', function(){ 727 SYM.uploader_multi_id = $(this).data('field'); 728 if (debug) console.log('Set uploader = ' + SYM.uploader_multi_id); 729 }) 730 .off('click') 731 .on('click', function(ev){ 732 ev.preventDefault(); 733 ev.stopPropagation(); 734 735 const current_uploader_id = $(this).data('field'); 736 737 if(current_uploader_id != first_uploader_id){ 738 const first_pick_file_selector = '#pickfiles_' + first_uploader_id; 739 $(first_pick_file_selector)[0].click(); 740 if (debug) console.log('Click to (' + current_uploader_id + ') = ' + '#pickfiles_' + first_uploader_id + ' / ' + first_uploader_id); 741 return false; 742 } 743 744 return false; 745 }); 746 747 // IE Flash fix 748 if ($('.reg_form_table td.uploader').length) { 749 $('.reg_form_table td.uploader') 750 .off('hover') 751 .hover(function(){ 752 SYM.uploader_multi_id = $(this).find(pick_files_selector).attr('data-field'); 753 if (debug) console.log('Set uploader flashfix = ' + SYM.uploader_multi_id); 754 }); 755 } 756 757 // prepare uploader instance 758 properties = $.extend({}, plupload_default_options, { 759 browse_button : 'pickfiles_'+first_uploader_id, 760 container : 'container_'+first_uploader_id, 761 multi_selection: false 762 }, properties); 763 764 try { 765 SYM.uploader_multi = new plupload.Uploader(properties); 766 SYM.uploader_multi.init(); 767 } catch (e) { 768 console.error(e); 769 } 770 771 SYM.uploader_multi.bind('Error', function(up, err) { 772 var code_to_msg = ''; 773 switch(err.code) { 774 case -600: 775 code_to_msg = 'FILE_TOO_BIG'; 776 break; 777 case -601: 778 code_to_msg = 'INVALID_EXTENSION'; 779 break; 780 default: 781 code_to_msg = 'UPLOAD_BASE_ERROR'; 782 break; 783 } 784 $('#container_' + SYM.uploader_multi_id).find('.error').remove(); 785 $('#container_' + SYM.uploader_multi_id).append('<p class="error">'+msg[code_to_msg]+'</p>'); 786 787 up.refresh();
787 // Reposition Flash/Silverlight 788 }); 789 790 SYM.uploader_multi.bind('FilesAdded', function(up, files) { 791 // IE fails to set up 792 SYM.uploader_multi_id = SYM.uploader_multi_id || $(file_selector).eq(0).data('field'); 793 if (debug) console.log('FilesAdded to = ' + SYM.uploader_multi_id); 794 // reset previous error message 795 $('#container_' + SYM.uploader_multi_id).find('.error').remove(); 796 // keep this file 797 var last_file = files[files.length-1]; 798 last_file.field_id = SYM.uploader_multi_id; 799 // check for forbidden extensions 800 var extensions = ['', 'exe', 'com', 'pif', 'src', 'dot', 'vbs', 'php', 'sh']; 801 var file_ext = last_file.name.match(/\.([\w\d]+)$/); 802 if (file_ext == null) { 803 file_ext = ''; 804 } else { 805 file_ext = file_ext[1]; 806 } 807 if (extensions.indexOf(file_ext) == -1) { 808 // remove previous file (omitting last one) 809 var indexes_to_remove = []; 810 $.each(SYM.uploader_multi.files, function(i, file) { 811 if(last_file.id != file.id) { 812 if(file.field_id == SYM.uploader_multi_id) { 813 indexes_to_remove.push(i); 814 } 815 } 816 }); 817 $.each(indexes_to_remove, function(i, the_index) { 818 SYM.uploader_multi.files.splice(the_index, 1); 819 }); 820 $('#field_' + SYM.uploader_multi_id).val(last_file.name); 821 // reset progress bar and uploaded file for this new file 822 $('#container_' + SYM.uploader_multi_id).find('.bar').css('width','0%'); 823 $('#field_' + SYM.uploader_multi_id + '_file').val(''); 824 }else{ 825 $('#container_' + SYM.uploader_multi_id).append('<p class="error">'+msg['INVALID_EXTENSION']+'</p>'); 826 up.files.pop(); 827 } 828 829 up.refresh();
829 // Reposition Flash/Silverlight 830 831 SYM.uploader_multi.trigger('FilesQueued'); 832 }); 833 834 SYM.uploader_multi.bind('UploadProgress', function(up, file) { 835 if (debug) console.log('UploadProgress to = ' + '#container_' + file.field_id, up, file); 836 $('#container_' + file.field_id).find('.bar').css('width', file.percent + '%'); 837 }); 838 839 SYM.uploader_multi.bind('FileUploaded', function(up, file, response) { 840 // /_files/plupload/deobfuscateString(data.MSG) 841 var data = JSON.parse(response.response); 842 843 if (debug) console.log('FileUploaded to = ', up, file, response); 844 845 if(data.STAT == 'OK') { 846 $('#field_' + file.field_id + '_file').val(data.MSG); 847 } else { 848 $('#field_' + file.field_id).val(''); 849 $('#container_' + file.field_id).find('.bar').css('width','0%'); 850 $('#container_' + file.field_id).append('<p class="error">'+data.MSG+'</p>'); // plain English 851 } 852 }); 853 854 if (debug) console.log('Uploader queue must exist by now', SYM.uploader_multi._queue); 855 856 if (typeof callback == 'function') { 857 callback(null, SYM.uploader_multi); 858 } 859 }, 860 861 reset_plupload_input: function() { 862 $(plupload_input_file_default_selector).val(''); 863 $("#bar").css("width", "0%"); 864 $("#percent").html(""); 865 $('#upload').val(''); 866 }, 867 868 reset_plupload_alt_input: function(properties) { 869 let suffix = 870 'undefined' !== typeof properties.alternative 871 ? properties.alternative 872 : "alt"; 873 874 const file_selector = plupload_input_file_default_selector + '_' + suffix; 875 876 $(file_selector).val(''); 877 $("#bar_"+suffix).css("width", "0%"); 878 $("#percent_"+suffix).html(""); 879 $('#upload_'+suffix).val(''); 880 }, 881 882 multilang_warning_effects: function() { 883 if ($('#multilang_warning_overlay').length) { 884 var availableWidth = parseInt(($(window).width() - $('#user_content').width()) / 2)-45; 885 var maxWidth = $('#multilang_warning_overlay').width(); 886 var minWidth = 160; 887 while (maxWidth > availableWidth) maxWidth--; 888 if (maxWidth < minWidth) maxWidth = minWidth; 889 $('#multilang_warning_overlay').css('width', maxWidth+'px'); 890 891 var min = 10; 892 var war = $('#multilang_warning_overlay').height(); 893 var max = $('#right_column').height()-(war+min+20); 894 895 $(window).scroll(function(e){ 896 var scrollto = window.pageYOffset + min; 897 max = $('#right_column').height()-(war+min+20); // refresh max because right_column is mutable 898 if (scrollto > max) scrollto = max; 899 if (scrollto < min) scrollto = min; 900 $('#multilang_warning_overlay').animate({marginTop: scrollto+'px'}, {duration: 500, queue: false}); 901 }); 902 $('#multilang_overlay_close').click(function(){ 903 $(window).unbind('scroll'); // unbind 904 $('#multilang_warning_overlay').remove(); 905 }); 906 } 907 }, 908 909 // Enable multilang button "Copy Original Content" 910 i18n_reset: function(table){ 911 msgbox_confirm(msg.YOU_SURE, msg.LOOSE_TRANSLATION, function(result){ 912 if (result == true){ 913 var ref_id = 0; 914 var refresh_function = ''; 915 // delete translation 916 switch(table){ 917 case 'events.id.welcome_msg': 918 case 'events.id.sponsors': 919 case 'events.id.speakers': 920 case 'events.id.program': 921 case 'events.id.place_detail': 922 case 'events.id.title,description': 923 ref_id = $('#event_id').val(); 924 refresh_function = 'location.reload();'; 925 break; 926 case 'event_schedule_i18n': 927 ref_id = $('#dateid').val(); 928 refresh_function = 'create_agenda();$("button.cancel").click();'; 929 break; 930 case 'event_videos_i18n': 931 ref_id = $('#video_id').val(); 932 refresh_function = 'show_videos(1);$("#form_add_video li.edit_buttons button.cancel").click();'; 933 break; 934 case 'event_sponsors_i18n': 935 ref_id = $('#patro_id').val(); 936 refresh_function = 'reload_patros();$("#cancel_update_patro").click();'; 937 break; 938 case 'event_speakers_i18n': 939 ref_id = $('#speaker_id').val(); 940 refresh_function = 'reload_speakers();$("#cancel_update_speaker").click();'; 941 break; 942 case 'event_sections_i18n': 943 ref_id = section_id; 944 refresh_function = 'get_sections();cancel_edition();'; 945 break; 946 case 'event_news_i18n': 947 ref_id = SYM.I18N.new_id; 948 refresh_function = 'reload_news();'; 949 break; 950 case 'event_metadata_i18n': 951 ref_id = $('#eventid').val(); 952 refresh_function = 'location.reload();'; 953 break; 954 case 'event_dates_i18n': 955 ref_id = $('#date_id').val(); 956 refresh_function = 'get_dates(1);$(".button_wrapper button.cancel").click();'; 957 break; 958 case 'papers_categories_i18n': 959 ref_id = $('#inp_identifier').val(); 960 refresh_function = 'SYM.PAPERS_CATEGORIES.load_categories(1);$("#frm_papers_categories button.btn_cancel").click();'; 961 break; 962 case 'events.id.lopd_template': 963 ref_id = $('#event_id').val(); 964 refresh_function = 'SYM.EVENT_ATTENDING_CONFIG.load_lopd();'; 965 break; 966 } 967 if(ref_id){ 968 $.post(noCache('/user_events/reset_translation'), { 969 table: table, 970 lang_key: _LANGUAGE, 971 ref_id: ref_id 972 }, function(response){ 973 if(response.stat == 'OK'){ 974 // refresh contents 975 eval(refresh_function); 976 } 977 }); 978 } 979 } 980 }); 981 }, 982 983 check_dirty_form: function () { 984 if (typeof CKEDITOR != "undefined") { 985 var dirty = false;
986 $.each(CKEDITOR.instances, function(){dirty = (dirty || this.checkDirty())}); 987 } 988 if (($('#drtyfrm').length && $('#drtyfrm').val() == 'true') || dirty) { 989 return msg['DIRTY_FORM']; 990 } 991 return false; 992 }, 993 994 // Add this method on document ready in order to show a warning if any form input is dirty before unload 995 dirty_forms_warning_setup: function(parent) { 996 // console.log('setup'); 997 if (typeof parent == "undefined") { 998 parent = 'body'; 999 } 1000 1001 $(window).bind("beforeunload",function(event){ 1002 SYM.check_dirty_form(); 1003 }); 1004 1005 $('select, input', parent).change(function(){ 1006 // console.log('change'); 1007 if (!$('#drtyfrm').length) { 1008 $(parent).append('<input type="hidden" id="drtyfrm" value="true" />'); 1009 } 1010 }); 1011 1012 $('input, textarea', parent).keyup(function(){ 1013 // console.log('keyup'); 1014 if (!$('#drtyfrm').length) { 1015 $(parent).append('<input type="hidden" id="drtyfrm" value="true" />'); 1016 } 1017 }); 1018 1019 }, 1020 1021 // Manually mark a form as dirty 1022 dirty_forms_manual_marker: function(selector) { 1023 if (!$('#drtyfrm').length) { 1024 $(selector).append('<input type="hidden" id="drtyfrm" value="true" />'); 1025 } 1026 }, 1027 1028 // Add this method on every form callback to clean the previously set flag 1029 dirty_forms_cleanup: function() { 1030 $('#drtyfrm').remove(); 1031 if (typeof CKEDITOR != "undefined") { 1032 $.each(CKEDITOR.instances, function(){this.resetDirty()}); 1033 } 1034 }, 1035 1036 /** 1037 * Formats a JavaScript Date object into a string to use with our datepicker 1038 * @param {JavaScript.Date} date The date object to be processed 1039 * @param {string} dateformat The format of the date string, for example: yyyy-MM-dd or MM/dd/yyyy-MM-dd 1040 * @return {string} The string to use as the value of the input, for example: 2013-10-18 1041 */ 1042 format_date: function(date, dateformat) { 1043 if (typeof dateformat == 'undefined') { 1044 dateformat = (typeof msg.yavdateformat != 'undefined')?msg.yavdateformat:''; 1045 } 1046 1047 dateformat = dateformat.replace('dd', ('00'+date.getDate()).slice(-2)); 1048 dateformat = dateformat.replace('MM', ('00'+(date.getMonth()+1)).slice(-2)); 1049 dateformat = dateformat.replace('yyyy', date.getFullYear()); 1050 dateformat = dateformat.replace('HH', ('00'+date.getHours()).slice(-2)); 1051 dateformat = dateformat.replace('ii', ('00'+date.getMinutes()).slice(-2));
1052 dateformat = dateformat.replace('ss', ('00'+date.getSeconds()).slice(-2)); 1053 1054 return dateformat; 1055 }, 1056 1057 /** 1058 * Builds a JavaScript Date object parsing a string 1059 * @param {string} date The date to be parsed 1060 * @param {string} dateformat A template to parse the date, for example: yyyy-MM-dd HH:ii:ss 1061 * @param {string} gmt The timezone the date is at, only numeric. For example: +0000 (GMT+0) or +0200 (GMT+2) 1062 * @return {JavaScript.Date} The date object translated to the browser timezone 1063 */ 1064 build_date: function(date, dateformat, gmt) { 1065 if (typeof dateformat == 'undefined') { 1066 dateformat = (typeof msg.yavdateformat != 'undefined')?msg.yavdateformat:''; 1067 } 1068 1069 if (date == null || date.length == 0) return new Date(0); 1070 1071 var seconds, minutes, hours, day, month, year; 1072 day = date.substr(dateformat.indexOf('dd'),2); 1073 month = date.substr(dateformat.indexOf('MM'),2); 1074 year = date.substr(dateformat.indexOf('yyyy'),4); 1075 1076 if (dateformat.indexOf('H')>=0) { 1077 hours = date.substr(dateformat.indexOf('HH'),2); 1078 } else hours = 0; 1079 if (dateformat.indexOf('i')>=0) { 1080 minutes = date.substr(dateformat.indexOf('ii'),2); 1081 } else minutes = 0; 1082 if (dateformat.indexOf('s')>=0) { 1083 seconds = date.substr(dateformat.indexOf('ss'),2); 1084 } else seconds = 0; 1085 1086 month = month-1; 1087 if (month < 10) month = '0'+month; 1088 1089 if (typeof gmt == 'undefined') { 1090 gmt = '+0000'; 1091 } 1092 var new_date = new Date(year, month, day, hours, minutes, seconds), 1093 date_str = new_date.toDateString()+' '+new_date.toTimeString().substr(0,8); 1094 return new Date(date_str+' '+gmt); 1095 }, 1096 1097 download_file: function(url, filename) { 1098 if (typeof filename == 'undefined') { 1099 filename = url.substr(url.lastIndexOf('/')+1); 1100 } 1101 var anchor = document.createElement('a'); 1102 anchor.setAttribute('href', url); 1103 anchor.setAttribute('download', filename); 1104 1105 var ev = document.createEvent("MouseEvents"); 1106 ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 1107 anchor.dispatchEvent(ev); 1108 }, 1109 1110 compare_timezone_offsets: function() { 1111 if (typeof _TZ_OFFSET != 'undefined' && _TZ_OFFSET != -1) { 1112 var d = new Date(); 1113 return (_TZ_OFFSET != (d.getTimezoneOffset()*60)); 1114 } 1115 return false; 1116 }, 1117 1118 printpdf_task: function(local_url, local_params, print_folder, print_file, success, failure) { 1119 var request_params = local_params || {}; 1120 $.post(noCache(local_url), request_params, 1121 function(response) { 1122 if (response.stat == 'OK') { 1123 var request_folder = print_folder || response.path; 1124 var request_file = print_file || response.filename; 1125 /* var remainingIntervalRetries = 15; */ 1126 var retryTimeout = 2000; 1127 var interval = setInterval(function(){ 1128 console.log({file_path:request_folder+request_file}); 1129 $.post(noCache('/user_events/pdfprinter_file_status'), 1130 { 1131 file_path:request_folder+request_file 1132 }, 1133 function(response){ 1134 console.log(response); 1135 if (response.status) { 1136 clearInterval(interval); 1137 SYM.download_file('/user_events/pdfprinter_file_download/'+request_folder.replace(/\//g,'@')+request_file, request_file); 1138 if (typeof success == 'function') success(); 1139 } 1140 } 1141 ); 1142 /* // Stop the retries on timeout. 1143 if (--remainingIntervalRetries <= 0) { 1144 clearInterval(interval); 1145 msgbox_alert(_msg('SERVER_ERROR', 'Error en el servidor')); 1146 } */ 1147 }, retryTimeout); 1148 } else { 1149 if (typeof failure == 'function') failure(); 1150 } 1151 } 1152 ); 1153 }, 1154 1155 remove_errors: function(){ 1156 $('p.error').remove(); 1157 }, 1158 1159 add_errors: function(msg, dom_element){ 1160 $('<p></p>').addClass('error').text(msg).insertAfter(dom_element); 1161 }, 1162 1163 validateEmail(email) { 1164 var re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; 1165 return re.test(String(email).toLowerCase()); 1166 }, 1167 1168 validateURL(url) { 1169 var re = /^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/i; 1170 return re.test(url); 1171 }, 1172 1173 fetchFile(url, data, filename, onError, onSuccess) { 1174 const p = Object.assign({}, data); 1175 const formData = new FormData(); 1176 const noCacheUrl = noCache(url); 1177 for (let i in p) { 1178 if (p.hasOwnProperty(i)) { 1179 formData.append(i, p[i]); 1180 } 1181 } 1182 const params = { 1183 method: 'POST', 1184 body: formData 1185 }; 1186 console.log('fetchFile', params, JSON.stringify(Object.fromEntries(formData))); 1187 fetch(noCacheUrl, params).then(function (response) { 1188 console.log('fetchFileResponse', response); 1189 if (response.ok) { 1190 // Check response type 1191 // if json, check controlled error response 1192 if (response.headers.get('Content-Type') == 'application/json') { 1193 response.json().then(json => { 1194 if (json.stat !== 'OK') { 1195 if (typeof onError == 'function') { 1196 onError(json.msg) 1197 } 1198 } 1199 }).catch(function (err) { 1200 console.error('Reading json error', err); 1201 // Check errors on request 1202 if (typeof onError == 'function') { 1203 onError(err.message); 1204 } 1205 }); 1206 } else { 1207 // if blob, check file download 1208 response.blob().then((blob) => { 1209 const headerContentDisposition = response.headers.get('Content-Disposition'); 1210 const serverFilename = headerContentDisposition.match(/filename="(.+)"/)[1]; 1211 const theFilename = filename || serverFilename; 1212 SYM.onDownloadBlob(blob, theFilename); 1213 if (typeof onSuccess == 'function') { 1214 onSuccess(blob, theFilename); 1215 } 1216 }).catch(function (err) { 1217 console.error('Getting blob error', err); 1218 // Check errors on request 1219 if (typeof onError == 'function') { 1220 onError(err.message); 1221 } 1222 }); 1223 } 1224 } else { 1225 if (typeof onError == 'function') { 1226 onError(response.statusText); 1227 } 1228 } 1229 }).catch(function (err) { 1230 console.error('fetchFileError', err); 1231 // Check errors on request 1232 if (typeof onError == 'function') { 1233 onError(err.message); 1234 } 1235 }); 1236 }, 1237 1238 fetchFileGet(url, filename, onError, onSuccess) { 1239 const noCacheUrl = noCache(url); 1240 console.log('fetchFileGet', noCacheUrl); 1241 fetch(noCacheUrl).then(function (response) { 1242 console.log('fetchFileResponse', response); 1243 if (response.ok) { 1244 // Check response type 1245 // if json, check controlled error response 1246 if (response.headers.get('Content-Type') == 'application/json') { 1247 response.json().then(json => { 1248 if (json.stat !== 'OK') { 1249 if (typeof onError == 'function') { 1250 onError(json.msg) 1251 } 1252 } 1253 }).catch(function (err) { 1254 console.error('Reading json error', err); 1255 // Check errors on request 1256 if (typeof onError == 'function') { 1257 onError(err.message); 1258 } 1259 }); 1260 } else { 1261 // if blob, check file download 1262 response.blob().then((blob) => { 1263 const headerContentDisposition = response.headers.get('Content-Disposition'); 1264 const serverFilename = headerContentDisposition.match(/filename="(.+)"/)[1]; 1265 const theFilename = filename || serverFilename; 1266 SYM.onDownloadBlob(blob, theFilename); 1267 if (typeof onSuccess == 'function') { 1268 onSuccess(blob, theFilename); 1269 } 1270 }).catch(function (err) { 1271 console.error('Getting blob error', err); 1272 // Check errors on request 1273 if (typeof onError == 'function') { 1274 onError(err.message); 1275 } 1276 }); 1277 } 1278 } else { 1279 if (typeof onError == 'function') { 1280 onError(response.statusText); 1281 } 1282 } 1283 }).catch(function (err) { 1284 console.error('fetchFileError', err); 1285 // Check errors on request 1286 if (typeof onError == 'function') { 1287 onError(err.message); 1288 } 1289 }); 1290 }, 1291 1292 onDownloadBlob: function (blob, filename) { 1293 // Create blob to link and download. 1294 const finalFilename = filename; 1295 const objURL = window.URL.createObjectURL(blob); 1296 let link = document.createElement('a'); 1297 link.href = objURL; 1298 link.download = finalFilename; 1299 link.click(); 1300 } 1301 1302 }; 1303 1304}()); 1305 1306SYM.FORM = window.SYM.FORM || {}; 1307SYM.FORM = $.extend(SYM.FORM, function ($) { 1308 var METHODS = { 1309 private: { 1310 /** 1311 * initInputCounter 1312 * - Requires the $dom object to have the following data attributes: 1313 * - data-text-count: Type of element to be counted [chars|words] (words by default)
1314 * - data-text-count-for: Input to check the length of 1315 * - data-max: Maximum number of 'type' to count 1316 * - data-text: Some text to add after the number of remaining items 1317 * @param {Object} $dom - The jQuery object of the dom holding the counter 1318 */ 1319 initInputCounter: function ($dom) { 1320 var type = $dom.attr('data-text-count'); 1321 var input = '#' + $dom.attr('data-text-count-for'); 1322 var max = $dom.attr('data-max'); 1323 var text = $dom.attr('data-text'); 1324 $(input).on('keyup', function (ev) { 1325 var count = type == 'chars' ? $(this).val().length : 1326 /* type == 'words' */$(this).val().split(' ') 1327 .filter(function (n) { return n != '' }) 1328 .length; 1329 var remaining = (max - count); 1330 $dom.html(remaining + ' ' + text); 1331 $dom.toggleClass('input-group__subtext--warning', remaining < 0); 1332 }); 1333 $(input).trigger('keyup'); 1334 } 1335 }, 1336 public: { 1337 initInputCounter: function ($selector) { 1338 var $selection = $selector || '.text-count-input'; 1339 $($selection).each(function (index, object) { METHODS.private.initInputCounter($(object)); }); 1340 } 1341 } 1342 }; 1343 return METHODS.public; 1344}(jQuery)); 1345 1346// Solves the Cache problem using AJAX calls 1347 1348function noCache(uri) { 1349 return uri.concat(/\?/.test(uri) ? '&' : '?', 'noCache=', (new Date).getTime(), '.', Math.random() * 1234567); 1350} 1351 1352// String to JSON object 1353 1354function evalJson(src) { 1355 var pattern = /^\(.+\)$/gi; // Add parentheses if needed 1356 if (pattern.test(src) == false) { 1357 src = '(' + src + ')'; 1358 } 1359 1360 var data = ''; 1361 if (typeof JSON == 'object' && JSON.parse) { 1362 try { 1363 data = JSON.parse(src); 1364 } 1365 catch (e) { 1366 try { 1367 data = eval(src); 1368 } 1369 catch (e) { 1370 data = src; 1371 } 1372 } 1373 1374 } 1375 else { 1376 data = eval(src); 1377 } 1378 1379 if (typeof data == 'object') { 1380 return data 1381 } 1382 else { 1383 return { 1384 stat: 'ERROR', 1385 msg: 'ERROR' 1386 }; 1387 } 1388} 1389 1390// implement JSON.stringify serialization 1391JSON.stringify = JSON.stringify || function (obj) { 1392 var t = typeof (obj); 1393 if (t != "object" || obj === null) { 1394 // simple data type 1395 if (t == "string") obj = '"'+obj+'"'; 1396 return String(obj); 1397 } else { 1398 // recurse array or object 1399 var n, v, json = [], arr = (obj && obj.constructor == Array); 1400 for (n in obj) { 1401 v = obj[n]; t = typeof(v); 1402 if (t == "string") v = '"'+v+'"'; 1403 else if (t == "object" && v !== null) v = JSON.stringify(v); 1404 json.push((arr ? "" : '"' + n + '":') + String(v)); 1405 } 1406 return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); 1407 } 1408}; 1409// implement JSON.parse de-serialization 1410JSON.parse = JSON.parse || function (str) { 1411 if (str === "") str = '""'; 1412 eval("var p=" + str + ";"); 1413 return p; 1414}; 1415 1416// Function to delay keyup event, to wait for the last one 1417var delay = (function() { 1418 var timer = 0; 1419 return function(callback, ms) { 1420 clearTimeout (timer); 1421 timer = setTimeout(callback, ms); 1422 }; 1423})(); 1424 1425function htmlentities(string, quote_style) { 1426 // Convert all applicable characters to HTML entities 1427 // 1428 // version: 1004.2314 1429 // discuss at: http://phpjs.org/functions/htmlentities // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 1430 // + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 1431 // + improved by: nobbler 1432 // + tweaked by: Jack 1433 // + bugfixed by: Onno Marsman // + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 1434 // + bugfixed by: Brett Zamir (http://brett-zamir.me) 1435 // + input by: Ratheous 1436 // - depends on: get_html_translation_table 1437 // * example 1: htmlentities('Kevin & van Zonneveld'); // * returns 1: 'Kevin & van Zonneveld' 1438 // * example 2: htmlentities("foo'bar","ENT_QUOTES"); 1439 // * returns 2: 'foo'bar' 1440 var hash_map = {}, 1441 symbol = '', 1442 tmp_str = '', 1443 entity = ''; 1444 tmp_str = string.toString(); 1445 if (false === (hash_map = this.get_html_translation_table('HTML_ENTITIES', quote_style))) { 1446 return false; 1447 } 1448 hash_map["'"] = '''; 1449 for (symbol in hash_map) { 1450 entity = hash_map[symbol]; 1451 tmp_str = tmp_str.split(symbol).join(entity); 1452 } 1453 return tmp_str; 1454} 1455 1456function base64_encode(data) { 1457 var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
1457+/="; 1458 var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, 1459 ac = 0, 1460 enc = "", 1461 tmp_arr = []; 1462 if (!data) { 1463 return data 1464 } 1465 do { 1466 o1 = data.charCodeAt(i++); 1467 o2 = data.charCodeAt(i++); 1468 o3 = data.charCodeAt(i++); 1469 bits = o1 << 16 | o2 << 8 | o3; 1470 h1 = bits >> 18 & 0x3f; 1471 h2 = bits >> 12 & 0x3f; 1472 h3 = bits >> 6 & 0x3f; 1473 h4 = bits & 0x3f; 1474 tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4) 1475 } while (i < data.length); 1476 enc = tmp_arr.join(''); 1477 switch (data.length % 3) { 1478 case 1: 1479 enc = enc.slice(0, -2) + '=='; 1480 break; 1481 case 2: 1482 enc = enc.slice(0, -1) + '='; 1483 break 1484 } 1485 return enc 1486} 1487 1488function base64_decode(input) { 1489 var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 1490 1491 var output = ""; 1492 var chr1, chr2, chr3 = ""; 1493 var enc1, enc2, enc3, enc4 = ""; 1494 var i = 0; 1495 1496 // remove all characters that are not A-Z, a-z, 0-9, +, /, or = 1497 var base64test = /[^A-Za-z0-9\+\/\=]/g; 1498 if (base64test.exec(input)) { 1499 alert("There were invalid base64 characters in the input text.\n" + 1500 "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" + 1501 "Expect errors in decoding."); 1502 } 1503 input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 1504 1505 do { 1506 enc1 = b64.indexOf(input.charAt(i++)); 1507 enc2 = b64.indexOf(input.charAt(i++)); 1508 enc3 = b64.indexOf(input.charAt(i++)); 1509 enc4 = b64.indexOf(input.charAt(i++)); 1510 1511 chr1 = (enc1 << 2) | (enc2 >> 4); 1512 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 1513 chr3 = ((enc3 & 3) << 6) | enc4; 1514 1515 output = output + String.fromCharCode(chr1); 1516 1517 if (enc3 != 64) { 1518 output = output + String.fromCharCode(chr2); 1519 } 1520 if (enc4 != 64) { 1521 output = output + String.fromCharCode(chr3); 1522 } 1523 1524 chr1 = chr2 = chr3 = ""; 1525 enc1 = enc2 = enc3 = enc4 = ""; 1526 1527 } while (i < input.length); 1528 1529 return unescape(output); 1530} 1531 1532function get_html_translation_table(table, quote_style) { 1533 // http://kevin.vanzonneveld.net 1534 // + original by: Philip Peterson 1535 // + revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 1536 // + bugfixed by: noname 1537 // + bugfixed by: Alex 1538 // + bugfixed by: Marco 1539 // + bugfixed by: madipta 1540 // + improved by: KELAN 1541 // + improved by: Brett Zamir (http://brett-zamir.me) 1542 // + bugfixed by: Brett Zamir (http://brett-zamir.me) 1543 // + input by: Frank Forte 1544 // + bugfixed by: T.Wild 1545 // + input by: Ratheous 1546 // % note: It has been decided that we're not going to add global 1547 // % note: dependencies to php.js, meaning the constants are not 1548 // % note: real constants, but strings instead. Integers are also supported if someone 1549 // % note: chooses to create the constants themselves. 1550 // * example 1: get_html_translation_table('HTML_SPECIALCHARS'); 1551 // * returns 1: {'"': '"', '&': '&', '<': '<', '>': '>'} 1552 var entities = {}, 1553 hash_map = {}, 1554 decimal = 0, 1555 symbol = ''; 1556 var constMappingTable = {}, 1557 constMappingQuoteStyle = {}; 1558 var useTable = {}, 1559 useQuoteStyle = {}; 1560 1561 // Translate arguments 1562 constMappingTable[0] = 'HTML_SPECIALCHARS'; 1563 constMappingTable[1] = 'HTML_ENTITIES'; 1564 constMappingQuoteStyle[0] = 'ENT_NOQUOTES'; 1565 constMappingQuoteStyle[2] = 'ENT_COMPAT'; 1566 constMappingQuoteStyle[3] = 'ENT_QUOTES'; 1567 1568 useTable = !isNaN(table) ? constMappingTable[table] : table ? table.toUpperCase() : 'HTML_SPECIALCHARS'; 1569 useQuoteStyle = !isNaN(quote_style) ? constMappingQuoteStyle[quote_style] : quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT'; 1570 1571 if (useTable !== 'HTML_SPECIALCHARS' && useTable !== 'HTML_ENTITIES') { 1572 throw new Error("Table: " + useTable + ' not supported'); 1573 // return false; 1574 } 1575 1576 entities['38'] = '&'; 1577 if (useTable === 'HTML_ENTITIES') { 1578 entities['160'] = ' '; 1579 entities['161'] = '¡'; 1580 entities['162'] = '¢'; 1581 entities['163'] = '£'; 1582 entities['164'] = '¤'; 1583 entities['165'] = '¥'; 1584 entities['166'] = '¦'; 1585 entities['167'] = '§'; 1586 entities['168'] = '¨'; 1587 entities['169'] = '©'; 1588 entities['170'] = 'ª'; 1589 entities['171'] = '«'; 1590 entities['172'] = '¬'; 1591 entities['173'] = '­'; 1592 entities['174'] = '®'; 1593 entities['175'] = '¯';
1594 entities['176'] = '°'; 1595 entities['177'] = '±'; 1596 entities['178'] = '²'; 1597 entities['179'] = '³'; 1598 entities['180'] = '´'; 1599 entities['181'] = 'µ'; 1600 entities['182'] = '¶'; 1601 entities['183'] = '·'; 1602 entities['184'] = '¸'; 1603 entities['185'] = '¹'; 1604 entities['186'] = 'º'; 1605 entities['187'] = '»'; 1606 entities['188'] = '¼'; 1607 entities['189'] = '½'; 1608 entities['190'] = '¾'; 1609 entities['191'] = '¿'; 1610 entities['192'] = 'À'; 1611 entities['193'] = 'Á'; 1612 entities['194'] = 'Â'; 1613 entities['195'] = 'Ã'; 1614 entities['196'] = 'Ä'; 1615 entities['197'] = 'Å'; 1616 entities['198'] = 'Æ'; 1617 entities['199'] = 'Ç'; 1618 entities['200'] = 'È'; 1619 entities['201'] = 'É'; 1620 entities['202'] = 'Ê'; 1621 entities['203'] = 'Ë'; 1622 entities['204'] = 'Ì'; 1623 entities['205'] = 'Í'; 1624 entities['206'] = 'Î'; 1625 entities['207'] = 'Ï'; 1626 entities['208'] = 'Ð'; 1627 entities['209'] = 'Ñ'; 1628 entities['210'] = 'Ò'; 1629 entities['211'] = 'Ó'; 1630 entities['212'] = 'Ô'; 1631 entities['213'] = 'Õ'; 1632 entities['214'] = 'Ö'; 1633 entities['215'] = '×'; 1634 entities['216'] = 'Ø'; 1635 entities['217'] = 'Ù'; 1636 entities['218'] = 'Ú'; 1637 entities['219'] = 'Û'; 1638 entities['220'] = 'Ü'; 1639 entities['221'] = 'Ý'; 1640 entities['222'] = 'Þ'; 1641 entities['223'] = 'ß'; 1642 entities['224'] = 'à'; 1643 entities['225'] = 'á'; 1644 entities['226'] = 'â'; 1645 entities['227'] = 'ã'; 1646 entities['228'] = 'ä'; 1647 entities['229'] = 'å'; 1648 entities['230'] = 'æ'; 1649 entities['231'] = 'ç'; 1650 entities['232'] = 'è'; 1651 entities['233'] = 'é'; 1652 entities['234'] = 'ê'; 1653 entities['235'] = 'ë'; 1654 entities['236'] = 'ì'; 1655 entities['237'] = 'í'; 1656 entities['238'] = 'î'; 1657 entities['239'] = 'ï'; 1658 entities['240'] = 'ð'; 1659 entities['241'] = 'ñ'; 1660 entities['242'] = 'ò'; 1661 entities['243'] = 'ó'; 1662 entities['244'] = 'ô'; 1663 entities['245'] = 'õ'; 1664 entities['246'] = 'ö'; 1665 entities['247'] = '÷'; 1666 entities['248'] = 'ø'; 1667 entities['249'] = 'ù'; 1668 entities['250'] = 'ú'; 1669 entities['251'] = 'û'; 1670 entities['252'] = 'ü'; 1671 entities['253'] = 'ý'; 1672 entities['254'] = 'þ'; 1673 entities['255'] = 'ÿ'; 1674 } 1675 1676 if (useQuoteStyle !== 'ENT_NOQUOTES') { 1677 entities['34'] = '"'; 1678 }
1679 if (useQuoteStyle === 'ENT_QUOTES') { 1680 entities['39'] = '''; 1681 } 1682 entities['60'] = '<'; 1683 entities['62'] = '>'; 1684 1685 1686 // ascii decimals to real symbols 1687 for (decimal in entities) { 1688 symbol = String.fromCharCode(decimal); 1689 hash_map[symbol] = entities[decimal]; 1690 } 1691 1692 return hash_map; 1693} 1694 1695empty = function(mixed_var) { 1696 // !No description available for empty. @php.js developers: Please update the function summary text file. 1697 // 1698 // version: 1006.1915 1699 // discuss at: http://phpjs.org/functions/empty // + original by: Philippe Baumann 1700 // + input by: Onno Marsman 1701 // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 1702 // + input by: LH 1703 // + improved by: Onno Marsman // + improved by: Francesco 1704 // + improved by: Marc Jansen 1705 // + input by: Stoyan Kyosev (http://www.svest.org/) 1706 // * example 1: empty(null); 1707 // * returns 1: true // * example 2: empty(undefined); 1708 // * returns 2: true 1709 // * example 3: empty([]); 1710 // * returns 3: true 1711 // * example 4: empty({}); // * returns 4: true 1712 // * example 5: empty({'aFunc' : function () { alert('humpty'); } }); 1713 // * returns 5: false 1714 var key; 1715 if (mixed_var === "" || mixed_var === 0 || mixed_var === "0" || mixed_var === null || mixed_var === false || typeof mixed_var === 'undefined') { 1716 return true; 1717 } 1718 if (typeof mixed_var == 'object') { 1719 for (key in mixed_var) { 1720 return false; 1721 } 1722 return true; 1723 } 1724 1725 return false; 1726} 1727 1728// Encode UTF8 1729 1730function encode_utf8(s) { 1731 return unescape(encodeURIComponent(s)); 1732} 1733// Decode UTF8 1734 1735function decode_utf8(s) { 1736 return decodeURIComponent(escape(s)); 1737} 1738 1739 1740function enable_tab_height() { 1741 if ($('.tabs', '#right_column').length) { 1742 $('.tabs a', '#right_column').hover(function() { 1743 $('.tabs a.current', '#right_column').css('height', 23); 1744 $(this).css('height', 25); 1745 }, function() { 1746 $(this).css('height', 23); 1747 $('.tabs a.current', '#right_column').css('height', 25); 1748 }); 1749 1750 } 1751} 1752 1753// eliminar duplicados en un array 1754 1755function array_unique(vals) { 1756 var uniques = []; 1757 for (var i = vals.length; i--;) { 1758 var val = vals[i]; 1759 if ($.inArray(val, uniques) === -1) { 1760 uniques.unshift(val); 1761 } 1762 } 1763 return uniques; 1764} 1765 1766//PASS ALL OPTIONS OF A SELECT TO AN ARRAY 1767 1768function optionsToArray(id) { 1769 var result = new Array(); 1770 var i = 0; 1771 $.each($('#' + id + ' option'), function() { 1772 result[i] = $(this).val(); 1773 i++; 1774 }); 1775 return result; 1776} 1777 1778// validate an email using RFC 1779/** 1780 * Validate email applies compliance RFC 5322 1781 * Permits some especial chars 1782 * refers to documentation for more info https://datatracker.ietf.org/doc/html/rfc5322#section-3.4 1783 * @param string email to check 1784 * @returns bool 1785 */ 1786 function validate_email_rfc(email) { 1787 var regexp = /^(?=.{1,64}@)(\w{1,}[!#\$\%\&\'\*\+\-\/=\?\.\^_`\{\|\}~]{0,1})+\w+@((?=.{1,255}\.)((?:[A-Za-z0-9]+(?:(?:[A-Za-z0-9\-]*[A-Za-z0-9])?)\.)+[A-Za-z]{2,})|(((0|[1-9A-Fa-f][0-9A-Fa-f]{0,3}):){0,6}(0|)]))$/i; 1788 return regexp.test(email); 1789}; 1790 1791/*************** YAV DEFAULT CUSTOM RULES **************/ 1792//comprobar que un ckeditor no está vacÃÂo 1793//elimina espacios, saltos de lÃÂnea, etc, antes de validar 1794 1795function ckeditor_required(return_value) { 1796 var ckeditor_value = CKEDITOR.instances[return_value.id].getData(); 1797 if (!$('#ckeditor_aux_div').length) { 1798 $('<div></div>').attr('id', 'ckeditor_aux_div').css('display', 'hidden').appendTo('body'); 1799 } 1800 var aux_div = $('#ckeditor_aux_div'); 1801 aux_div.hide().html(ckeditor_value); 1802 if ($.trim(aux_div.text()).replace(/^\s+/g, '').replace(/\s+$/g, '').length || aux_div.find('img').length) { 1803 return null; 1804 } else { 1805 return return_value; 1806 } 1807} 1808 1809function ckeditor_max_word_count(return_value) { 1810 var ckeditor_value = CKEDITOR.instances[return_value.id].getData(); 1811 var word_count = parseInt($('#'+return_value.id).attr('data-word-limit')); 1812 1813 // Word count is disabled 1814 if (word_count <= 0) return null; 1815 1816 ckeditor_value = ckeditor_value.replace(/<(?:.|\n)*?>/gm, '').replace(/ /gm, ' ').replace(/\s+/gm, ' ').trim(); 1817 word_count = word_count - ckeditor_value.split(' ').length; 1818 1819 if (word_count >= 0) { 1820 return null; 1821 } else { 1822 return return_value; 1823 } 1824} 1825 1826 1827//Validate dates + times 1828 1829function time_travel(return_value) { 1830 var timeTravel = true; 1831 var date_ini_val = $('#date_ini').val(); 1832 var time_ini_val = ($('#init_hour').val() < 10 ? '0' + $('#init_hour').val():$('#init_hour').val()) + $('#
1832init_minute').val(); 1833 var date_end_val = $('#date_end').val(); 1834 var time_end_val = ($('#end_hour').val() < 10 ? '0' + $('#end_hour').val():$('#end_hour').val()) + $('#end_minute').val(); 1835 if(date_ini_val.length >= 10 && date_end_val.length >= 10) { 1836 timeTravel = false; 1837 var date_ini_eng = date_ini_val.match(/(\d{1,2})\/(\d{2})\/(\d{4})/); 1838 var date_ini_esp = date_ini_val.match(/(\d{1,2})\-(\d{2})\-(\d{4})/); 1839 var date_end_eng = date_end_val.match(/(\d{1,2})\/(\d{2})\/(\d{4})/); 1840 var date_end_esp = date_end_val.match(/(\d{1,2})\-(\d{2})\-(\d{4})/); 1841 if(date_ini_eng && date_end_eng) { 1842 timeTravel = parseInt(date_ini_eng[3] + date_ini_eng[1] + date_ini_eng[2] + time_ini_val, 10) > parseInt(date_end_eng[3] + date_end_eng[1] + date_end_eng[2] + time_end_val, 10); 1843 } else if(date_ini_esp && date_end_esp) { 1844 timeTravel = parseInt(date_ini_esp[3] + date_ini_esp[2] + date_ini_esp[1] + time_ini_val, 10) > parseInt(date_end_esp[3] + date_end_esp[2] + date_end_esp[1] + time_end_val, 10); 1845 } else { 1846 timeTravel = true; 1847 } 1848 } 1849 return timeTravel == true ? return_value : null; 1850} 1851 1852 1853//Validate dates 1854 1855function date_travel(return_value) { 1856 var timeTravel = true; 1857 var date_ini_val = $('#date_ini').val(); 1858 var date_end_val = $('#date_end').val(); 1859 var valid_dates = true; 1860 if((!date_ini_val.length || !date_end_val.length) || (date_ini_val.length > 9 && date_end_val.length > 9)) { 1861 timeTravel = false; 1862 //date ini validation 1863 if(date_ini_val.length) { 1864 var date_ini_eng = date_ini_val.match(/(\d{1,2})\/(\d{2})\/(\d{4})/); //english 1865 var date_ini_esp = date_ini_val.match(/(\d{1,2})\-(\d{2})\-(\d{4})/); //spanish 1866 if(!date_ini_eng && !date_ini_esp) { 1867 timeTravel = true; 1868 valid_dates = false; 1869 } 1870 1871 } 1872 //date end validation 1873 if(date_end_val.length && valid_dates) { 1874 var date_end_eng = date_end_val.match(/(\d{1,2})\/(\d{2})\/(\d{4})/); //english 1875 var date_end_esp = date_end_val.match(/(\d{1,2})\-(\d{2})\-(\d{4})/); //spanish 1876 if(!date_end_eng && !date_end_esp) { 1877 timeTravel = true; 1878 valid_dates = false; 1879 } 1880 } 1881 //date ini & date end validation 1882 if(date_ini_val.length && date_end_val.length && valid_dates) { 1883 if(date_ini_eng && date_end_eng) { 1884 timeTravel = parseInt(date_ini_eng[3] + date_ini_eng[1] + date_ini_eng[2], 10) > parseInt(date_end_eng[3] + date_end_eng[1] + date_end_eng[2], 10); 1885 } else if(date_ini_esp && date_end_esp) { 1886 timeTravel = parseInt(date_ini_esp[3] + date_ini_esp[2] + date_ini_esp[1], 10) > parseInt(date_end_esp[3] + date_end_esp[2] + date_end_esp[1], 10); 1887 } else { 1888 timeTravel = true; 1889 valid_dates = false; 1890 } 1891 } 1892 if(!valid_dates) { 1893 return_value.msg = msg.WHEN_TIP; 1894 } 1895 } 1896 return timeTravel == true ? return_value : null; 1897} 1898 1899var valid_url = function(return_value){ 1900 if($("#" + return_value.id).val() == '') { // permitir no requerido 1901 return null; 1902 } 1903 else if (/([-a-zA-Z0-9@:%_\+.~#?&//=]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))/gi.test( $("#" + return_value.id).val() )){ 1904 return null; 1905 }else{ 1906 return return_value; 1907 } 1908} 1909 1910var integer_no_zero = function(return_value){ 1911 if($("#" + return_value.id).val() == '') { // permitir no requerido 1912 return null; 1913 } 1914 else if (/[1-9][0-9]*/.test( $("#" + return_value.id).val() )){ 1915 return null; 1916 }else{ 1917 return return_value; 1918 } 1919} 1920 1921var required_one = function(return_value) { 1922 var parent = $('#'+return_value.id).parent(), 1923 radios = $('input[type="radio"],input[type="checkbox"]', parent), 1924 one_checked = false, 1925 find_attempts = 3; 1926 while (radios.length == 1 && find_attempts > 0) { 1927 find_attempts--; 1928 parent = $(parent).parent(); 1929 radios = $('input[type="radio"],input[type="checkbox"]', parent); 1930 } 1931 for (var i = 0; i < radios.length; i++) { 1932 one_checked = (one_checked || $(radios[i]).is(':checked')); 1933 if(i > 0){ 1934 $(radios[i]).removeClass('required_one'); // avoid multiple error messages 1935 } 1936 } 1937 if (one_checked || ! $('#'+return_value.id).hasClass('required_one')) { 1938 return null; 1939 } else { 1940 return return_value; 1941 } 1942} 1943 1944/** 1945 * The field is required if the author base form required fields are filled. 1946 * If everything goes right the method will return null (no error). 1947 * @version 1.0 1948 * @param return_value string This string defines the error. 1949 * @author <[email protected]> 1950 * @return string|null 1951 */ 1952var required_if_valid_author_insert = function (return_value) { 1953 var field = $('#' + return_value.id); 1954 var authorBlock = field.parents('.author_form').first(); 1955 var authorName = authorBlock.find('.author_name_input'); 1956 var authorEmail = authorBlock.find('.author_email_input'); 1957 var validAuthorInsert = ( 1958 (authorName && authorName.val() && authorName.val() !== '') || 1959 (authorEmail && authorEmail.val() && authorEmail.val() !== '') 1960 ); 1961 1962 if ( ! field || ! field.val() || field.val() == '') { 1963 if (validAuthorInsert) { 1964 return return_value; 1965 } 1966 } 1967 1968 return null; 1969} 1970 1971/** 1972 * The field is required if the author base form required fields are filled. 1973 * If everything goes right the method will return null (no error). 1974 * @version 1.0 1975 * @param return_value string This string defines the error. 1976 * @author <[email protected]> 1977 * @return string|null 1978 */ 1979var required_one_if_valid_author_insert = function (return_value) { 1980 var field = $('#' + return_value.id); 1981 var authorBlock = field.parents('.author_form').first(); 1982 var authorName = authorBlock.find('.author_name_input'); 1983 var authorEmail = authorBlock.find('.author_email_input'); 1984 var validAuthorInsert = ( 1985 (authorName && authorName.val() && authorName.val() !== '') || 1986 (authorEmail && authorEmail.val() && authorEmail.val() !== '') 1987 ); 1988 1989 var parent = field.parent(), 1990 radios = $('input[type="radio"],input[type="checkbox"]', parent), 1991 one_checked = false;
1992 for (var i = 0; i < radios.length; i++) { 1993 one_checked = (one_checked || $(radios[i]).is(':checked')); 1994 if (i > 0) { 1995 $(radios[i]).removeClass('required_one_if_valid_author_insert'); // avoid multiple error messages 1996 } 1997 } 1998 1999 if (one_checked || ! field.hasClass('required_one_if_valid_author_insert')) { 2000 return null; 2001 } else { 2002 return (validAuthorInsert) ? return_value : null; 2003 } 2004} 2005 2006/** 2007 * Validate email applies compliance RFC 5322 2008 * Permits some especial chars 2009 * refers to documentation for more info https://datatracker.ietf.org/doc/html/rfc5322#section-3.4 2010 * @param {*} return_value 2011 * @returns 2012 */ 2013var email_rfc = function (return_value) { 2014 var field = $("#" + return_value.id); 2015 2016 if (field.val() == "") { 2017 return null; 2018 } 2019 2020 return validate_email_rfc(field.val()) ? null : return_value; 2021}; 2022 2023/** 2024 * Rule for YAV to validate only alphanumeric characters 2025 * @param return_value 2026 * @returns {*|null} 2027 */ 2028const only_alphanumeric = function (return_value) { 2029 var field = $("#" + return_value.id); 2030 if (field.val() == "") { 2031 return null; 2032 } 2033 const currentValue = field.val(); 2034 // pattern to validate 2035 var wl_pattern = /(<[^>]+>|=|"|<|>)+/i; 2036 var result = currentValue.match(wl_pattern); 2037 return result ? return_value : null; 2038}; 2039 2040const valid_uri = (returnValue) => { 2041 const urlPattern = new RegExp('^((ft|htt)ps?:\\/\\/)?'+ // protocol 2042 '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name and extension 2043 '((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address 2044 '(\\:\\d+)?'+ // port 2045 '(\\/[-a-z\\d%@_.~+&:]*)*'+ // path 2046 '(\\?[;&a-z\\d%@_.,~+&:=-]*)?'+ // query string 2047 '(\\#[-a-z\\d_]*)?$','i'); // fragment locator 2048 const currentElement = document.getElementById(returnValue.id); 2049 const currentValue = currentElement.value || ''; 2050 if (currentValue.trim() === '') { // permitir no requerido 2051 return null; 2052 } 2053 2054 return !urlPattern.test(currentValue.trim()) ? returnValue : null; 2055} 2056 2057const yav_valid_cif_nif_nie = function (returnValue) { 2058 const $field = $('#' + returnValue.id); 2059 if (!$field.length || $field.val() == "") return null; 2060 2061 return valida_nif_cif_nie($field.val()) < 0 ? returnValue : null; 2062} 2063 2064// YAV CUSTOM RULES // 2065$.yav_customfunctions = { 2066 "ckeditor_required": ckeditor_required, 2067 "time_travel": time_travel, 2068 "date_travel": date_travel, 2069 "valid_url": valid_url, 2070 "integer_no_zero": integer_no_zero, 2071 "required_one": required_one, 2072 "email_rfc": email_rfc, 2073 "valid_cif_nif_nie": yav_valid_cif_nif_nie , 2074 "only_alphanumeric": only_alphanumeric, 2075}; 2076$.yav_default = { 2077 hideTitle: false, 2078 rulesOnSubmit: true 2079}; 2080$.yav_default.library = { 2081 ISFOCUSSET: true 2082}; 2083// END YAV CUSTOM RULES // 2084 2085//js log configuration 2086if(/[#,&,\?]debug=true/.test(document.location.href)){ 2087 document.writeln("<script type='text/javascript' src='https://getfirebug.com/firebug-lite.js#enableTrace=true'></script>"); 2088}else if (SYM.debugc || _ENVIRONMENT == 'testing') { 2089 if (typeof console == 'undefined') { 2090 document.writeln("<script type='text/javascript' src='https://getfirebug.com/firebug-lite.js#enableTrace=true'></script>"); 2091 } 2092}else { 2093 try { 2094 console_disable = function(){ 2095 return false; 2096 } 2097 window['console'] = { 2098 log: console_disable, 2099 info: console_disable, 2100 debug: console_disable, 2101 error: console_disable, 2102 warn: console_disable 2103 } 2104 } 2105 catch (e) {} 2106} 2107//end js log configuration 2108 2109//Make unique space cleaned tags 2110function generate_tags(tag_aux_arr) 2111{ 2112 tag_arr = []; 2113 $.each(array_unique(tag_aux_arr), function() { 2114 var str_val = $.trim(this.toString()); 2115 if(str_val.length) { 2116 tag_arr.push(str_val) 2117 } 2118 }); 2119 return tag_arr; 2120} 2121 2122/** 2123 * Links two datepickers, forcing the second to have at least the same day as the first 2124 * @param String class_identifier The class identifying both datepickers 2125 * @param String date_ini_id The id of the date ini datepicker 2126 */ 2127function datepicker_range_pair(class_identifier, date_ini_id) { 2128 $.datepicker.setDefaults(msg.datepicker); 2129 var date_ini_full_id = '#'+date_ini_id, 2130 dates = $(class_identifier).datepicker({ 2131 onSelect: function( selectedDate ) { 2132 if (this.id == date_ini_id) { // If Im date ini and have been changed 2133 var option = "minDate", 2134 instance = $( this ).data( "datepicker" ), 2135 date = $.datepicker.parseDate( 2136 instance.settings.dateFormat || 2137 $.datepicker._defaults.dateFormat, 2138 selectedDate, instance.settings ); 2139 2140 dates.not( this ).datepicker( "option", option, date ); // Set the minDate of my pair 2141 if ($.datepicker.parseDate( msg.datepicker.dateFormat , selectedDate) > $.datepicker.parseDate( msg.datepicker.dateFormat ,dates.not( this ).val())) 2142 // If date_ini > date_end, set the new date_end at date_ini, as it's its minimum 2143 dates.not( this ).val(selectedDate); 2144 } 2145 }, 2146 beforeShow: function( input, instance ) { 2147 // hack for calendar position in modals jQuery.ui.1.13.2 with jQuery 3.6.2 requires ui.position 2148 // Dirty hack, only works this way 2149 var calendar = instance.dpDiv; 2150 setTimeout(function() { 2151 calendar.position({ 2152 my: 'left top', 2153 at: 'left bottom', 2154 collision: 'none', 2155 of: input 2156 }); 2157 }, 1); 2158 2159 if (this.id != date_ini_id && $(date_ini_full_id).val().length > 0) { // If Im date end, and date ini has a value 2160 $(this).datepicker("option", "minDate", $.datepicker.parseDate( msg.datepicker.dateFormat ,dates.not( this ).val())); 2161 } 2162 } 2163 }); 2164} 2165 2166/** 2167 * Scrolls to an element. Useful to show errors. 2168 * @param String identifier Valid jQuery selector. 2169 */ 2170function scroll_to_el(identifier, speed, margin) { 2171 if (typeof speed == 'undefined') speed = 750; 2172 if (typeof margin == 'undefined') margin = 0; 2173 $('html,body').animate({ 2174 scrollTop: $(identifier).offset().top + margin 2175 }, speed); 2176} 2177 2178/* 2179FUNCIONES AUXILIARES 2180str_replace -> Emula el str_replace de PHP 2181valida_nif_cif_nie -> Valida un documento NIF, CIF o NIE 2182*/ 2183function str_replace(search, replace, subject) { 2184 var f = search, r = replace, s = subject; 2185 var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length; 2186 while (j = 0, i--) { 2187 if (s[i]) { 2188 while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){}; 2189 } 2190 }; 2191 return sa ? s : s[0]; 2192} 2193//Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error 2194function valida_nif_cif_nie(a) 2195{ 2196 var temp=a.toUpperCase(); 2197 var cadenadni="TRWAGMYFPDXBNJZSQVHLCKE"; 2198 2199 if (temp!==''){ 2200 //si no tiene un formato valido devuelve error 2201 if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp)) 2202 { 2203 return 0; 2204 } 2205 2206 //comprobacion de NIFs estandar 2207 if (/^[0-9]{8}[A-Z]{1}$/.test(temp)) 2208 { 2209 posicion = a.substring(8,0) % 23; 2210 letra = cadenadni.charAt(posicion); 2211 var letradni=temp.charAt(8); 2212 if (letra == letradni) 2213 { 2214 return 1; 2215 } 2216 else 2217 {
2218 return -1; 2219 } 2220 } 2221 2222 //algoritmo para comprobacion de codigos tipo CIF 2223 suma = parseInt(a[2])+parseInt(a[4])+parseInt(a[6]); 2224 for (i = 1; i < 8; i += 2) 2225 { 2226 temp1 = 2 * parseInt(a[i]); 2227 temp1 += ''; 2228 temp1 = temp1.substring(0,1); 2229 temp2 = 2 * parseInt(a[i]); 2230 temp2 += ''; 2231 temp2 = temp2.substring(1,2); 2232 if (temp2 == '') 2233 { 2234 temp2 = '0'; 2235 } 2236 2237 suma += (parseInt(temp1) + parseInt(temp2)); 2238 } 2239 suma += ''; 2240 n = 10 - parseInt(suma.substring(suma.length-1, suma.length)); 2241 2242 //comprobacion de NIFs especiales (se calculan como CIFs) 2243 if (/^[KLM]{1}/.test(temp)) 2244 { 2245 if (a[8] == String.fromCharCode(64 + n)) 2246 { 2247 return 1; 2248 } 2249 else 2250 { 2251 return -1; 2252 } 2253 } 2254 2255 //comprobacion de CIFs 2256 if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp)) 2257 { 2258 temp = n + ''; 2259 if (a[8] == String.fromCharCode(64 + n) || a[8] == parseInt(temp.substring(temp.length-1, temp.length))) 2260 { 2261 return 2; 2262 } 2263 else 2264 { 2265 return -2; 2266 } 2267 } 2268 2269 //comprobacion de NIEs 2270 //T 2271 if (/^[T]{1}/.test(temp)) 2272 { 2273 if (a[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp)) 2274 { 2275 return 3; 2276 } 2277 else 2278 { 2279 return -3; 2280 } 2281 } 2282 2283 //XYZ 2284 if (/^[XYZ]{1}/.test(temp)) 2285 { 2286 pos = str_replace(['X', 'Y', 'Z'], ['0','1','2'], temp).substring(0, 8) % 23; 2287 if (a[8] == cadenadni.substring(pos, pos + 1)) 2288 { 2289 return 3; 2290 } 2291 else 2292 { 2293 return -3; 2294 } 2295 } 2296 } 2297 return 0; 2298} 2299 2300// indexOf for IE 2301if (!Array.prototype.indexOf) 2302{ 2303 Array.prototype.indexOf = function(elt /*, from*/) 2304 { 2305 var len = this.length >>> 0; 2306 2307 var from = Number(arguments[1]) || 0; 2308 from = (from < 0) 2309 ? Math.ceil(from) 2310 : Math.floor(from); 2311 if (from < 0) 2312 from += len; 2313 2314 for (; from < len; from++) 2315 { 2316 if (from in this && 2317 this[from] === elt) 2318 return from; 2319 } 2320 return -1; 2321 }; 2322} 2323 2324jQuery.fn.whenPresent = function(successCallback, failedCallback) { 2325 var selector = this.selector, 2326 interval = 100, 2327 timeout = 20, 2328 checkExist = setInterval(function() { 2329 if ($(selector).length || timeout < 0) { 2330 var callback = (timeout > 0) ? successCallback : failedCallback; 2331 if (typeof callback == 'function') { 2332 callback(); 2333 } 2334 clearInterval(checkExist); 2335 } else { 2336 timeout--; 2337 } 2338 }, interval); 2339 return this; 2340}; 2341 2342jQuery.fn.scrollTo = function(speed) { 2343 var selector = this.selector; 2344 if (typeof speed == 'undefined') speed = 750; 2345 $('html,body').animate({ 2346 scrollTop: $(selector).offset().top 2347 }, speed); 2348}; 2349 2350 2351SYM.TRACKER = $.extend({}, (($) => { 2352 const CONST = { 2353 ga4Events: { 2354 symposium_webinars_banner_show: { 2355 event: "Campaings", 2356 name: "Webinars Banner", 2357 parameters: { title: "Show" } 2358 }, 2359 2360 symposium_webinars_banner_more_info: { 2361 event: "Campaings", 2362 name: "Webinars Banner", 2363 parameters: { title: "More Info" } 2364 }, 2365 2366 symposium_webinars_banner_close: { 2367 event: "Campaings", 2368 name: "Webinars Banner", 2369 parameters: { title: "Close" } 2370 }, 2371 2372 symposium_webinars_overlay_show: { 2373 event: "Campaings", 2374 name: "Webinars Overlay", 2375 parameters: { title: "Show" } 2376 }, 2377 2378 symposium_webinars_overlay_close: { 2379 event: "Campaings", 2380 name: "Webinars Overlay", 2381 parameters: { title: "Close" } 2382 }, 2383 2384 symposium_webinars_overlay_more_info: { 2385 event: "Campaings", 2386 name: "Webinars Overlay", 2387 parameters: { title: "More Info" } 2388 }, 2389 2390 symposium_webinars_overlay_close_forever: { 2391 event: "AB_Testing", 2392 name: "MyEvents", 2393 parameters: { title: "Close Forever" } 2394 }, 2395 2396 symposium_AB_Testing_myevents_click_on_arrow: { 2397 event: "AB_Testing", 2398 name: "MyEvents", 2399 parameters: { title: "Toggle by click on arrow" } 2400 }, 2401 2402 symposium_AB_Testing_myevents_click_on_title: { 2403 event: "AB_Testing", 2404 name: "MyEvents", 2405 parameters: { title: "Toggle by click on title" } 2406 }, 2407 2408 symposium_from_vue_widget_event_click: { 2409 event: "VUE_event_click", 2410 name: "MyEvents", 2411 parameters: { title: "Click on vue widget event" } 2412 }, 2413 2414 symposium_from_vue_widget_news_click: { 2415 event: "VUE_news_click", 2416 name: "MyEvents", 2417 parameters: { title: "Click on vue widget news" } 2418 }, 2419 2420 symposium_maps_display: { 2421 event: "Maps", 2422 name: "Display", 2423 parameters: { title: "New event step 1" } 2424 }, 2425 2426 symposium_maps_display_directory_map: { 2427 event: "Maps", 2428 name: "Display", 2429 parameters: { title: "Directory Map" } 2430 }, 2431 2432 symposium_maps_display_event_places: { 2433 event: "Maps", 2434 name: "Display", 2435 parameters: { title: "Event_places" } 2436 }, 2437 2438 symposium_maps_display_event_map: { 2439 event: "Maps", 2440 name: "Display", 2441 parameters: { title: "Event map" } 2442 }, 2443 2444 symposium_maps_preload_preload_map: { 2445 event: "Maps", 2446 name: "Preload", 2447 parameters: { title: "Map preloaded" } 2448 }, 2449 2450 symposium_widget_maps_display_event: { 2451 event: "Maps", 2452 name: "Preload", 2453 parameters: { title: "widget_map_event" } 2454 }, 2455 2456 } 2457 2458 }; 2459 2460 const METHODS = { 2461 2462 private: { 2463 trackGoogleAnalytics4Event: (event, extraParams = null) => { 2464 const addCID = ['VUE_event_click', 'VUE_news_click']; 2465 const currentEvent = CONST.ga4Events[event]; 2466 // remove cid param 2467 if (addCID.includes(currentEvent.event)) { 2468 currentEvent.parameters.id = getAllUrlParams().cid; 2469 currentEvent.event = "SymWidgetComponent_eventClicked" 2470 removeUrlParams('cid'); 2471 } 2472 2473 // gtag not found due cookieconsent 2474 if (typeof gtag === 'undefined') { 2475 return; 2476 } 2477 2478 if (extraParams) { 2479 currentEvent.params = { ...currentEvent.params, ...extraParams }; 2480 } 2481 2482 gtag('event', currentEvent.event, currentEvent.parameters); 2483 2484 }, 2485 }, 2486 public: { 2487 trackEvent: (event, extraParams = null) => { 2488 console.log('track', event); 2489 if (CONST.ga4Events[event]) { 2490 METHODS.private.trackGoogleAnalytics4Event(event, extraParams); 2491 } else { 2492 console.log('cant track event'); 2493 } 2494 } 2495 } 2496 } 2497 2498 return METHODS.public; 2499 2500})(jQuery)); 2501 2502 2503// Once document is loaded... 2504$.fn.ready(function() { 2505 //Configuration for AJAX calls 2506 SYM.bind_ajax_progress_bar(); 2507 2508 // get rid of those system borders being generated for A tags // 2509 if (typeof $.browser != 'undefined' && $.browser.msie) { 2510 $('a').focus(function() { 2511 $(this).attr('hideFocus', 'true'); 2512 }); 2513 } 2514 2515 // prevent session lost 2516 if(typeof _IS_PARTNER_SITE != 'undefined') { // EE no ofrece gestión de usuarios 2517 if(_IS_PARTNER_SITE){ 2518 SYM.keep_session(); 2519 } 2520 } 2521 2522 //ELLIPSIS 2523 if ($('.ellipsis').length) { 2524 if ($.fn.ellipsis) { 2525 $('.ellipsis').ellipsis(true); 2526 } 2527 } 2528 2529 enable_tab_height(); 2530 2531 // Always stick the footer to the bottom of the page 2532 if ($("div.sticky").length > 0) { 2533 setTimeout(function() { 2534 if (typeof $.fn.stickyFooter == 'function') { 2535 $("div.sticky").stickyFooter(); 2536 } else { 2537 console.error('stickyFooter was not found'); 2538 } 2539 }, 1500); 2540 } 2541 2542 //Symposium by emagister link 2543 $('.sym_info', '#body_footer').css('cursor', 'pointer').click(function() { 2544 document.location.href = $(this).children('a').attr('href'); 2545 }); 2546 2547 // show tooltips 2548 SYM.activate_tooltips(''); 2549 2550 // activate multilang warning movement 2551 SYM.multilang_warning_effects(); 2552 2553 // extend jQuery load 2554 if (typeof $.fn._load == 'undefined') { // Don't do this twice 2555 (function($) { 2556 $.fn._load = $.fn.load; 2557 $.fn.extend({ 2558 load: function(url, args, callback) { 2559 if (typeof SYMJS != 'undefined' && typeof SYMJS.blocks_init != 'undefined') return $(this)._load(url, args, callback); 2560 // Backwards compatibility for the jquery load function 2561 if ($.isFunction(url)) return $(this)._load(url, args, callback); 2562 if (!this.length) return this; 2563 2564 // append ajax loader 2565 this.html('<div class="ajax_load_points"></div>'); 2566 2567 return $(this)._load(url, args, callback); 2568 } 2569 }); 2570 })(jQuery); 2571 } 2572 2573 // Migration warning 2574 var migrationwarning = false;
2575 if (migrationwarning && typeof msgbox_infotop != 'undefined') { 2576 if (typeof localStorage != 'undefined') { 2577 var lastShow = new Date(localStorage.getItem('_MaintenanceWarning')), 2578 now = new Date(), 2579 diff = now.getTime() - lastShow.getTime(), 2580 hours = diff / (1000*60*60); 2581 2582 if (hours < 1) { 2583 console.log('hours = '+hours); 2584 return; 2585 } 2586 2587 localStorage.setItem('_MaintenanceWarning', now.toISOString()); 2588 } 2589 var text = { 2590 'es' : 'La plataforma de eventos estará en mantenimiento el miércoles 19 de Octubre de 5:00 am a 9:00 am. Disculpen las molestias.', 2591 'en' : 'The events platform will be in maintenance mode on wednesday 19th of October from 5:00 am to 9:00 am. We apologize for any inconvenience.', 2592 'ca' : "La plataforma d'esdeveniments estaràen manteniment el dimecres 19 d'octubre de 05:00 a.m. a 09:00 a.m. Disculpeu les molèsteis." 2593 }, 2594 lang = _LANGUAGE; 2595 if (typeof text[_LANGUAGE] == 'undefined') lang = 'es'; 2596 msgbox_infotop(text[lang], 'migration-warning'); 2597 setTimeout(function(){ 2598 msgbox_close($('#migration-warning')); 2599 }, 10000); 2600 } 2601 2602 // Include js-dropdown functionality 2603 $('body').delegate('.js-dropdown .js-dropdown-trigger', 'mouseenter', function (ev) { 2604 ev.preventDefault(); 2605 var $body = $('body'); 2606 var $trigger = $(this); 2607 var $parent = $trigger.parents('.js-dropdown'); 2608 var $drop = $parent.find('.js-dropdown-drop'); 2609 var direction = null; 2610 if ($drop.length) { 2611 $drop.detach(); 2612 $drop.hide(); 2613 $body.append($drop); 2614 direction = $drop.data('direction') || 'bottom'; 2615 $drop.addClass(direction); 2616 $trigger[0]._js_drop = $drop; 2617 $trigger[0]._js_drop_direction = direction; 2618 } else { 2619 $drop = $trigger[0]._js_drop; 2620 } 2621 direction = $trigger[0]._js_drop_direction; 2622 $drop.css({'position': 'absolute'}); 2623 $drop.show(); 2624 var left = 0; 2625 var top = 0; 2626 switch (direction) { 2627 case 'left': 2628 left = $trigger.offset().left 2629 - $drop.width() 2630 - parseInt($drop.css('padding-left')) 2631 - parseInt($drop.css('padding-right')) 2632 - parseInt($drop.css('border-left')) 2633 - parseInt($drop.css('border-right')) 2634 - 18; 2635 top = $trigger.offset().top - ($drop.height() / 2); 2636 break; 2637 case 'right': 2638 left = $trigger.offset().left 2639 + $trigger.width() 2640 + parseInt($trigger.css('padding-right')) 2641 + parseInt($trigger.css('padding-left')) 2642 + 18; 2643 top = $trigger.offset().top - ($drop.height() / 2); 2644 break; 2645 case 'bottom': 2646 left = $trigger.offset().left - ($drop[0].clientWidth / 2) + ($trigger[0].clientWidth / 2); 2647 top = $trigger.offset().top + $trigger[0].clientHeight + 18; 2648 break; 2649 case 'top': 2650 left = $trigger.offset().left - ($drop[0].clientWidth / 2) + ($trigger[0].clientWidth / 2); 2651 top = $trigger.offset().top - $drop.height() - parseInt($drop.css('padding-top')) - parseInt($drop.css('padding-bottom')) - 18; 2652 break; 2653 } 2654 $drop.css({ 'left': left, 'top': top }); 2655 return false; 2656 }); 2657 $('body').delegate('.js-dropdown .js-dropdown-trigger', 'mouseleave', function (ev) { 2658 ev.preventDefault(); 2659 var $trigger = $(this); 2660 if ($trigger[0]._js_drop) { 2661 $trigger[0]._js_drop.hide(); 2662 } 2663 return false; 2664 }); 2665 2666 // Closes sidebar menu when clicks out 2667 var $sideMenu = $('#event-menu-collapse'); 2668 if ($sideMenu.length) { 2669 var $closeSideMenu = $sideMenu.find('.close-menu'); 2670 $sideMenu.find('a:not(.dropdown-toggle):not(.close-menu)').click(() => { 2671 $closeSideMenu.click(); 2672 }); 2673 } 2674 2675 // Symposium Banner fadeout 2676 $('.symposiumBanner__close').on('click', function (ev) { 2677 ev.preventDefault(); 2678 ev.stopPropagation(); 2679 var $trigger = $(this); 2680 var $banner = $trigger.parents('.symposiumBanner'); 2681 var $bannerIdentifier = $banner.data('banner-identifier'); 2682 var $bannerReopen = $banner.data('banner-reopen'); 2683 if ($bannerIdentifier) { 2684 $banner.slideUp('slow'); 2685 // Check if the banner is ment to open every time (we dont need to keep track of it) 2686 if (!$bannerReopen || $bannerReopen != 'reopen') { 2687 var now = new Date(); 2688 localStorage.setItem('banner-'+$bannerIdentifier, now); 2689 // Add statistics 2690 SYM.TRACKER.trackEvent("symposium_webinars_banner_close"); 2691 } 2692 } 2693 }); 2694 // Symposium Banner more information click 2695 $(".symposiumBanner__action-link").on('click', 'a', (ev) => { 2696 // Add statistics 2697 SYM.TRACKER.trackEvent("symposium_webinars_banner_more_info"); 2698 }); 2699 // Symposium Banner fade in 2700 $('.symposiumBanner').each(function (i, o) { 2701 var $banner = $(o); 2702 var $bannerIdentifier = $banner.data('banner-identifier'); 2703 if ($bannerIdentifier) { 2704 var now = new Date(); 2705 // Search banner in localstorage 2706 // If no data or the date is older than 8 hours, open the banner 2707 var date = localStorage.getItem('banner-'+$bannerIdentifier); 2708 var show = false;
2709 if (date) { 2710 date = new Date(date); 2711 var diff = (now.getTime() - date.getTime()) / 1000 / 3600; 2712 if (diff > 8) { 2713 show = true; 2714 } 2715 } else { 2716 show = true; 2717 } 2718 if (show) { 2719 $banner.slideDown('slow'); 2720 if ($bannerIdentifier == "zoom-support-banner") { 2721 SYM.TRACKER.trackEvent("symposium_webinars_banner_show"); 2722 } 2723 } 2724 } 2725 }); 2726 2727 // Symposium login modal 2728 if (SYM.LOGIN) { 2729 SYM.LOGIN.tryLoginModal(); 2730 } else { 2731 let loginTryies = 0; 2732 let loadLoginWidgetScript = function () { 2733 $.getScript("/js/widgets/login_panel.js") 2734 .done(function () { 2735 SYM.LOGIN.tryLoginModal(); 2736 }) 2737 .fail(function () { 2738 loginTryies++; 2739 if (loginTryies < 5) loadLoginWidgetScript(); 2740 }); 2741 } 2742 loadLoginWidgetScript(); 2743 } 2744 2745}); 2746 2747// Splash screen 2748/*$(window).load(function() { 2749 $('.loading_splash').fadeOut('slow', function() { 2750 $(this).remove(); 2751 }); 2752}); 2753*/ 2754 2755if ( !jQuery.browser ) { 2756 var uaMatch = function( ua ) { 2757 ua = ua.toLowerCase(); 2758 2759 var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || 2760 /(webkit)[ \/]([\w.]+)/.exec( ua ) || 2761 /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || 2762 /(msie) ([\w.]+)/.exec( ua ) || 2763 ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || 2764 []; 2765 2766 return { 2767 browser: match[ 1 ] || "", 2768 version: match[ 2 ] || "0" 2769 }; 2770 }; 2771 2772 matched = uaMatch( navigator.userAgent ); 2773 browser = {}; 2774 2775 if ( matched.browser ) { 2776 browser[ matched.browser ] = true; 2777 browser.version = matched.version; 2778 } 2779 2780 // Chrome is Webkit, but Webkit is also Safari. 2781 if ( browser.chrome ) { 2782 browser.webkit = true; 2783 } else if ( browser.webkit ) { 2784 browser.safari = true; 2785 } 2786 2787 jQuery.browser = browser; 2788} 2789 2790SYM.VAL = { 2791 current: null, 2792 validate: function(selector, elementsSelector) { 2793 SYM.VAL.current = $(selector); 2794 var valid = true; 2795 $('.symValError', selector).remove(); 2796 if (typeof elementsSelector == 'undefined') elementsSelector = '.symValInp:visible'; 2797 $(elementsSelector, selector).each(function(c,el){ 2798 if (valid) { 2799 var fn = $(el).attr('data-val-fn'), 2800 params = $(el).attr('data-val-params'); 2801 if (params != null && params.length) params = JSON.parse(params); 2802 switch ($(el).attr('type')) { 2803 case 'checkbox': 2804 case 'radio': 2805 var result = SYM.VAL.fn[fn]($(el).attr('data-val-group'), params); 2806 break; 2807 default: 2808 var result = SYM.VAL.fn[fn]($(el).val(), params); 2809 break; 2810 } 2811 if (!result) { 2812 var error = $(el).attr('data-val-error'); 2813 if (error == null || error.length == 0) { 2814 error = msg.REQUIRED_FIELD; 2815 } 2816 var error_container = $(el).attr('data-val-error-container'); 2817 if (error_container == null || error_container.length == 0) { 2818 $('<p class="error symValError"> ' + error + ' </p>').insertAfter(el); 2819 } else { 2820 $(error_container).append($('<p class="error symValError"> ' + error + ' </p>')); 2821 } 2822 } 2823 valid = valid && result; 2824 } 2825 }); 2826 return valid; 2827 }, 2828 fn: { 2829 email: function(value) { 2830 var reg = new RegExp(/^([a-z0-9_\.\-\+]+\@[\da-z\.-]+\.[a-z\.]{2,})$/i); 2831 console.log('email', reg.test(value), value); 2832 return reg.test(value); 2833 }, 2834 email_rfc: function(value) { 2835 return validate_email_rfc(value); 2836 }, 2837 required: function(value) { 2838 console.log('required', value); 2839 return value != null && (typeof value != 'undefined') && value.length > 0; 2840 }, 2841 regex: function(value, params) { 2842 var reg = new RegExp(params.reg); 2843 console.log('regex', reg.test(value), value); 2844 return reg.test(value); 2845 }, 2846 require_at_least: function(group, params) { 2847 var selected = $('input[data-val-group=' + group + ']:checked', SYM.VAL.current).length, 2848 min = (typeof params == 'object' && typeof params.min != 'undefined') ? params.min : 0, 2849 max = (typeof params == 'object' && typeof params.max != 'undefined') ? params.max : 99999; 2850 console.log('require_at_least', min, selected, max); 2851 return (selected >= min && selected <= max); 2852 } 2853 } 2854}; 2855 2856jQuery.fn.fadeThenSlideToggle = function (speed, easing, callback) { 2857 if (this.is(":hidden")) { 2858 return this.slideDown(speed, easing).fadeTo(speed, 1, easing, callback); 2859 } else {
2860 return this.fadeTo(speed, 0, easing).slideUp(speed, easing, callback); 2861 } 2862}; 2863 2864jQuery.fn.toClipboard = function () { 2865 var element = this[0]; 2866 var selection = window.getSelection(); 2867 var range = document.createRange(); 2868 range.selectNodeContents(element); 2869 selection.removeAllRanges(); 2870 selection.addRange(range); 2871 try { 2872 var successful = document.execCommand('copy'); 2873 selection.removeAllRanges(); 2874 return successful; 2875 } catch (err) { 2876 return false; 2877 } 2878} 2879 2880SYM.CLIPBOARD = { 2881 // copy text from DOM element via unsecure mode (non https) 2882 unsecuredCopyToClipboard: (text) => { 2883 const textArea = document.createElement("textarea"); 2884 textArea.value = text; 2885 document.body.appendChild(textArea); 2886 textArea.select(); 2887 try { 2888 document.execCommand('copy'); 2889 } catch (err) { 2890 console.error('Unable to copy to clipboard', err); 2891 } 2892 document.body.removeChild(textArea); 2893 }, 2894 2895 copyTextToClipboard: async (text) => { 2896 // call right method depending on secure context 2897 (window.isSecureContext && navigator.clipboard) ? 2898 await navigator.clipboard.writeText(text) : 2899 SYM.CLIPBOARD.unsecuredCopyToClipboard(text); 2900 }, 2901 2902 // copy code to clipboard 2903 copyToClipboard: async (htmlElement) => { 2904 const content = htmlElement.value || ''; 2905 2906 SYM.CLIPBOARD.copyTextToClipboard(text); 2907 2908 htmlElement.value = htmlElement.dataset.copyText; 2909 setTimeout(() => (htmlElement.value = content), 2000); 2910 }, 2911} 2912 2913SYM.SERVICES = $.extend({}, (function ($) { 2914 var BASIC_SERVICES = { 2915 get: function (url, params, cb) { 2916 $.getJSON(url, params, function (response) { 2917 var data = null; 2918 var error = null; 2919 if (response && response.stat == 'OK') { 2920 data = response.data; 2921 } else if (response && response.stat == 'WARNING') { 2922 data = response; 2923 } else if (typeof response.msg !== 'undefined') { 2924 if (typeof msg[response.msg] !== 'undefined') { 2925 error = msg[response.msg]; 2926 } else { 2927 error = response.msg; 2928 } 2929 } else if (typeof _msg == 'function' && _msg(response.msg)) { 2930 error = _msg(response.msg); 2931 } else { 2932 error = msg.SERVER_ERROR; 2933 } 2934 if (error && typeof response.errors !== 'undefined') { 2935 data = response.errors; 2936 } 2937 if (typeof cb == 'function') { 2938 return cb(error, data); 2939 } 2940 }).fail(function (jqXHR, textStatus, errorThrown) { 2941 if (typeof cb == 'function') { 2942 return cb( 2943 errorThrown, 2944 { 2945 jqXHR: jqXHR, 2946 textStatus: textStatus, 2947 errorThrown: errorThrown, 2948 requestId: jqXHR.getResponseHeader('x-symposium-unique-request-id') 2949 } 2950 ); 2951 } 2952 }); 2953 }, 2954 post: function (url, params, cb) { 2955 $.post(url, params, function (response) { 2956 var data = null; 2957 var error = null; 2958 if (response && response.stat == 'OK') { 2959 data = response.data; 2960 } else if (response && response.stat == 'WARNING') { 2961 data = response; 2962 } else if (typeof response.msg !== 'undefined') { 2963 if (typeof msg[response.msg] !== 'undefined') { 2964 error = msg[response.msg]; 2965 } else { 2966 error = response.msg; 2967 } 2968 } else if (typeof _msg == 'function' && _msg(response.msg)) { 2969 error = _msg(response.msg); 2970 } else { 2971 error = msg.SERVER_ERROR; 2972 } 2973 if (error && typeof response.errors !== "undefined") { 2974 data = response.errors; 2975 } 2976 if (typeof cb == 'function') { 2977 return cb(error, data); 2978 } 2979 }, 'json').fail(function (jqXHR, textStatus, errorThrown) { 2980 if (typeof cb == 'function') { 2981 return cb( 2982 errorThrown, 2983 { 2984 jqXHR: jqXHR, 2985 textStatus: textStatus, 2986 errorThrown: errorThrown, 2987 requestId: jqXHR.getResponseHeader('x-symposium-unique-request-id') 2988 } 2989 ); 2990 } 2991 }); 2992 }, 2993 put: function(url, data, callback, type) { 2994 2995 if ( $.isFunction(data) ){ 2996 type = type || callback, 2997 callback = data, 2998 data = {} 2999 } 3000 3001 return $.ajax({ 3002 url: url, 3003 type: 'PUT', 3004 success: callback, 3005 data: data, 3006 contentType: type 3007 }); 3008 }, 3009 delete: function(url, data, callback, type) { 3010 3011 if ( $.isFunction(data) ){ 3012 type = type || callback, 3013 callback = data, 3014 data = {} 3015 } 3016 return $.ajax({ 3017 url: url, 3018 type: 'DELETE', 3019 success: callback, 3020 data: data, 3021 contentType: type 3022 }); 3023 }, 3024 3025 // fetch implementation 3026 fetch: { 3027 3028 _common: { 3029 isJson: (res) => res.headers.get('Content-Type').match(/^application\/json/), 3030 getJsonResponse: (res, success, reject) => { 3031 res.json().then(success).catch(err => { 3032 console.error('Reading json error', err); 3033 reject(err.message); 3034 }); 3035 }, 3036 downloadFile: (res, success, reject) => { 3037 res.blob().then(blob => { 3038 const headerContentDisposition = res.headers.get('Content-Disposition'); 3039 if (!headerContentDisposition) return reject('SERVER_ERROR'); 3040 const serverFilename = headerContentDisposition.match(/filename="(.+)"/)[1]; 3041 const theFilename = serverFilename || 'file'; 3042 SYM.onDownloadBlob(blob, theFilename); 3043 success({ 3044 blob: blob, 3045 filename: theFilename 3046 }); 3047 }).catch(err => { 3048 console.error('Error in blob', err); 3049 return reject(err); 3050 }); 3051 },
3052 getUrlObject: function (url, base) { 3053 try { 3054 return new URL(url, base); 3055 } catch (err) { 3056 if (!base) { 3057 return this.getUrlObject(url, window.location.origin); 3058 } 3059 } 3060 }, 3061 default: (url, config, success, reject) => { 3062 fetch(url, config) 3063 .then((res) => { 3064 if (!res.ok) { 3065 return reject({ 3066 status: res.status, 3067 statusText: res.statusText, 3068 supportHeader: res.headers.get('x-symposium-server-error') 3069 }); 3070 } 3071 if (SYM.SERVICES.fetch._common.isJson(res)) { 3072 SYM.SERVICES.fetch._common.getJsonResponse(res, success, reject); 3073 } else { 3074 SYM.SERVICES.fetch._common.downloadFile(res, success, reject); 3075 } 3076 }) 3077 .catch(err => { 3078 console.error(err); 3079 reject(err.message) 3080 }); 3081 }, 3082 defaultError: function (res, reject) { 3083 console.error('default error', res); 3084 const baseError = { 3085 status: res.status, 3086 statusText: res.statusText, 3087 supportHeader: res.headers.get('x-symposium-server-error') 3088 }; 3089 res.json().then((json) => { 3090 let statusText = json.scalar || res.statusText; 3091 const error = json?.error || ''; 3092 const msg = json?.msg || ''; 3093 return reject(Object.assign({}, baseError, { statusText: statusText, error, msg })); 3094 }).catch(err => { 3095 console.error(err); 3096 return reject(baseError); 3097 }); 3098 }, 3099 defaultSuccess: function (res, success, reject) { 3100 if (SYM.SERVICES.fetch._common.isJson(res)) { 3101 SYM.SERVICES.fetch._common.getJsonResponse(res, success, reject); 3102 } else { 3103 SYM.SERVICES.fetch._common.downloadFile(res, success, reject); 3104 } 3105 }, 3106 default: (url, config, success, reject) => { 3107 fetch(url, config) 3108 .then((res) => { 3109 if (!res.ok) { 3110 SYM.SERVICES.fetch._common.defaultError(res, reject); 3111 } else { 3112 SYM.SERVICES.fetch._common.defaultSuccess(res, success, reject); 3113 } 3114 }) 3115 .catch(err => { 3116 console.error(err); 3117 reject(err.message) 3118 }); 3119 }, 3120 }, 3121 3122 get: function (url, qs_params) { 3123 const urlObject = this._common.getUrlObject(url); 3124 if (qs_params) urlObject.search = new URLSearchParams(qs_params).toString(); 3125 const config = {method: 'GET'}; 3126 const defaultRun = this._common.default; 3127 return new Promise((success, reject) => { 3128 defaultRun(urlObject, config, success, reject); 3129 }); 3130 }, 3131 3132 delete: function (url, qs_params) { 3133 const urlObject = this._common.getUrlObject(url); 3134 if (qs_params) urlObject.search = new URLSearchParams(qs_params).toString(); 3135 const config = {method: 'DELETE'}; 3136 const defaultRun = this._common.default; 3137 return new Promise((success, reject) => { 3138 defaultRun(urlObject, config, success, reject); 3139 }); 3140 }, 3141 3142 post: function (url, params, qs_params, json='json') { 3143 const urlObject = this._common.getUrlObject(url); 3144 let config = { method: 'POST' }; 3145 if (qs_params) urlObject.search = new URLSearchParams(qs_params).toString(); 3146 if (params && json) { 3147 config = Object.assign({}, config, { 3148 headers: { "Content-Type": "application/json" }, 3149 body: JSON.stringify(params) 3150 }); 3151 } else if (params) { 3152 config = Object.assign({}, config, { 3153 headers: { "Content-Type": "application/x-www-form-urlencoded" }, 3154 body: new URLSearchParams(params) 3155 }); 3156 } 3157 const defaultRun = this._common.default; 3158 return new Promise((success, reject) => { 3159 defaultRun(urlObject, config, success, reject); 3160 }); 3161 }, 3162 3163 put: function (url, params, qs_params, json='json') { 3164 const urlObject = this._common.getUrlObject(url); 3165 let config = { method: 'PUT' }; 3166 if (qs_params) urlObject.search = new URLSearchParams(qs_params).toString(); 3167 if (params && json) { 3168 config = Object.assign({}, config, { 3169 headers: { "Content-Type": "application/json" }, 3170 body: JSON.stringify(params) 3171 }); 3172 } else if (params) { 3173 config = Object.assign({}, config, { body: params }); 3174 } 3175 const defaultRun = this._common.default; 3176 return new Promise((success, reject) => { 3177 defaultRun(urlObject, config, success, reject); 3178 }); 3179 }, 3180 3181 } 3182 3183 } 3184 return BASIC_SERVICES; 3185})(jQuery)); 3186 3187SYM.EXPORT_FORMAT = $.extend({}, (function ($) { 3188 3189 const DOM = { 3190 MODAL: { 3191 SELECTOR: '.div_export_formats' 3192 }, 3193 }; 3194 3195 const METHODS = { 3196 private: { 3197 openModal: function (selector, type = '', modalOptions = null, success, reject) { 3198 const $modalTemplate = $(selector); 3199 if ($modalTemplate.length) { 3200 // This can be done without detaching the modal and using $modal.html() as parameter to msgbox. 3201 // Is done this way to keep the styles of the main class, using the same object as is done in other views. 3202 $('body').append($modalTemplate.detach()); 3203 $modal = msgbox($modalTemplate, type, modalOptions); 3204 if ($modal) { 3205 METHODS.private.initModalHandlers($modal, success, reject); 3206 } else { 3207 reject(); 3208 } 3209 } 3210 }, 3211 initModalHandlers: function ($modal, success, reject) { 3212 3213 $('a', $modal).off('click').on('click', function(ev){ 3214 ev.preventDefault(); 3215 ev.stopPropagation(); 3216 3217 const $target = $(ev.target); 3218 const data = $target.data(); 3219 const format = data?.format || 'excel'; 3220 3221 success(format); 3222 msgbox_close($modal); 3223 3224 return false;
3225 }); 3226 3227 $('.close', $modal).off('click').on('click', function (ev) { 3228 ev.preventDefault(); 3229 ev.stopPropagation(); 3230 reject(); 3231 msgbox_close($modal); 3232 return false; 3233 }); 3234 3235 } 3236 }, 3237 public: { 3238 select: function (modalType='', modalOptions=null) { 3239 return new Promise((success, reject) => { 3240 METHODS.private.openModal(DOM.MODAL.SELECTOR, modalType, modalOptions, success, reject); 3241 }); 3242 } 3243 } 3244 }; 3245 3246 return METHODS.public; 3247 3248})(jQuery)); 3249 3250!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("Navigo",[],e):"object"==typeof exports?exports.Navigo=e():t.Navigo=e()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return t[o].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e){"use strict";function n(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function o(t){return t instanceof RegExp?t:t.replace(/\/+$/,"").replace(/^\/+/,"/")}function r(t,e){return 0===e.length?null:t?t.slice(1,t.length).reduce(function(t,n,o){return null===t&&(t={}),t[e[o]]=n,t},null):null}function i(t){var e,n=[];return e=t instanceof RegExp?t:new RegExp(o(t).replace(f,function(t,e,o){return n.push(o),d}).replace(h,p)+g),{regexp:e,paramNames:n}}function u(t){var e=arguments.length<=1||void 0===arguments[1]?[]:arguments[1];return e.map(function(e){var n=i(e.route),o=n.regexp,u=n.paramNames,s=t.match(o),a=r(s,u);return s?{match:s,route:e,params:a}:!1}).filter(function(t){return t})}function s(t,e){return u(t,e)[0]||!1}function a(t,e){var n=u(t,e.filter(function(t){var e=o(t.route);return""!==e&&"*"!==e})),r=o(t);return n.length>0?n.map(function(e){return o(t.substr(0,e.match.index))}).reduce(function(t,e){return e.length<t.length?e:t},r):r}function l(t,e){this._routes=[],this.root=t||null,this._ok=!e&&!("undefined"==typeof window||!window.history||!window.history.pushState),this._listen()}var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t};Object.defineProperty(e,"__esModule",{value:!0});var f=/([:*])(\w+)/g,h=/\*/g,d="([^/]+)",p="(?:.*)",g="(?:/|$)";l.prototype={helpers:{match:s,root:a,clean:o},navigate:function(t,e){t=t||"",this._ok?(history.pushState({},"",(e?"":this._getRoot()+"/")+o(t)),this.resolve()):"undefined"!=typeof window&&(window.location.href=window.location.href.replace(/#(.*)$/,"")+"#"+t)},on:function(){if(2===arguments.length)this._add(arguments.length<=0?void 0:arguments[0],arguments.length<=1?void 0:arguments[1]);else if("object"===c(arguments.length<=0?void 0:arguments[0]))for(var t in arguments.length<=0?void 0:arguments[0])this._add(t,(arguments.length<=0?void 0:arguments[0])[t]);else"function"==typeof(arguments.length<=0?void 0:arguments[0])&&this._add("",arguments.length<=0?void 0:arguments[0]);this.resolve()},resolve:function(t){var e,o=s(t||this._cLoc(),this._routes);return o?(e=o.route.handler,o.route.route instanceof RegExp?e.apply(void 0,n(o.match.slice(1,o.match.length))):e(o.params),o):!1},destroy:function(){this._routes=[],clearTimeout(this._listenningInterval),"undefined"!=typeof window?window.onpopstate=null:null},_add:function(t){var e=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return this._routes.push({route:t,handler:e}),this._add},_getRoot:function(){return null!==this.root?this.root:(this.root=a(this._cLoc(),this._routes),this.root)},_listen:function(){var t=this;this._ok?window.onpopstate=function(){t.resolve()}:!function(){var e=t._cLoc(),n=void 0,o=void 0;(o=function(){n=t._cLoc(),e!==n&&(e=n,t.resolve()),t._listenningInterval=setTimeout(o,200)})()}()},_cLoc:function(){return"undefined"!=typeof window?window.location.href:""}},e["default"]=l,t.exports=e["default"]}])});function get_params(){var query=window.location.search.substring(1);var vars=query.split("&");var output={};for(var i=0;i<vars.length;i++){var pair=vars[i].split("=");output[pair[0]]=pair[1];} 3251return output;} 3252/** 3253 * jscolor - JavaScript Color Picker 3254 * 3255 * @link http://jscolor.com 3256 * @license For open source use: GPLv3 3257 * For commercial use: JSColor Commercial License 3258 * @author Jan Odvarko 3259 * 3260 * See usage examples at http://jscolor.com/examples/
vendor: 28,886 bytes, lines 3260-3261
3260 3261 */"use strict";window.jscolor||(window.jscolor=function(){var e={register:function(){e.attachDOMReadyEvent(e.init),e.attachEvent(document,"mousedown",e.onDocumentMouseDown),e.attachEvent(document,"touchstart",e.onDocumentTouchStart),e.attachEvent(window,"resize",e.onWindowResize)},init:function(){e.jscolor.lookupClass&&e.jscolor.installByClassName(e.jscolor.lookupClass)},tryInstallOnElements:function(t,n){var r=new RegExp("(^|\\s)("+n+")(\\s*(\\{[^}]*\\})|\\s|$)","i");for(var i=0;i<t.length;i+=1){if(t[i].type!==undefined&&t[i].type.toLowerCase()=="color"&&e.isColorAttrSupported)continue;var s;if(!t[i].jscolor&&t[i].className&&(s=t[i].className.match(r))){var o=t[i],u=null,a=e.getDataAttr(o,"jscolor");a!==null?u=a:s[4]&&(u=s[4]);var f={};if(u)try{f=(new Function("return ("+u+")"))()}catch(l){e.warn("Error parsing jscolor options: "+l+":\n"+u)}o.jscolor=new e.jscolor(o,f)}}},isColorAttrSupported:function(){var e=document.createElement("input");if(e.setAttribute){e.setAttribute("type","color");if(e.type.toLowerCase()=="color")return!0}return!1}(),isCanvasSupported:function(){var e=document.createElement("canvas");return!!e.getContext&&!!e.getContext("2d")}(),fetchElement:function(e){return typeof e=="string"?document.getElementById(e):e},isElementType:function(e,t){return e.nodeName.toLowerCase()===t.toLowerCase()},getDataAttr:function(e,t){var n="data-"+t,r=e.getAttribute(n);return r!==null?r:null},attachEvent:function(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent&&e.attachEvent("on"+t,n)},detachEvent:function(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent&&e.detachEvent("on"+t,n)},_attachedGroupEvents:{},attachGroupEvent:function(t,n,r,i){e._attachedGroupEvents.hasOwnProperty(t)||(e._attachedGroupEvents[t]=[]),e._attachedGroupEvents[t].push([n,r,i]),e.attachEvent(n,r,i)},detachGroupEvents:function(t){if(e._attachedGroupEvents.hasOwnProperty(t)){for(var n=0;n<e._attachedGroupEvents[t].length;n+=1){var r=e._attachedGroupEvents[t][n];e.detachEvent(r[0],r[1],r[2])}delete e._attachedGroupEvents[t]}},attachDOMReadyEvent:function(e){var t=!1,n=function(){t||(t=!0,e())};if(document.readyState==="complete"){setTimeout(n,1);return}if(document.addEventListener)document.addEventListener("DOMContentLoaded",n,!1),window.addEventListener("load",n,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",function(){document.readyState==="complete"&&(document.detachEvent("onreadystatechange",arguments.callee),n())}),window.attachEvent("onload",n);if(document.documentElement.doScroll&&window==window.top){var r=function(){if(!document.body)return;try{document.documentElement.doScroll("left"),n()}catch(e){setTimeout(r,1)}};r()}}},warn:function(e){window.console&&window.console.warn&&window.console.warn(e)},preventDefault:function(e){e.preventDefault&&e.preventDefault(),e.returnValue=!1},captureTarget:function(t){t.setCapture&&(e._capturedTarget=t,e._capturedTarget.setCapture())},releaseTarget:function(){e._capturedTarget&&(e._capturedTarget.releaseCapture(),e._capturedTarget=null)},fireEvent:function(e,t){if(!e)return;if(document.createEvent){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}else if(document.createEventObject){var n=document.createEventObject();e.fireEvent("on"+t,n)}else e["on"+t]&&e["on"+t]()},classNameToList:function(e){return e.replace(/^\s+|\s+$/g,"").split(/\s+/)},hasClass:function(e,t){return t?-1!=(" "+e.className.replace(/\s+/g," ")+" ").indexOf(" "+t+" "):!1},setClass:function(t,n){var r=e.classNameToList(n);for(var i=0;i<r.length;i+=1)e.hasClass(t,r[i])||(t.className+=(t.className?" ":"")+r[i])},unsetClass:function(t,n){var r=e.classNameToList(n);for(var i=0;i<r.length;i+=1){var s=new RegExp("^\\s*"+r[i]+"\\s*|"+"\\s*"+r[i]+"\\s*$|"+"\\s+"+r[i]+"(\\s+)","g");t.className=t.className.replace(s,"$1")}},getStyle:function(e){return window.getComputedStyle?window.getComputedStyle(e):e.currentStyle},setStyle:function(){var e=document.createElement("div"),t=function(t){for(var n=0;n<t.length;n+=1)if(t[n]in e.style)return t[n]},n={borderRadius:t(["borderRadius","MozBorderRadius","webkitBorderRadius"]),boxShadow:t(["boxShadow","MozBoxShadow","webkitBoxShadow"])};return function(e,t,r){switch(t.toLowerCase()){case"opacity":var i=Math.round(parseFloat(r)*100);e.style.opacity=r,e.style.filter="alpha(opacity="+i+")";break;default:e.style[n[t]]=r}}}(),setBorderRadius:function(t,n){e.setStyle(t,"borderRadius",n||"0")},setBoxShadow:function(t,n){e.setStyle(t,"boxShadow",n||"none")},getElementPos:function(t,n){var r=0,i=0,s=t.getBoundingClientRect();r=s.left,i=s.top;if(!n){var o=e.getViewPos();r+=o[0],i+=o[1]}return[r,i]},getElementSize:function(e){return[e.offsetWidth,e.offsetHeight]},getAbsPointerPos:function(e){e||(e=window.event);var t=0,n=0;return typeof e.changedTouches!="undefined"&&e.changedTouches.length?(t=e.changedTouches[0].clientX,n=e.changedTouches[0].clientY):typeof e.clientX=="number"&&(t=e.clientX,n=e.clientY),{x:t,y:n}},getRelPointerPos:function(e){e||(e=window.event);var t=e.target||e.srcElement,n=t.getBoundingClientRect(),r=0,i=0,s=0,o=0;return typeof e.changedTouches!="undefined"&&e.changedTouches.length?(s=e.changedTouches[0].clientX,o=e.changedTouches[0].clientY):typeof e.clientX=="number"&&(s=e.clientX,o=e.clientY),r=s-n.left,i=o-n.top,{x:r,y:i}},getViewPos:function(){var e=document.documentElement;return[(window.pageXOffset||e.scrollLeft)-(e.clientLeft||0),(window.pageYOffset||e.scrollTop)-(e.clientTop||0)]},getViewSize:function(){var e=document.documentElement;return[window.innerWidth||e.clientWidth,window.innerHeight||e.clientHeight]},redrawPosition:function(){if(e.picker&&e.picker.owner){var t=e.picker.owner,n,r;t.fixed?(n=e.getElementPos(t.targetElement,!0),r=[0,0]):(n=e.getElementPos(t.targetElement),r=e.getViewPos());var i=e.getElementSize(t.targetElement),s=e.getViewSize(),o=e.getPickerOuterDims(t),u,a,f;switch(t.position.toLowerCase()){case"left":u=1,a=0,f=-1;break;case"right":u=1,a=0,f=1;break;case"top":u=0,a=1,f=-1;break;default:u=0,a=1,f=1}var l=(i[a]+o[a])/2;if(!t.smartPosition)var c=[n[u],n[a]+i[a]-l+l*f];else var c=[-r[u]+n[u]+o[u]>s[u]?-r[u]+n[u]+i[u]/2>s[u]/2&&n[u]+i[u]-o[u]>=0?n[u]+i[u]-o[u]:n[u]:n[u],-r[a]+n[a]+i[a]+o[a]-l+l*f>s[a]?-r[a]+n[a]+i[a]/2>s[a]/2&&n[a]+i[a]-l-l*f>=0?n[a]+i[a]-l-l*f:n[a]+i[a]-l+l*f:n[a]+i[a]-l+l*f>=0?n[a]+i[a]-l+l*f:n[a]+i[a]-l-l*f];var h=c[u],p=c[a],d=t.fixed?"fixed":"absolute",v=(c[0]+o[0]>n[0]||c[0]<n[0]+i[0])&&c[1]+o[1]<n[1]+i[1];e._drawPosition(t,h,p,d,v)}},_drawPosition:function(t,n,r,i,s){var o=s?0:t.shadowBlur;e.picker.wrap.style.position=i,e.picker.wrap.style.left=n+"px",e.picker.wrap.style.top=r+"px",e.setBoxShadow(e.picker.boxS,t.shadow?new e.BoxShadow(0,o,t.shadowBlur,0,t.shadowColor):null)},getPickerDims:function(t){var n=!!e.getSliderComponent(t),r=[2*t.insetWidth+2*t.padding+t.width+(n?2*t.insetWidth+e.getPadToSliderPadding(t)+t.sliderSize:0),2*t.insetWidth+2*t.padding+t.height+(t.closable?2*t.insetWidth+t.padding+t.buttonHeight:0)];return r},getPickerOuterDims:function(t){var n=e.getPickerDims(t);return[n[0]+2*t.borderWidth,n[1]+2*t.borderWidth]},getPadToSliderPadding:function(e){return Math.max(e.padding,1.5*(2*e.pointerBorderWidth+e.pointerThickness))},getPadYComponent:function(e){switch(e.mode.charAt(1).toLowerCase()){case"v":return"v"}return"s"},getSliderComponent:function(e){if(e.mode.length>2)switch(e.mode.charAt(2).toLowerCase()){case"s":return"s";case"v":return"v"}return null},onDocumentMouseDown:function(t){t||(t=window.event);var n=t.target||t.srcElement;n._jscLinkedInstance?n._jscLinkedInstance.showOnClick&&n._jscLinkedInstance.show():n._jscControlName?e.onControlPointerStart(t,n,n._jscControlName,"mouse"):e.picker&&e.picker.owner&&e.picker.owner.hide()},onDocumentTouchStart:function(t){t||(t=window.event);var n=t.target||t.srcElement;n._jscLinkedInstance?n._jscLinkedInstance.showOnClick&&n._jscLinkedInstance.show():n._jscControlName?e.onControlPointerStart(t,n,n._jscControlName,"touch"):e.picker&&e.picker.owner&&e.picker.owner.hide()},onWindowResize:function(t){e.redrawPosition()},onParentScroll:function(t){e.picker&&e.picker.owner&&e.picker.owner.hide()},_pointerMoveEvent:{mouse:"mousemove",touch:"touchmove"},_pointerEndEvent:{mouse:"mouseup",touch:"touchend"},_pointerOrigin:null,_capturedTarget:null,onControlPointerStart:function(t,n,r,i){var s=n._jscInstance;e.preventDefault(t),e.captureTarget(n);var o=function(s,o){e.attachGroupEvent("drag",s,e._pointerMoveEvent[i],e.onDocumentPointerMove(t,n,r,i,o)),e.attachGroupEvent("drag",s,e._pointerEndEvent[i],e.onDocumentPointerEnd(t,n,r,i))};o(document,[0,0]);if(window.parent&&window.frameElement){var u=window.frameElement.getBoundingClientRect(),a=[-u.left,-u.top];o(window.parent.window.document,a)}var f=e.getAbsPointerPos(t),l=e.getRelPointerPos(t);e._pointerOrigin={x:f.x-l.x,y:f.y-l.y};switch(r){case"pad":switch(e.getSliderComponent(s)){case"s":s.hsv[1]===0&&s.fromHSV(null,100,null);break;case"v":s.hsv[2]===0&&s.fromHSV(null,null,100)}e.setPad(s,t,0,0);break;case"sld":e.setSld(s,t,0)}e.dispatchFineChange(s)},onDocumentPointerMove:function(t,n,r,i,s){return function(t){var i=n._jscInstance;switch(r){case"pad":t||(t=window.event),e.setPad(i,t,s[0],s[1]),e.dispatchFineChange(i);break;case"sld":t||(t=window.event),e.setSld(i,t,s[1]),e.dispatchFineChange(i)}}},onDocumentPointerEnd:function(t,n,r,i){return function(t){var r=n._jscInstance;e.detachGroupEvents("drag"),e.releaseTarget(),e.dispatchChange(r)}},dispatchChange:function(t){t.valueElement&&e.isElementType(t.valueElement,"input")&&e.fireEvent(t.valueElement,"change")},dispatchFineChange:function(e){if(e.onFineChange){var t;typeof e.onFineChange=="string"?t=new Function(e.onFineChange):t=e.onFineChange,t.call(e)}},setPad:function(t,n,r,i){var s=e.getAbsPointerPos(n),o=r+s.x-e._pointerOrigin.x-t.padding-t.insetWidth,u=i+s.y-e._pointerOrigin.y-t.padding-t.insetWidth,a=o*(360/(t.width-1)),f=100-u*(100/(t.height-1));switch(e.getPadYComponent(t)){case"s":t.fromHSV(a,f,null,e.leaveSld);break;case"v":t.fromHSV(a,null,f,e.leaveSld)}},setSld:function(t,n,r){var i=e.getAbsPointerPos(n),s=r+i.y-e._pointerOrigin.y-t.padding-t.insetWidth,o=100-s*(100/(t.height-1));switch(e.getSliderComponent(t)){case"s":t.fromHSV(null,o,null,e.leavePad);break;case"v":t.fromHSV(null,null,o,e.leavePad)}},_vmlNS:"jsc_vml_",_vmlCSS:"jsc_vml_css_",_vmlReady:!1,initVML:function(){if(!e._vmlReady){var t=document;t.namespaces[e._vmlNS]||t.namespaces.add(e._vmlNS,"urn:schemas-microsoft-com:vml");if(!t.styleSheets[e._vmlCSS]){var n=["shape","shapetype","group","background","path","formulas","handles","fill","stroke","shadow","textbox","textpath","imagedata","line","polyline","curve","rect","roundrect","oval","arc","image"],r=t.createStyleSheet();r.owningElement.id=e._vmlCSS;for(var i=0;i<n.length;i+=1)r.addRule(e._vmlNS+"\\:"+n[i],"behavior:url(#default#VML);")}e._vmlReady=!0}},createPalette:function(){var t={elm:null,draw:null};if(e.isCanvasSupported){var n=document.createElement("canvas"),r=n.getContext("2d"),i=function(e,t,i){n.width=e,n.height=t,r.clearRect(0,0,n.width,n.height);var s=r.createLinearGradient(0,0,n.width,0);s.addColorStop(0,"#F00"),s.addColorStop(1/6,"#FF0"),s.addColorStop(2/6,"#0F0"),s.addColorStop(.5,"#0FF"),s.addColorStop(4/6,"#00F"),s.addColorStop(5/6,"#F0F"),s.addColorStop(1,"#F00"),r.fillStyle=s,r.fillRect(0,0,n.width,n.height);var o=r.createLinearGradient(0,0,0,n.height);switch(i.toLowerCase()){case"s":o.addColorStop(0,"rgba(255,255,255,0)"),o.addColorStop(1,"rgba(255,255,255,1)");break;case"v":o.addColorStop(0,"rgba(0,0,0,0)"),o.addColorStop(1,"rgba(0,0,0,1)")}r.fillStyle=o,r.fillRect(0,0,n.width,n.height)};t.elm=n,t.draw=i}else{e.initVML();var s=document.createElement("div");s.style.position="relative",s.style.overflow="hidden";var o=document.createElement(e._vmlNS+":fill");o.type="gradient",o.method="linear",o.angle="90",o.colors="16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0";var u=document.createElement(e._vmlNS+":rect");u.style.position="absolute",u.style.left="-1px",u.style.top="-1px",u.stroked=!1,u.appendChild(o),s.appendChild(u);var a=document.createElement(e._vmlNS+":fill");a.type="gradient",a.method="linear",a.angle="180",a.opacity="0";var f=document.createElement(e._vmlNS+":rect");f.style.position="absolute",f.style.left="-1px",f.style.top="-1px",f.stroked=!1,f.appendChild(a),s.appendChild(f);var i=function(e,t,n){s.style.width=e+"px",s.style.height=t+"px",u.style.width=f.style.width=e+1+"px",u.style.height=f.style.height=t+1+"px",o.color="#F00",o.color2="#F00";switch(n.toLowerCase()){case"s":a.color=a.color2="#FFF";break;case"v":a.color=a.color2="#000"}};t.elm=s,t.draw=i}return t},createSliderGradient:function(){var t={elm:null,draw:null};if(e.isCanvasSupported){var n=document.createElement("canvas"),r=n.getContext("2d"),i=function(e,t,i,s){n.width=e,n.height=t,r.clearRect(0,0,n.width,n.height);var o=r.createLinearGradient(0,0,0,n.height);o.addColorStop(0,i),o.addColorStop(1,s),r.fillStyle=o,r.fillRect(0,0,n.width,n.height)};t.elm=n,t.draw=i}else{e.initVML();var s=document.createElement("div");s.style.position="relative",s.style.overflow="hidden";var o=document.createElement(e._vmlNS+":fill");o.type="gradient",o.method="linear",o.angle="180";var u=document.createElement(e._vmlNS+":rect");u.style.position="absolute",u.style.left="-1px",u.style.top="-1px",u.stroked=!1,u.appendChild(o),s.appendChild(u);var i=function(e,t,n,r){s.style.width=e+"px",s.style.height=t+"px",u.style.width=e+1+"px",u.style.height=t+1+"px",o.color=n,o.color2=r};t.elm=s,t.draw=i}return t},leaveValue:1,leaveStyle:2,leavePad:4,leaveSld:8,BoxShadow:function(){var e=function(e,t,n,r,i,s){this.hShadow=e,this.vShadow=t,this.blur=n,this.spread=r,this.color=i,this.inset=!!s};return e.prototype.toString=function(){var e=[Math.round(this.hShadow)+"px",Math.round(this.vShadow)+"px",Math.round(this.blur)+"px",Math.round(this.spread)+"px",this.color];return this.inset&&e.push("inset"),e.join(" ")},e}(),jscolor:function(t,n){function i(e,t,n){e/=255,t/=255,n/=255;var r=Math.min(Math.min(e,t),n),i=Math.max(Math.max(e,t),n),s=i-r;if(s===0)return[null,0,100*i];var o=e===r?3+(n-t)/s:t===r?5+(e-n)/s:1+(t-e)/s;return[60*(o===6?0:o),100*(s/i),100*i]}function s(e,t,n){var r=255*(n/100);if(e===null)return[r,r,r];e/=60,t/=100;var i=Math.floor(e),s=i%2?e-i:1-(e-i),o=r*(1-t),u=r*(1-t*s);switch(i){case 6:case 0:return[r,u,o];case 1:return[u,r,o];case 2:return[o,r,u];case 3:return[o,u,r];case 4:return[u,o,r];case 5:return[r,o,u]}}function o(){e.unsetClass(d.targetElement,d.activeClass),e.picker.wrap.parentNode.removeChild(e.picker.wrap),delete e.picker.owner}function u(){function l(){var e=d.insetColor.split(/\s+/),n=e.length<2?e[0]:e[1]+" "+e[0]+" "+e[0]+" "+e[1];t.btn.style.borderColor=n}d._processParentElementsInDOM(),e.picker||(e.picker={owner:null,wrap:document.createElement("div"),box:document.createElement("div"),boxS:document.createElement("div"),boxB:document.createElement("div"),pad:document.createElement("div"),padB:document.createElement("div"),padM:document.createElement("div"),padPal:e.createPalette(),cross:document.createElement("div"),crossBY:document.createElement("div"),crossBX:document.createElement("div"),crossLY:document.createElement("div"),crossLX:document.createElement("div"),sld:document.createElement("div"),sldB:document.createElement("div"),sldM:document.createElement("div"),sldGrad:e.createSliderGradient(),sldPtrS:document.createElement("div"),sldPtrIB:document.createElement("div"),sldPtrMB:document.createElement("div"),sldPtrOB:document.createElement("div"),btn:document.createElement("div"),btnT:document.createElement("span")},e.picker.pad.appendChild(e.picker.padPal.elm),e.picker.padB.appendChild(e.picker.pad),e.picker.cross.appendChild(e.picker.crossBY),e.picker.cross.appendChild(e.picker.crossBX),e.picker.cross.appendChild(e.picker.crossLY),e.picker.cross.appendChild(e.picker.crossLX),e.picker.padB.appendChild(e.picker.cross),e.picker.box.appendChild(e.picker.padB),e.picker.box.appendChild(e.picker.padM),e.picker.sld.appendChild(e.picker.sldGrad.elm),e.picker.sldB.appendChild(e.picker.sld),e.picker.sldB.appendChild(e.picker.sldPtrOB),e.picker.sldPtrOB.appendChild(e.picker.sldPtrMB),e.picker.sldPtrMB.appendChild(e.picker.sldPtrIB),e.picker.sldPtrIB.appendChild(e.picker.sldPtrS),e.picker.box.appendChild(e.picker.sldB),e.picker.box.appendChild(e.picker.sldM),e.picker.btn.appendChild(e.picker.btnT),e.picker.box.appendChild(e.picker.btn),e.picker.boxB.appendChild(e.picker.box),e.picker.wrap.appendChild(e.picker.boxS),e.picker.wrap.appendChild(e.picker.boxB));var t=e.picker,n=!!e.getSliderComponent(d),r=e.getPickerDims(d),i=2*d.pointerBorderWidth+d.pointerThickness+2*d.crossSize,s=e.getPadToSliderPadding(d),o=Math.min(d.borderRadius,Math.round(d.padding*Math.PI)),u="crosshair";t.wrap.style.clear="both",t.wrap.style.width=r[0]+2*d.borderWidth+"px",t.wrap.style.height=r[1]+2*d.borderWidth+"px",t.wrap.style.zIndex=d.zIndex,t.box.style.width=r[0]+"px",t.box.style.height=r[1]+"px",t.boxS.style.position="absolute",t.boxS.style.left="0",t.boxS.style.top="0",t.boxS.style.width="100%",t.boxS.style.height="100%",e.setBorderRadius(t.boxS,o+"px"),t.boxB.style.position="relative",t.boxB.style.border=d.borderWidth+"px solid",t.boxB.style.borderColor=d.borderColor,t.boxB.style.background=d.backgroundColor,e.setBorderRadius(t.boxB,o+"px"),t.padM.style.background=t.sldM.style.background="#FFF",e.setStyle(t.padM,"opacity","0"),e.setStyle(t.sldM,"opacity","0"),t.pad.style.position="relative",t.pad.style.width=d.width+"px",t.pad.style.height=d.height+"px",t.padPal.draw(d.width,d.height,e.getPadYComponent(d)),t.padB.style.position="absolute",t.padB.style.left=d.padding+"px",t.padB.style.top=d.padding+"px",t.padB.style.border=d.insetWidth+"px solid",t.padB.style.borderColor=d.insetColor,t.padM._jscInstance=d,t.padM._jscControlName="pad",t.padM.style.position="absolute",t.padM.style.left="0",t.padM.style.top="0",t.padM.style.width=d.padding+2*d.insetWidth+d.width+s/2+"px",t.padM.style.height=r[1]+"px",t.padM.style.cursor=u,t.cross.style.position="absolute",t.cross.style.left=t.cross.style.top="0",t.cross.style.width=t.cross.style.height=i+"px",t.crossBY.style.position=t.crossBX.style.position="absolute",t.crossBY.style.background=t.crossBX.style.background=d.pointerBorderColor,t.crossBY.style.width=t.crossBX.style.height=2*d.pointerBorderWidth+d.pointerThickness+"px",t.crossBY.style.height=t.crossBX.style.width=i+"px",t.crossBY.style.left=t.crossBX.style.top=Math.floor(i/2)-Math.floor(d.pointerThickness/2)-d.pointerBorderWidth+"px",t.crossBY.style.top=t.crossBX.style.left="0",t.crossLY.style.position=t.crossLX.style.position="absolute",t.crossLY.style.background=t.crossLX.style.background=d.pointerColor,t.crossLY.style.height=t.crossLX.style.width=i-2*d.pointerBorderWidth+"px",t.crossLY.style.width=t.crossLX.style.height=d.pointerThickness+"px",t.crossLY.style.left=t.crossLX.style.top=Math.floor(i/2)-Math.floor(d.pointerThickness/2)+"px",t.crossLY.style.top=t.crossLX.style.left=d.pointerBorderWidth+"px",t.sld.style.overflow="hidden",t.sld.style.width=d.sliderSize+"px",t.sld.style.height=d.height+"px",t.sldGrad.draw(d.sliderSize,d.height,"#000","#000"),t.sldB.style.display=n?"block":"none",t.sldB.style.position="absolute",t.sldB.style.right=d.padding+"px",t.sldB.style.top=d.padding+"px",t.sldB.style.border=d.insetWidth+"px solid",t.sldB.style.borderColor=d.insetColor,t.sldM._jscInstance=d,t.sldM._jscControlName="sld",t.sldM.style.display=n?"block":"none",t.sldM.style.position="absolute",t.sldM.style.right="0",t.sldM.style.top="0",t.sldM.style.width=d.sliderSize+s/2+d.padding+2*d.insetWidth+"px",t.sldM.style.height=r[1]+"px",t.sldM.style.cursor="default",t.sldPtrIB.style.border=t.sldPtrOB.style.border=d.pointerBorderWidth+"px solid "+d.pointerBorderColor,t.sldPtrOB.style.position="absolute",t.sldPtrOB.style.left=-(2*d.pointerBorderWidth+d.pointerThickness)+"px",t.sldPtrOB.style.top="0",t.sldPtrMB.style.border=d.pointerThickness+"px solid "+d.pointerColor,t.sldPtrS.style.width=d.sliderSize+"px",t.sldPtrS.style.height=m+"px",t.btn.style.display=d.closable?"block":"none",t.btn.style.position="absolute",t.btn.style.left=d.padding+"px",t.btn.style.bottom=d.padding+"px",t.btn.style.padding="0 15px",t.btn.style.height=d.buttonHeight+"px",t.btn.style.border=d.insetWidth+"px solid",l(),t.btn.style.color=d.buttonColor,t.btn.style.font="12px sans-serif",t.btn.style.textAlign="center";try{t.btn.style.cursor="pointer"}catch(c){t.btn.style.cursor="hand"}t.btn.onmousedown=function(){d.hide()},t.btnT.style.lineHeight=d.buttonHeight+"px",t.btnT.innerHTML="",t.btnT.appendChild(document.createTextNode(d.closeText)),a(),f(),e.picker.owner&&e.picker.owner!==d&&e.unsetClass(e.picker.owner.targetElement,d.activeClass),e.picker.owner=d,e.isElementType(v,"body")?e.redrawPosition():e._drawPosition(d,0,0,"relative",!1),t.wrap.parentNode!=v&&v.appendChild(t.wrap),e.setClass(d.targetElement,d.activeClass)}function a(){switch(e.getPadYComponent(d)){case"s":var t=1;break;case"v":var t=2}var n=Math.round(d.hsv[0]/360*(d.width-1)),r=Math.round((1-d.hsv[t]/100)*(d.height-1)),i=2*d.pointerBorderWidth+d.pointerThickness+2*d.crossSize,o=-Math.floor(i/2);e.picker.cross.style.left=n+o+"px",e.picker.cross.style.top=r+o+"px";switch(e.getSliderComponent(d)){case"s":var u=s(d.hsv[0],100,d.hsv[2]),a=s(d.hsv[0],0,d.hsv[2]),f="rgb("+Math.round(u[0])+","+Math.round(u[1])+","+Math.round(u[2])+")",l="rgb("+Math.round(a[0])+","+Math.round(a[1])+","+Math.round(a[2])+")";e.picker.sldGrad.draw(d.sliderSize,d.height,f,l);break;case"v":var c=s(d.hsv[0],d.hsv[1],100),f="rgb("+Math.round(c[0])+","+Math.round(c[1])+","+Math.round(c[2])+")",l="#000";e.picker.sldGrad.draw(d.sliderSize,d.height,f,l)}}function f(){var t=e.getSliderComponent(d);if(t){switch(t){case"s":var n=1;break;case"v":var n=2}var r=Math.round((1-d.hsv[n]/100)*(d.height-1));e.picker.sldPtrOB.style.top=r-(2*d.pointerBorderWidth+d.pointerThickness)-Math.floor(m/2)+"px"}}function l(){return e.picker&&e.picker.owner===d}function c(){d.importColor()}this.value=null,this.valueElement=t,this.styleElement=t,this.required=!0,this.refine=!0,this.hash=!1,this.uppercase=!0,this.onFineChange=null,this.activeClass="jscolor-active",this.minS=0,this.maxS=100,this.minV=0,this.maxV=100,this.hsv=[0,0,100],this.rgb=[255,255,255],this.width=181,this.height=101,this.showOnClick=!0,this.mode="HSV",this.position="bottom",this.smartPosition=!0,this.sliderSize=16,this.crossSize=8,this.closable=!1,this.closeText="Close",this.buttonColor="#000000",this.buttonHeight=18,this.padding=12,this.backgroundColor="#FFFFFF",this.borderWidth=1,this.borderColor="#BBBBBB",this.borderRadius=8,this.insetWidth=1,this.insetColor="#BBBBBB",this.shadow=!0,this.shadowBlur=15,this.shadowColor="rgba(0,0,0,0.2)",this.pointerColor="#4C4C4C",this.pointerBorderColor="#FFFFFF",this.pointerBorderWidth=1,this.pointerThickness=2,this.zIndex=1e3,this.container=null;for(var r in n)n.hasOwnProperty(r)&&(this[r]=n[r]);this.hide=function(){l()&&o()},this.show=function(){u()},this.redraw=function(){l()&&u()},this.importColor=function(){this.valueElement?e.isElementType(this.valueElement,"input")?this.refine?!this.required&&/^\s*$/.test(this.valueElement.value)?(this.valueElement.value="",this.styleElement&&(this.styleElement.style.backgroundImage=this.styleElement._jscOrigStyle.backgroundImage,this.styleElement.style.backgroundColor=this.styleElement._jscOrigStyle.backgroundColor,this.styleElement.style.color=this.styleElement._jscOrigStyle.color),this.exportColor(e.leaveValue|e.leaveStyle)):this.fromString(this.valueElement.value)||this.exportColor():this.fromString(this.valueElement.value,e.leaveValue)||(this.styleElement&&(this.styleElement.style.backgroundImage=this.styleElement._jscOrigStyle.backgroundImage,this.styleElement.style.backgroundColor=this.styleElement._jscOrigStyle.backgroundColor,this.styleElement.style.color=this.styleElement._jscOrigStyle.color),this.exportColor(e.leaveValue|e.leaveStyle)):this.exportColor():this.exportColor()},this.exportColor=function(t){if(!(t&e.leaveValue)&&this.valueElement){var n=this.toString();this.uppercase&&(n=n.toUpperCase()),this.hash&&(n="#"+n),e.isElementType(this.valueElement,"input")?this.valueElement.value=n:this.valueElement.innerHTML=n}t&e.leaveStyle||this.styleElement&&(this.styleElement.style.backgroundImage="none",this.styleElement.style.backgroundColor="#"+this.toString(),this.styleElement.style.color=this.isLight()?"#000":"#FFF"),!(t&e.leavePad)&&l()&&a(),!(t&e.leaveSld)&&l()&&f()},this.fromHSV=function(e,t,n,r){if(e!==null){if(isNaN(e))return!1;e=Math.max(0,Math.min(360,e))}if(t!==null){if(isNaN(t))return!1;t=Math.max(0,Math.min(100,this.maxS,t),this.minS)}if(n!==null){if(isNaN(n))return!1;n=Math.max(0,Math.min(100,this.maxV,n),this.minV)}this.rgb=s(e===null?this.hsv[0]:this.hsv[0]=e,t===null?this.hsv[1]:this.hsv[1]=t,n===null?this.hsv[2]:this.hsv[2]=n),this.exportColor(r)},this.fromRGB=function(e,t,n,r){if(e!==null){if(isNaN(e))return!1;e=Math.max(0,Math.min(255,e))}if(t!==null){if(isNaN(t))return!1;t=Math.max(0,Math.min(255,t))}if(n!==null){if(isNaN(n))return!1;n=Math.max(0,Math.min(255,n))}var o=i(e===null?this.rgb[0]:e,t===null?this.rgb[1]:t,n===null?this.rgb[2]:n);o[0]!==null&&(this.hsv[0]=Math.max(0,Math.min(360,o[0]))),o[2]!==0&&(this.hsv[1]=o[1]===null?null:Math.max(0,this.minS,Math.min(100,this.maxS,o[1]))),this.hsv[2]=o[2]===null?null:Math.max(0,this.minV,Math.min(100,this.maxV,o[2]));var u=s(this.hsv[0],this.hsv[1],this.hsv[2]);this.rgb[0]=u[0],this.rgb[1]=u[1],this.rgb[2]=u[2],this.exportColor(r)},this.fromString=function(e,t){var n;if(n=e.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i))return n[1].length===6?this.fromRGB(parseInt(n[1].substr(0,2),16),parseInt(n[1].substr(2,2),16),parseInt(n[1].substr(4,2),16),t):this.fromRGB(parseInt(n[1].charAt(0)+n[1].charAt(0),16),parseInt(n[1].charAt(1)+n[1].charAt(1),16),parseInt(n[1].charAt(2)+n[1].charAt(2),16),t),!0;if(n=e.match(/^\W*rgba?\(([^)]*)\)\W*$/i)){var r=n[1].split(","),i=/^\s*(\d*)(\.\d+)?\s*$/,s,o,u;if(r.length>=3&&(s=r[0].match(i))&&(o=r[1].match(i))&&(u=r[2].match(i))){var a=parseFloat((s[1]||"0")+(s[2]||"")),f=parseFloat((o[1]||"0")+(o[2]||"")),l=parseFloat((u[1]||"0")+(u[2]||""));return this.fromRGB(a,f,l,t),!0}}return!1},this.toString=function(){return(256|Math.round(this.rgb[0])).toString(16).substr(1)+(256|Math.round(this.rgb[1])).toString(16).substr(1)+(256|Math.round(this.rgb[2])).toString(16).substr(1)},this.toHEXString=function(){return"#"+this.toString().toUpperCase()},this.toRGBString=function(){return"rgb("+Math.round(this.rgb[0])+","+Math.round(this.rgb[1])+","+Math.round(this.rgb[2])+")"},this.isLight=function(){return.213*this.rgb[0]+.715*this.rgb[1]+.072*this.rgb[2]>127.5},this._processParentElementsInDOM=function(){if(this._linkedElementsProcessed)return;this._linkedElementsProcessed=!0;var t=this.targetElement;do{var n=e.getStyle(t);n&&n.position.toLowerCase()==="fixed"&&(this.fixed=!0),t!==this.targetElement&&(t._jscEventsAttached||(e.attachEvent(t,"scroll",e.onParentScroll),t._jscEventsAttached=!0))}while((t=t.parentNode)&&!e.isElementType(t,"body"))};if(typeof t=="string"){var h=t,p=document.getElementById(h);p?this.targetElement=p:e.warn("Could not find target element with ID '"+h+"'")}else t?this.targetElement=t:e.warn("Invalid target element: '"+t+"'");if(this.targetElement._jscLinkedInstance){e.warn("Cannot link jscolor twice to the same element. Skipping.");return}this.targetElement._jscLinkedInstance=this,this.valueElement=e.fetchElement(this.valueElement),this.styleElement=e.fetchElement(this.styleElement);var d=this,v=this.container?e.fetchElement(this.container):document.getElementsByTagName("body")[0],m=3;if(e.isElementType(this.targetElement,"button"))if(this.targetElement.onclick){var g=this.targetElement.onclick;this.targetElement.onclick=function(e){return g.call(this,e),!1}}else this.targetElement.onclick=function(){return!1};if(this.valueElement&&e.isElementType(this.valueElement,"input")){var y=function(){d.fromString(d.valueElement.value,e.leaveValue),e.dispatchFineChange(d)};e.attachEvent(this.valueElement,"keyup",y),e.attachEvent(this.valueElement,"input",y),e.attachEvent(this.valueElement,"blur",c),this.valueElement.setAttribute("autocomplete","off")}this.styleElement&&(this.styleElement._jscOrigStyle={backgroundImage:this.styleElement.style.backgroundImage,backgroundColor:this.styleElement.style.backgroundColor,color:this.styleElement.style.color}),this.value?this.fromString(this.value)||this.exportColor():this.importColor()}};return e.jscolor.lookupClass="jscolor",e.jscolor.installByClassName=function(t){var n=document.getElementsByTagName("input"),r=document.getElementsByTagName("button");e.tryInstallOnElements(n,t),e.tryInstallOnElements(r,t)},e.register(),e.jscolor}());
3261 3262 3263var SYMJS=SYMJS||{};SYMJS.loading=function(stop){if(typeof jQuery.easing=="undefined")return;if(typeof stop!="undefined"&&stop){$(".skcg").fadeOut(function(){$(this).remove();});}else{if(!$(".skcg").is(":visible")){$("#content-wrapper").append('<div class="skcg"><div class="skc skc1"></div><div class="skc skc2"></div><div class="skc skc3"></div><div class="skc skc4"></div><div class="skc skc5"></div><div class="skc skc6"></div><div class="skc skc7"></div><div class="skc skc8"></div><div class="skc skc9"></div></div>');if(typeof window.pageYOffset!="undefined"&&typeof window.innerHeight!="undefined"){$(".skcg").css("top",window.pageYOffset+window.innerHeight*0.4+"px");}}} 3264setTimeout(function(){$(".skcg").fadeOut(function(){$(this).remove();});},160000);};if(typeof get_params=='undefined'){var get_params=function get_params(){var query=window.location.search.substring(1);var vars=query.split("&");var output={};for(var i=0;i<vars.length;i++){var pair=vars[i].split("=");if(pair[0]!=''){output[pair[0]]=pair[1];}} 3265return output;}} 3266$.fn.ready(function(){if($('div.submenu').size()){$(this).mouseenter(function(){$(this).children('ul').css('display','block');}).mouseleave(function(){$(this).children('ul').css('display','none');});} 3267$('#event_menu_list > li:eq(9)').addClass('tenth');$.each($('.programa img, #speakers_container img, #patros_container img, #event-description-par img, .event_new_content img, #section_contents img'),function(){var fakeImage=$('<img>').attr('src',$(this).attr('src'));var imageRatio=fakeImage.attr('width')/$(this).width();var newHeight=$(this).height()/imageRatio;$(this).css('height',newHeight);});if($('#inscripcion.disabled').length){$('#inscripcion.disabled','.enrolment-button-container').unbind('click').click(function(){return false;});if($.browser.msie){$('#enrolment-button').css("filter","alpha(opacity=40)");}else{$('#enrolment-button').css('opacity',0.4);}} 3268else if($('#inscripcion:not(.disabled)').length) 3269{if($('#inscripcion').hasClass('external')){$('.enrolment-button-container a').unbind('click').click(function(){msgbox_confirm(msg.REDIRECTION_NOTIFY,msg.IF_YOU_CHOOSE_NO,function(result){if(result===true){window.open($('#inscripcion').attr('href'));}});return false;});}else{if($('#inscripcion').hasClass('user_has_choices')){$('.enrolment-button-container a').unbind('click').click(function(){msgbox($('#form_enrolment_overlay'));return false;});} 3270if(document.location.href.indexOf('?open_registration')>0){$('#inscripcion').click();}}} 3271if($('#button-contact').length>0){$('#button-contact').unbind('click').click(function(){msgbox($(this.rel),'',{overlay:{stack:false}});return false;});if(window.location.hash.match(/contact/)){$('#button-contact').click();}} 3272if($('textarea.sourcecode, textarea.spread').length){$('textarea.sourcecode, textarea.spread').unbind('click').click(function(){$(this).select();});} 3273if($('.timezone_warning').length){if(SYM.compare_timezone_offsets()){$('.timezone_warning').show();}}}); 3274!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(1)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(3),h=e(g),i=c(36),j=f(i),k=c(5),l=f(k),m=c(4),n=e(m),o=c(37),p=e(o),q=c(43),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(2)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(4),g=c(5),h=e(g),i=c(9),j=c(29),k=c(31),l=e(k),m=c(32),n="4.7.7";b.VERSION=n;var o=8;b.COMPILER_REVISION=o;var p=7;b.LAST_COMPATIBLE_COMPILER_REVISION=p;var q={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">
3274= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=q;var r="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===r)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var s=l["default"].log;b.log=s,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l<f.length;l++)this[f[l]]=k[f[l]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,this.endLineNumber=h,e?(Object.defineProperty(this,"column",{value:i,enumerable:!0}),Object.defineProperty(this,"endColumn",{value:j,enumerable:!0})):(this.column=i,this.endColumn=j))}catch(m){}}var e=c(6)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","endLineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(7),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){h["default"](a),j["default"](a),l["default"](a),n["default"](a),p["default"](a),r["default"](a),t["default"](a)}function e(a,b,c){a.helpers[b]&&(a.hooks[b]=a.helpers[b],c||delete a.helpers[b])}var f=c(2)["default"];b.__esModule=!0,b.registerDefaultHelpers=d,b.moveHelperToHooks=e;var g=c(10),h=f(g),i=c(11),j=f(i),k=c(24),l=f(k),m=c(25),n=f(m),o=c(26),p=f(o),q=c(27),r=f(q),s=c(28),t=f(s)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){(function(d){"use strict";var e=c(12)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(4),h=c(5),i=f(h);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){l&&(l.key=b,l.index=c,l.first=0===c,l.last=!!d,m&&(l.contextPath=m+b)),k+=f(a[b],{data:l,blockParams:g.blockParams([a[b],b],[m+b,null])})}if(!b)throw new i["default"]("Must pass iterator to #each");var f=b.fn,h=b.inverse,j=0,k="",l=void 0,m=void 0;if(b.data&&b.ids&&(m=g.appendContextPath(b.data.contextPath,b.ids[0])+"."),g.isFunction(a)&&(a=a.call(this)),b.data&&(l=g.createFrame(b.data)),a&&"object"==typeof a)if(g.isArray(a))for(var n=a.length;j<n;
vendor: 4,751 bytes, line 3274
3274j++)j in a&&c(j,j,j===a.length-1);else if(d.Symbol&&a[d.Symbol.iterator]){for(var o=[],p=a[d.Symbol.iterator](),q=p.next();!q.done;q=p.next())o.push(q.value);a=o;for(var n=a.length;j<n;j++)c(j,j,j===a.length-1)}else!function(){var b=void 0;e(a).forEach(function(a){void 0!==b&&c(b,j-1),b=a,j++}),void 0!==b&&c(b,j-1,!0)}();return 0===j&&(k=h(this)),k})},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b,c){a.exports={"default":c(13),__esModule:!0}},function(a,b,c){c(14),a.exports=c(20).Object.keys},function(a,b,c){var d=c(15);c(17)("keys",function(a){return function(b){return a(d(b))}})},function(a,b,c){var d=c(16);a.exports=function(a){return Object(d(a))}},function(a,b){a.exports=function(a){if(void 0==a)throw TypeError("Can't call method on "+a);return a}},function(a,b,c){var d=c(18),e=c(20),f=c(23);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(19),e=c(20),f=c(21),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(22);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(5),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("if",function(a,b){if(2!=arguments.length)throw new g["default"]("#if requires exactly one argument");return e.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||e.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){if(2!=arguments.length)throw new g["default"]("#unless requires exactly one argument");return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b,c){return a?c.lookupProperty(a,b):a})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("with",function(a,b){if(2!=arguments.length)throw new g["default"]("#with requires exactly one argument");e.isFunction(a)&&(a=a.call(this));var c=b.fn;if(e.isEmpty(a))return b.inverse(this);var d=b.data;return b.data&&b.ids&&(d=e.createFrame(b.data),d.contextPath=e.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:d,blockParams:e.blockParams([a],[d&&d.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(30),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if
3274("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=i(null);b.constructor=!1,b.__defineGetter__=!1,b.__defineSetter__=!1,b.__lookupGetter__=!1;var c=i(null);return c.__proto__=!1,{properties:{whitelist:l.createNewLookupObject(c,a.allowedProtoProperties),defaultValue:a.allowProtoPropertiesByDefault},methods:{whitelist:l.createNewLookupObject(b,a.allowedProtoMethods),defaultValue:a.allowProtoMethodsByDefault}}}function e(a,b,c){return"function"==typeof a?f(b.methods,c):f(b.properties,c)}function f(a,b){return void 0!==a.whitelist[b]?a.whitelist[b]===!0:void 0!==a.defaultValue?a.defaultValue:(g(b),!1)}function g(a){o[a]!==!0&&(o[a]=!0,n.log("error",'Handlebars: Access has been denied to resolve the property "'+a+'" because it is not an "own property" of its parent.\nYou can add a runtime option to disable the check or this warning:\nSee https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'))}function h(){j(o).forEach(function(a){delete o[a]})}var i=c(33)["default"],j=c(12)["default"],k=c(1)["default"];b.__esModule=!0,b.createProtoAccessControl=d,b.resultIsAllowed=e,b.resetLoggedProperties=h;var l=c(35),m=c(31),n=k(m),o=i(null)},function(a,b,c){a.exports={"default":c(34),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b){return d.create(a,b)}},function(a,b,c){"use strict";function d(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return f.extend.apply(void 0,[e(null)].concat(b))}var e=c(33)["default"];b.__esModule=!0,b.createNewLookupObject=d;var f=c(4)},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=v.COMPILER_REVISION;if(!(b>=v.LAST_COMPATIBLE_COMPILER_REVISION&&b<=v.COMPILER_REVISION)){if(b<v.LAST_COMPATIBLE_COMPILER_REVISION){var d=v.REVISION_CHANGES[c],e=v.REVISION_CHANGES[b];throw new u["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new u["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=s.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=s.extend({},e,{hooks:this.hooks,protoAccessControl:this.protoAccessControl}),g=b.VM.invokePartial.call(this,c,d,f);if(null==g&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),g=e.partials[e.name](d,f)),null!=g){if(e.indent){for(var h=g.split("\n"),i=0,j=h.length;i<j&&(h[i]||i+1!==j);i++)h[i]=e.indent+h[i];g=h.join("\n")}return g}throw new u["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(g,b,g.helpers,g.partials,f,i,h)}var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],f=e.data;d._setup(e),!e.partial&&a.useData&&(f=j(b,f));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=e.depths?b!=e.depths[0]?[b].concat(e.depths):e.depths:[b]),(c=k(a.main,c,g,e.depths||[],f,i))(b,e)}if(!b)throw new u["default"]("No environment passed to template");if(!a||!a.main)throw new u["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e=a.compiler&&7===a.compiler[0],g={strict:function(a,b,c){if(!(a&&b in a))throw new u["default"]('"'+b+'" not defined in '+a,{loc:c});return g.lookupProperty(a,b)},lookupProperty:function(a,b){var c=a[b];return null==c?c:Object.prototype.hasOwnProperty.call(a,b)?c:y.resultIsAllowed(c,g.protoAccessControl,b)?c:void 0},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++){var e=a[d]&&g.lookupProperty(a[d],b);if(null!=e)return a[d][b]}},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:s.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},mergeIfNeeded:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=s.extend({},b,a)),c},nullContext:n({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){if(c.partial)g.protoAccessControl
3274=c.protoAccessControl,g.helpers=c.helpers,g.partials=c.partials,g.decorators=c.decorators,g.hooks=c.hooks;else{var d=s.extend({},b.helpers,c.helpers);l(d,g),g.helpers=d,a.usePartial&&(g.partials=g.mergeIfNeeded(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(g.decorators=s.extend({},b.decorators,c.decorators)),g.hooks={},g.protoAccessControl=y.createProtoAccessControl(c);var f=c.allowCallsToHelperMissing||e;w.moveHelperToHooks(g,"helperMissing",f),w.moveHelperToHooks(g,"blockHelperMissing",f)}},d._child=function(b,c,d,e){if(a.useBlockParams&&!d)throw new u["default"]("must pass block params");if(a.useDepths&&!e)throw new u["default"]("must pass parent depths");return f(g,b,a[b],c,0,d,e)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=v.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=v.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=s.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new u["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?v.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),s.extend(b,g)}return b}function l(a,b){o(a).forEach(function(c){var d=a[c];a[c]=m(d,b)})}function m(a,b){var c=b.lookupProperty;return x.wrapHelper(a,function(a){return s.extend({lookupProperty:c},a)})}var n=c(38)["default"],o=c(12)["default"],p=c(1)["default"],q=c(2)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var r=c(4),s=p(r),t=c(5),u=q(t),v=c(3),w=c(9),x=c(42),y=c(32)},function(a,b,c){a.exports={"default":c(39),__esModule:!0}},function(a,b,c){c(40),a.exports=c(20).Object.seal},function(a,b,c){var d=c(41);c(17)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b){"use strict";function c(a,b){if("function"!=typeof a)return a;var c=function(){var c=arguments[arguments.length-1];return arguments[arguments.length-1]=b(c),a.apply(this,arguments)};return c}
3274b.__esModule=!0,b.wrapHelper=c},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())}])});Handlebars.VM.resolvePartial=function(partial,context,options){if(!partial){partial=options.partials[options.name];}else if(!partial.call&&!options.name){options.name=partial;partial=options.partials[partial];} 3275if(partial===undefined){partial=options.partials[options.name+'.ptl'];} 3276return partial;};(function($){'use strict';var cache={};var defaultSettings={templatePath:'',templateExtension:'handlebars',partialPath:'',partialExtension:'partial'};var settings=$.extend({},defaultSettings);function resolvePath(basePath,name,extension){basePath=basePath.replace(/[(^\s)(\s$)]/g,'');if(basePath.length){return basePath+'/'+name+'.'+extension;}else{return name+'.'+extension;}} 3277function resolveTemplatePath(name){return resolvePath(settings.templatePath,name,settings.templateExtension);} 3278function resolvePartialPath(name){return resolvePath(settings.partialPath,name,settings.partialExtension);} 3279function registerPartial(path,name){$.get(resolvePartialPath(path),function(partial){Handlebars.registerPartial(name,partial);},'text');} 3280$.handlebars=function(){if(typeof arguments[0]!=='string'){var options=arguments[0];settings=$.extend(defaultSettings,options);settings.templatePath=settings.templatePath.replace(/\\\/$/,'');settings.partialPath=settings.partialPath.replace(/\\\/$/,'');if(options.hasOwnProperty('partials')){var names;if(typeof options.partials!=='string'){names=options.partials;}else{names=options.partials.split(/\s+/g);} 3281for(var i=0;i<names.length;i++){registerPartial(names[i],names[i]);}}}else{switch(arguments[0]){case'partial':if(arguments.length<3){registerPartial(arguments[1],arguments[1]);}else{registerPartial(arguments[1],arguments[2]);} 3282break;case'helper':Handlebars.registerHelper(arguments[1],arguments[2]);break;default:throw'invalid action specified to jQuery.handlebars: '+arguments[0];}}};$.fn._render=function(templateName,data,callback){var url=resolveTemplatePath(templateName);if(Handlebars.templates.hasOwnProperty(templateName+'.tpl')){callback(Handlebars.templates[templateName+'.tpl'](data));}else{if(cache.hasOwnProperty(url)){callback(cache[url](data));}else{if(typeof Handlebars.compile!='undefined'){$.get(url,function(template){cache[url]=Handlebars.compile(template);Handlebars.templates[templateName+'.tpl']=cache[url];callback(cache[url](data));},'text');}else{console.error('[jQuery.Handlebars] Template '+templateName+' does not exists, fallback to detail.tpl.') 3283callback(Handlebars.templates['detail.tpl'](data));}}}};$.fn.render=function(templateName,data,callback){var $this=this;this._render(templateName,data,function(html){$this.html(html);$('body').trigger('render.handlebars',[templateName,data]);if(typeof callback=='function')callback();});return this;};$.fn.renderAppend=function(templateName,data,callback){var $this=this;this._render(templateName,data,function(html){$this.append(html);$('body').trigger('render.handlebars',[templateName,data]);if(typeof callback=='function')callback();});return this;};$.fn.partialAppend=function(partialName,data,callback){if(typeof Handlebars.partials[partialName+'.ptl']!='undefined'){if(typeof data=='undefined'){data={};} 3284if(typeof data.context=='undefined'&&typeof SYM!='undefined'&&typeof SYM.data!='undefined'){data.context=SYM.data;} 3285this.append(Handlebars.partials[partialName+'.ptl'](data));$('body').trigger('render.handlebars',[partialName,data]);if(typeof callback=='function')callback();}else{console.warn('Partial "'+partialName+'" does not exist');} 3286return this;};$.partialRender=function(partialName,data){var output='';if(typeof Handlebars.partials[partialName+'.ptl']!='undefined'){if(typeof data=='undefined'){data={};} 3287if(typeof data.context=='undefined'&&typeof SYM!='undefined'&&typeof SYM.data!='undefined'){data.context=SYM.data;} 3288output=(Handlebars.partials[partialName+'.ptl'](data));$('body').trigger('render.handlebars',[partialName,data]);}else{console.warn('Partial "'+partialName+'" does not exist');} 3289return output;};}(jQuery)); 3290 3291SYMJS=window.SYMJS||{};SYMJS.COLOROVERLAY=$.extend(SYMJS.COLOROVERLAY||{},function(){return{popover_element:'#customize-overlay .icon-brush',init:function(){$('body').on('render.handlebars',function(e,template){if($('.menu-colors').length==0){if(SYM.data.allowed){if(SYM.data.template_customs.length==0){SYM.data.template_customs={block_background_color:SYM.data.template_defaults.blockBackgroun
3291dColor,block_border_color:SYM.data.template_defaults.blockBorderColor,block_header_text_color:SYM.data.template_defaults.blockHeaderTextColor,header_color_background:SYM.data.template_defaults.headerColorBackground,header_font_color:SYM.data.template_defaults.headerFontColor,highlight_color:SYM.data.template_defaults.highlightColor,highlight_contrast_color:SYM.data.template_defaults.highlightContrastColor};} 3292$('body').partialAppend('menu-colors',SYM.data.template_customs,function(){var altura=$('#customize-overlay').offset().top-30;$(window).on('scroll',function(){if($(window).scrollTop()>altura){$('#customize-overlay').addClass('menu-fixed');}else{$('#customize-overlay').removeClass('menu-fixed');}});$('#customize-overlay .icon-brush').click(function(){$('#customize-overlay').toggleClass('hide-menu-colors','show-menu-colors');localStorage.setItem('colors'+SYM.data.id,1);$(SYMJS.COLOROVERLAY.popover_element).popover('destroy');});$('#customize-overlay .icon-restore').click(function(){SYMJS.COLOROVERLAY.inputs_colors();SYMJS.COLOROVERLAY.less_colors();SYMJS.COLOROVERLAY.save_colors();});$('#customize-overlay input.jscolor').change(function(){SYMJS.COLOROVERLAY.less_colors(SYMJS.COLOROVERLAY.get_colors_from_overlay());SYMJS.COLOROVERLAY.save_colors();});SYMJS.COLOROVERLAY.less_colors(SYM.data.template_customs);if(typeof localStorage!='undefined'&&!localStorage.getItem('colors'+SYM.data.id)){const popoverContainer='body';const popoverOptions={title:msg.CUSTOM_COLORS_TITLE,content:msg.CUSTOM_COLORS_CONTENT,placement:"right",container:popoverContainer};setTimeout(()=>{$(SYMJS.COLOROVERLAY.popover_element).popover(popoverOptions);$(SYMJS.COLOROVERLAY.popover_element).popover("show");},50);}});}}});},save_colors:function(colors){if(typeof colors=='undefined'){colors=SYMJS.COLOROVERLAY.get_colors_from_overlay();} 3293$.ajax({url:noCache('/new_event_detail/customize_template/'+SYM.data.id),method:"POST",data:colors,success:function(response){SYM.data.template_customs=JSON.parse(response);}});},less_colors:function(colors){SYMJS.loading();if(typeof colors=='undefined'){colors=SYM.data.template_defaults;} 3294if(typeof colors.highlightColor=='undefined'){colors=SYMJS.COLOROVERLAY.underToCamel(colors);} 3295less.modifyVars({'@highlightColor':colors.highlightColor,'@highlightContrastColor':colors.highlightContrastColor,'@headerColorBackground':colors.headerColorBackground,'@headerFontColor':colors.headerFontColor,'@blockBackgroundColor':colors.blockBackgroundColor,'@blockBorderColor':colors.blockBorderColor,'@blockHeaderTextColor':colors.blockHeaderTextColor});SYMJS.loading(true);},inputs_colors:function(colors){if(typeof colors=='undefined'){colors=SYM.data.template_defaults;} 3296$("#highlightColor").attr("value",colors.highlightColor).css("background",colors.highlightColor).css("color","white");document.getElementById('highlightColor').jscolor.fromString(colors.highlightColor.split("#").join(""));$("#highlightContrastColor").attr("value",colors.highlightContrastColor).css("background",colors.highlightContrastColor).css("color","black");document.getElementById('highlightContrastColor').jscolor.fromString(colors.highlightContrastColor.split("#").join(""));$("#headerColorBackground").attr("value",colors.headerColorBackground).css("background",colors.headerColorBackground).css("color","black");document.getElementById('headerColorBackground').jscolor.fromString(colors.headerColorBackground.split("#").join(""));$("#headerFontColor").attr("value",colors.headerFontColor).css("background",colors.headerFontColor).css("color","white");document.getElementById('headerFontColor').jscolor.fromString(colors.headerFontColor.split("#").join(""));$("#blockBackgroundColor").attr("value",colors.blockBackgroundColor).css("background",colors.blockBackgroundColor).css("color","black");document.getElementById('blockBackgroundColor').jscolor.fromString(colors.blockBackgroundColor.split("#").join(""));$("#blockHeaderTextColor").attr("value",colors.blockHeaderTextColor).css("background",colors.blockHeaderTextColor).css("color","white");document.getElementById('blockHeaderTextColor').jscolor.fromString(colors.blockHeaderTextColor.split("#").join(""));$("#blockBorderColor").attr("value",colors.blockBorderColor).css("background",colors.blockBorderColor).css("color","black");document.getElementById('blockBorderColor').jscolor.fromString(colors.blockBorderColor.split("#").join(""));},get_colors_from_overlay:function(){colors={};colors['highlightColor']='#'+$('#highlightColor').val();colors['highlightContrastColor']='#'+$('#highlightContrastColor').val();
3296colors['headerColorBackground']='#'+$('#headerColorBackground').val();colors['headerFontColor']='#'+$('#headerFontColor').val();colors['blockBackgroundColor']='#'+$('#blockBackgroundColor').val();colors['blockBorderColor']='#'+$('#blockBorderColor').val();colors['blockHeaderTextColor']='#'+$('#blockHeaderTextColor').val();return colors;},camelToUnder:function(colors){colors['block_background_color']=(typeof colors['blockBackgroundColor']!='undefined')?colors['blockBackgroundColor']:null;colors['block_border_color']=(typeof colors['blockBorderColor']!='undefined')?colors['blockBorderColor']:null;colors['block_header_text_color']=(typeof colors['blockHeaderTextColor']!='undefined')?colors['blockHeaderTextColor']:null;colors['header_color_background']=(typeof colors['headerColorBackground']!='undefined')?colors['headerColorBackground']:null;colors['header_font_color']=(typeof colors['headerFontColor']!='undefined')?colors['headerFontColor']:null;colors['highlight_color']=(typeof colors['highlightColor']!='undefined')?colors['highlightColor']:null;colors['highlight_contrast_color']=(typeof colors['highlightContrastColor']!='undefined')?colors['highlightContrastColor']:null;return colors;},underToCamel:function(colors){colors['blockBackgroundColor']=(typeof colors['block_background_color']!='undefined')?colors['block_background_color']:null;colors['blockBorderColor']=(typeof colors['block_border_color']!='undefined')?colors['block_border_color']:null;colors['blockHeaderTextColor']=(typeof colors['block_header_text_color']!='undefined')?colors['block_header_text_color']:null;colors['headerColorBackground']=(typeof colors['header_color_background']!='undefined')?colors['header_color_background']:null;colors['headerFontColor']=(typeof colors['header_font_color']!='undefined')?colors['header_font_color']:null;colors['highlightColor']=(typeof colors['highlight_color']!='undefined')?colors['highlight_color']:null;colors['highlightContrastColor']=(typeof colors['highlight_contrast_color']!='undefined')?colors['highlight_contrast_color']:null;return colors;}};}());$.fn.ready(function(){SYMJS.COLOROVERLAY.init();});
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.