1/** 2 * @file 3 * Drupal Bootstrap object. 4 */ 5 6/** 7 * All Drupal Bootstrap JavaScript APIs are contained in this namespace. 8 * 9 * @param {underscore} _ 10 * @param {jQuery} $ 11 * @param {Drupal} Drupal 12 * @param {drupalSettings} drupalSettings 13 */ 14(function (_, $, Drupal, drupalSettings) { 15 'use strict'; 16 17 /** 18 * @typedef Drupal.bootstrap 19 */ 20 var Bootstrap = { 21 processedOnce: {}, 22 settings: drupalSettings.bootstrap || {} 23 }; 24 25 /** 26 * Wraps Drupal.checkPlain() to ensure value passed isn't empty. 27 * 28 * Encodes special characters in a plain-text string for display as HTML. 29 * 30 * @param {string} str 31 * The string to be encoded. 32 * 33 * @return {string} 34 * The encoded string. 35 * 36 * @ingroup sanitization 37 */ 38 Bootstrap.checkPlain = function (str) { 39 return str && Drupal.checkPlain(str) || ''; 40 }; 41 42 /** 43 * Creates a jQuery plugin. 44 * 45 * @param {String} id 46 * A jQuery plugin identifier located in $.fn. 47 * @param {Function} plugin 48 * A constructor function used to initialize the for the jQuery plugin. 49 * @param {Boolean} [noConflict] 50 * Flag indicating whether or not to create a ".noConflict()" helper method 51 * for the plugin. 52 */ 53 Bootstrap.createPlugin = function (id, plugin, noConflict) { 54 // Immediately return if plugin doesn't exist. 55 if ($.fn[id] !== void 0) { 56 return this.fatal('Specified jQuery plugin identifier already exists: @id. Use Drupal.bootstrap.replacePlugin() instead.', {'@id': id}); 57 } 58 59 // Immediately return if plugin isn't a function. 60 if (typeof plugin !== 'function') { 61 return this.fatal('You must provide a constructor function to create a jQuery plugin "@id": @plugin', {'@id': id, '@plugin': plugin}); 62 } 63 64 // Add a ".noConflict()" helper method. 65 this.pluginNoConflict(id, plugin, noConflict); 66 67 $.fn[id] = plugin; 68 }; 69 70 /** 71 * Diff object properties. 72 * 73 * @param {...Object} objects 74 * Two or more objects. The first object will be used to return properties 75 * values. 76 * 77 * @return {Object} 78 * Returns the properties of the first passed object that are not present 79 * in all other passed objects. 80 */ 81 Bootstrap.diffObjects = function (objects) { 82 var args = Array.prototype.slice.call(arguments); 83 return _.pick(args[0], _.difference.apply(_, _.map(args, function (obj) { 84 return Object.keys(obj); 85 }))); 86 }; 87 88 /** 89 * Map of supported events by regular expression. 90 * 91 * @type {Object<Event|MouseEvent|KeyboardEvent|TouchEvent,RegExp>} 92 */ 93 Bootstrap.eventMap = { 94 Event: /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/, 95 MouseEvent: /^(?:click|dblclick|mouse(?:down|enter|leave|up|over|move|out))$/, 96 KeyboardEvent: /^(?:key(?:down|press|up))$/, 97 TouchEvent: /^(?:touch(?:start|end|move|cancel))$/ 98 }; 99 100 /** 101 * Extends a jQuery Plugin. 102 * 103 * @param {String} id 104 * A jQuery plugin identifier located in $.fn. 105 * @param {Function} callback 106 * A constructor function used to initialize the for the jQuery plugin. 107 * 108 * @return {Function|Boolean} 109 * The jQuery plugin constructor or FALSE if the plugin does not exist. 110 */ 111 Bootstrap.extendPlugin = function (id, callback) { 112 // Immediately return if plugin doesn't exist. 113 if (typeof $.fn[id] !== 'function') { 114 return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id': id}); 115 } 116 117 // Immediately return if callback isn't a function. 118 if (typeof callback !== 'function') { 119 return this.fatal('You must provide a callback function to extend the jQuery plugin "@id": @callback', {'@id': id, '@callback': callback}); 120 } 121 122 // Determine existing plugin constructor. 123 var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id]; 124 var plugin = callback.apply(constructor, [this.settings]); 125 if (!$.isPlainObject(plugin)) { 126 return this.fatal('Returned value from callback is not a plain object that can be used to extend the jQuery plugin "@id": @obj', {'@obj': plugin}); 127 } 128 129 this.wrapPluginConstructor(constructor, plugin, true); 130 131 return $.fn[id]; 132 }; 133 134 Bootstrap.superWrapper = function (parent, fn) { 135 return function () { 136 var previousSuper = this.super; 137 this.super = parent; 138 var ret = fn.apply(this, arguments); 139 if (previousSuper) { 140 this.super = previousSuper; 141 } 142 else { 143 delete this.super; 144 } 145 return ret; 146 }; 147 }; 148 149 /** 150 * Provide a helper method for displaying when something is went wrong. 151 * 152 * @param {String} message 153 * The message to display. 154 * @param {Object} [args] 155 * An arguments to use in message. 156 * 157 * @return {Boolean} 158 * Always returns FALSE. 159 */
160 Bootstrap.fatal = function (message, args) { 161 if (this.settings.dev && console.warn) { 162 for (var name in args) { 163 if (args.hasOwnProperty(name) && typeof args[name] === 'object') { 164 args[name] = JSON.stringify(args[name]); 165 } 166 } 167 Drupal.throwError(new Error(Drupal.formatString(message, args))); 168 } 169 return false; 170 }; 171 172 /** 173 * Intersects object properties. 174 * 175 * @param {...Object} objects 176 * Two or more objects. The first object will be used to return properties 177 * values. 178 * 179 * @return {Object} 180 * Returns the properties of first passed object that intersects with all 181 * other passed objects. 182 */ 183 Bootstrap.intersectObjects = function (objects) { 184 var args = Array.prototype.slice.call(arguments); 185 return _.pick(args[0], _.intersection.apply(_, _.map(args, function (obj) { 186 return Object.keys(obj); 187 }))); 188 }; 189 190 /** 191 * Normalizes an object's values. 192 * 193 * @param {Object} obj 194 * The object to normalize. 195 * 196 * @return {Object} 197 * The normalized object. 198 */ 199 Bootstrap.normalizeObject = function (obj) { 200 if (!$.isPlainObject(obj)) { 201 return obj; 202 } 203 204 for (var k in obj) { 205 if (typeof obj[k] === 'string') { 206 if (obj[k] === 'true') { 207 obj[k] = true; 208 } 209 else if (obj[k] === 'false') { 210 obj[k] = false; 211 } 212 else if (obj[k].match(/^[\d-.]$/)) { 213 obj[k] = parseFloat(obj[k]); 214 } 215 } 216 else if ($.isPlainObject(obj[k])) { 217 obj[k] = Bootstrap.normalizeObject(obj[k]); 218 } 219 } 220 221 return obj; 222 }; 223 224 /** 225 * An object based once plugin (similar to jquery.once, but without the DOM). 226 * 227 * @param {String} id 228 * A unique identifier. 229 * @param {Function} callback 230 * The callback to invoke if the identifier has not yet been seen. 231 * 232 * @return {Bootstrap} 233 */ 234 Bootstrap.once = function (id, callback) { 235 // Immediately return if identifier has already been processed. 236 if (this.processedOnce[id]) { 237 return this; 238 } 239 callback.call(this, this.settings); 240 this.processedOnce[id] = true; 241 return this; 242 }; 243 244 /** 245 * Provide jQuery UI like ability to get/set options for Bootstrap plugins. 246 * 247 * @param {string|object} key 248 * A string value of the option to set, can be dot like to a nested key. 249 * An object of key/value pairs. 250 * @param {*} [value] 251 * (optional) A value to set for key. 252 * 253 * @returns {*} 254 * - Returns nothing if key is an object or both key and value parameters 255 * were provided to set an option. 256 * - Returns the a value for a specific setting if key was provided. 257 * - Returns an object of key/value pairs of all the options if no key or 258 * value parameter was provided. 259 * 260 * @see https://github.com/jquery/jquery-ui/blob/master/ui/widget.js 261 */ 262 Bootstrap.option = function (key, value) { 263 var options = $.isPlainObject(key) ? $.extend({}, key) : {}; 264 265 // Get all options (clone so it doesn't reference the internal object). 266 if (arguments.length === 0) { 267 return $.extend({}, this.options); 268 } 269 270 // Get/set single option. 271 if (typeof key === "string") { 272 // Handle nested keys in dot notation. 273 // e.g., "foo.bar" => { foo: { bar: true } } 274 var parts = key.split('.'); 275 key = parts.shift(); 276 var obj = options; 277 if (parts.length) { 278 for (var i = 0; i < parts.length - 1; i++) { 279 obj[parts[i]] = obj[parts[i]] || {}; 280 obj = obj[parts[i]]; 281 } 282 key = parts.pop(); 283 } 284 285 // Get. 286 if (arguments.length === 1) { 287 return obj[key] === void 0 ? null : obj[key]; 288 } 289 290 // Set. 291 obj[key] = value; 292 } 293 294 // Set multiple options. 295 $.extend(true, this.options, options); 296 }; 297 298 /** 299 * Adds a ".noConflict()" helper method if needed. 300 * 301 * @param {String} id 302 * A jQuery plugin identifier located in $.fn. 303 * @param {Function} plugin 304 * @param {Function} plugin 305 * A constructor function used to initialize the for the jQuery plugin. 306 * @param {Boolean} [noConflict]
307 * Flag indicating whether or not to create a ".noConflict()" helper method 308 * for the plugin. 309 */ 310 Bootstrap.pluginNoConflict = function (id, plugin, noConflict) { 311 if (plugin.noConflict === void 0 && (noConflict === void 0 || noConflict)) { 312 var old = $.fn[id]; 313 plugin.noConflict = function () { 314 $.fn[id] = old; 315 return this; 316 }; 317 } 318 }; 319 320 /** 321 * Creates a handler that relays to another event name. 322 * 323 * @param {HTMLElement|jQuery} target 324 * A target element. 325 * @param {String} name 326 * The name of the event to trigger. 327 * @param {Boolean} [stopPropagation=true] 328 * Flag indicating whether to stop the propagation of the event, defaults 329 * to true. 330 * 331 * @return {Function} 332 * An even handler callback function. 333 */ 334 Bootstrap.relayEvent = function (target, name, stopPropagation) { 335 return function (e) { 336 if (stopPropagation === void 0 || stopPropagation) { 337 e.stopPropagation(); 338 } 339 var $target = $(target); 340 var parts = name.split('.').filter(Boolean); 341 var type = parts.shift(); 342 e.target = $target[0]; 343 e.currentTarget = $target[0]; 344 e.namespace = parts.join('.'); 345 e.type = type; 346 $target.trigger(e); 347 }; 348 }; 349 350 /** 351 * Replaces a Bootstrap jQuery plugin definition. 352 * 353 * @param {String} id 354 * A jQuery plugin identifier located in $.fn. 355 * @param {Function} callback 356 * A callback function that is immediately invoked and must return a 357 * function that will be used as the plugin constructor. 358 * @param {Boolean} [noConflict] 359 * Flag indicating whether or not to create a ".noConflict()" helper method 360 * for the plugin. 361 */ 362 Bootstrap.replacePlugin = function (id, callback, noConflict) { 363 // Immediately return if plugin doesn't exist. 364 if (typeof $.fn[id] !== 'function') { 365 return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id': id}); 366 } 367 368 // Immediately return if callback isn't a function. 369 if (typeof callback !== 'function') { 370 return this.fatal('You must provide a valid callback function to replace a jQuery plugin: @callback', {'@callback': callback}); 371 } 372 373 // Determine existing plugin constructor. 374 var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id]; 375 var plugin = callback.apply(constructor, [this.settings]); 376 377 // Immediately return if plugin isn't a function. 378 if (typeof plugin !== 'function') { 379 return this.fatal('Returned value from callback is not a usable function to replace a jQuery plugin "@id": @plugin', {'@id': id, '@plugin': plugin}); 380 } 381 382 this.wrapPluginConstructor(constructor, plugin); 383 384 // Add a ".noConflict()" helper method. 385 this.pluginNoConflict(id, plugin, noConflict); 386 387 $.fn[id] = plugin; 388 }; 389 390 /** 391 * Simulates a native event on an element in the browser. 392 * 393 * Note: This is a fairly complete modern implementation. If things aren't 394 * working quite the way you intend (in older browsers), you may wish to use 395 * the jQuery.simulate plugin. If it's available, this method will defer to 396 * that plugin. 397 * 398 * @see https://github.com/jquery/jquery-simulate 399 * 400 * @param {HTMLElement|jQuery} element 401 * A DOM element to dispatch event on. Note: this may be a jQuery object, 402 * however be aware that this will trigger the same event for each element 403 * inside the jQuery collection; use with caution. 404 * @param {String|String[]} type 405 * The type(s) of event to simulate. 406 * @param {Object} [options] 407 * An object of options to pass to the event constructor. Typically, if 408 * an event is being proxied, you should just pass the original event 409 * object here. This allows, if the browser supports it, to be a truly 410 * simulated event. 411 * 412 * @return {Boolean} 413 * The return value is false if event is cancelable and at least one of the 414 * event handlers which handled this event called Event.preventDefault(). 415 * Otherwise it returns true. 416 */ 417 Bootstrap.simulate = function (element, type, options) { 418 // Handle jQuery object wrappers so it triggers on each element. 419 var ret = true; 420 if (element instanceof $) { 421 element.each(function () { 422 if (!Bootstrap.simulate(this, type, options)) { 423 ret = false;
424 } 425 }); 426 return ret; 427 } 428 429 if (!(element instanceof HTMLElement)) { 430 this.fatal('Passed element must be an instance of HTMLElement, got "@type" instead.', { 431 '@type': typeof element, 432 }); 433 } 434 435 // Defer to the jQuery.simulate plugin, if it's available. 436 if (typeof $.simulate === 'function') { 437 new $.simulate(element, type, options); 438 return true; 439 } 440 441 var event; 442 var ctor; 443 var types = [].concat(type); 444 for (var i = 0, l = types.length; i < l; i++) { 445 type = types[i]; 446 for (var name in this.eventMap) { 447 if (this.eventMap[name].test(type)) { 448 ctor = name; 449 break; 450 } 451 } 452 if (!ctor) { 453 throw new SyntaxError('Only rudimentary HTMLEvents, KeyboardEvents and MouseEvents are supported: ' + type); 454 } 455 var opts = {bubbles: true, cancelable: true}; 456 if (ctor === 'KeyboardEvent' || ctor === 'MouseEvent') { 457 $.extend(opts, {ctrlKey: !1, altKey: !1, shiftKey: !1, metaKey: !1}); 458 } 459 if (ctor === 'MouseEvent') { 460 $.extend(opts, {button: 0, pointerX: 0, pointerY: 0, view: window}); 461 } 462 if (options) { 463 $.extend(opts, options); 464 } 465 if (typeof window[ctor] === 'function') { 466 event = new window[ctor](type, opts); 467 if (!element.dispatchEvent(event)) { 468 ret = false;
469 } 470 } 471 else if (document.createEvent) { 472 event = document.createEvent(ctor); 473 event.initEvent(type, opts.bubbles, opts.cancelable); 474 if (!element.dispatchEvent(event)) { 475 ret = false; 476 } 477 } 478 else if (typeof element.fireEvent === 'function') { 479 event = $.extend(document.createEventObject(), opts); 480 if (!element.fireEvent('on' + type, event)) { 481 ret = false; 482 } 483 } 484 else if (typeof element[type]) { 485 element[type](); 486 } 487 } 488 return ret; 489 }; 490 491 /** 492 * Strips HTML and returns just text. 493 * 494 * @param {String|Element|jQuery} html 495 * A string of HTML content, an Element DOM object or a jQuery object. 496 * 497 * @return {String} 498 * The text without HTML tags. 499 * 500 * @todo Replace with http://locutus.io/php/strings/strip_tags/ 501 */ 502 Bootstrap.stripHtml = function (html) { 503 if (html instanceof $) { 504 html = html.html(); 505 } 506 else if (html instanceof Element) { 507 html = html.innerHTML; 508 } 509 var tmp = document.createElement('DIV'); 510 tmp.innerHTML = html; 511 return (tmp.textContent || tmp.innerText || '').replace(/^[\s\n\t]*|[\s\n\t]*$/, ''); 512 }; 513 514 /** 515 * Provide a helper method for displaying when something is unsupported. 516 * 517 * @param {String} type 518 * The type of unsupported object, e.g. method or option. 519 * @param {String} name 520 * The name of the unsupported object. 521 * @param {*} [value] 522 * The value of the unsupported object. 523 */ 524 Bootstrap.unsupported = function (type, name, value) { 525 Bootstrap.warn('Unsupported by Drupal Bootstrap: (@type) @name -> @value', { 526 '@type': type, 527 '@name': name, 528 '@value': typeof value === 'object' ? JSON.stringify(value) : value 529 }); 530 }; 531 532 /** 533 * Provide a helper method to display a warning. 534 * 535 * @param {String} message 536 * The message to display. 537 * @param {Object} [args] 538 * Arguments to use as replacements in Drupal.formatString. 539 */ 540 Bootstrap.warn = function (message, args) { 541 if (this.settings.dev && console.warn) { 542 console.warn(Drupal.formatString(message, args)); 543 } 544 }; 545 546 /** 547 * Wraps a plugin with common functionality. 548 * 549 * @param {Function} constructor 550 * A plugin constructor being wrapped. 551 * @param {Object|Function} plugin 552 * The plugin being wrapped. 553 * @param {Boolean} [extend = false] 554 * Whether to add super extensibility. 555 */ 556 Bootstrap.wrapPluginConstructor = function (constructor, plugin, extend) { 557 var proto = constructor.prototype; 558 559 // Add a jQuery UI like option getter/setter method. 560 var option = this.option; 561 if (proto.option === void(0)) { 562 proto.option = function () { 563 return option.apply(this, arguments); 564 }; 565 } 566 567 if (extend) { 568 // Handle prototype properties separately. 569 if (plugin.prototype !== void 0) { 570 for (var key in plugin.prototype) { 571 if (!plugin.prototype.hasOwnProperty(key)) continue; 572 var value = plugin.prototype[key]; 573 if (typeof value === 'function') { 574 proto[key] = this.superWrapper(proto[key] || function () {}, value); 575 } 576 else { 577 proto[key] = $.isPlainObject(value) ? $.extend(true, {}, proto[key], value) : value; 578 } 579 } 580 } 581 delete plugin.prototype; 582 583 // Handle static properties. 584 for (key in plugin) { 585 if (!plugin.hasOwnProperty(key)) continue; 586 value = plugin[key]; 587 if (typeof value === 'function') { 588 constructor[key] = this.superWrapper(constructor[key] || function () {}, value); 589 } 590 else { 591 constructor[key] = $.isPlainObject(value) ? $.extend(true, {}, constructor[key], value) : value; 592 } 593 } 594 } 595 }; 596 597 // Add Bootstrap to the global Drupal object. 598 Drupal.bootstrap = Drupal.bootstrap || Bootstrap; 599 600})(window._, window.jQuery, window.Drupal, window.drupalSettings); 601; 602(function ($, _) { 603 604 /** 605 * @class Attributes 606 * 607 * Modifies attributes. 608 * 609 * @param {Object|Attributes} attributes 610 * An object to initialize attributes with. 611 */ 612 var Attributes = function (attributes) { 613 this.data = {}; 614 this.data['class'] = [];
615 this.merge(attributes); 616 }; 617 618 /** 619 * Renders the attributes object as a string to inject into an HTML element. 620 * 621 * @return {String} 622 * A rendered string suitable for inclusion in HTML markup. 623 */ 624 Attributes.prototype.toString = function () { 625 var output = ''; 626 var name, value; 627 var checkPlain = function (str) { 628 return str && str.toString().replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>') || ''; 629 }; 630 var data = this.getData(); 631 for (name in data) { 632 if (!data.hasOwnProperty(name)) continue; 633 value = data[name]; 634 if (_.isFunction(value)) value = value(); 635 if (_.isObject(value)) value = _.values(value); 636 if (_.isArray(value)) value = value.join(' '); 637 output += ' ' + checkPlain(name) + '="' + checkPlain(value) + '"'; 638 } 639 return output; 640 }; 641 642 /** 643 * Renders the Attributes object as a plain object. 644 * 645 * @return {Object} 646 * A plain object suitable for inclusion in DOM elements. 647 */ 648 Attributes.prototype.toPlainObject = function () { 649 var object = {}; 650 var name, value; 651 var data = this.getData(); 652 for (name in data) { 653 if (!data.hasOwnProperty(name)) continue; 654 value = data[name]; 655 if (_.isFunction(value)) value = value(); 656 if (_.isObject(value)) value = _.values(value); 657 if (_.isArray(value)) value = value.join(' '); 658 object[name] = value; 659 } 660 return object; 661 }; 662 663 /** 664 * Add class(es) to the array. 665 * 666 * @param {string|Array} value 667 * An individual class or an array of classes to add. 668 * 669 * @return {Attributes} 670 * 671 * @chainable 672 */ 673 Attributes.prototype.addClass = function (value) { 674 var args = Array.prototype.slice.call(arguments); 675 this.data['class'] = this.sanitizeClasses(this.data['class'].concat(args)); 676 return this; 677 }; 678 679 /** 680 * Returns whether the requested attribute exists. 681 * 682 * @param {string} name 683 * An attribute name to check. 684 * 685 * @return {boolean} 686 * TRUE or FALSE 687 */ 688 Attributes.prototype.exists = function (name) { 689 return this.data[name] !== void(0) && this.data[name] !== null; 690 }; 691 692 /** 693 * Retrieve a specific attribute from the array. 694 * 695 * @param {string} name 696 * The specific attribute to retrieve. 697 * @param {*} defaultValue 698 * (optional) The default value to set if the attribute does not exist. 699 * 700 * @return {*} 701 * A specific attribute value, passed by reference. 702 */ 703 Attributes.prototype.get = function (name, defaultValue) { 704 if (!this.exists(name)) this.data[name] = defaultValue; 705 return this.data[name]; 706 }; 707 708 /** 709 * Retrieves a cloned copy of the internal attributes data object. 710 * 711 * @return {Object} 712 */ 713 Attributes.prototype.getData = function () { 714 return _.extend({}, this.data); 715 }; 716 717 /** 718 * Retrieves classes from the array. 719 * 720 * @return {Array} 721 * The classes array. 722 */ 723 Attributes.prototype.getClasses = function () { 724 return this.get('class', []); 725 }; 726 727 /** 728 * Indicates whether a class is present in the array. 729 * 730 * @param {string|Array} className 731 * The class(es) to search for. 732 * 733 * @return {boolean} 734 * TRUE or FALSE 735 */ 736 Attributes.prototype.hasClass = function (className) { 737 className = this.sanitizeClasses(Array.prototype.slice.call(arguments)); 738 var classes = this.getClasses(); 739 for (var i = 0, l = className.length; i < l; i++) { 740 // If one of the classes fails, immediately return false. 741 if (_.indexOf(classes, className[i]) === -1) { 742 return false; 743 } 744 } 745 return true; 746 }; 747 748 /** 749 * Merges multiple values into the array. 750 * 751 * @param {Attributes|Node|jQuery|Object} object 752 * An Attributes object with existing data, a Node DOM element, a jQuery 753 * instance or a plain object where the key is the attribute name and the 754 * value is the attribute value. 755 * @param {boolean} [recursive] 756 * Flag determining whether or not to recursively merge key/value pairs. 757 * 758 * @return {Attributes} 759 * 760 * @chainable 761 */ 762 Attributes.prototype.merge = function (object, recursive) { 763 // Immediately return if there is nothing to merge. 764 if (!object) { 765 return this; 766 } 767 768 // Get attributes from a jQuery element. 769 if (object instanceof $) { 770 object = object[0]; 771 } 772 773 // Get attributes from a DOM element. 774 if (object instanceof Node) { 775 object = Array.prototype.slice.call(object.attributes).reduce(function (attributes, attribute) { 776 attributes[attribute.name] = attribute.value; 777 return attributes; 778 }, {}); 779 } 780 // Get attributes from an Attributes instance. 781 else if (object instanceof Attributes) { 782 object = object.getData(); 783 } 784 // Otherwise, clone the object. 785 else { 786 object = _.extend({}, object); 787 } 788 789 // By this point, there should be a valid plain object. 790 if (!$.isPlainObject(object)) { 791 setTimeout(function () { 792 throw new Error('Passed object is not supported: ' + object); 793 }); 794 return this; 795 } 796 797 // Handle classes separately. 798 if (object && object['class'] !== void 0) { 799 this.addClass(object['class']); 800 delete object['class']; 801 } 802 803 if (recursive === void 0 || recursive) { 804 this.data = $.extend(true, {}, this.data, object); 805 } 806 else { 807 this.data = $.extend({}, this.data, object); 808 } 809 810 return this; 811 }; 812 813 /** 814 * Removes an attribute from the array. 815 * 816 * @param {string} name 817 * The name of the attribute to remove. 818 * 819 * @return {Attributes} 820 * 821 * @chainable 822 */ 823 Attributes.prototype.remove = function (name) { 824 if (this.exists(name)) delete this.data[name]; 825 return this; 826 }; 827 828 /** 829 * Removes a class from the attributes array. 830 * 831 * @param {...string|Array} className 832 * An individual class or an array of classes to remove. 833 * 834 * @return {Attributes} 835 * 836 * @chainable 837 */ 838 Attributes.prototype.removeClass = function (className) { 839 var remove = this.sanitizeClasses(Array.prototype.slice.apply(arguments)); 840 this.data['class'] = _.without(this.getClasses(), remove); 841 return this; 842 }; 843 844 /** 845 * Replaces a class in the attributes array. 846 * 847 * @param {string} oldValue 848 * The old class to remove. 849 * @param {string} newValue 850 * The new class. It will not be added if the old class does not exist. 851 * 852 * @return {Attributes} 853 * 854 * @chainable 855 */ 856 Attributes.prototype.replaceClass = function (oldValue, newValue) { 857 var classes = this.getClasses(); 858 var i = _.indexOf(this.sanitizeClasses(oldValue), classes); 859 if (i >= 0) { 860 classes[i] = newValue; 861 this.set('class', classes); 862 } 863 return this; 864 }; 865 866 /** 867 * Ensures classes are flattened into a single is an array and sanitized. 868 * 869 * @param {...String|Array} classes 870 * The class or classes to sanitize. 871 * 872 * @return {Array} 873 * A sanitized array of classes. 874 */ 875 Attributes.prototype.sanitizeClasses = function (classes) { 876 return _.chain(Array.prototype.slice.call(arguments)) 877 // Flatten in case there's a mix of strings and arrays. 878 .flatten() 879 880 // Split classes that may have been added with a space as a separator. 881 .map(function (string) { 882 return string.split(' '); 883 }) 884 885 // Flatten again since it was just split into arrays. 886 .flatten() 887 888 // Filter out empty items. 889 .filter() 890
891 // Clean the class to ensure it's a valid class name. 892 .map(function (value) { 893 return Attributes.cleanClass(value); 894 }) 895 896 // Ensure classes are unique. 897 .uniq() 898 899 // Retrieve the final value. 900 .value(); 901 }; 902 903 /** 904 * Sets an attribute on the array. 905 * 906 * @param {string} name 907 * The name of the attribute to set. 908 * @param {*} value 909 * The value of the attribute to set. 910 * 911 * @return {Attributes} 912 * 913 * @chainable 914 */ 915 Attributes.prototype.set = function (name, value) { 916 var obj = $.isPlainObject(name) ? name : {}; 917 if (typeof name === 'string') { 918 obj[name] = value; 919 } 920 return this.merge(obj); 921 }; 922 923 /** 924 * Prepares a string for use as a CSS identifier (element, class, or ID name). 925 * 926 * Note: this is essentially a direct copy from 927 * \Drupal\Component\Utility\Html::cleanCssIdentifier 928 * 929 * @param {string} identifier 930 * The identifier to clean. 931 * @param {Object} [filter] 932 * An object of string replacements to use on the identifier. 933 * 934 * @return {string} 935 * The cleaned identifier. 936 */ 937 Attributes.cleanClass = function (identifier, filter) { 938 filter = filter || { 939 ' ': '-', 940 '_': '-', 941 '/': '-', 942 '[': '-', 943 ']': '' 944 }; 945 946 identifier = identifier.toLowerCase(); 947 948 if (filter['__'] === void 0) { 949 identifier = identifier.replace('__', '#DOUBLE_UNDERSCORE#'); 950 } 951 952 identifier = identifier.replace(Object.keys(filter), Object.keys(filter).map(function(key) { return filter[key]; })); 953 954 if (filter['__'] === void 0) { 955 identifier = identifier.replace('#DOUBLE_UNDERSCORE#', '__'); 956 } 957
958 identifier = identifier.replace(/[^\u002D\u0030-\u0039\u0041-\u005A\u005F\u0061-\u007A\u00A1-\uFFFF]/g, ''); 959 identifier = identifier.replace(['/^[0-9]/', '/^(-[0-9])|^(--)/'], ['_', '__']); 960 961 return identifier; 962 }; 963 964 /** 965 * Creates an Attributes instance. 966 * 967 * @param {object|Attributes} [attributes] 968 * An object to initialize attributes with. 969 * 970 * @return {Attributes} 971 * An Attributes instance. 972 * 973 * @constructor 974 */ 975 Attributes.create = function (attributes) { 976 return new Attributes(attributes); 977 }; 978 979 window.Attributes = Attributes; 980 981})(window.jQuery, window._); 982; 983/** 984 * @file 985 * Theme hooks for the Drupal Bootstrap base theme. 986 */ 987(function ($, Drupal, Bootstrap, Attributes) { 988 989 /** 990 * Fallback for theming an icon if the Icon API module is not installed. 991 */ 992 if (!Drupal.icon) Drupal.icon = { bundles: {} }; 993 if (!Drupal.theme.icon || Drupal.theme.prototype.icon) { 994 $.extend(Drupal.theme, /** @lends Drupal.theme */ { 995 /** 996 * Renders an icon. 997 * 998 * @param {string} bundle 999 * The bundle which the icon belongs to. 1000 * @param {string} icon 1001 * The name of the icon to render. 1002 * @param {object|Attributes} [attributes] 1003 * An object of attributes to also apply to the icon. 1004 * 1005 * @returns {string} 1006 */ 1007 icon: function (bundle, icon, attributes) { 1008 if (!Drupal.icon.bundles[bundle]) return ''; 1009 attributes = Attributes.create(attributes).addClass('icon').set('aria-hidden', 'true'); 1010 icon = Drupal.icon.bundles[bundle](icon, attributes); 1011 return '<span' + attributes + '></span>'; 1012 } 1013 }); 1014 } 1015 1016 /** 1017 * Callback for modifying an icon in the "bootstrap" icon bundle. 1018 * 1019 * @param {string} icon 1020 * The icon being rendered. 1021 * @param {Attributes} attributes 1022 * Attributes object for the icon. 1023 */ 1024 Drupal.icon.bundles.bootstrap = function (icon, attributes) { 1025 attributes.addClass(['glyphicon', 'glyphicon-' + icon]); 1026 }; 1027 1028 /** 1029 * Add necessary theming hooks. 1030 */ 1031 $.extend(Drupal.theme, /** @lends Drupal.theme */ { 1032 1033 /** 1034 * Renders a Bootstrap AJAX glyphicon throbber. 1035 * 1036 * @returns {string} 1037 */ 1038 ajaxThrobber: function () { 1039 return Drupal.theme('bootstrapIcon', 'refresh', {'class': ['ajax-throbber', 'glyphicon-spin'] }); 1040 }, 1041 1042 /** 1043 * Renders a button element. 1044 * 1045 * @param {object|Attributes} attributes 1046 * An object of attributes to apply to the button. If it contains one of: 1047 * - value: The label of the button. 1048 * - context: The context type of Bootstrap button, can be one of: 1049 * - default 1050 * - primary 1051 * - success 1052 * - info 1053 * - warning 1054 * - danger 1055 * - link 1056 * 1057 * @returns {string} 1058 */ 1059 button: function (attributes) { 1060 attributes = Attributes.create(attributes).addClass('btn'); 1061 var context = attributes.get('context', 'default'); 1062 var label = attributes.get('value', ''); 1063 attributes.remove('context').remove('value'); 1064 if (!attributes.hasClass(['btn-default', 'btn-primary', 'btn-success', 'btn-info', 'btn-warning', 'btn-danger', 'btn-link'])) { 1065 attributes.addClass('btn-' + Bootstrap.checkPlain(context)); 1066 } 1067 1068 // Attempt to, intelligently, provide a default button "type". 1069 if (!attributes.exists('type')) { 1070 attributes.set('type', attributes.hasClass('form-submit') ? 'submit' : 'button'); 1071 } 1072 1073 return '<button' + attributes + '>' + label + '</button>'; 1074 }, 1075 1076 /** 1077 * Alias for "button" theme hook. 1078 * 1079 * @param {object|Attributes} attributes 1080 * An object of attributes to apply to the button. 1081 * 1082 * @see Drupal.theme.button() 1083 * 1084 * @returns {string} 1085 */ 1086 btn: function (attributes) { 1087 return Drupal.theme('button', attributes); 1088 }, 1089 1090 /** 1091 * Renders a button block element. 1092 * 1093 * @param {object|Attributes} attributes 1094 * An object of attributes to apply to the button. 1095 * 1096 * @see Drupal.theme.button() 1097 * 1098 * @returns {string} 1099 */ 1100 'btn-block': function (attributes) { 1101 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-block')); 1102 }, 1103 1104 /**
1105 * Renders a large button element. 1106 * 1107 * @param {object|Attributes} attributes 1108 * An object of attributes to apply to the button. 1109 * 1110 * @see Drupal.theme.button() 1111 * 1112 * @returns {string} 1113 */ 1114 'btn-lg': function (attributes) { 1115 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-lg')); 1116 }, 1117 1118 /** 1119 * Renders a small button element. 1120 * 1121 * @param {object|Attributes} attributes 1122 * An object of attributes to apply to the button. 1123 * 1124 * @see Drupal.theme.button() 1125 * 1126 * @returns {string} 1127 */ 1128 'btn-sm': function (attributes) { 1129 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-sm')); 1130 }, 1131 1132 /** 1133 * Renders an extra small button element. 1134 * 1135 * @param {object|Attributes} attributes 1136 * An object of attributes to apply to the button. 1137 * 1138 * @see Drupal.theme.button() 1139 * 1140 * @returns {string} 1141 */ 1142 'btn-xs': function (attributes) { 1143 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-xs')); 1144 }, 1145 1146 /** 1147 * Renders a glyphicon. 1148 * 1149 * @param {string} name 1150 * The name of the glyphicon. 1151 * @param {object|Attributes} [attributes] 1152 * An object of attributes to apply to the icon. 1153 * 1154 * @returns {string} 1155 */ 1156 bootstrapIcon: function (name, attributes) { 1157 return Drupal.theme('icon', 'bootstrap', name, attributes); 1158 } 1159 1160 }); 1161 1162})(window.jQuery, window.Drupal, window.Drupal.bootstrap, window.Attributes); 1163; 1164/** 1165* DO NOT EDIT THIS FILE. 1166* See the following change record for more information, 1167* https://www.drupal.org/node/2815083 1168* @preserve 1169**/ 1170(function ($, Drupal) { 1171 Drupal.theme.progressBar = function (id) { 1172 return "<div id=\"".concat(id, "\" class=\"progress\" aria-live=\"polite\">") + '<div class="progress__label"> </div>' + '<div class="progress__track"><div class="progress__bar"></div></div>' + '<div class="progress__percentage"></div>' + '<div class="progress__description"> </div>' + '</div>'; 1173 }; 1174 Drupal.ProgressBar = function (id, updateCallback, method, errorCallback) { 1175 this.id = id; 1176 this.method = method || 'GET'; 1177 this.updateCallback = updateCallback; 1178 this.errorCallback = errorCallback; 1179 this.element = $(Drupal.theme('progressBar', id)); 1180 }; 1181 $.extend(Drupal.ProgressBar.prototype, { 1182 setProgress: function setProgress(percentage, message, label) { 1183 if (percentage >= 0 && percentage <= 100) { 1184 $(this.element).find('div.progress__bar').css('width', "".concat(percentage, "%")); 1185 $(this.element).find('div.progress__percentage').html("".concat(percentage, "%")); 1186 } 1187 $('div.progress__description', this.element).html(message); 1188 $('div.progress__label', this.element).html(label); 1189 if (this.updateCallback) { 1190 this.updateCallback(percentage, message, this); 1191 } 1192 }, 1193 startMonitoring: function startMonitoring(uri, delay) { 1194 this.delay = delay; 1195 this.uri = uri; 1196 this.sendPing(); 1197 }, 1198 stopMonitoring: function stopMonitoring() { 1199 clearTimeout(this.timer); 1200 this.uri = null; 1201 }, 1202 sendPing: function sendPing() { 1203 if (this.timer) { 1204 clearTimeout(this.timer); 1205 } 1206 if (this.uri) { 1207 var pb = this; 1208 var uri = this.uri; 1209 if (uri.indexOf('?') === -1) { 1210 uri += '?'; 1211 } else { 1212 uri += '&'; 1213 } 1214 uri += '_format=json'; 1215 $.ajax({ 1216 type: this.method, 1217 url: uri, 1218 data: '', 1219 dataType: 'json', 1220 success: function success(progress) { 1221 if (progress.status === 0) { 1222 pb.displayError(progress.data); 1223 return; 1224 } 1225 pb.setProgress(progress.percentage, progress.message, progress.label); 1226 pb.timer = setTimeout(function () { 1227 pb.sendPing(); 1228 }, pb.delay); 1229 }, 1230 error: function error(xmlhttp) { 1231 var e = new Drupal.AjaxError(xmlhttp, pb.uri); 1232 pb.displayError("<pre>".concat(e.message, "</pre>")); 1233 } 1234 }); 1235 } 1236 }, 1237 displayError: function displayError(string) { 1238 var error = $('<div class="messages messages--error"></div>').html(string); 1239 $(this.element).before(error).hide(); 1240 if (this.errorCallback) { 1241 this.errorCallback(this); 1242 } 1243 } 1244 }); 1245})(jQuery, Drupal);; 1246/** 1247 * @file 1248 * Extends methods from core/misc/progress.js. 1249 */ 1250 1251(function ($, Drupal) { 1252 1253 'use strict'; 1254 1255 /** 1256 * Theme function for the progress bar. 1257 * 1258 * @param {string} id 1259 * 1260 * @return {string} 1261 * The HTML for the progress bar. 1262 */ 1263 Drupal.theme.progressBar = function (id) { 1264 return '<div class="progress-wrapper" aria-live="polite">' + 1265 '<div class="message"></div>'+ 1266 '<div id ="' + id + '" class="progress progress-striped active">' + 1267 '<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">' + 1268 '<span class="percentage"></span>' + 1269 '</div>' + 1270 '</div>' + 1271 '<div class="progress-label"></div>' + 1272 '</div>'; 1273 }; 1274 1275 $.extend(Drupal.ProgressBar.prototype, /** @lends Drupal.ProgressBar */{ 1276 1277 /** 1278 * Set the percentage and status message for the progressbar. 1279 * 1280 * @param {number} percentage 1281 * @param {string} message 1282 * @param {string} label 1283 */ 1284 setProgress: function (percentage, message, label) { 1285 if (percentage >= 0 && percentage <= 100) {
1286 $(this.element).find('.progress-bar').css('width', percentage + '%').attr('aria-valuenow', percentage); 1287 $(this.element).find('.percentage').html(percentage + '%'); 1288 } 1289 if (message) { 1290 // Remove the unnecessary whitespace at the end of the message. 1291 message = message.replace(/<br\/> |\s*$/, ''); 1292 1293 $('.message', this.element).html(message); 1294 } 1295 if (label) { 1296 $('.progress-label', this.element).html(label); 1297 } 1298 if (this.updateCallback) { 1299 this.updateCallback(percentage, message, this); 1300 } 1301 }, 1302 1303 /** 1304 * Display errors on the page. 1305 * 1306 * @param {string} string 1307 */ 1308 displayError: function (string) { 1309 var error = $('<div class="alert alert-block alert-error"><button class="close" data-dismiss="alert">×</button><h4>' + Drupal.t('Error message') + '</h4></div>').append(string); 1310 $(this.element).before(error).hide(); 1311 1312 if (this.errorCallback) { 1313 this.errorCallback(this); 1314 } 1315 } 1316 }); 1317 1318})(jQuery, Drupal); 1319; 1320/** 1321* DO NOT EDIT THIS FILE. 1322* See the following change record for more information, 1323* https://www.drupal.org/node/2815083 1324* @preserve 1325**/ 1326(function ($, once) { 1327 var deprecatedMessageSuffix = "is deprecated in Drupal 9.3.0 and will be removed in Drupal 10.0.0. Use the core/once library instead. See https://www.drupal.org/node/3158256"; 1328 var originalJQOnce = $.fn.once; 1329 var originalJQRemoveOnce = $.fn.removeOnce; 1330 $.fn.once = function jQueryOnce(id) { 1331 Drupal.deprecationError({ 1332 message: "jQuery.once() ".concat(deprecatedMessageSuffix) 1333 }); 1334 return originalJQOnce.apply(this, [id]); 1335 }; 1336 $.fn.removeOnce = function jQueryRemoveOnce(id) { 1337 Drupal.deprecationError({ 1338 message: "jQuery.removeOnce() ".concat(deprecatedMessageSuffix) 1339 }); 1340 return originalJQRemoveOnce.apply(this, [id]); 1341 }; 1342 var drupalOnce = once; 1343 function augmentedOnce(id, selector, context) { 1344 originalJQOnce.apply($(selector, context), [id]); 1345 return drupalOnce(id, selector, context); 1346 } 1347 function remove(id, selector, context) { 1348 originalJQRemoveOnce.apply($(selector, context), [id]); 1349 return drupalOnce.remove(id, selector, context); 1350 } 1351 window.once = Object.assign(augmentedOnce, drupalOnce, { 1352 remove: remove 1353 }); 1354})(jQuery, once);; 1355loadjs=function(){var h=function(){},c={},u={},f={};function o(e,n){if(e){var r=f[e];if(u[e]=n,r)for(;r.length;)r[0](e,n),r.splice(0,1)}}function l(e,n){e.call&&(e={success:e}),n.length?(e.error||h)(n):(e.success||h)(e)}function d(r,t,s,i){var c,o,e=document,n=s.async,u=(s.numRetries||0)+1,f=s.before||h,l=r.replace(/[\?|#].*$/,""),a=r.replace(/^(css|img)!/,"");i=i||0,/(^css!|\.css$)/.test(l)?((o=e.createElement("link")).rel="stylesheet",o.href=a,(c="hideFocus"in o)&&o.relList&&(c=0,o.rel="preload",o.as="style")):/(^img!|\.(png|gif|jpg|svg|webp)$)/.test(l)?(o=e.createElement("img")).src=a:((o=e.createElement("script")).src=r,o.async=void 0===n||n),!(o.onload=o.onerror=o.onbeforeload=function(e){var n=e.type[0];if(c)try{o.sheet.cssText.length||(n="e")}catch(e){18!=e.code&&(n="e")}if("e"==n){if((i+=1)<u)return d(r,t,s,i)}else if("preload"==o.rel&&"style"==o.as)return o.rel="stylesheet";t(r,n,e.defaultPrevented)})!==f(r,o)&&e.head.appendChild(o)}function r(e,n,r){var t,s;if(n&&n.trim&&(t=n),s=(t?r:n)||{},t){if(t in c)throw"LoadJS";c[t]=!0}function i(n,r){!function(e,t,n){var r,s,i=(e=e.push?e:[e]).length,c=i,o=[];for(r=function(e,n,r){if("e"==n&&o.push(e),"b"==n){if(!r)return;o.push(e)}--i||t(o)},s=0;s<c;s++)d(e[s],r,n)}(e,function(e){l(s,e),n&&l({success:n,error:r},e),o(t,e)},s)}if(s.returnPromise)return new Promise(i);i()}return r.ready=function(e,n){return function(e,r){e=e.push?e:[e];var n,t,s,i=[],c=e.length,o=c;
1355for(n=function(e,n){n.length&&i.push(e),--o||r(i)};c--;)t=e[c],(s=u[t])?n(t,s):(f[t]=f[t]||[]).push(n)}(e,function(e){l(n,e)}),r},r.done=function(e){o(e,[])},r.reset=function(){c={},u={},f={}},r.isDefined=function(e){return e in c},r}();; 1356/** 1357* DO NOT EDIT THIS FILE. 1358* See the following change record for more information, 1359* https://www.drupal.org/node/2815083 1360* @preserve 1361**/ 1362function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } 1363function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 1364function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } 1365function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } 1366function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } 1367function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 1368(function ($, window, Drupal, drupalSettings, loadjs, _ref) { 1369 var isFocusable = _ref.isFocusable, 1370 tabbable = _ref.tabbable; 1371 Drupal.behaviors.AJAX = { 1372 attach: function attach(context, settings) { 1373 function loadAjaxBehavior(base) { 1374 var elementSettings = settings.ajax[base]; 1375 if (typeof elementSettings.selector === 'undefined') { 1376 elementSettings.selector = "#".concat(base); 1377 } 1378 once('drupal-ajax', $(elementSettings.selector)).forEach(function (el) { 1379 elementSettings.element = el; 1380 elementSettings.base = base; 1381 Drupal.ajax(elementSettings); 1382 }); 1383 } 1384 Object.keys(settings.ajax || {}).forEach(function (base) { 1385 return loadAjaxBehavior(base); 1386 }); 1387 Drupal.ajax.bindAjaxLinks(document.body); 1388 once('ajax', '.use-ajax-submit').forEach(function (el) { 1389 var elementSettings = {}; 1390 elementSettings.url = $(el.form).attr('action'); 1391 elementSettings.setClick = true; 1392 elementSettings.event = 'click'; 1393 elementSettings.progress = { 1394 type: 'throbber' 1395 }; 1396 elementSettings.base = el.id; 1397 elementSettings.element = el; 1398 Drupal.ajax(elementSettings); 1399 }); 1400 }, 1401 detach: function detach(context, settings, trigger) { 1402 if (trigger === 'unload') { 1403 Drupal.ajax.expired().forEach(function (instance) { 1404 Drupal.ajax.instances[instance.instanceIndex] = null; 1405 }); 1406 } 1407 } 1408 }; 1409 Drupal.AjaxError = function (xmlhttp, uri, customMessage) { 1410 var statusCode; 1411 var statusText; 1412 var responseText; 1413 if (xmlhttp.status) { 1414 statusCode = "\n".concat(Drupal.t('An AJAX HTTP error occurred.'), "\n").concat(Drupal.t('HTTP Result Code: !status', { 1415 '!status': xmlhttp.status 1416 })); 1417 } else { 1418 statusCode = "\n".concat(Drupal.t('An AJAX HTTP request terminated abnormally.')); 1419 } 1420 statusCode += "\n".concat(Drupal.t('Debugging information follows.')); 1421 var pathText = "\n".concat(Drupal.t('Path: !uri', { 1422 '!uri': uri 1423 })); 1424 statusText = ''; 1425 try { 1426 statusText = "\n".concat(Drupal.t('StatusText: !statusText', { 1427 '!statusText': xmlhttp.statusText.trim() 1428 })); 1429 } catch (e) {} 1430 responseText = ''; 1431 try { 1432 responseText = "\n".concat(Drupal.t('ResponseText: !responseText', { 1433 '!responseText': xmlhttp.responseText.trim() 1434 })); 1435 } catch (e) {} 1436 responseText = responseText.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, ''); 1437 responseText = responseText.replace(/[\n]+\s+/g, '\n'); 1438 var readyStateText = xmlhttp.status === 0 ? "\n".concat(Drupal.t('ReadyState: !readyState', { 1439 '!readyState': xmlhttp.readyState 1440 })) : ''; 1441 customMessage = customMessage ? "\n".concat(Drupal.t('CustomMessage: !customMessage', { 1442 '!customMessage': customMessage 1443 })) : ''; 1444 this.message = statusCode + pathText + statusText + customMessage + responseText + readyStateText; 1445 this.name = 'AjaxError'; 1446 }; 1447 Drupal.AjaxError.prototype = new Error(); 1448 Drupal.AjaxError.prototype.constructor = Drupal.AjaxError; 1449 Drupal.ajax = function (settings) { 1450 if (arguments.length !== 1) { 1451 throw new Error('Drupal.ajax() function must be called with one configuration object only'); 1452 } 1453 var base = settings.base || false; 1454 var element = settings.element || false; 1455 delete settings.base; 1456 delete settings.element; 1457 if (!settings.progress && !element) { 1458 settings.progress = false;
1459 } 1460 var ajax = new Drupal.Ajax(base, element, settings); 1461 ajax.instanceIndex = Drupal.ajax.instances.length; 1462 Drupal.ajax.instances.push(ajax); 1463 return ajax; 1464 }; 1465 Drupal.ajax.instances = []; 1466 Drupal.ajax.expired = function () { 1467 return Drupal.ajax.instances.filter(function (instance) { 1468 return instance && instance.element !== false && !document.body.contains(instance.element); 1469 }); 1470 }; 1471 Drupal.ajax.bindAjaxLinks = function (element) { 1472 once('ajax', '.use-ajax', element).forEach(function (ajaxLink) { 1473 var $linkElement = $(ajaxLink); 1474 var elementSettings = { 1475 progress: { 1476 type: 'throbber' 1477 }, 1478 dialogType: $linkElement.data('dialog-type'), 1479 dialog: $linkElement.data('dialog-options'), 1480 dialogRenderer: $linkElement.data('dialog-renderer'), 1481 base: $linkElement.attr('id'), 1482 element: ajaxLink 1483 }; 1484 var href = $linkElement.attr('href'); 1485 if (href) { 1486 elementSettings.url = href; 1487 elementSettings.event = 'click'; 1488 } 1489 Drupal.ajax(elementSettings); 1490 }); 1491 }; 1492 Drupal.Ajax = function (base, element, elementSettings) { 1493 var defaults = { 1494 event: element ? 'mousedown' : null, 1495 keypress: true, 1496 selector: base ? "#".concat(base) : null, 1497 effect: 'none', 1498 speed: 'none', 1499 method: 'replaceWith', 1500 progress: { 1501 type: 'throbber', 1502 message: Drupal.t('Please wait...') 1503 }, 1504 submit: { 1505 js: true 1506 } 1507 }; 1508 $.extend(this, defaults, elementSettings); 1509 this.commands = new Drupal.AjaxCommands(); 1510 this.instanceIndex = false; 1511 if (this.wrapper) { 1512 this.wrapper = "#".concat(this.wrapper); 1513 } 1514 this.element = element; 1515 this.element_settings = elementSettings; 1516 this.elementSettings = elementSettings; 1517 if (this.element && this.element.form) { 1518 this.$form = $(this.element.form); 1519 } 1520 if (!this.url) { 1521 var $element = $(this.element); 1522 if ($element.is('a')) { 1523 this.url = $element.attr('href'); 1524 } else if (this.element && element.form) { 1525 this.url = this.$form.attr('action'); 1526 } 1527 } 1528 var originalUrl = this.url; 1529 this.url = this.url.replace(/\/nojs(\/|$|\?|#)/, '/ajax$1'); 1530 if (drupalSettings.ajaxTrustedUrl[originalUrl]) { 1531 drupalSettings.ajaxTrustedUrl[this.url] = true; 1532 } 1533 var ajax = this; 1534 ajax.options = { 1535 url: ajax.url, 1536 data: ajax.submit, 1537 isInProgress: function isInProgress() { 1538 return ajax.ajaxing; 1539 }, 1540 beforeSerialize: function beforeSerialize(elementSettings, options) { 1541 return ajax.beforeSerialize(elementSettings, options); 1542 }, 1543 beforeSubmit: function beforeSubmit(formValues, elementSettings, options) { 1544 ajax.ajaxing = true; 1545 return ajax.beforeSubmit(formValues, elementSettings, options); 1546 }, 1547 beforeSend: function beforeSend(xmlhttprequest, options) { 1548 ajax.ajaxing = true; 1549 return ajax.beforeSend(xmlhttprequest, options); 1550 }, 1551 success: function success(response, status, xmlhttprequest) { 1552 var _this = this; 1553 if (typeof response === 'string') { 1554 response = $.parseJSON(response); 1555 } 1556 if (response !== null && !drupalSettings.ajaxTrustedUrl[ajax.url]) { 1557 if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') { 1558 var customMessage = Drupal.t('The response failed verification so will not be processed.'); 1559 return ajax.error(xmlhttprequest, ajax.url, customMessage); 1560 } 1561 } 1562 return Promise.resolve(ajax.success(response, status)).then(function () { 1563 ajax.ajaxing = false; 1564 $(document).trigger('ajaxSuccess', [xmlhttprequest, _this]); 1565 $(document).trigger('ajaxComplete', [xmlhttprequest, _this]); 1566 if (--$.active === 0) { 1567 $(document).trigger('ajaxStop'); 1568 } 1569 }); 1570 }, 1571 error: function error(xmlhttprequest, status, _error) { 1572 ajax.ajaxing = false; 1573 }, 1574 complete: function complete(xmlhttprequest, status) { 1575 if (status === 'error' || status === 'parsererror') { 1576 return ajax.error(xmlhttprequest, ajax.url); 1577 } 1578 }, 1579 dataType: 'json', 1580 jsonp: false, 1581 type: 'POST' 1582 }; 1583 if (elementSettings.dialog) { 1584 ajax.options.data.dialogOptions = elementSettings.dialog; 1585 } 1586 if (ajax.options.url.indexOf('?') === -1) { 1587 ajax.options.url += '?'; 1588 } else { 1589 ajax.options.url += '&'; 1590 } 1591 var wrapper = "drupal_".concat(elementSettings.dialogType || 'ajax'); 1592 if (elementSettings.dialogRenderer) { 1593 wrapper += ".".concat(elementSettings.dialogRenderer); 1594 } 1595 ajax.options.url += "".concat(Drupal.ajax.WRAPPER_FORMAT, "=").concat(wrapper); 1596 $(ajax.element).on(elementSettings.event, function (event) { 1597 if (!drupalSettings.ajaxTrustedUrl[ajax.url] && !Drupal.url.isLocal(ajax.url)) { 1598 throw new Error(Drupal.t('The callback URL is not local and n
1598ot trusted: !url', { 1599 '!url': ajax.url 1600 })); 1601 } 1602 return ajax.eventResponse(this, event); 1603 }); 1604 if (elementSettings.keypress) { 1605 $(ajax.element).on('keypress', function (event) { 1606 return ajax.keypressResponse(this, event); 1607 }); 1608 } 1609 if (elementSettings.prevent) { 1610 $(ajax.element).on(elementSettings.prevent, false); 1611 } 1612 }; 1613 Drupal.ajax.WRAPPER_FORMAT = '_wrapper_format'; 1614 Drupal.Ajax.AJAX_REQUEST_PARAMETER = '_drupal_ajax'; 1615 Drupal.Ajax.prototype.execute = function () { 1616 if (this.ajaxing) { 1617 return; 1618 } 1619 try { 1620 this.beforeSerialize(this.element, this.options); 1621 return $.ajax(this.options); 1622 } catch (e) { 1623 this.ajaxing = false; 1624 window.alert("An error occurred while attempting to process ".concat(this.options.url, ": ").concat(e.message)); 1625 return $.Deferred().reject(); 1626 } 1627 }; 1628 Drupal.Ajax.prototype.keypressResponse = function (element, event) { 1629 var ajax = this; 1630 if (event.which === 13 || event.which === 32 && element.type !== 'text' && element.type !== 'textarea' && element.type !== 'tel' && element.type !== 'number') { 1631 event.preventDefault(); 1632 event.stopPropagation(); 1633 $(element).trigger(ajax.elementSettings.event); 1634 } 1635 }; 1636 Drupal.Ajax.prototype.eventResponse = function (element, event) { 1637 event.preventDefault(); 1638 event.stopPropagation(); 1639 var ajax = this; 1640 if (ajax.ajaxing) { 1641 return; 1642 } 1643 try { 1644 if (ajax.$form) { 1645 if (ajax.setClick) { 1646 element.form.clk = element; 1647 } 1648 ajax.$form.ajaxSubmit(ajax.options); 1649 } else { 1650 ajax.beforeSerialize(ajax.element, ajax.options); 1651 $.ajax(ajax.options); 1652 } 1653 } catch (e) { 1654 ajax.ajaxing = false; 1655 window.alert("An error occurred while attempting to process ".concat(ajax.options.url, ": ").concat(e.message)); 1656 } 1657 }; 1658 Drupal.Ajax.prototype.beforeSerialize = function (element, options) { 1659 if (this.$form && document.body.contains(this.$form.get(0))) { 1660 var settings = this.settings || drupalSettings; 1661 Drupal.detachBehaviors(this.$form.get(0), settings, 'serialize'); 1662 } 1663 options.data[Drupal.Ajax.AJAX_REQUEST_PARAMETER] = 1; 1664 var pageState = drupalSettings.ajaxPageState; 1665 options.data['ajax_page_state[theme]'] = pageState.theme; 1666 options.data['ajax_page_state[theme_token]'] = pageState.theme_token; 1667 options.data['ajax_page_state[libraries]'] = pageState.libraries; 1668 }; 1669 Drupal.Ajax.prototype.beforeSubmit = function (formValues, element, options) {}; 1670 Drupal.Ajax.prototype.beforeSend = function (xmlhttprequest, options) { 1671 if (this.$form) { 1672 options.extraData = options.extraData || {}; 1673 options.extraData.ajax_iframe_upload = '1'; 1674 var v = $.fieldValue(this.element); 1675 if (v !== null) { 1676 options.extraData[this.element.name] = v; 1677 } 1678 } 1679 $(this.element).prop('disabled', true); 1680 if (!this.progress || !this.progress.type) { 1681 return; 1682 } 1683 var progressIndicatorMethod = "setProgressIndicator".concat(this.progress.type.slice(0, 1).toUpperCase()).concat(this.progress.type.slice(1).toLowerCase()); 1684 if (progressIndicatorMethod in this && typeof this[progressIndicatorMethod] === 'function') { 1685 this[progressIndicatorMethod].call(this); 1686 } 1687 }; 1688 Drupal.theme.ajaxProgressThrobber = function (message) { 1689 var messageMarkup = typeof message === 'string' ? Drupal.theme('ajaxProgressMessage', message) : ''; 1690 var throbber = '<div class="throbber"> </div>'; 1691 return "<div class=\"ajax-progress ajax-progress-throbber\">".concat(throbber).concat(messageMarkup, "</div>"); 1692 }; 1693 Drupal.theme.ajaxProgressIndicatorFullscreen = function () { 1694 return '<div class="ajax-progress ajax-progress-fullscreen"> </div>'; 1695 }; 1696 Drupal.theme.ajaxProgressMessage = function (message) { 1697 return "<div class=\"message\">".concat(message, "</div>"); 1698 }; 1699 Drupal.theme.ajaxProgressBar = function ($element) { 1700 return $('<div class="ajax-progress ajax-progress-bar"></div>').append($element); 1701 }; 1702 Drupal.Ajax.prototype.setProgressIndicatorBar = function () { 1703 var progressBar = new Drupal.ProgressBar("ajax-progress-".concat(this.element.i
1703d), $.noop, this.progress.method, $.noop); 1704 if (this.progress.message) { 1705 progressBar.setProgress(-1, this.progress.message); 1706 } 1707 if (this.progress.url) { 1708 progressBar.startMonitoring(this.progress.url, this.progress.interval || 1500); 1709 } 1710 this.progress.element = $(Drupal.theme('ajaxProgressBar', progressBar.element)); 1711 this.progress.object = progressBar; 1712 $(this.element).after(this.progress.element); 1713 }; 1714 Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () { 1715 this.progress.element = $(Drupal.theme('ajaxProgressThrobber', this.progress.message)); 1716 $(this.element).after(this.progress.element); 1717 }; 1718 Drupal.Ajax.prototype.setProgressIndicatorFullscreen = function () { 1719 this.progress.element = $(Drupal.theme('ajaxProgressIndicatorFullscreen')); 1720 $('body').append(this.progress.element); 1721 }; 1722 Drupal.Ajax.prototype.commandExecutionQueue = function (response, status) { 1723 var _this2 = this; 1724 var ajaxCommands = this.commands; 1725 return Object.keys(response || {}).reduce(function (executionQueue, key) { 1726 return executionQueue.then(function () { 1727 var command = response[key].command; 1728 if (command && ajaxCommands[command]) { 1729 return ajaxCommands[command](_this2, response[key], status); 1730 } 1731 }); 1732 }, Promise.resolve()); 1733 }; 1734 Drupal.Ajax.prototype.success = function (response, status) { 1735 var _this3 = this; 1736 if (this.progress.element) { 1737 $(this.progress.element).remove(); 1738 } 1739 if (this.progress.object) { 1740 this.progress.object.stopMonitoring(); 1741 } 1742 $(this.element).prop('disabled', false); 1743 var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray(); 1744 var focusChanged = Object.keys(response || {}).some(function (key) { 1745 var _response$key = response[key], 1746 command = _response$key.command, 1747 method = _response$key.method; 1748 return command === 'focusFirst' || command === 'invoke' && method === 'focus'; 1749 }); 1750 return this.commandExecutionQueue(response, status).then(function () { 1751 if (!focusChanged && _this3.element && !$(_this3.element).data('disable-refocus')) { 1752 var target = false;
1753 for (var n = elementParents.length - 1; !target && n >= 0; n--) { 1754 target = document.querySelector("[data-drupal-selector=\"".concat(elementParents[n].getAttribute('data-drupal-selector'), "\"]")); 1755 } 1756 if (target) { 1757 $(target).trigger('focus'); 1758 } 1759 } 1760 if (_this3.$form && document.body.contains(_this3.$form.get(0))) { 1761 var settings = _this3.settings || drupalSettings; 1762 Drupal.attachBehaviors(_this3.$form.get(0), settings); 1763 } 1764 _this3.settings = null; 1765 }).catch(function (error) { 1766 return console.error(Drupal.t('An error occurred during the execution of the Ajax response: !error', { 1767 '!error': error 1768 })); 1769 }); 1770 }; 1771 Drupal.Ajax.prototype.getEffect = function (response) { 1772 var type = response.effect || this.effect; 1773 var speed = response.speed || this.speed; 1774 var effect = {}; 1775 if (type === 'none') { 1776 effect.showEffect = 'show'; 1777 effect.hideEffect = 'hide'; 1778 effect.showSpeed = ''; 1779 } else if (type === 'fade') { 1780 effect.showEffect = 'fadeIn'; 1781 effect.hideEffect = 'fadeOut'; 1782 effect.showSpeed = speed; 1783 } else { 1784 effect.showEffect = "".concat(type, "Toggle"); 1785 effect.hideEffect = "".concat(type, "Toggle"); 1786 effect.showSpeed = speed; 1787 } 1788 return effect; 1789 }; 1790 Drupal.Ajax.prototype.error = function (xmlhttprequest, uri, customMessage) { 1791 if (this.progress.element) { 1792 $(this.progress.element).remove(); 1793 } 1794 if (this.progress.object) { 1795 this.progress.object.stopMonitoring(); 1796 } 1797 $(this.wrapper).show(); 1798 $(this.element).prop('disabled', false); 1799 if (this.$form && document.body.contains(this.$form.get(0))) { 1800 var settings = this.settings || drupalSettings; 1801 Drupal.attachBehaviors(this.$form.get(0), settings); 1802 } 1803 throw new Drupal.AjaxError(xmlhttprequest, uri, customMessage); 1804 }; 1805 Drupal.theme.ajaxWrapperNewContent = function ($newContent, ajax, response) { 1806 return (response.effect || ajax.effect) !== 'none' && $newContent.filter(function (i) { 1807 return !($newContent[i].nodeName === '#comment' || $newContent[i].nodeName === '#text' && /^(\s|\n|\r)*$/.test($newContent[i].textContent)); 1808 }).length > 1 ? Drupal.theme('ajaxWrapperMultipleRootElements', $newContent) : $newContent; 1809 }; 1810 Drupal.theme.ajaxWrapperMultipleRootElements = function ($elements) { 1811 return $('<div></div>').append($elements); 1812 }; 1813 Drupal.AjaxCommands = function () {}; 1814 Drupal.AjaxCommands.prototype = { 1815 insert: function insert(ajax, response) { 1816 var $wrapper = response.selector ? $(response.selector) : $(ajax.wrapper); 1817 var method = response.method || ajax.method; 1818 var effect = ajax.getEffect(response); 1819 var settings = response.settings || ajax.settings || drupalSettings; 1820 var $newContent = $($.parseHTML(response.data, document, true)); 1821 $newContent = Drupal.theme('ajaxWrapperNewContent', $newContent, ajax, response); 1822 switch (method) { 1823 case 'html': 1824 case 'replaceWith': 1825 case 'replaceAll': 1826 case 'empty': 1827 case 'remove': 1828 Drupal.detachBehaviors($wrapper.get(0), settings); 1829 break; 1830 default: 1831 break; 1832 } 1833 $wrapper[method]($newContent); 1834 if (effect.showEffect !== 'show') { 1835 $newContent.hide(); 1836 } 1837 var $ajaxNewContent = $newContent.find('.ajax-new-content'); 1838 if ($ajaxNewContent.length) { 1839 $ajaxNewContent.hide(); 1840 $newContent.show(); 1841 $ajaxNewContent[effect.showEffect](effect.showSpeed); 1842 } else if (effect.showEffect !== 'show') { 1843 $newContent[effect.showEffect](effect.showSpeed); 1844 } 1845 if ($newContent.parents('html').length) { 1846 $newContent.each(function (index, element) { 1847 if (element.nodeType === Node.ELEMENT_NODE) { 1848 Drupal.attachBehaviors(element, settings); 1849 } 1850 }); 1851 } 1852 }, 1853 remove: function remove(ajax, response, status) { 1854 var settings = response.settings || ajax.settings || drupalSettings; 1855 $(response.selector).each(function () { 1856 Drupal.detachBehaviors(this, settings); 1857 }).remove(); 1858 }, 1859 changed: function changed(ajax, response, status) { 1860 var $element = $(response.selector); 1861 if (!$element.hasClass('ajax-changed')) { 1862 $element.addClass('ajax-changed'); 1863 if (response.asterisk) { 1864 $element.find(response.asterisk).append(" <abbr class=\"ajax-changed\" title=\"".concat(Drupal.t('Changed'), "\">*</abbr> ")); 1865 } 1866 } 1867 }, 1868 alert: function alert(ajax, response, status) { 1869 window.alert(response.text); 1870 }, 1871 announce: function announce(ajax, response) { 1872 if (response.priority) { 1873 Drupal.announce(response.text, response.priority); 1874 } else { 1875 Drupal.announce(response.text); 1876 } 1877 }, 1878 redirect: function redirect(ajax, response, status) { 1879 window.location = response.url; 1880 }, 1881 css: function css(ajax, response, status) { 1882 $(response.selector).css(response.argument); 1883 }, 1884 settings: function settings(ajax, response, status) { 1885 var ajaxSettings = drupalSettings.ajax; 1886 if (ajaxSettings) {
1887 Drupal.ajax.expired().forEach(function (instance) { 1888 if (instance.selector) { 1889 var selector = instance.selector.replace('#', ''); 1890 if (selector in ajaxSettings) { 1891 delete ajaxSettings[selector]; 1892 } 1893 } 1894 }); 1895 } 1896 if (response.merge) { 1897 $.extend(true, drupalSettings, response.settings); 1898 } else { 1899 ajax.settings = response.settings; 1900 } 1901 }, 1902 data: function data(ajax, response, status) { 1903 $(response.selector).data(response.name, response.value); 1904 }, 1905 focusFirst: function focusFirst(ajax, response, status) { 1906 var focusChanged = false; 1907 var container = document.querySelector(response.selector); 1908 if (container) { 1909 var tabbableElements = tabbable(container); 1910 if (tabbableElements.length) { 1911 tabbableElements[0].focus(); 1912 focusChanged = true; 1913 } else if (isFocusable(container)) { 1914 container.focus(); 1915 focusChanged = true; 1916 } 1917 } 1918 if (ajax.hasOwnProperty('element') && !focusChanged) { 1919 ajax.element.focus(); 1920 } 1921 }, 1922 invoke: function invoke(ajax, response, status) { 1923 var $element = $(response.selector); 1924 $element[response.method].apply($element, _toConsumableArray(response.args)); 1925 }, 1926 restripe: function restripe(ajax, response, status) { 1927 $(response.selector).find('> tbody > tr:visible, > tr:visible').removeClass('odd even').filter(':even').addClass('odd').end().filter(':odd').addClass('even'); 1928 }, 1929 update_build_id: function update_build_id(ajax, response, status) { 1930 document.querySelectorAll("input[name=\"form_build_id\"][value=\"".concat(response.old, "\"]")).forEach(function (item) { 1931 item.value = response.new; 1932 }); 1933 }, 1934 add_css: function add_css(ajax, response, status) { 1935 $('head').prepend(response.data); 1936 }, 1937 message: function message(ajax, response) { 1938 var messages = new Drupal.Message(document.querySelector(response.messageWrapperQuerySelector)); 1939 if (response.clearPrevious) { 1940 messages.clear(); 1941 } 1942 messages.add(response.message, response.messageOptions); 1943 }, 1944 add_js: function add_js(ajax, response, status) { 1945 var parentEl = document.querySelector(response.selector || 'body'); 1946 var settings = ajax.settings || drupalSettings; 1947 var allUniqueBundleIds = response.data.map(function (script) { 1948 var uniqueBundleId = script.src + ajax.instanceIndex; 1949 loadjs(script.src, uniqueBundleId, { 1950 async: false, 1951 before: function before(path, scriptEl) { 1952 Object.keys(script).forEach(function (attributeKey) { 1953 scriptEl.setAttribute(attributeKey, script[attributeKey]); 1954 }); 1955 parentEl.appendChild(scriptEl); 1956 return false; 1957 } 1958 }); 1959 return uniqueBundleId; 1960 }); 1961 return new Promise(function (resolve, reject) { 1962 loadjs.ready(allUniqueBundleIds, { 1963 success: function success() { 1964 Drupal.attachBehaviors(parentEl, settings); 1965 resolve(); 1966 }, 1967 error: function error(depsNotFound) { 1968 var message = Drupal.t("The following files could not be loaded: @dependencies", { 1969 '@dependencies': depsNotFound.join(', ') 1970 }); 1971 reject(message); 1972 } 1973 }); 1974 }); 1975 } 1976 }; 1977 var stopEvent = function stopEvent(xhr, settings) { 1978 return xhr.getResponseHeader('X-Drupal-Ajax-Token') === '1' && settings.isInProgress && settings.isInProgress(); 1979 }; 1980 $.extend(true, $.event.special, { 1981 ajaxSuccess: { 1982 trigger: function trigger(event, xhr, settings) { 1983 if (stopEvent(xhr, settings)) { 1984 return false; 1985 } 1986 } 1987 }, 1988 ajaxComplete: { 1989 trigger: function trigger(event, xhr, settings) { 1990 if (stopEvent(xhr, settings)) { 1991 $.active++; 1992 return false; 1993 } 1994 } 1995 } 1996 }); 1997})(jQuery, window, Drupal, drupalSettings, loadjs, window.tabbable);; 1998/** 1999 * @file 2000 * Extends methods from core/misc/ajax.js. 2001 */ 2002 2003(function ($, window, Drupal, drupalSettings) { 2004 2005 /** 2006 * Attempts to find the closest glyphicon progress indicator. 2007 * 2008 * @param {jQuery|Element} element 2009 * A DOM element. 2010 * 2011 * @returns {jQuery} 2012 * A jQuery object. 2013 */ 2014 Drupal.Ajax.prototype.findGlyphicon = function (element) { 2015 return $(element).closest('.form-item').find('.ajax-progress.glyphicon') 2016 }; 2017 2018 /** 2019 * Starts the spinning of the glyphicon progress indicator. 2020 * 2021 * @param {jQuery|Element} element 2022 * A DOM element. 2023 * @param {string} [message] 2024 * An optional message to display (tooltip) for the progress. 2025 * 2026 * @returns {jQuery} 2027 * A jQuery object. 2028 */ 2029 Drupal.Ajax.prototype.glyphiconStart = function (element, message) { 2030 var $glyphicon = this.findGlyphicon(element); 2031 if ($glyphicon[0]) { 2032 $glyphicon.addClass('glyphicon-spin'); 2033 2034 // Add any message as a tooltip to the glyphicon. 2035 if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) { 2036 $glyphicon 2037 .removeAttr('data-toggle') 2038 .removeAttr('data-original-title') 2039 .removeAttr('title') 2040 .tooltip('destroy') 2041 ; 2042 2043 if (message) { 2044 $glyphicon.attr('data-toggle', 'tooltip').attr('title', message).tooltip(); 2045 } 2046 } 2047 2048 // Append a message for screen readers. 2049 if (message) { 2050 $glyphicon.parent().append('<div class="sr-only message">' + message + '</div>'); 2051 } 2052 } 2053 return $glyphicon; 2054 }; 2055 2056 /** 2057 * Stop the spinning of a glyphicon progress indicator. 2058 * 2059 * @param {jQuery|Element} element 2060 * A DOM element. 2061 */ 2062 Drupal.Ajax.prototype.glyphiconStop = function (element) { 2063 var $glyphicon = this.findGlyphicon(element); 2064 if ($glyphicon[0]) { 2065 $glyphicon.removeClass('glyphicon-spin'); 2066 if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) { 2067 $glyphicon 2068 .removeAttr('data-toggle') 2069 .removeAttr('data-original-title') 2070 .removeAttr('title') 2071 .tooltip('destroy') 2072 ; 2073 } 2074 } 2075 }; 2076 2077 /** 2078 * Sets the throbber progress indicator. 2079 */ 2080 Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () { 2081 var $element = $(this.element); 2082 2083 // Find an existing glyphicon progress indicator. 2084 var $glyphicon = this.glyphiconStart($element, this.progress.message); 2085 if ($glyphicon[0]) { 2086 this.progress.element = $glyphicon.parent(); 2087 this.progress.glyphicon = true; 2088 return; 2089 } 2090 2091 // Otherwise, add a glyphicon throbber after the element. 2092 if (!this.progress.element) { 2093 this.progress.element = $(Drupal.theme('ajaxThrobber')); 2094 } 2095 if (this.progress.message) { 2096 this.progress.element.after('<div class="message">' + this.progress.message + '</div>'); 2097 } 2098 2099 // If element is an input DOM element type (not :input), append after. 2100 if ($element.is('input')) { 2101 $element.after(this.progress.element); 2102 } 2103 // Otherwise append the throbber inside the element. 2104 else { 2105 $element.append(this.progress.element); 2106 } 2107 }; 2108 2109 2110 /** 2111 * Handler for the form redirection completion. 2112 * 2113 * @param {Array.<Drupal.AjaxCommands~commandDefinition>} response 2114 * @param {number} status 2115 */ 2116 var success = Drupal.Ajax.prototype.success; 2117 Drupal.Ajax.prototype.success = function (response, status) { 2118 if (this.progress.element) { 2119 2120 // Stop a glyphicon throbber. 2121 if (this.progress.glyphicon) { 2122 this.glyphiconStop(this.progress.element); 2123 } 2124 // Remove the progress element. 2125 else { 2126 this.progress.element.remove(); 2127 } 2128 2129 // Remove any message set. 2130 this.progress.element.parent().find('.message').remove(); 2131 } 2132 2133 // Invoke the original success handler. 2134 return success.apply(this, [response, status]); 2135 }; 2136 2137})(jQuery, this, Drupal, drupalSettings); 2138; 2139/*! 2140 * Bootstrap v5.1.3 (https://getbootstrap.com/) 2141 * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 2142 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2143 */ 2144(function (global, factory) { 2145 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 2146 typeof define === 'function' && define.amd ? define(factory) : 2147 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory()); 2148})(this, (function () { 'use strict'; 2149 2150 /** 2151 * -------------------------------------------------------------------------- 2152 * Bootstrap (v5.1.3): util/index.js 2153 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2154 * -------------------------------------------------------------------------- 2155 */ 2156 const MAX_UID = 1000000; 2157 const MILLISECONDS_MULTIPLIER = 1000; 2158 const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) 2159 2160 const toType = obj => { 2161 if (obj === null || obj === undefined) { 2162 return `${obj}`; 2163 } 2164 2165 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); 2166 }; 2167 /** 2168 * -------------------------------------------------------------------------- 2169 * Public Util Api 2170 * -------------------------------------------------------------------------- 2171 */ 2172 2173 2174 const getUID = prefix => { 2175 do { 2176 prefix += Math.floor(Math.random() * MAX_UID); 2177 } while (document.getElementById(prefix)); 2178 2179 return prefix; 2180 }; 2181 2182 const getSelector = element => { 2183 let selector = element.getAttribute('data-bs-target'); 2184 2185 if (!selector || selector === '#') { 2186 let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes, 2187 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 2188 // `document.querySelector` will rightfully complain it is invali
2188d. 2189 // See https://github.com/twbs/bootstrap/issues/32273 2190 2191 if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) { 2192 return null; 2193 } // Just in case some CMS puts out a full URL with the anchor appended 2194 2195 2196 if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) { 2197 hrefAttr = `#${hrefAttr.split('#')[1]}`; 2198 } 2199 2200 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; 2201 } 2202 2203 return selector; 2204 }; 2205 2206 const getSelectorFromElement = element => { 2207 const selector = getSelector(element); 2208 2209 if (selector) { 2210 return document.querySelector(selector) ? selector : null; 2211 } 2212 2213 return null; 2214 }; 2215 2216 const getElementFromSelector = element => { 2217 const selector = getSelector(element); 2218 return selector ? document.querySelector(selector) : null; 2219 }; 2220 2221 const getTransitionDurationFromElement = element => { 2222 if (!element) { 2223 return 0; 2224 } // Get transition-duration of the element 2225 2226 2227 let { 2228 transitionDuration, 2229 transitionDelay 2230 } = window.getComputedStyle(element); 2231 const floatTransitionDuration = Number.parseFloat(transitionDuration); 2232 const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 2233 2234 if (!floatTransitionDuration && !floatTransitionDelay) { 2235 return 0; 2236 } // If multiple durations are defined, take the first 2237 2238 2239 transitionDuration = transitionDuration.split(',')[0]; 2240 transitionDelay = transitionDelay.split(',')[0]; 2241 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 2242 }; 2243 2244 const triggerTransitionEnd = element => { 2245 element.dispatchEvent(new Event(TRANSITION_END)); 2246 }; 2247 2248 const isElement$1 = obj => { 2249 if (!obj || typeof obj !== 'object') { 2250 return false; 2251 } 2252 2253 if (typeof obj.jquery !== 'undefined') { 2254 obj = obj[0]; 2255 } 2256 2257 return typeof obj.nodeType !== 'undefined'; 2258 }; 2259 2260 const getElement = obj => { 2261 if (isElement$1(obj)) { 2262 // it's a jQuery object or a node element 2263 return obj.jquery ? obj[0] : obj; 2264 } 2265 2266 if (typeof obj === 'string' && obj.length > 0) { 2267 return document.querySelector(obj); 2268 } 2269 2270 return null; 2271 }; 2272 2273 const typeCheckConfig = (componentName, config, configTypes) => { 2274 Object.keys(configTypes).forEach(property => { 2275 const expectedTypes = configTypes[property]; 2276 const value = config[property]; 2277 const valueType = value && isElement$1(value) ? 'element' : toType(value); 2278 2279 if (!new RegExp(expectedTypes).test(valueType)) { 2280 throw new TypeError(`${componentName.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 2281 } 2282 }); 2283 }; 2284 2285 const isVisible = element => { 2286 if (!isElement$1(element) || element.getClientRects().length === 0) { 2287 return false; 2288 } 2289 2290 return getComputedStyle(element).getPropertyValue('visibility') === 'visible'; 2291 }; 2292 2293 const isDisabled = element => { 2294 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 2295 return true; 2296 } 2297 2298 if (element.classList.contains('disabled')) { 2299 return true; 2300 } 2301 2302 if (typeof element.disabled !== 'undefined') { 2303 return element.disabled; 2304 } 2305 2306 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 2307 }; 2308 2309 const findShadowRoot = element => { 2310 if (!document.documentElement.attachShadow) { 2311 return null; 2312 } // Can find the shadow root otherwise it'll return the document 2313 2314 2315 if (typeof element.getRootNode === 'function') { 2316 const root = element.getRootNode(); 2317 return root instanceof ShadowRoot ? root : null; 2318 } 2319 2320 if (element instanceof ShadowRoot) { 2321 return element; 2322 } // when we don't find a shadow root 2323 2324 2325 if (!element.parentNode) { 2326 return null; 2327 } 2328 2329 return findShadowRoot(element.parentNode); 2330 }; 2331 2332 const noop = () => {}; 2333 /** 2334 * Trick to restart an element's animation 2335 * 2336 * @param {HTMLElement} element 2337 * @return void 2338 * 2339 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 2340 */ 2341 2342 2343 const reflow = element => { 2344 // eslint-disable-next-line no-unused-expressions 2345 element.offsetHeight; 2346 }; 2347 2348 const getjQuery = () => { 2349 const { 2350 jQuery 2351 } = window; 2352 2353 if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 2354 return jQuery; 2355 } 2356 2357 return null; 2358 }; 2359 2360 const DOMContentLoadedCallbacks = []; 2361 2362 const onDOMContentLoaded = callback => { 2363 if (document.readyState === 'loading') { 2364 // add listener on the first call when the document is in loading state 2365 if (!DOMContentLoadedCallbacks.length) { 2366 document.addEventListener('DOMContentLoaded', () => { 2367 DOMContentLoadedCallbacks.forEach(callback => callback()); 2368 }); 2369 } 2370 2371 DOMContentLoadedCallbacks.push(callback); 2372 } else { 2373 callback(); 2374 } 2375 }; 2376 2377 const isRTL = () => document.documentElement.dir === 'rtl'; 2378 2379 const defineJQueryPlugin = plugin => { 2380 onDOMContentLoaded(() => { 2381 const $ = getjQuery(); 2382 /* istanbul ignore if */ 2383 2384 if ($) { 2385 const name = plugin.NAME; 2386 const JQUERY_NO_CONFLICT = $.fn[name]; 2387 $.fn[name] = plugin.jQueryInterface; 2388 $.fn[name].Constructor = plugin; 2389 2390 $.fn[name].noConflict = () => { 2391 $.fn[name] = JQUERY_NO_CONFLICT; 2392 return plugin.jQueryInterface; 2393 }; 2394 } 2395 }); 2396 }; 2397 2398 const execute = callback => { 2399 if (typeof callback === 'function') { 2400 callback(); 2401 } 2402 }; 2403 2404 const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 2405 if (!waitForTransition) { 2406 execute(callback); 2407 return; 2408 } 2409 2410 const durationPadding = 5; 2411 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
2412 let called = false; 2413 2414 const handler = ({ 2415 target 2416 }) => { 2417 if (target !== transitionElement) { 2418 return; 2419 } 2420 2421 called = true; 2422 transitionElement.removeEventListener(TRANSITION_END, handler); 2423 execute(callback); 2424 }; 2425 2426 transitionElement.addEventListener(TRANSITION_END, handler); 2427 setTimeout(() => { 2428 if (!called) { 2429 triggerTransitionEnd(transitionElement); 2430 } 2431 }, emulatedDuration); 2432 }; 2433 /** 2434 * Return the previous/next element of a list. 2435 * 2436 * @param {array} list The list of elements 2437 * @param activeElement The active element 2438 * @param shouldGetNext Choose to get next or previous element 2439 * @param isCycleAllowed 2440 * @return {Element|elem} The proper element 2441 */ 2442 2443 2444 const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 2445 let index = list.indexOf(activeElement); // if the element does not exist in the list return an element depending on the direction and if cycle is allowed 2446 2447 if (index === -1) { 2448 return list[!shouldGetNext && isCycleAllowed ? list.length - 1 : 0]; 2449 } 2450 2451 const listLength = list.length; 2452 index += shouldGetNext ? 1 : -1; 2453 2454 if (isCycleAllowed) { 2455 index = (index + listLength) % listLength; 2456 } 2457 2458 return list[Math.max(0, Math.min(index, listLength - 1))]; 2459 }; 2460 2461 /** 2462 * -------------------------------------------------------------------------- 2463 * Bootstrap (v5.1.3): dom/event-handler.js 2464 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2465 * -------------------------------------------------------------------------- 2466 */ 2467 /** 2468 * ------------------------------------------------------------------------ 2469 * Constants 2470 * ------------------------------------------------------------------------ 2471 */ 2472 2473 const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 2474 const stripNameRegex = /\..*/; 2475 const stripUidRegex = /::\d+$/; 2476 const eventRegistry = {}; // Events storage 2477 2478 let uidEvent = 1; 2479 const customEvents = { 2480 mouseenter: 'mouseover', 2481 mouseleave: 'mouseout' 2482 }; 2483 const customEventsRegex = /^(mouseenter|mouseleave)/i; 2484 const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']); 2485 /** 2486 * ------------------------------------------------------------------------ 2487 * Private methods 2488 * ------------------------------------------------------------------------ 2489 */ 2490 2491 function getUidEvent(element, uid) { 2492 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 2493 } 2494 2495 function getEvent(element) { 2496 const uid = getUidEvent(element); 2497 element.uidEvent = uid; 2498 eventRegistry[uid] = eventRegistry[uid] || {}; 2499 return eventRegistry[uid]; 2500 } 2501 2502 function bootstrapHandler(element, fn) { 2503 return function handler(event) { 2504 event.delegateTarget = element; 2505 2506 if (handler.oneOff) { 2507 EventHandler.off(element, event.type, fn); 2508 } 2509 2510 return fn.apply(element, [event]); 2511 }; 2512 } 2513 2514 function bootstrapDelegationHandler(element, selector, fn) { 2515 return function handler(event) { 2516 const domElements = element.querySelectorAll(selector); 2517 2518 for (let { 2519 target 2520 } = event; target && target !== this; target = target.parentNode) { 2521 for (let i = domElements.length; i--;) { 2522 if (domElements[i] === target) { 2523 event.delegateTarget = target; 2524 2525 if (handler.oneOff) { 2526 EventHandler.off(element, event.type, selector, fn); 2527 } 2528 2529 return fn.apply(target, [event]); 2530 } 2531 } 2532 } // To please ESLint 2533 2534 2535 return null; 2536 }; 2537 } 2538 2539 function findHandler(events, handler, delegationSelector = null) { 2540 const uidEventList = Object.keys(events); 2541 2542 for (let i = 0, len = uidEventList.length; i < len; i++) { 2543 const event = events[uidEventList[i]]; 2544 2545 if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { 2546 return event; 2547 } 2548 } 2549 2550 return null; 2551 } 2552 2553 function normalizeParams(originalTypeEvent, handler, delegationFn) { 2554 const delegation = typeof handler === 'string'; 2555 const originalHandler = delegation ? delegationFn : handler; 2556 let typeEvent = getTypeEvent(originalTypeEvent); 2557 const isNative = nativeEvents.has(typeEvent); 2558 2559 if (!isNative) { 2560 typeEvent = originalTypeEvent; 2561 } 2562 2563 return [delegation, originalHandler, typeEvent]; 2564 } 2565 2566 function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) { 2567 if (typeof originalTypeEvent !== 'string' || !element) { 2568 return; 2569 } 2570 2571 if (!handler) { 2572 handler = delegationFn; 2573 delegationFn = null; 2574 } // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 2575 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 2576 2577 2578 if (customEventsRegex.test(originalTypeEvent)) { 2579 const wrapFn = fn => { 2580 return function (event) { 2581 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
2582 return fn.call(this, event); 2583 } 2584 }; 2585 }; 2586 2587 if (delegationFn) { 2588 delegationFn = wrapFn(delegationFn); 2589 } else { 2590 handler = wrapFn(handler); 2591 } 2592 } 2593 2594 const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); 2595 const events = getEvent(element); 2596 const handlers = events[typeEvent] || (events[typeEvent] = {}); 2597 const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null); 2598 2599 if (previousFn) { 2600 previousFn.oneOff = previousFn.oneOff && oneOff; 2601 return; 2602 } 2603 2604 const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, '')); 2605 const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler); 2606 fn.delegationSelector = delegation ? handler : null; 2607 fn.originalHandler = originalHandler; 2608 fn.oneOff = oneOff; 2609 fn.uidEvent = uid; 2610 handlers[uid] = fn; 2611 element.addEventListener(typeEvent, fn, delegation); 2612 } 2613 2614 function removeHandler(element, events, typeEvent, handler, delegationSelector) { 2615 const fn = findHandler(events[typeEvent], handler, delegationSelector); 2616 2617 if (!fn) { 2618 return; 2619 } 2620 2621 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 2622 delete events[typeEvent][fn.uidEvent]; 2623 } 2624 2625 function removeNamespacedHandlers(element, events, typeEvent, namespace) { 2626 const storeElementEvent = events[typeEvent] || {}; 2627 Object.keys(storeElementEvent).forEach(handlerKey => { 2628 if (handlerKey.includes(namespace)) { 2629 const event = storeElementEvent[handlerKey]; 2630 removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); 2631 } 2632 }); 2633 } 2634 2635 function getTypeEvent(event) { 2636 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 2637 event = event.replace(stripNameRegex, ''); 2638 return customEvents[event] || event; 2639 } 2640 2641 const EventHandler = { 2642 on(element, event, handler, delegationFn) { 2643 addHandler(element, event, handler, delegationFn, false); 2644 }, 2645 2646 one(element, event, handler, delegationFn) { 2647 addHandler(element, event, handler, delegationFn, true); 2648 }, 2649 2650 off(element, originalTypeEvent, handler, delegationFn) { 2651 if (typeof originalTypeEvent !== 'string' || !element) { 2652 return; 2653 } 2654 2655 const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn); 2656 const inNamespace = typeEvent !== originalTypeEvent; 2657 const events = getEvent(element); 2658 const isNamespace = originalTypeEvent.startsWith('.'); 2659 2660 if (typeof originalHandler !== 'undefined') { 2661 // Simplest case: handler is passed, remove that listener ONLY. 2662 if (!events || !events[typeEvent]) { 2663 return; 2664 } 2665 2666 removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null); 2667 return; 2668 } 2669 2670 if (isNamespace) { 2671 Object.keys(events).forEach(elementEvent => { 2672 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 2673 }); 2674 } 2675 2676 const storeElementEvent = events[typeEvent] || {}; 2677 Object.keys(storeElementEvent).forEach(keyHandlers => { 2678 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 2679 2680 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 2681 const event = storeElementEvent[keyHandlers]; 2682 removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector); 2683 } 2684 }); 2685 }, 2686 2687 trigger(element, event, args) { 2688 if (typeof event !== 'string' || !element) { 2689 return null; 2690 } 2691 2692 const $ = getjQuery(); 2693 const typeEvent = getTypeEvent(event); 2694 const inNamespace = event !== typeEvent; 2695 const isNative = nativeEvents.has(typeEvent); 2696 let jQueryEvent; 2697 let bubbles = true; 2698 let nativeDispatch = true; 2699 let defaultPrevented = false; 2700 let evt = null; 2701 2702 if (inNamespace && $) { 2703 jQueryEvent = $.Event(event, args); 2704 $(element).trigger(jQueryEvent); 2705 bubbles = !jQueryEvent.isPropagationStopped(); 2706 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 2707 defaultPrevented = jQueryEvent.isDefaultPrevented(); 2708 } 2709 2710 if (isNative) { 2711 evt = document.createEvent('HTMLEvents'); 2712 evt.initEvent(typeEvent, bubbles, true); 2713 } else { 2714 evt = new CustomEvent(event, { 2715 bubbles, 2716 cancelable: true 2717 }); 2718 } // merge custom information in our event 2719 2720 2721 if (typeof args !== 'undefined') {
2722 Object.keys(args).forEach(key => { 2723 Object.defineProperty(evt, key, { 2724 get() { 2725 return args[key]; 2726 } 2727 2728 }); 2729 }); 2730 } 2731 2732 if (defaultPrevented) { 2733 evt.preventDefault(); 2734 } 2735 2736 if (nativeDispatch) { 2737 element.dispatchEvent(evt); 2738 } 2739 2740 if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') { 2741 jQueryEvent.preventDefault(); 2742 } 2743 2744 return evt; 2745 } 2746 2747 }; 2748 2749 /** 2750 * -------------------------------------------------------------------------- 2751 * Bootstrap (v5.1.3): dom/data.js 2752 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2753 * -------------------------------------------------------------------------- 2754 */ 2755 2756 /** 2757 * ------------------------------------------------------------------------ 2758 * Constants 2759 * ------------------------------------------------------------------------ 2760 */ 2761 const elementMap = new Map(); 2762 const Data = { 2763 set(element, key, instance) { 2764 if (!elementMap.has(element)) { 2765 elementMap.set(element, new Map()); 2766 } 2767 2768 const instanceMap = elementMap.get(element); // make it clear we only want one instance per element 2769 // can be removed later when multiple key/instances are fine to be used 2770 2771 if (!instanceMap.has(key) && instanceMap.size !== 0) { 2772 // eslint-disable-next-line no-console 2773 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 2774 return; 2775 } 2776 2777 instanceMap.set(key, instance); 2778 }, 2779 2780 get(element, key) { 2781 if (elementMap.has(element)) { 2782 return elementMap.get(element).get(key) || null; 2783 } 2784 2785 return null; 2786 }, 2787 2788 remove(element, key) { 2789 if (!elementMap.has(element)) { 2790 return; 2791 } 2792 2793 const instanceMap = elementMap.get(element); 2794 instanceMap.delete(key); // free up element references if there are no instances left for an element 2795 2796 if (instanceMap.size === 0) { 2797 elementMap.delete(element); 2798 } 2799 } 2800 2801 }; 2802 2803 /** 2804 * -------------------------------------------------------------------------- 2805 * Bootstrap (v5.1.3): base-component.js 2806 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2807 * -------------------------------------------------------------------------- 2808 */ 2809 /** 2810 * ------------------------------------------------------------------------ 2811 * Constants 2812 * ------------------------------------------------------------------------ 2813 */ 2814 2815 const VERSION = '5.1.3'; 2816 2817 class BaseComponent { 2818 constructor(element) { 2819 element = getElement(element); 2820 2821 if (!element) { 2822 return; 2823 } 2824 2825 this._element = element; 2826 Data.set(this._element, this.constructor.DATA_KEY, this); 2827 } 2828 2829 dispose() { 2830 Data.remove(this._element, this.constructor.DATA_KEY); 2831 EventHandler.off(this._element, this.constructor.EVENT_KEY); 2832 Object.getOwnPropertyNames(this).forEach(propertyName => { 2833 this[propertyName] = null; 2834 }); 2835 } 2836 2837 _queueCallback(callback, element, isAnimated = true) { 2838 executeAfterTransition(callback, element, isAnimated); 2839 } 2840 /** Static */ 2841 2842 2843 static getInstance(element) { 2844 return Data.get(getElement(element), this.DATA_KEY); 2845 } 2846 2847 static getOrCreateInstance(element, config = {}) { 2848 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 2849 } 2850 2851 static get VERSION() { 2852 return VERSION; 2853 } 2854 2855 static get NAME() { 2856 throw new Error('You have to implement the static method "NAME", for each component!'); 2857 } 2858 2859 static get DATA_KEY() { 2860 return `bs.${this.NAME}`; 2861 } 2862 2863 static get EVENT_KEY() { 2864 return `.${this.DATA_KEY}`; 2865 } 2866 2867 } 2868 2869 /** 2870 * -------------------------------------------------------------------------- 2871 * Bootstrap (v5.1.3): util/component-functions.js 2872 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2873 * -------------------------------------------------------------------------- 2874 */ 2875 2876 const enableDismissTrigger = (component, method = 'hide') => { 2877 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 2878 const name = component.NAME; 2879 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 2880 if (['A', 'AREA'].includes(this.tagName)) { 2881 event.preventDefault(); 2882 } 2883 2884 if (isDisabled(this)) { 2885 return; 2886 } 2887 2888 const target = getElementFromSelector(this) || this.closest(`.${name}`); 2889 const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 2890 2891 instance[method](); 2892 }); 2893 }; 2894 2895 /** 2896 * -------------------------------------------------------------------------- 2897 * Bootstrap (v5.1.3): alert.js 2898 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2899 * -------------------------------------------------------------------------- 2900 */ 2901 /** 2902 * ------------------------------------------------------------------------ 2903 * Constants 2904 * ------------------------------------------------------------------------ 2905 */ 2906 2907 const NAME$d = 'alert'; 2908 const DATA_KEY$c = 'bs.alert'; 2909 const EVENT_KEY$c = `.${DATA_KEY$c}`; 2910 const EVENT_CLOSE = `close${EVENT_KEY$c}`; 2911 const EVENT_CLOSED = `closed${EVENT_KEY$c}`; 2912 const CLASS_NAME_FADE$5 = 'fade';
vendor: 4,515 bytes, lines 2913-3067
2913 const CLASS_NAME_SHOW$8 = 'show'; 2914 /** 2915 * ------------------------------------------------------------------------ 2916 * Class Definition 2917 * ------------------------------------------------------------------------ 2918 */ 2919 2920 class Alert extends BaseComponent { 2921 // Getters 2922 static get NAME() { 2923 return NAME$d; 2924 } // Public 2925 2926 2927 close() { 2928 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 2929 2930 if (closeEvent.defaultPrevented) { 2931 return; 2932 } 2933 2934 this._element.classList.remove(CLASS_NAME_SHOW$8); 2935 2936 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 2937 2938 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 2939 } // Private 2940 2941 2942 _destroyElement() { 2943 this._element.remove(); 2944 2945 EventHandler.trigger(this._element, EVENT_CLOSED); 2946 this.dispose(); 2947 } // Static 2948 2949 2950 static jQueryInterface(config) { 2951 return this.each(function () { 2952 const data = Alert.getOrCreateInstance(this); 2953 2954 if (typeof config !== 'string') { 2955 return; 2956 } 2957 2958 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 2959 throw new TypeError(`No method named "${config}"`); 2960 } 2961 2962 data[config](this); 2963 }); 2964 } 2965 2966 } 2967 /** 2968 * ------------------------------------------------------------------------ 2969 * Data Api implementation 2970 * ------------------------------------------------------------------------ 2971 */ 2972 2973 2974 enableDismissTrigger(Alert, 'close'); 2975 /** 2976 * ------------------------------------------------------------------------ 2977 * jQuery 2978 * ------------------------------------------------------------------------ 2979 * add .Alert to jQuery only if jQuery is present 2980 */ 2981 2982 defineJQueryPlugin(Alert); 2983 2984 /** 2985 * -------------------------------------------------------------------------- 2986 * Bootstrap (v5.1.3): button.js 2987 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2988 * -------------------------------------------------------------------------- 2989 */ 2990 /** 2991 * ------------------------------------------------------------------------ 2992 * Constants 2993 * ------------------------------------------------------------------------ 2994 */ 2995 2996 const NAME$c = 'button'; 2997 const DATA_KEY$b = 'bs.button'; 2998 const EVENT_KEY$b = `.${DATA_KEY$b}`; 2999 const DATA_API_KEY$7 = '.data-api'; 3000 const CLASS_NAME_ACTIVE$3 = 'active'; 3001 const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 3002 const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$b}${DATA_API_KEY$7}`; 3003 /** 3004 * ------------------------------------------------------------------------ 3005 * Class Definition 3006 * ------------------------------------------------------------------------ 3007 */ 3008 3009 class Button extends BaseComponent { 3010 // Getters 3011 static get NAME() { 3012 return NAME$c; 3013 } // Public 3014 3015 3016 toggle() { 3017 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 3018 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 3019 } // Static 3020 3021 3022 static jQueryInterface(config) { 3023 return this.each(function () { 3024 const data = Button.getOrCreateInstance(this); 3025 3026 if (config === 'toggle') { 3027 data[config](); 3028 } 3029 }); 3030 } 3031 3032 } 3033 /** 3034 * ------------------------------------------------------------------------ 3035 * Data Api implementation 3036 * ------------------------------------------------------------------------ 3037 */ 3038 3039 3040 EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 3041 event.preventDefault(); 3042 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 3043 const data = Button.getOrCreateInstance(button); 3044 data.toggle(); 3045 }); 3046 /** 3047 * ------------------------------------------------------------------------ 3048 * jQuery 3049 * ------------------------------------------------------------------------ 3050 * add .Button to jQuery only if jQuery is present 3051 */ 3052 3053 defineJQueryPlugin(Button); 3054 3055 /** 3056 * -------------------------------------------------------------------------- 3057 * Bootstrap (v5.1.3): dom/manipulator.js 3058 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3059 * -------------------------------------------------------------------------- 3060 */ 3061 function normalizeData(val) { 3062 if (val === 'true') { 3063 return true; 3064 } 3065 3066 if (val === 'false') { 3067 return false;
3068 } 3069 3070 if (val === Number(val).toString()) { 3071 return Number(val); 3072 } 3073 3074 if (val === '' || val === 'null') { 3075 return null; 3076 } 3077 3078 return val; 3079 } 3080 3081 function normalizeDataKey(key) { 3082 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 3083 } 3084 3085 const Manipulator = { 3086 setDataAttribute(element, key, value) { 3087 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 3088 }, 3089 3090 removeDataAttribute(element, key) { 3091 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 3092 }, 3093 3094 getDataAttributes(element) { 3095 if (!element) { 3096 return {}; 3097 } 3098 3099 const attributes = {}; 3100 Object.keys(element.dataset).filter(key => key.startsWith('bs')).forEach(key => { 3101 let pureKey = key.replace(/^bs/, ''); 3102 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 3103 attributes[pureKey] = normalizeData(element.dataset[key]); 3104 }); 3105 return attributes; 3106 }, 3107 3108 getDataAttribute(element, key) { 3109 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 3110 }, 3111 3112 offset(element) { 3113 const rect = element.getBoundingClientRect(); 3114 return { 3115 top: rect.top + window.pageYOffset, 3116 left: rect.left + window.pageXOffset 3117 }; 3118 }, 3119 3120 position(element) { 3121 return { 3122 top: element.offsetTop, 3123 left: element.offsetLeft 3124 }; 3125 } 3126 3127 }; 3128 3129 /** 3130 * -------------------------------------------------------------------------- 3131 * Bootstrap (v5.1.3): dom/selector-engine.js 3132 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3133 * -------------------------------------------------------------------------- 3134 */ 3135 const NODE_TEXT = 3; 3136 const SelectorEngine = { 3137 find(selector, element = document.documentElement) { 3138 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 3139 }, 3140 3141 findOne(selector, element = document.documentElement) { 3142 return Element.prototype.querySelector.call(element, selector); 3143 }, 3144 3145 children(element, selector) { 3146 return [].concat(...element.children).filter(child => child.matches(selector)); 3147 }, 3148 3149 parents(element, selector) { 3150 const parents = []; 3151 let ancestor = element.parentNode; 3152 3153 while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { 3154 if (ancestor.matches(selector)) { 3155 parents.push(ancestor); 3156 } 3157 3158 ancestor = ancestor.parentNode; 3159 } 3160 3161 return parents; 3162 }, 3163 3164 prev(element, selector) { 3165 let previous = element.previousElementSibling; 3166 3167 while (previous) { 3168 if (previous.matches(selector)) { 3169 return [previous]; 3170 } 3171 3172 previous = previous.previousElementSibling; 3173 } 3174 3175 return []; 3176 }, 3177 3178 next(element, selector) { 3179 let next = element.nextElementSibling; 3180 3181 while (next) { 3182 if (next.matches(selector)) { 3183 return [next]; 3184 } 3185 3186 next = next.nextElementSibling; 3187 } 3188 3189 return []; 3190 }, 3191 3192 focusableChildren(element) { 3193 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(', '); 3194 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 3195 } 3196 3197 }; 3198 3199 /** 3200 * -------------------------------------------------------------------------- 3201 * Bootstrap (v5.1.3): carousel.js 3202 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3203 * -------------------------------------------------------------------------- 3204 */ 3205 /** 3206 * ------------------------------------------------------------------------ 3207 * Constants 3208 * ------------------------------------------------------------------------ 3209 */ 3210 3211 const NAME$b = 'carousel'; 3212 const DATA_KEY$a = 'bs.carousel'; 3213 const EVENT_KEY$a = `.${DATA_KEY$a}`; 3214 const DATA_API_KEY$6 = '.data-api'; 3215 const ARROW_LEFT_KEY = 'ArrowLeft'; 3216 const ARROW_RIGHT_KEY = 'ArrowRight'; 3217 const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 3218 3219 const SWIPE_THRESHOLD = 40; 3220 const Default$a = { 3221 interval: 5000, 3222 keyboard: true, 3223 slide: false, 3224 pause: 'hover', 3225 wrap: true, 3226 touch: true 3227 }; 3228 const DefaultType$a = { 3229 interval: '(number|boolean)', 3230 keyboard: 'boolean', 3231 slide: '(boolean|string)', 3232 pause: '(string|boolean)', 3233 wrap: 'boolean', 3234 touch: 'boolean' 3235 }; 3236 const ORDER_NEXT = 'next'; 3237 const ORDER_PREV = 'prev'; 3238 const DIRECTION_LEFT = 'left'; 3239 const DIRECTION_RIGHT = 'right'; 3240 const KEY_TO_DIRECTION = { 3241 [ARROW_LEFT_KEY]: DIRECTION_RIGHT, 3242 [ARROW_RIGHT_KEY]: DIRECTION_LEFT 3243 }; 3244 const EVENT_SLIDE = `slide${EVENT_KEY$a}`; 3245 const EVENT_SLID = `slid${EVENT_KEY$a}`; 3246 const EVENT_KEYDOWN = `keydown${EVENT_KEY$a}`; 3247 const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY$a}`; 3248 const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY$a}`; 3249 const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$a}`; 3250 const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$a}`; 3251 const EVENT_TOUCHEND = `touchend${EVENT_KEY$a}`; 3252 const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$a}`; 3253 const EVENT_POINTERUP = `pointerup${EVENT_KEY$a}`; 3254 const EVENT_DRAG_START = `dragstart${EVENT_KEY$a}`; 3255 const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$a}${DATA_API_KEY$6}`; 3256 const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 3257 const CLASS_NAME_CAROUSEL = 'carousel'; 3258 const CLASS_NAME_ACTIVE$2 = 'active'; 3259 const CLASS_NAME_SLIDE = 'slide'; 3260 const CLASS_NAME_END = 'carousel-item-end'; 3261 const CLASS_NAME_START = 'carousel-item-start';
3262 const CLASS_NAME_NEXT = 'carousel-item-next'; 3263 const CLASS_NAME_PREV = 'carousel-item-prev'; 3264 const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 3265 const SELECTOR_ACTIVE$1 = '.active'; 3266 const SELECTOR_ACTIVE_ITEM = '.active.carousel-item'; 3267 const SELECTOR_ITEM = '.carousel-item'; 3268 const SELECTOR_ITEM_IMG = '.carousel-item img'; 3269 const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'; 3270 const SELECTOR_INDICATORS = '.carousel-indicators'; 3271 const SELECTOR_INDICATOR = '[data-bs-target]'; 3272 const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 3273 const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 3274 const POINTER_TYPE_TOUCH = 'touch'; 3275 const POINTER_TYPE_PEN = 'pen'; 3276 /** 3277 * ------------------------------------------------------------------------ 3278 * Class Definition 3279 * ------------------------------------------------------------------------ 3280 */ 3281 3282 class Carousel extends BaseComponent { 3283 constructor(element, config) { 3284 super(element); 3285 this._items = null; 3286 this._interval = null; 3287 this._activeElement = null; 3288 this._isPaused = false; 3289 this._isSliding = false; 3290 this.touchTimeout = null; 3291 this.touchStartX = 0; 3292 this.touchDeltaX = 0; 3293 this._config = this._getConfig(config); 3294 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 3295 this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 3296 this._pointerEvent = Boolean(window.PointerEvent); 3297 3298 this._addEventListeners(); 3299 } // Getters 3300 3301 3302 static get Default() { 3303 return Default$a; 3304 } 3305 3306 static get NAME() { 3307 return NAME$b; 3308 } // Public 3309 3310 3311 next() { 3312 this._slide(ORDER_NEXT); 3313 } 3314 3315 nextWhenVisible() { 3316 // Don't call next when the page isn't visible 3317 // or the carousel or its parent isn't visible 3318 if (!document.hidden && isVisible(this._element)) { 3319 this.next(); 3320 } 3321 } 3322 3323 prev() { 3324 this._slide(ORDER_PREV); 3325 } 3326 3327 pause(event) { 3328 if (!event) { 3329 this._isPaused = true; 3330 } 3331 3332 if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) { 3333 triggerTransitionEnd(this._element); 3334 this.cycle(true); 3335 } 3336 3337 clearInterval(this._interval); 3338 this._interval = null; 3339 } 3340 3341 cycle(event) { 3342 if (!event) { 3343 this._isPaused = false; 3344 } 3345 3346 if (this._interval) { 3347 clearInterval(this._interval); 3348 this._interval = null; 3349 } 3350 3351 if (this._config && this._config.interval && !this._isPaused) { 3352 this._updateInterval(); 3353 3354 this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); 3355 } 3356 } 3357 3358 to(index) { 3359 this._activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 3360 3361 const activeIndex = this._getItemIndex(this._activeElement); 3362 3363 if (index > this._items.length - 1 || index < 0) { 3364 return; 3365 } 3366 3367 if (this._isSliding) { 3368 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 3369 return; 3370 } 3371 3372 if (activeIndex === index) { 3373 this.pause(); 3374 this.cycle(); 3375 return; 3376 } 3377 3378 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 3379 3380 this._slide(order, this._items[index]); 3381 } // Private 3382 3383 3384 _getConfig(config) { 3385 config = { ...Default$a, 3386 ...Manipulator.getDataAttributes(this._element), 3387 ...(typeof config === 'object' ? config : {}) 3388 }; 3389 typeCheckConfig(NAME$b, config, DefaultType$a); 3390 return config; 3391 } 3392 3393 _handleSwipe() { 3394 const absDeltax = Math.abs(this.touchDeltaX); 3395 3396 if (absDeltax <= SWIPE_THRESHOLD) { 3397 return; 3398 } 3399 3400 const direction = absDeltax / this.touchDeltaX; 3401 this.touchDeltaX = 0; 3402 3403 if (!direction) { 3404 return; 3405 } 3406 3407 this._slide(direction > 0 ? DIRECTION_RIGHT : DIRECTION_LEFT); 3408 } 3409 3410 _addEventListeners() { 3411 if (this._config.keyboard) { 3412 EventHandler.on(this._element, EVENT_KEYDOWN, event =>
3412 this._keydown(event)); 3413 } 3414 3415 if (this._config.pause === 'hover') { 3416 EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event)); 3417 EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event)); 3418 } 3419 3420 if (this._config.touch && this._touchSupported) { 3421 this._addTouchEventListeners(); 3422 } 3423 } 3424 3425 _addTouchEventListeners() { 3426 const hasPointerPenTouch = event => { 3427 return this._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 3428 }; 3429 3430 const start = event => { 3431 if (hasPointerPenTouch(event)) { 3432 this.touchStartX = event.clientX; 3433 } else if (!this._pointerEvent) { 3434 this.touchStartX = event.touches[0].clientX; 3435 } 3436 }; 3437 3438 const move = event => { 3439 // ensure swiping with one touch and not pinching 3440 this.touchDeltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this.touchStartX; 3441 }; 3442 3443 const end = event => { 3444 if (hasPointerPenTouch(event)) { 3445 this.touchDeltaX = event.clientX - this.touchStartX; 3446 } 3447 3448 this._handleSwipe(); 3449 3450 if (this._config.pause === 'hover') { 3451 // If it's a touch-enabled device, mouseenter/leave are fired as 3452 // part of the mouse compatibility events on first tap - the carousel 3453 // would stop cycling until user tapped out of it; 3454 // here, we listen for touchend, explicitly pause the carousel 3455 // (as if it's the second time we tap on it, mouseenter compat event 3456 // is NOT fired) and after a timeout (to allow for mouse compatibility 3457 // events to fire) we explicitly restart cycling 3458 this.pause(); 3459 3460 if (this.touchTimeout) { 3461 clearTimeout(this.touchTimeout); 3462 } 3463 3464 this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 3465 } 3466 }; 3467 3468 SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(itemImg => { 3469 EventHandler.on(itemImg, EVENT_DRAG_START, event => event.preventDefault()); 3470 }); 3471 3472 if (this._pointerEvent) { 3473 EventHandler.on(this._element, EVENT_POINTERDOWN, event => start(event)); 3474 EventHandler.on(this._element, EVENT_POINTERUP, event => end(event)); 3475 3476 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 3477 } else { 3478 EventHandler.on(this._element, EVENT_TOUCHSTART, event => start(event)); 3479 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => move(event)); 3480 EventHandler.on(this._element, EVENT_TOUCHEND, event => end(event)); 3481 } 3482 } 3483 3484 _keydown(event) { 3485 if (/input|textarea/i.test(event.target.tagName)) { 3486 return; 3487 } 3488 3489 const direction = KEY_TO_DIRECTION[event.key]; 3490 3491 if (direction) { 3492 event.preventDefault(); 3493 3494 this._slide(direction); 3495 } 3496 } 3497 3498 _getItemIndex(element) { 3499 this._items = element && element.parentNode ? SelectorEngine.find(SELECTOR_ITEM, element.parentNode) : []; 3500 return this._items.indexOf(element); 3501 } 3502 3503 _getItemByOrder(order, activeElement) { 3504 const isNext = order === ORDER_NEXT; 3505 return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap); 3506 } 3507 3508 _triggerSlideEvent(relatedTarget, eventDirectionName) { 3509 const targetIndex = this._getItemIndex(relatedTarget); 3510 3511 const fromIndex = this._getItemIndex(SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)); 3512 3513 return EventHandler.trigger(this._element, EVENT_SLIDE, { 3514 relatedTarget, 3515 direction: eventDirectionName, 3516 from: fromIndex, 3517 to: targetIndex 3518 }); 3519 } 3520 3521 _setActiveIndicatorElement(element) { 3522 if (this._indicatorsElement) { 3523 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE$1, this._indicatorsElement); 3524 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 3525 activeIndicator.removeAttribute('aria-current'); 3526 const indicators = SelectorEngine.find(SELECTOR_INDICATOR, this._indicatorsElement); 3527 3528 for (let i = 0; i < indicators.length; i++) { 3529 if (Number.parseInt(indicators[i].getAttribute('data-bs-slide-to'), 10) === this._getItemIndex(element)) { 3530 indicators[i].classList.add(CLASS_NAME_ACTIVE$2); 3531 indicators[i].setAttribute('aria-current', 'true'); 3532 break; 3533 } 3534 } 3535 } 3536 } 3537 3538 _updateInterval() { 3539 const element = this._activeElement || SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 3540 3541 if (!element) { 3542 return; 3543 } 3544 3545 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 3546 3547 if (elementInterval) { 3548 this._config.defaultInterval = this._config.defaultInterval || this._config.interval; 3549 this._config.interval = elementInterval; 3550 } else { 3551 this._config.interval = this._config.defaultInterval || this._config.interval; 3552 } 3553 } 3554 3555 _slide(directionOrOrder, element) { 3556 const order = this._directionToOrder(directionOrOrder); 3557 3558 const activeElement = SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 3559 3560 const activeElementIndex = this._getItemIndex(activeElement); 3561 3562 const nextElement = element || this._getItemByOrder(order, activeElement); 3563 3564 const nextElementIndex = this._getItemIndex(nextElement); 3565 3566 const isCycling = Boolean(this._interval); 3567 const isNext = order === ORDER_NEXT; 3568 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 3569 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 3570 3571 const eventDirectionName = this._orderToDirection(order); 3572 3573 if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE$2)) { 3574 this._isSliding = false;
3575 return; 3576 } 3577 3578 if (this._isSliding) { 3579 return; 3580 } 3581 3582 const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); 3583 3584 if (slideEvent.defaultPrevented) { 3585 return; 3586 } 3587 3588 if (!activeElement || !nextElement) { 3589 // Some weirdness is happening, so we bail 3590 return; 3591 } 3592 3593 this._isSliding = true; 3594 3595 if (isCycling) { 3596 this.pause(); 3597 } 3598 3599 this._setActiveIndicatorElement(nextElement); 3600 3601 this._activeElement = nextElement; 3602 3603 const triggerSlidEvent = () => { 3604 EventHandler.trigger(this._element, EVENT_SLID, { 3605 relatedTarget: nextElement, 3606 direction: eventDirectionName, 3607 from: activeElementIndex, 3608 to: nextElementIndex 3609 }); 3610 }; 3611 3612 if (this._element.classList.contains(CLASS_NAME_SLIDE)) { 3613 nextElement.classList.add(orderClassName); 3614 reflow(nextElement); 3615 activeElement.classList.add(directionalClassName); 3616 nextElement.classList.add(directionalClassName); 3617 3618 const completeCallBack = () => { 3619 nextElement.classList.remove(directionalClassName, orderClassName); 3620 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 3621 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 3622 this._isSliding = false; 3623 setTimeout(triggerSlidEvent, 0); 3624 }; 3625 3626 this._queueCallback(completeCallBack, activeElement, true); 3627 } else { 3628 activeElement.classList.remove(CLASS_NAME_ACTIVE$2); 3629 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 3630 this._isSliding = false; 3631 triggerSlidEvent(); 3632 } 3633 3634 if (isCycling) { 3635 this.cycle(); 3636 } 3637 } 3638 3639 _directionToOrder(direction) { 3640 if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) { 3641 return direction; 3642 } 3643 3644 if (isRTL()) { 3645 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 3646 } 3647 3648 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 3649 } 3650 3651 _orderToDirection(order) { 3652 if (![ORDER_NEXT, ORDER_PREV].includes(order)) { 3653 return order; 3654 } 3655 3656 if (isRTL()) { 3657 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 3658 } 3659 3660 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 3661 } // Static 3662 3663 3664 static carouselInterface(element, config) { 3665 const data = Carousel.getOrCreateInstance(element, config); 3666 let { 3667 _config 3668 } = data; 3669 3670 if (typeof config === 'object') { 3671 _config = { ..._config, 3672 ...config 3673 }; 3674 } 3675 3676 const action = typeof config === 'string' ? config : _config.slide; 3677 3678 if (typeof config === 'number') { 3679 data.to(config); 3680 } else if (typeof action === 'string') { 3681 if (typeof data[action] === 'undefined') { 3682 throw new TypeError(`No method named "${action}"`); 3683 } 3684 3685 data[action](); 3686 } else if (_config.interval && _config.ride) { 3687 data.pause(); 3688 data.cycle(); 3689 } 3690 } 3691 3692 static jQueryInterface(config) { 3693 return this.each(function () { 3694 Carousel.carouselInterface(this, config); 3695 }); 3696 } 3697 3698 static dataApiClickHandler(event) { 3699 const target = getElementFromSelector(this); 3700 3701 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 3702 return; 3703 } 3704 3705 const config = { ...Manipulator.getDataAttributes(target), 3706 ...Manipulator.getDataAttributes(this) 3707 }; 3708 const slideIndex = this.getAttribute('data-bs-slide-to'); 3709 3710 if (slideIndex) { 3711 config.interval = false; 3712 } 3713 3714 Carousel.carouselInterface(target, config); 3715 3716 if (slideIndex) { 3717 Carousel.getInstance(target).to(slideIndex); 3718 } 3719 3720 event.preventDefault(); 3721 } 3722 3723 } 3724 /** 3725 * ------------------------------------------------------------------------ 3726 * Data Api implementation 3727 * ------------------------------------------------------------------------ 3728 */ 3729 3730 3731 EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler); 3732 EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 3733 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 3734 3735 for (let i = 0, len = carousels.length; i < len; i++) {
3736 Carousel.carouselInterface(carousels[i], Carousel.getInstance(carousels[i])); 3737 } 3738 }); 3739 /** 3740 * ------------------------------------------------------------------------ 3741 * jQuery 3742 * ------------------------------------------------------------------------ 3743 * add .Carousel to jQuery only if jQuery is present 3744 */ 3745 3746 defineJQueryPlugin(Carousel); 3747 3748 /** 3749 * -------------------------------------------------------------------------- 3750 * Bootstrap (v5.1.3): collapse.js 3751 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3752 * -------------------------------------------------------------------------- 3753 */ 3754 /** 3755 * ------------------------------------------------------------------------ 3756 * Constants 3757 * ------------------------------------------------------------------------ 3758 */ 3759 3760 const NAME$a = 'collapse'; 3761 const DATA_KEY$9 = 'bs.collapse'; 3762 const EVENT_KEY$9 = `.${DATA_KEY$9}`; 3763 const DATA_API_KEY$5 = '.data-api'; 3764 const Default$9 = { 3765 toggle: true, 3766 parent: null 3767 }; 3768 const DefaultType$9 = { 3769 toggle: 'boolean', 3770 parent: '(null|element)' 3771 }; 3772 const EVENT_SHOW$5 = `show${EVENT_KEY$9}`; 3773 const EVENT_SHOWN$5 = `shown${EVENT_KEY$9}`; 3774 const EVENT_HIDE$5 = `hide${EVENT_KEY$9}`; 3775 const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$9}`; 3776 const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$9}${DATA_API_KEY$5}`; 3777 const CLASS_NAME_SHOW$7 = 'show'; 3778 const CLASS_NAME_COLLAPSE = 'collapse'; 3779 const CLASS_NAME_COLLAPSING = 'collapsing'; 3780 const CLASS_NAME_COLLAPSED = 'collapsed'; 3781 const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 3782 const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 3783 const WIDTH = 'width'; 3784 const HEIGHT = 'height'; 3785 const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 3786 const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 3787 /** 3788 * ------------------------------------------------------------------------ 3789 * Class Definition 3790 * ------------------------------------------------------------------------ 3791 */ 3792 3793 class Collapse extends BaseComponent { 3794 constructor(element, config) { 3795 super(element); 3796 this._isTransitioning = false; 3797 this._config = this._getConfig(config); 3798 this._triggerArray = []; 3799 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 3800 3801 for (let i = 0, len = toggleList.length; i < len; i++) { 3802 const elem = toggleList[i]; 3803 const selector = getSelectorFromElement(elem); 3804 const filterElement = SelectorEngine.find(selector).filter(foundElem => foundElem === this._element); 3805 3806 if (selector !== null && filterElement.length) { 3807 this._selector = selector; 3808 3809 this._triggerArray.push(elem); 3810 } 3811 } 3812 3813 this._initializeChildren(); 3814 3815 if (!this._config.parent) { 3816 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 3817 } 3818 3819 if (this._config.toggle) { 3820 this.toggle(); 3821 } 3822 } // Getters 3823 3824 3825 static get Default() { 3826 return Default$9; 3827 } 3828 3829 static get NAME() { 3830 return NAME$a; 3831 } // Public 3832 3833 3834 toggle() { 3835 if (this._isShown()) { 3836 this.hide(); 3837 } else { 3838 this.show(); 3839 } 3840 } 3841 3842 show() { 3843 if (this._isTransitioning || this._isShown()) { 3844 return; 3845 } 3846 3847 let actives = []; 3848 let activesData; 3849 3850 if (this._config.parent) { 3851 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 3852 actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(elem => !children.includes(elem)); // remove children if greater depth 3853 } 3854 3855 const container = SelectorEngine.findOne(this._selector); 3856 3857 if (actives.length) { 3858 const tempActiveData = actives.find(elem => container !== elem); 3859 activesData = tempActiveData ? Collapse.getInstance(tempActiveData) : null; 3860 3861 if (activesData && activesData._isTransitioning) { 3862 return; 3863 } 3864 } 3865 3866 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$5); 3867 3868 if (startEvent.defaultPrevented) { 3869 return; 3870 } 3871
3872 actives.forEach(elemActive => { 3873 if (container !== elemActive) { 3874 Collapse.getOrCreateInstance(elemActive, { 3875 toggle: false 3876 }).hide(); 3877 } 3878 3879 if (!activesData) { 3880 Data.set(elemActive, DATA_KEY$9, null); 3881 } 3882 }); 3883 3884 const dimension = this._getDimension(); 3885 3886 this._element.classList.remove(CLASS_NAME_COLLAPSE); 3887 3888 this._element.classList.add(CLASS_NAME_COLLAPSING); 3889 3890 this._element.style[dimension] = 0; 3891 3892 this._addAriaAndCollapsedClass(this._triggerArray, true); 3893 3894 this._isTransitioning = true; 3895 3896 const complete = () => { 3897 this._isTransitioning = false; 3898 3899 this._element.classList.remove(CLASS_NAME_COLLAPSING); 3900 3901 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 3902 3903 this._element.style[dimension] = ''; 3904 EventHandler.trigger(this._element, EVENT_SHOWN$5); 3905 }; 3906 3907 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 3908 const scrollSize = `scroll${capitalizedDimension}`; 3909 3910 this._queueCallback(complete, this._element, true); 3911 3912 this._element.style[dimension] = `${this._element[scrollSize]}px`; 3913 } 3914 3915 hide() { 3916 if (this._isTransitioning || !this._isShown()) { 3917 return; 3918 } 3919 3920 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$5); 3921 3922 if (startEvent.defaultPrevented) { 3923 return; 3924 } 3925 3926 const dimension = this._getDimension(); 3927 3928 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 3929 reflow(this._element); 3930 3931 this._element.classList.add(CLASS_NAME_COLLAPSING); 3932 3933 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 3934 3935 const triggerArrayLength = this._triggerArray.length; 3936 3937 for (let i = 0; i < triggerArrayLength; i++) { 3938 const trigger = this._triggerArray[i]; 3939 const elem = getElementFromSelector(trigger); 3940 3941 if (elem && !this._isShown(elem)) { 3942 this._addAriaAndCollapsedClass([trigger], false); 3943 } 3944 } 3945 3946 this._isTransitioning = true; 3947 3948 const complete = () => { 3949 this._isTransitioning = false; 3950 3951 this._element.classList.remove(CLASS_NAME_COLLAPSING); 3952 3953 this._element.classList.add(CLASS_NAME_COLLAPSE); 3954 3955 EventHandler.trigger(this._element, EVENT_HIDDEN$5); 3956 }; 3957 3958 this._element.style[dimension] = ''; 3959 3960 this._queueCallback(complete, this._element, true); 3961 } 3962 3963 _isShown(element = this._element) { 3964 return element.classList.contains(CLASS_NAME_SHOW$7); 3965 } // Private 3966 3967 3968 _getConfig(config) { 3969 config = { ...Default$9, 3970 ...Manipulator.getDataAttributes(this._element), 3971 ...config 3972 }; 3973 config.toggle = Boolean(config.toggle); // Coerce string values 3974 3975 config.parent = getElement(config.parent); 3976 typeCheckConfig(NAME$a, config, DefaultType$9); 3977 return config; 3978 } 3979 3980 _getDimension() { 3981 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 3982 } 3983 3984 _initializeChildren() { 3985 if (!this._config.parent) { 3986 return; 3987 } 3988 3989 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 3990 SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(elem => !children.includes(elem)).forEach(element => { 3991 const selected = getElementFromSelector(element); 3992 3993 if (selected) { 3994 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 3995 } 3996 }); 3997 } 3998 3999 _addAriaAndCollapsedClass(triggerArray, isOpen) { 4000 if (!triggerArray.length) { 4001 return; 4002 } 4003 4004 triggerArray.forEach(elem => { 4005 if (isOpen) { 4006 elem.classList.remove(CLASS_NAME_COLLAPSED); 4007 } else { 4008 elem.classList.add(CLASS_NAME_COLLAPSED); 4009 } 4010 4011 elem.setAttribute('aria-expanded', isOpen); 4012 }); 4013 } // Static 4014 4015 4016 static jQueryInterface(config) { 4017 return this.each(function () { 4018 const _config = {}; 4019 4020 if (typeof config === 'string' && /show|hide/.test(config)) { 4021 _config.toggle = false;
vendor: 8,678 bytes, lines 4022-4304
4022 } 4023 4024 const data = Collapse.getOrCreateInstance(this, _config); 4025 4026 if (typeof config === 'string') { 4027 if (typeof data[config] === 'undefined') { 4028 throw new TypeError(`No method named "${config}"`); 4029 } 4030 4031 data[config](); 4032 } 4033 }); 4034 } 4035 4036 } 4037 /** 4038 * ------------------------------------------------------------------------ 4039 * Data Api implementation 4040 * ------------------------------------------------------------------------ 4041 */ 4042 4043 4044 EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 4045 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 4046 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 4047 event.preventDefault(); 4048 } 4049 4050 const selector = getSelectorFromElement(this); 4051 const selectorElements = SelectorEngine.find(selector); 4052 selectorElements.forEach(element => { 4053 Collapse.getOrCreateInstance(element, { 4054 toggle: false 4055 }).toggle(); 4056 }); 4057 }); 4058 /** 4059 * ------------------------------------------------------------------------ 4060 * jQuery 4061 * ------------------------------------------------------------------------ 4062 * add .Collapse to jQuery only if jQuery is present 4063 */ 4064 4065 defineJQueryPlugin(Collapse); 4066 4067 var top = 'top'; 4068 var bottom = 'bottom'; 4069 var right = 'right'; 4070 var left = 'left'; 4071 var auto = 'auto'; 4072 var basePlacements = [top, bottom, right, left]; 4073 var start = 'start'; 4074 var end = 'end'; 4075 var clippingParents = 'clippingParents'; 4076 var viewport = 'viewport'; 4077 var popper = 'popper'; 4078 var reference = 'reference'; 4079 var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 4080 return acc.concat([placement + "-" + start, placement + "-" + end]); 4081 }, []); 4082 var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 4083 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 4084 }, []); // modifiers that need to read the DOM 4085 4086 var beforeRead = 'beforeRead'; 4087 var read = 'read'; 4088 var afterRead = 'afterRead'; // pure-logic modifiers 4089 4090 var beforeMain = 'beforeMain'; 4091 var main = 'main'; 4092 var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 4093 4094 var beforeWrite = 'beforeWrite'; 4095 var write = 'write'; 4096 var afterWrite = 'afterWrite'; 4097 var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 4098 4099 function getNodeName(element) { 4100 return element ? (element.nodeName || '').toLowerCase() : null; 4101 } 4102 4103 function getWindow(node) { 4104 if (node == null) { 4105 return window; 4106 } 4107 4108 if (node.toString() !== '[object Window]') { 4109 var ownerDocument = node.ownerDocument; 4110 return ownerDocument ? ownerDocument.defaultView || window : window; 4111 } 4112 4113 return node; 4114 } 4115 4116 function isElement(node) { 4117 var OwnElement = getWindow(node).Element; 4118 return node instanceof OwnElement || node instanceof Element; 4119 } 4120 4121 function isHTMLElement(node) { 4122 var OwnElement = getWindow(node).HTMLElement; 4123 return node instanceof OwnElement || node instanceof HTMLElement; 4124 } 4125 4126 function isShadowRoot(node) { 4127 // IE 11 has no ShadowRoot 4128 if (typeof ShadowRoot === 'undefined') { 4129 return false; 4130 } 4131 4132 var OwnElement = getWindow(node).ShadowRoot; 4133 return node instanceof OwnElement || node instanceof ShadowRoot; 4134 } 4135 4136 // and applies them to the HTMLElements such as popper and arrow 4137 4138 function applyStyles(_ref) { 4139 var state = _ref.state; 4140 Object.keys(state.elements).forEach(function (name) { 4141 var style = state.styles[name] || {}; 4142 var attributes = state.attributes[name] || {}; 4143 var element = state.elements[name]; // arrow is optional + virtual elements 4144 4145 if (!isHTMLElement(element) || !getNodeName(element)) { 4146 return; 4147 } // Flow doesn't support to extend this property, but it's the most 4148 // effective way to apply styles to an HTMLElement 4149 // $FlowFixMe[cannot-write] 4150 4151 4152 Object.assign(element.style, style); 4153 Object.keys(attributes).forEach(function (name) { 4154 var value = attributes[name]; 4155 4156 if (value === false) { 4157 element.removeAttribute(name); 4158 } else { 4159 element.setAttribute(name, value === true ? '' : value); 4160 } 4161 }); 4162 }); 4163 } 4164 4165 function effect$2(_ref2) { 4166 var state = _ref2.state; 4167 var initialStyles = { 4168 popper: { 4169 position: state.options.strategy, 4170 left: '0', 4171 top: '0', 4172 margin: '0' 4173 }, 4174 arrow: { 4175 position: 'absolute' 4176 }, 4177 reference: {} 4178 }; 4179 Object.assign(state.elements.popper.style, initialStyles.popper); 4180 state.styles = initialStyles; 4181 4182 if (state.elements.arrow) { 4183 Object.assign(state.elements.arrow.style, initialStyles.arrow); 4184 } 4185 4186 return function () { 4187 Object.keys(state.elements).forEach(function (name) { 4188 var element = state.elements[name]; 4189 var attributes = state.attributes[name] || {}; 4190 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 4191 4192 var style = styleProperties.reduce(function (style, property) { 4193 style[property] = ''; 4194 return style; 4195 }, {}); // arrow is optional + virtual elements 4196 4197 if (!isHTMLElement(element) || !getNodeName(element)) { 4198 return; 4199 } 4200 4201 Object.assign(element.style, style); 4202 Object.keys(attributes).forEach(function (attribute) { 4203 element.removeAttribute(attribute); 4204 }); 4205 }); 4206 }; 4207 } // eslint-disable-next-line import/no-unused-modules 4208 4209 4210 const applyStyles$1 = { 4211 name: 'applyStyles', 4212 enabled: true, 4213 phase: 'write', 4214 fn: applyStyles, 4215 effect: effect$2, 4216 requires: ['computeStyles'] 4217 }; 4218 4219 function getBasePlacement(placement) { 4220 return placement.split('-')[0]; 4221 } 4222 4223 // import { isHTMLElement } from './instanceOf'; 4224 function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars 4225 includeScale) { 4226 4227 var rect = element.getBoundingClientRect(); 4228 var scaleX = 1; 4229 var scaleY = 1; // FIXME: 4230 // `offsetWidth` returns an integer while `getBoundingClientRect` 4231 // returns a float. This results in `scaleX` or `scaleY` being 4232 // non-1 when it should be for elements that aren't a full pixel in 4233 // width or height. 4234 // if (isHTMLElement(element) && includeScale) { 4235 // const offsetHeight = element.offsetHeight; 4236 // const offsetWidth = element.offsetWidth; 4237 // // Do not attempt to divide by 0, otherwise we get `Infinity` as scale 4238 // // Fallback to 1 in case both values are `0` 4239 // if (offsetWidth > 0) { 4240 // scaleX = rect.width / offsetWidth || 1; 4241 // } 4242 // if (offsetHeight > 0) { 4243 // scaleY = rect.height / offsetHeight || 1; 4244 // } 4245 // } 4246 4247 return { 4248 width: rect.width / scaleX, 4249 height: rect.height / scaleY, 4250 top: rect.top / scaleY, 4251 right: rect.right / scaleX, 4252 bottom: rect.bottom / scaleY, 4253 left: rect.left / scaleX, 4254 x: rect.left / scaleX, 4255 y: rect.top / scaleY 4256 }; 4257 } 4258 4259 // means it doesn't take into account transforms. 4260 4261 function getLayoutRect(element) { 4262 var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. 4263 // Fixes https://github.com/popperjs/popper-core/issues/1223 4264 4265 var width = element.offsetWidth; 4266 var height = element.offsetHeight; 4267 4268 if (Math.abs(clientRect.width - width) <= 1) { 4269 width = clientRect.width; 4270 } 4271 4272 if (Math.abs(clientRect.height - height) <= 1) { 4273 height = clientRect.height; 4274 } 4275 4276 return { 4277 x: element.offsetLeft, 4278 y: element.offsetTop, 4279 width: width, 4280 height: height 4281 }; 4282 } 4283 4284 function contains(parent, child) { 4285 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 4286 4287 if (parent.contains(child)) { 4288 return true; 4289 } // then fallback to custom implementation with Shadow DOM support 4290 else if (rootNode && isShadowRoot(rootNode)) { 4291 var next = child; 4292 4293 do { 4294 if (next && parent.isSameNode(next)) { 4295 return true; 4296 } // $FlowFixMe[prop-missing]: need a better way to handle this... 4297 4298 4299 next = next.parentNode || next.host; 4300 } while (next); 4301 } // Give up, the result is false 4302 4303 4304 return false;
vendor: 8,638 bytes, lines 4305-4561
4305 } 4306 4307 function getComputedStyle$1(element) { 4308 return getWindow(element).getComputedStyle(element); 4309 } 4310 4311 function isTableElement(element) { 4312 return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; 4313 } 4314 4315 function getDocumentElement(element) { 4316 // $FlowFixMe[incompatible-return]: assume body is always available 4317 return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] 4318 element.document) || window.document).documentElement; 4319 } 4320 4321 function getParentNode(element) { 4322 if (getNodeName(element) === 'html') { 4323 return element; 4324 } 4325 4326 return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle 4327 // $FlowFixMe[incompatible-return] 4328 // $FlowFixMe[prop-missing] 4329 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 4330 element.parentNode || ( // DOM Element detected 4331 isShadowRoot(element) ? element.host : null) || // ShadowRoot detected 4332 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 4333 getDocumentElement(element) // fallback 4334 4335 ); 4336 } 4337 4338 function getTrueOffsetParent(element) { 4339 if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 4340 getComputedStyle$1(element).position === 'fixed') { 4341 return null; 4342 } 4343 4344 return element.offsetParent; 4345 } // `.offsetParent` reports `null` for fixed elements, while absolute elements 4346 // return the containing block 4347 4348 4349 function getContainingBlock(element) { 4350 var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1; 4351 var isIE = navigator.userAgent.indexOf('Trident') !== -1; 4352 4353 if (isIE && isHTMLElement(element)) { 4354 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 4355 var elementCss = getComputedStyle$1(element); 4356 4357 if (elementCss.position === 'fixed') { 4358 return null; 4359 } 4360 } 4361 4362 var currentNode = getParentNode(element); 4363 4364 while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { 4365 var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that 4366 // create a containing block. 4367 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 4368 4369 if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { 4370 return currentNode; 4371 } else { 4372 currentNode = currentNode.parentNode; 4373 } 4374 } 4375 4376 return null; 4377 } // Gets the closest ancestor positioned element. Handles some edge cases, 4378 // such as table ancestors and cross browser bugs. 4379 4380 4381 function getOffsetParent(element) { 4382 var window = getWindow(element); 4383 var offsetParent = getTrueOffsetParent(element); 4384 4385 while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') { 4386 offsetParent = getTrueOffsetParent(offsetParent); 4387 } 4388 4389 if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) { 4390 return window; 4391 } 4392 4393 return offsetParent || getContainingBlock(element) || window; 4394 } 4395 4396 function getMainAxisFromPlacement(placement) { 4397 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 4398 } 4399 4400 var max = Math.max; 4401 var min = Math.min; 4402 var round = Math.round; 4403 4404 function within(min$1, value, max$1) { 4405 return max(min$1, min(value, max$1)); 4406 } 4407 4408 function getFreshSideObject() { 4409 return { 4410 top: 0, 4411 right: 0, 4412 bottom: 0, 4413 left: 0 4414 }; 4415 } 4416 4417 function mergePaddingObject(paddingObject) { 4418 return Object.assign({}, getFreshSideObject(), paddingObject); 4419 } 4420 4421 function expandToHashMap(value, keys) { 4422 return keys.reduce(function (hashMap, key) { 4423 hashMap[key] = value; 4424 return hashMap; 4425 }, {}); 4426 } 4427 4428 var toPaddingObject = function toPaddingObject(padding, state) { 4429 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 4430 placement: state.placement 4431 })) : padding; 4432 return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 4433 }; 4434 4435 function arrow(_ref) { 4436 var _state$modifiersData$; 4437 4438 var state = _ref.state, 4439 name = _ref.name, 4440 options = _ref.options; 4441 var arrowElement = state.elements.arrow; 4442 var popperOffsets = state.modifiersData.popperOffsets; 4443 var basePlacement = getBasePlacement(state.placement); 4444 var axis = getMainAxisFromPlacement(basePlacement); 4445 var isVertical = [left, right].indexOf(basePlacement) >= 0; 4446 var len = isVertical ? 'height' : 'width'; 4447 4448 if (!arrowElement || !popperOffsets) { 4449 return; 4450 } 4451 4452 var paddingObject = toPaddingObject(options.padding, state); 4453 var arrowRect = getLayoutRect(arrowElement); 4454 var minProp = axis === 'y' ? top : left; 4455 var maxProp = axis === 'y' ? bottom : right; 4456 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 4457 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 4458 var arrowOffsetParent = getOffsetParent(arrowElement); 4459 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 4460 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 4461 // outside of the popper bounds 4462 4463 var min = paddingObject[minProp]; 4464 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 4465 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 4466 var offset = within(min, center, max); // Prevents breaking syntax highlighting... 4467 4468 var axisProp = axis; 4469 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 4470 } 4471 4472 function effect$1(_ref2) { 4473 var state = _ref2.state, 4474 options = _ref2.options; 4475 var _options$element = options.element, 4476 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 4477 4478 if (arrowElement == null) { 4479 return; 4480 } // CSS selector 4481 4482 4483 if (typeof arrowElement === 'string') { 4484 arrowElement = state.elements.popper.querySelector(arrowElement); 4485 4486 if (!arrowElement) { 4487 return; 4488 } 4489 } 4490 4491 if (!contains(state.elements.popper, arrowElement)) { 4492 4493 return; 4494 } 4495 4496 state.elements.arrow = arrowElement; 4497 } // eslint-disable-next-line import/no-unused-modules 4498 4499 4500 const arrow$1 = { 4501 name: 'arrow', 4502 enabled: true, 4503 phase: 'main', 4504 fn: arrow, 4505 effect: effect$1, 4506 requires: ['popperOffsets'], 4507 requiresIfExists: ['preventOverflow'] 4508 }; 4509 4510 function getVariation(placement) { 4511 return placement.split('-')[1]; 4512 } 4513 4514 var unsetSides = { 4515 top: 'auto', 4516 right: 'auto', 4517 bottom: 'auto', 4518 left: 'auto' 4519 }; // Round the offsets to the nearest suitable subpixel based on the DPR. 4520 // Zooming can change the DPR, but it seems to report a value that will 4521 // cleanly divide the values into the appropriate subpixels. 4522 4523 function roundOffsetsByDPR(_ref) { 4524 var x = _ref.x, 4525 y = _ref.y; 4526 var win = window; 4527 var dpr = win.devicePixelRatio || 1; 4528 return { 4529 x: round(round(x * dpr) / dpr) || 0, 4530 y: round(round(y * dpr) / dpr) || 0 4531 }; 4532 } 4533 4534 function mapToStyles(_ref2) { 4535 var _Object$assign2; 4536 4537 var popper = _ref2.popper, 4538 popperRect = _ref2.popperRect, 4539 placement = _ref2.placement, 4540 variation = _ref2.variation, 4541 offsets = _ref2.offsets, 4542 position = _ref2.position, 4543 gpuAcceleration = _ref2.gpuAcceleration, 4544 adaptive = _ref2.adaptive, 4545 roundOffsets = _ref2.roundOffsets; 4546 4547 var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets, 4548 _ref3$x = _ref3.x, 4549 x = _ref3$x === void 0 ? 0 : _ref3$x, 4550 _ref3$y = _ref3.y, 4551 y = _ref3$y === void 0 ? 0 : _ref3$y; 4552 4553 var hasX = offsets.hasOwnProperty('x'); 4554 var hasY = offsets.hasOwnProperty('y'); 4555 var sideX = left; 4556 var sideY = top; 4557 var win = window; 4558 4559 if (adaptive) { 4560 var offsetParent = getOffsetParent(popper); 4561 var heightProp = 'clientHeight';
vendor: 6,664 bytes, lines 4562-4759
4562 var widthProp = 'clientWidth'; 4563 4564 if (offsetParent === getWindow(popper)) { 4565 offsetParent = getDocumentElement(popper); 4566 4567 if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') { 4568 heightProp = 'scrollHeight'; 4569 widthProp = 'scrollWidth'; 4570 } 4571 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 4572 4573 4574 offsetParent = offsetParent; 4575 4576 if (placement === top || (placement === left || placement === right) && variation === end) { 4577 sideY = bottom; // $FlowFixMe[prop-missing] 4578 4579 y -= offsetParent[heightProp] - popperRect.height; 4580 y *= gpuAcceleration ? 1 : -1; 4581 } 4582 4583 if (placement === left || (placement === top || placement === bottom) && variation === end) { 4584 sideX = right; // $FlowFixMe[prop-missing] 4585 4586 x -= offsetParent[widthProp] - popperRect.width; 4587 x *= gpuAcceleration ? 1 : -1; 4588 } 4589 } 4590 4591 var commonStyles = Object.assign({ 4592 position: position 4593 }, adaptive && unsetSides); 4594 4595 if (gpuAcceleration) { 4596 var _Object$assign; 4597 4598 return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); 4599 } 4600 4601 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 4602 } 4603 4604 function computeStyles(_ref4) { 4605 var state = _ref4.state, 4606 options = _ref4.options; 4607 var _options$gpuAccelerat = options.gpuAcceleration, 4608 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 4609 _options$adaptive = options.adaptive, 4610 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 4611 _options$roundOffsets = options.roundOffsets, 4612 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; 4613 4614 var commonStyles = { 4615 placement: getBasePlacement(state.placement), 4616 variation: getVariation(state.placement), 4617 popper: state.elements.popper, 4618 popperRect: state.rects.popper, 4619 gpuAcceleration: gpuAcceleration 4620 }; 4621 4622 if (state.modifiersData.popperOffsets != null) { 4623 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 4624 offsets: state.modifiersData.popperOffsets, 4625 position: state.options.strategy, 4626 adaptive: adaptive, 4627 roundOffsets: roundOffsets 4628 }))); 4629 } 4630 4631 if (state.modifiersData.arrow != null) { 4632 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 4633 offsets: state.modifiersData.arrow, 4634 position: 'absolute', 4635 adaptive: false, 4636 roundOffsets: roundOffsets 4637 }))); 4638 } 4639 4640 state.attributes.popper = Object.assign({}, state.attributes.popper, { 4641 'data-popper-placement': state.placement 4642 }); 4643 } // eslint-disable-next-line import/no-unused-modules 4644 4645 4646 const computeStyles$1 = { 4647 name: 'computeStyles', 4648 enabled: true, 4649 phase: 'beforeWrite', 4650 fn: computeStyles, 4651 data: {} 4652 }; 4653 4654 var passive = { 4655 passive: true 4656 }; 4657 4658 function effect(_ref) { 4659 var state = _ref.state, 4660 instance = _ref.instance, 4661 options = _ref.options; 4662 var _options$scroll = options.scroll, 4663 scroll = _options$scroll === void 0 ? true : _options$scroll, 4664 _options$resize = options.resize, 4665 resize = _options$resize === void 0 ? true : _options$resize; 4666 var window = getWindow(state.elements.popper); 4667 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 4668 4669 if (scroll) { 4670 scrollParents.forEach(function (scrollParent) { 4671 scrollParent.addEventListener('scroll', instance.update, passive); 4672 }); 4673 } 4674 4675 if (resize) { 4676 window.addEventListener('resize', instance.update, passive); 4677 } 4678 4679 return function () { 4680 if (scroll) { 4681 scrollParents.forEach(function (scrollParent) { 4682 scrollParent.removeEventListener('scroll', instance.update, passive); 4683 }); 4684 } 4685 4686 if (resize) { 4687 window.removeEventListener('resize', instance.update, passive); 4688 } 4689 }; 4690 } // eslint-disable-next-line import/no-unused-modules 4691 4692 4693 const eventListeners = { 4694 name: 'eventListeners', 4695 enabled: true, 4696 phase: 'write', 4697 fn: function fn() {}, 4698 effect: effect, 4699 data: {} 4700 }; 4701 4702 var hash$1 = { 4703 left: 'right', 4704 right: 'left', 4705 bottom: 'top', 4706 top: 'bottom' 4707 }; 4708 function getOppositePlacement(placement) { 4709 return placement.replace(/left|right|bottom|top/g, function (matched) { 4710 return hash$1[matched]; 4711 }); 4712 } 4713 4714 var hash = { 4715 start: 'end', 4716 end: 'start' 4717 }; 4718 function getOppositeVariationPlacement(placement) { 4719 return placement.replace(/start|end/g, function (matched) { 4720 return hash[matched]; 4721 }); 4722 } 4723 4724 function getWindowScroll(node) { 4725 var win = getWindow(node); 4726 var scrollLeft = win.pageXOffset; 4727 var scrollTop = win.pageYOffset; 4728 return { 4729 scrollLeft: scrollLeft, 4730 scrollTop: scrollTop 4731 }; 4732 } 4733 4734 function getWindowScrollBarX(element) { 4735 // If <html> has a CSS width greater than the viewport, then this will be 4736 // incorrect for RTL. 4737 // Popper 1 is broken in this case and never had a bug report so let's assume 4738 // it's not an issue. I don't think anyone ever specifies width on <html> 4739 // anyway. 4740 // Browsers where the left scrollbar doesn't cause an issue report `0` for 4741 // this (e.g. Edge 2019, IE11, Safari) 4742 return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; 4743 } 4744 4745 function getViewportRect(element) { 4746 var win = getWindow(element); 4747 var html = getDocumentElement(element); 4748 var visualViewport = win.visualViewport; 4749 var width = html.clientWidth; 4750 var height = html.clientHeight; 4751 var x = 0; 4752 var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper 4753 // can be obscured underneath it. 4754 // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even 4755 // if it isn't open, so if this isn't available, the popper will be detected 4756 // to overflow the bottom of the screen too early. 4757 4758 if (visualViewport) { 4759 width = visualViewport.width;
vendor: 5,377 bytes, lines 4760-4899
4760 height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently) 4761 // In Chrome, it returns a value very close to 0 (+/-) but contains rounding 4762 // errors due to floating point numbers, so we need to check precision. 4763 // Safari returns a number <= 0, usually < -1 when pinch-zoomed 4764 // Feature detection fails in mobile emulation mode in Chrome. 4765 // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < 4766 // 0.001 4767 // Fallback here: "Not Safari" userAgent 4768 4769 if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) { 4770 x = visualViewport.offsetLeft; 4771 y = visualViewport.offsetTop; 4772 } 4773 } 4774 4775 return { 4776 width: width, 4777 height: height, 4778 x: x + getWindowScrollBarX(element), 4779 y: y 4780 }; 4781 } 4782 4783 // of the `<html>` and `<body>` rect bounds if horizontally scrollable 4784 4785 function getDocumentRect(element) { 4786 var _element$ownerDocumen; 4787 4788 var html = getDocumentElement(element); 4789 var winScroll = getWindowScroll(element); 4790 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 4791 var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 4792 var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 4793 var x = -winScroll.scrollLeft + getWindowScrollBarX(element); 4794 var y = -winScroll.scrollTop; 4795 4796 if (getComputedStyle$1(body || html).direction === 'rtl') { 4797 x += max(html.clientWidth, body ? body.clientWidth : 0) - width; 4798 } 4799 4800 return { 4801 width: width, 4802 height: height, 4803 x: x, 4804 y: y 4805 }; 4806 } 4807 4808 function isScrollParent(element) { 4809 // Firefox wants us to check `-x` and `-y` variations as well 4810 var _getComputedStyle = getComputedStyle$1(element), 4811 overflow = _getComputedStyle.overflow, 4812 overflowX = _getComputedStyle.overflowX, 4813 overflowY = _getComputedStyle.overflowY; 4814 4815 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 4816 } 4817 4818 function getScrollParent(node) { 4819 if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { 4820 // $FlowFixMe[incompatible-return]: assume body is always available 4821 return node.ownerDocument.body; 4822 } 4823 4824 if (isHTMLElement(node) && isScrollParent(node)) { 4825 return node; 4826 } 4827 4828 return getScrollParent(getParentNode(node)); 4829 } 4830 4831 /* 4832 given a DOM element, return the list of all scroll parents, up the list of ancesors 4833 until we get to the top window object. This list is what we attach scroll listeners 4834 to, because if any of these parent elements scroll, we'll need to re-calculate the 4835 reference element's position. 4836 */ 4837 4838 function listScrollParents(element, list) { 4839 var _element$ownerDocumen; 4840 4841 if (list === void 0) { 4842 list = []; 4843 } 4844 4845 var scrollParent = getScrollParent(element); 4846 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 4847 var win = getWindow(scrollParent); 4848 var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; 4849 var updatedList = list.concat(target); 4850 return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 4851 updatedList.concat(listScrollParents(getParentNode(target))); 4852 } 4853 4854 function rectToClientRect(rect) { 4855 return Object.assign({}, rect, { 4856 left: rect.x, 4857 top: rect.y, 4858 right: rect.x + rect.width, 4859 bottom: rect.y + rect.height 4860 }); 4861 } 4862 4863 function getInnerBoundingClientRect(element) { 4864 var rect = getBoundingClientRect(element); 4865 rect.top = rect.top + element.clientTop; 4866 rect.left = rect.left + element.clientLeft; 4867 rect.bottom = rect.top + element.clientHeight; 4868 rect.right = rect.left + element.clientWidth; 4869 rect.width = element.clientWidth; 4870 rect.height = element.clientHeight; 4871 rect.x = rect.left; 4872 rect.y = rect.top; 4873 return rect; 4874 } 4875 4876 function getClientRectFromMixedType(element, clippingParent) { 4877 return clippingParent === viewport ? rectToClientRect(getViewportRect(element)) : isHTMLElement(clippingParent) ? getInnerBoundingClientRect(clippingParent) : rectToClientRect(getDocumentRect(getDocumentElement(element))); 4878 } // A "clipping parent" is an overflowable container with the characteristic of 4879 // clipping (or hiding) overflowing elements with a position different from 4880 // `initial` 4881 4882 4883 function getClippingParents(element) { 4884 var clippingParents = listScrollParents(getParentNode(element)); 4885 var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0; 4886 var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; 4887 4888 if (!isElement(clipperElement)) { 4889 return []; 4890 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 4891 4892 4893 return clippingParents.filter(function (clippingParent) { 4894 return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; 4895 }); 4896 } // Gets the maximum area that the element is visible in due to any number of 4897 // clipping parents 4898 4899
vendor: 4,216 bytes, lines 4900-5011
4900 function getClippingRect(element, boundary, rootBoundary) { 4901 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 4902 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 4903 var firstClippingParent = clippingParents[0]; 4904 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 4905 var rect = getClientRectFromMixedType(element, clippingParent); 4906 accRect.top = max(rect.top, accRect.top); 4907 accRect.right = min(rect.right, accRect.right); 4908 accRect.bottom = min(rect.bottom, accRect.bottom); 4909 accRect.left = max(rect.left, accRect.left); 4910 return accRect; 4911 }, getClientRectFromMixedType(element, firstClippingParent)); 4912 clippingRect.width = clippingRect.right - clippingRect.left; 4913 clippingRect.height = clippingRect.bottom - clippingRect.top; 4914 clippingRect.x = clippingRect.left; 4915 clippingRect.y = clippingRect.top; 4916 return clippingRect; 4917 } 4918 4919 function computeOffsets(_ref) { 4920 var reference = _ref.reference, 4921 element = _ref.element, 4922 placement = _ref.placement; 4923 var basePlacement = placement ? getBasePlacement(placement) : null; 4924 var variation = placement ? getVariation(placement) : null; 4925 var commonX = reference.x + reference.width / 2 - element.width / 2; 4926 var commonY = reference.y + reference.height / 2 - element.height / 2; 4927 var offsets; 4928 4929 switch (basePlacement) { 4930 case top: 4931 offsets = { 4932 x: commonX, 4933 y: reference.y - element.height 4934 }; 4935 break; 4936 4937 case bottom: 4938 offsets = { 4939 x: commonX, 4940 y: reference.y + reference.height 4941 }; 4942 break; 4943 4944 case right: 4945 offsets = { 4946 x: reference.x + reference.width, 4947 y: commonY 4948 }; 4949 break; 4950 4951 case left: 4952 offsets = { 4953 x: reference.x - element.width, 4954 y: commonY 4955 }; 4956 break; 4957 4958 default: 4959 offsets = { 4960 x: reference.x, 4961 y: reference.y 4962 }; 4963 } 4964 4965 var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; 4966 4967 if (mainAxis != null) { 4968 var len = mainAxis === 'y' ? 'height' : 'width'; 4969 4970 switch (variation) { 4971 case start: 4972 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 4973 break; 4974 4975 case end: 4976 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 4977 break; 4978 } 4979 } 4980 4981 return offsets; 4982 } 4983 4984 function detectOverflow(state, options) { 4985 if (options === void 0) { 4986 options = {}; 4987 } 4988 4989 var _options = options, 4990 _options$placement = _options.placement, 4991 placement = _options$placement === void 0 ? state.placement : _options$placement, 4992 _options$boundary = _options.boundary, 4993 boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, 4994 _options$rootBoundary = _options.rootBoundary, 4995 rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, 4996 _options$elementConte = _options.elementContext, 4997 elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, 4998 _options$altBoundary = _options.altBoundary, 4999 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 5000 _options$padding = _options.padding, 5001 padding = _options$padding === void 0 ? 0 : _options$padding; 5002 var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 5003 var altContext = elementContext === popper ? reference : popper; 5004 var popperRect = state.rects.popper; 5005 var element = state.elements[altBoundary ? altContext : elementContext]; 5006 var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); 5007 var referenceClientRect = getBoundingClientRect(state.elements.reference); 5008 var popperOffsets = computeOffsets({ 5009 reference: referenceClientRect, 5010 element: popperRect, 5011 strategy: 'absolute'
vendor: 11,222 bytes, lines 5011-5339
5011, 5012 placement: placement 5013 }); 5014 var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); 5015 var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 5016 // 0 or negative = within the clipping rect 5017 5018 var overflowOffsets = { 5019 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 5020 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 5021 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 5022 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 5023 }; 5024 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 5025 5026 if (elementContext === popper && offsetData) { 5027 var offset = offsetData[placement]; 5028 Object.keys(overflowOffsets).forEach(function (key) { 5029 var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; 5030 var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; 5031 overflowOffsets[key] += offset[axis] * multiply; 5032 }); 5033 } 5034 5035 return overflowOffsets; 5036 } 5037 5038 function computeAutoPlacement(state, options) { 5039 if (options === void 0) { 5040 options = {}; 5041 } 5042 5043 var _options = options, 5044 placement = _options.placement, 5045 boundary = _options.boundary, 5046 rootBoundary = _options.rootBoundary, 5047 padding = _options.padding, 5048 flipVariations = _options.flipVariations, 5049 _options$allowedAutoP = _options.allowedAutoPlacements, 5050 allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; 5051 var variation = getVariation(placement); 5052 var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { 5053 return getVariation(placement) === variation; 5054 }) : basePlacements; 5055 var allowedPlacements = placements$1.filter(function (placement) { 5056 return allowedAutoPlacements.indexOf(placement) >= 0; 5057 }); 5058 5059 if (allowedPlacements.length === 0) { 5060 allowedPlacements = placements$1; 5061 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 5062 5063 5064 var overflows = allowedPlacements.reduce(function (acc, placement) { 5065 acc[placement] = detectOverflow(state, { 5066 placement: placement, 5067 boundary: boundary, 5068 rootBoundary: rootBoundary, 5069 padding: padding 5070 })[getBasePlacement(placement)]; 5071 return acc; 5072 }, {}); 5073 return Object.keys(overflows).sort(function (a, b) { 5074 return overflows[a] - overflows[b]; 5075 }); 5076 } 5077 5078 function getExpandedFallbackPlacements(placement) { 5079 if (getBasePlacement(placement) === auto) { 5080 return []; 5081 } 5082 5083 var oppositePlacement = getOppositePlacement(placement); 5084 return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; 5085 } 5086 5087 function flip(_ref) { 5088 var state = _ref.state, 5089 options = _ref.options, 5090 name = _ref.name; 5091 5092 if (state.modifiersData[name]._skip) { 5093 return; 5094 } 5095 5096 var _options$mainAxis = options.mainAxis, 5097 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 5098 _options$altAxis = options.altAxis, 5099 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 5100 specifiedFallbackPlacements = options.fallbackPlacements, 5101 padding = options.padding, 5102 boundary = options.boundary, 5103 rootBoundary = options.rootBoundary, 5104 altBoundary = options.altBoundary, 5105 _options$flipVariatio = options.flipVariations, 5106 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 5107 allowedAutoPlacements = options.allowedAutoPlacements; 5108 var preferredPlacement = state.options.placement; 5109 var basePlacement = getBasePlacement(preferredPlacement); 5110 var isBasePlacement = basePlacement === preferredPlacement; 5111 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 5112 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 5113 return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { 5114 placement: placement, 5115 boundary: boundary, 5116 rootBoundary: rootBoundary, 5117 padding: padding, 5118 flipVariations: flipVariations, 5119 allowedAutoPlacements: allowedAutoPlacements 5120 }) : placement); 5121 }, []); 5122 var referenceRect = state.rects.reference; 5123 var popperRect = state.rects.popper; 5124 var checksMap = new Map(); 5125 var makeFallbackChecks = true; 5126 var firstFittingPlacement = placements[0]; 5127 5128 for (var i = 0; i < placements.length; i++) { 5129 var placement = placements[i]; 5130 5131 var _basePlacement = getBasePlacement(placement); 5132 5133 var isStartVariation = getVariation(placement) === start; 5134 var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; 5135 var len = isVertical ? 'width' : 'height'; 5136 var overflow = detectOverflow(state, { 5137 placement: placement, 5138 boundary: boundary, 5139 rootBoundary: rootBoundary, 5140 altBoundary: altBoundary, 5141 padding: padding 5142 }); 5143 var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; 5144 5145 if (referenceRect[len] > popperRect[len]) { 5146 mainVariationSide = getOppositePlacement(mainVariationSide); 5147 } 5148 5149 var altVariationSide = getOppositePlacement(mainVariationSide); 5150 var checks = []; 5151 5152 if (checkMainAxis) { 5153 checks.push(overflow[_basePlacement] <= 0); 5154 } 5155 5156 if (checkAltAxis) { 5157 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 5158 } 5159 5160 if (checks.every(function (check) { 5161 return check; 5162 })) { 5163 firstFittingPlacement = placement; 5164 makeFallbackChecks = false; 5165 break; 5166 } 5167 5168 checksMap.set(placement, checks); 5169 } 5170 5171 if (makeFallbackChecks) { 5172 // `2` may be desired in some cases â research later 5173 var numberOfChecks = flipVariations ? 3 : 1; 5174 5175 var _loop = function _loop(_i) { 5176 var fittingPlacement = placements.find(function (placement) { 5177 var checks = checksMap.get(placement); 5178 5179 if (checks) { 5180 return checks.slice(0, _i).every(function (check) { 5181 return check; 5182 }); 5183 } 5184 }); 5185 5186 if (fittingPlacement) { 5187 firstFittingPlacement = fittingPlacement; 5188 return "break"; 5189 } 5190 }; 5191 5192 for (var _i = numberOfChecks; _i > 0; _i--) { 5193 var _ret = _loop(_i); 5194 5195 if (_ret === "break") break; 5196 } 5197 } 5198 5199 if (state.placement !== firstFittingPlacement) { 5200 state.modifiersData[name]._skip = true; 5201 state.placement = firstFittingPlacement; 5202 state.reset = true; 5203 } 5204 } // eslint-disable-next-line import/no-unused-modules 5205 5206 5207 const flip$1 = { 5208 name: 'flip', 5209 enabled: true, 5210 phase: 'main', 5211 fn: flip, 5212 requiresIfExists: ['offset'], 5213 data: { 5214 _skip: false 5215 } 5216 }; 5217 5218 function getSideOffsets(overflow, rect, preventedOffsets) { 5219 if (preventedOffsets === void 0) { 5220 preventedOffsets = { 5221 x: 0, 5222 y: 0 5223 }; 5224 } 5225 5226 return { 5227 top: overflow.top - rect.height - preventedOffsets.y, 5228 right: overflow.right - rect.width + preventedOffsets.x, 5229 bottom: overflow.bottom - rect.height + preventedOffsets.y, 5230 left: overflow.left - rect.width - preventedOffsets.x 5231 }; 5232 } 5233 5234 function isAnySideFullyClipped(overflow) { 5235 return [top, right, bottom, left].some(function (side) { 5236 return overflow[side] >= 0; 5237 }); 5238 } 5239 5240 function hide(_ref) { 5241 var state = _ref.state, 5242 name = _ref.name; 5243 var referenceRect = state.rects.reference; 5244 var popperRect = state.rects.popper; 5245 var preventedOffsets = state.modifiersData.preventOverflow; 5246 var referenceOverflow = detectOverflow(state, { 5247 elementContext: 'reference' 5248 }); 5249 var popperAltOverflow = detectOverflow(state, { 5250 altBoundary: true 5251 }); 5252 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 5253 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 5254 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 5255 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 5256 state.modifiersData[name] = { 5257 referenceClippingOffsets: referenceClippingOffsets, 5258 popperEscapeOffsets: popperEscapeOffsets, 5259 isReferenceHidden: isReferenceHidden, 5260 hasPopperEscaped: hasPopperEscaped 5261 }; 5262 state.attributes.popper = Object.assign({}, state.attributes.popper, { 5263 'data-popper-reference-hidden': isReferenceHidden, 5264 'data-popper-escaped': hasPopperEscaped 5265 }); 5266 } // eslint-disable-next-line import/no-unused-modules 5267 5268 5269 const hide$1 = { 5270 name: 'hide', 5271 enabled: true, 5272 phase: 'main', 5273 requiresIfExists: ['preventOverflow'], 5274 fn: hide 5275 }; 5276 5277 function distanceAndSkiddingToXY(placement, rects, offset) { 5278 var basePlacement = getBasePlacement(placement); 5279 var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; 5280 5281 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 5282 placement: placement 5283 })) : offset, 5284 skidding = _ref[0], 5285 distance = _ref[1]; 5286 5287 skidding = skidding || 0; 5288 distance = (distance || 0) * invertDistance; 5289 return [left, right].indexOf(basePlacement) >= 0 ? { 5290 x: distance, 5291 y: skidding 5292 } : { 5293 x: skidding, 5294 y: distance 5295 }; 5296 } 5297 5298 function offset(_ref2) { 5299 var state = _ref2.state, 5300 options = _ref2.options, 5301 name = _ref2.name; 5302 var _options$offset = options.offset, 5303 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 5304 var data = placements.reduce(function (acc, placement) { 5305 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 5306 return acc; 5307 }, {}); 5308 var _data$state$placement = data[state.placement], 5309 x = _data$state$placement.x, 5310 y = _data$state$placement.y; 5311 5312 if (state.modifiersData.popperOffsets != null) { 5313 state.modifiersData.popperOffsets.x += x; 5314 state.modifiersData.popperOffsets.y += y; 5315 } 5316 5317 state.modifiersData[name] = data; 5318 } // eslint-disable-next-line import/no-unused-modules 5319 5320 5321 const offset$1 = { 5322 name: 'offset', 5323 enabled: true, 5324 phase: 'main', 5325 requires: ['popperOffsets'], 5326 fn: offset 5327 }; 5328 5329 function popperOffsets(_ref) { 5330 var state = _ref.state, 5331 name = _ref.name; 5332 // Offsets are the actual position the popper needs to have to be 5333 // properly positioned near its reference element 5334 // This is the most basic placement, and will be adjusted by 5335 // the modifiers in the next step 5336 state.modifiersData[name] = computeOffsets({ 5337 reference: state.rects.reference, 5338 element: state.rects.popper, 5339
vendor: 7,514 bytes, lines 5339-5537
5339strategy: 'absolute', 5340 placement: state.placement 5341 }); 5342 } // eslint-disable-next-line import/no-unused-modules 5343 5344 5345 const popperOffsets$1 = { 5346 name: 'popperOffsets', 5347 enabled: true, 5348 phase: 'read', 5349 fn: popperOffsets, 5350 data: {} 5351 }; 5352 5353 function getAltAxis(axis) { 5354 return axis === 'x' ? 'y' : 'x'; 5355 } 5356 5357 function preventOverflow(_ref) { 5358 var state = _ref.state, 5359 options = _ref.options, 5360 name = _ref.name; 5361 var _options$mainAxis = options.mainAxis, 5362 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 5363 _options$altAxis = options.altAxis, 5364 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 5365 boundary = options.boundary, 5366 rootBoundary = options.rootBoundary, 5367 altBoundary = options.altBoundary, 5368 padding = options.padding, 5369 _options$tether = options.tether, 5370 tether = _options$tether === void 0 ? true : _options$tether, 5371 _options$tetherOffset = options.tetherOffset, 5372 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 5373 var overflow = detectOverflow(state, { 5374 boundary: boundary, 5375 rootBoundary: rootBoundary, 5376 padding: padding, 5377 altBoundary: altBoundary 5378 }); 5379 var basePlacement = getBasePlacement(state.placement); 5380 var variation = getVariation(state.placement); 5381 var isBasePlacement = !variation; 5382 var mainAxis = getMainAxisFromPlacement(basePlacement); 5383 var altAxis = getAltAxis(mainAxis); 5384 var popperOffsets = state.modifiersData.popperOffsets; 5385 var referenceRect = state.rects.reference; 5386 var popperRect = state.rects.popper; 5387 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 5388 placement: state.placement 5389 })) : tetherOffset; 5390 var data = { 5391 x: 0, 5392 y: 0 5393 }; 5394 5395 if (!popperOffsets) { 5396 return; 5397 } 5398 5399 if (checkMainAxis || checkAltAxis) { 5400 var mainSide = mainAxis === 'y' ? top : left; 5401 var altSide = mainAxis === 'y' ? bottom : right; 5402 var len = mainAxis === 'y' ? 'height' : 'width'; 5403 var offset = popperOffsets[mainAxis]; 5404 var min$1 = popperOffsets[mainAxis] + overflow[mainSide]; 5405 var max$1 = popperOffsets[mainAxis] - overflow[altSide]; 5406 var additive = tether ? -popperRect[len] / 2 : 0; 5407 var minLen = variation === start ? referenceRect[len] : popperRect[len]; 5408 var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 5409 // outside the reference bounds 5410 5411 var arrowElement = state.elements.arrow; 5412 var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { 5413 width: 0, 5414 height: 0 5415 }; 5416 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); 5417 var arrowPaddingMin = arrowPaddingObject[mainSide]; 5418 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 5419 // to include its full size in the calculation. If the reference is small 5420 // and near the edge of a boundary, the popper can overflow even if the 5421 // reference is not overflowing as well (e.g. virtual elements with no 5422 // width or height) 5423 5424 var arrowLen = within(0, referenceRect[len], arrowRect[len]); 5425 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue; 5426 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue; 5427 var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); 5428 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 5429 var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0; 5430 var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset; 5431 var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue; 5432 5433 if (checkMainAxis) { 5434 var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); 5435 popperOffsets[mainAxis] = preventedOffset; 5436 data[mainAxis] = preventedOffset - offset; 5437 } 5438 5439 if (checkAltAxis) { 5440 var _mainSide = mainAxis === 'x' ? top : left; 5441 5442 var _altSide = mainAxis === 'x' ? bottom : right; 5443 5444 var _offset = popperOffsets[altAxis]; 5445 5446 var _min = _offset + overflow[_mainSide]; 5447 5448 var _max = _offset - overflow[_altSide]; 5449 5450 var _preventedOffset = within(tether ? min(_min, tetherMin) : _min, _offset, tether ? max(_max, tetherMax) : _max); 5451 5452 popperOffsets[altAxis] = _preventedOffset; 5453 data[altAxis] = _preventedOffset - _offset; 5454 } 5455 } 5456 5457 state.modifiersData[name] = data; 5458 } // eslint-disable-next-line import/no-unused-modules 5459 5460 5461 const preventOverflow$1 = { 5462 name: 'preventOverflow', 5463 enabled: true, 5464 phase: 'main', 5465 fn: preventOverflow, 5466 requiresIfExists: ['offset'] 5467 }; 5468 5469 function getHTMLElementScroll(element) { 5470 return { 5471 scrollLeft: element.scrollLeft, 5472 scrollTop: element.scrollTop 5473 }; 5474 } 5475 5476 function getNodeScroll(node) { 5477 if (node === getWindow(node) || !isHTMLElement(node)) { 5478 return getWindowScroll(node); 5479 } else { 5480 return getHTMLElementScroll(node); 5481 } 5482 } 5483 5484 function isElementScaled(element) { 5485 var rect = element.getBoundingClientRect(); 5486 var scaleX = rect.width / element.offsetWidth || 1; 5487 var scaleY = rect.height / element.offsetHeight || 1; 5488 return scaleX !== 1 || scaleY !== 1; 5489 } // Returns the composite rect of an element relative to its offsetParent. 5490 // Composite means it takes into account transforms as well as layout. 5491 5492 5493 function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 5494 if (isFixed === void 0) { 5495 isFixed = false; 5496 } 5497 5498 var isOffsetParentAnElement = isHTMLElement(offsetParent); 5499 isHTMLElement(offsetParent) && isElementScaled(offsetParent); 5500 var documentElement = getDocumentElement(offsetParent); 5501 var rect = getBoundingClientRect(elementOrVirtualElement); 5502 var scroll = { 5503 scrollLeft: 0, 5504 scrollTop: 0 5505 }; 5506 var offsets = { 5507 x: 0, 5508 y: 0 5509 }; 5510 5511 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 5512 if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 5513 isScrollParent(documentElement)) { 5514 scroll = getNodeScroll(offsetParent); 5515 } 5516 5517 if (isHTMLElement(offsetParent)) { 5518 offsets = getBoundingClientRect(offsetParent); 5519 offsets.x += offsetParent.clientLeft; 5520 offsets.y += offsetParent.clientTop; 5521 } else if (documentElement) { 5522 offsets.x = getWindowScrollBarX(documentElement); 5523 } 5524 } 5525 5526 return { 5527 x: rect.left + scroll.scrollLeft - offsets.x, 5528 y: rect.top + scroll.scrollTop - offsets.y, 5529 width: rect.width, 5530 height: rect.height 5531 }; 5532 } 5533 5534 function order(modifiers) { 5535 var map = new Map(); 5536 var visited = new Set(); 5537 var result = [];
vendor: 11,066 bytes, lines 5538-5867
5538 modifiers.forEach(function (modifier) { 5539 map.set(modifier.name, modifier); 5540 }); // On visiting object, check for its dependencies and visit them recursively 5541 5542 function sort(modifier) { 5543 visited.add(modifier.name); 5544 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 5545 requires.forEach(function (dep) { 5546 if (!visited.has(dep)) { 5547 var depModifier = map.get(dep); 5548 5549 if (depModifier) { 5550 sort(depModifier); 5551 } 5552 } 5553 }); 5554 result.push(modifier); 5555 } 5556 5557 modifiers.forEach(function (modifier) { 5558 if (!visited.has(modifier.name)) { 5559 // check for visited object 5560 sort(modifier); 5561 } 5562 }); 5563 return result; 5564 } 5565 5566 function orderModifiers(modifiers) { 5567 // order based on dependencies 5568 var orderedModifiers = order(modifiers); // order based on phase 5569 5570 return modifierPhases.reduce(function (acc, phase) { 5571 return acc.concat(orderedModifiers.filter(function (modifier) { 5572 return modifier.phase === phase; 5573 })); 5574 }, []); 5575 } 5576 5577 function debounce(fn) { 5578 var pending; 5579 return function () { 5580 if (!pending) { 5581 pending = new Promise(function (resolve) { 5582 Promise.resolve().then(function () { 5583 pending = undefined; 5584 resolve(fn()); 5585 }); 5586 }); 5587 } 5588 5589 return pending; 5590 }; 5591 } 5592 5593 function mergeByName(modifiers) { 5594 var merged = modifiers.reduce(function (merged, current) { 5595 var existing = merged[current.name]; 5596 merged[current.name] = existing ? Object.assign({}, existing, current, { 5597 options: Object.assign({}, existing.options, current.options), 5598 data: Object.assign({}, existing.data, current.data) 5599 }) : current; 5600 return merged; 5601 }, {}); // IE11 does not support Object.values 5602 5603 return Object.keys(merged).map(function (key) { 5604 return merged[key]; 5605 }); 5606 } 5607 5608 var DEFAULT_OPTIONS = { 5609 placement: 'bottom', 5610 modifiers: [], 5611 strategy: 'absolute' 5612 }; 5613 5614 function areValidElements() { 5615 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 5616 args[_key] = arguments[_key]; 5617 } 5618 5619 return !args.some(function (element) { 5620 return !(element && typeof element.getBoundingClientRect === 'function'); 5621 }); 5622 } 5623 5624 function popperGenerator(generatorOptions) { 5625 if (generatorOptions === void 0) { 5626 generatorOptions = {}; 5627 } 5628 5629 var _generatorOptions = generatorOptions, 5630 _generatorOptions$def = _generatorOptions.defaultModifiers, 5631 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 5632 _generatorOptions$def2 = _generatorOptions.defaultOptions, 5633 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 5634 return function createPopper(reference, popper, options) { 5635 if (options === void 0) { 5636 options = defaultOptions; 5637 } 5638 5639 var state = { 5640 placement: 'bottom', 5641 orderedModifiers: [], 5642 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 5643 modifiersData: {}, 5644 elements: { 5645 reference: reference, 5646 popper: popper 5647 }, 5648 attributes: {}, 5649 styles: {} 5650 }; 5651 var effectCleanupFns = []; 5652 var isDestroyed = false; 5653 var instance = { 5654 state: state, 5655 setOptions: function setOptions(setOptionsAction) { 5656 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 5657 cleanupModifierEffects(); 5658 state.options = Object.assign({}, defaultOptions, state.options, options); 5659 state.scrollParents = { 5660 reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], 5661 popper: listScrollParents(popper) 5662 }; // Orders the modifiers based on their dependencies and `phase` 5663 // properties 5664 5665 var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 5666 5667 state.orderedModifiers = orderedModifiers.filter(function (m) { 5668 return m.enabled; 5669 }); // Validate the provided modifiers so that the consumer will get warned 5670 5671 runModifierEffects(); 5672 return instance.update(); 5673 }, 5674 // Sync update â it will always be executed, even if not necessary. This 5675 // is useful for low frequency updates where sync behavior simplifies the 5676 // logic. 5677 // For high frequency updates (e.g. `resize` and `scroll` events), always 5678 // prefer the async Popper#update method 5679 forceUpdate: function forceUpdate() { 5680 if (isDestroyed) { 5681 return; 5682 } 5683 5684 var _state$elements = state.elements, 5685 reference = _state$elements.reference, 5686 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 5687 // anymore 5688 5689 if (!areValidElements(reference, popper)) { 5690 5691 return; 5692 } // Store the reference and popper rects to be read by modifiers 5693 5694 5695 state.rects = { 5696 reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), 5697 popper: getLayoutRect(popper) 5698 }; // Modifiers have the ability to reset the current update cycle. The 5699 // most common use case for this is the `flip` modifier changing the 5700 // placement, which then needs to re-run all the modifiers, because the 5701 // logic was previously ran for the previous placement and is therefore 5702 // stale/incorrect 5703 5704 state.reset = false; 5705 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 5706 // is filled with the initial data specified by the modifier. This means 5707 // it doesn't persist and is fresh on each update. 5708 // To ensure persistent data, use `${name}#persistent` 5709 5710 state.orderedModifiers.forEach(function (modifier) { 5711 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 5712 }); 5713 5714 for (var index = 0; index < state.orderedModifiers.length; index++) { 5715 5716 if (state.reset === true) { 5717 state.reset = false; 5718 index = -1; 5719 continue; 5720 } 5721 5722 var _state$orderedModifie = state.orderedModifiers[index], 5723 fn = _state$orderedModifie.fn, 5724 _state$orderedModifie2 = _state$orderedModifie.options, 5725 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 5726 name = _state$orderedModifie.name; 5727 5728 if (typeof fn === 'function') { 5729 state = fn({ 5730 state: state, 5731 options: _options, 5732 name: name, 5733 instance: instance 5734 }) || state; 5735 } 5736 } 5737 }, 5738 // Async and optimistically optimized update â it will not be executed if 5739 // not necessary (debounced to run at most once-per-tick) 5740 update: debounce(function () { 5741 return new Promise(function (resolve) { 5742 instance.forceUpdate(); 5743 resolve(state); 5744 }); 5745 }), 5746 destroy: function destroy() { 5747 cleanupModifierEffects(); 5748 isDestroyed = true; 5749 } 5750 }; 5751 5752 if (!areValidElements(reference, popper)) { 5753 5754 return instance; 5755 } 5756 5757 instance.setOptions(options).then(function (state) { 5758 if (!isDestroyed && options.onFirstUpdate) { 5759 options.onFirstUpdate(state); 5760 } 5761 }); // Modifiers have the ability to execute arbitrary code before the first 5762 // update cycle runs. They will be executed in the same order as the update 5763 // cycle. This is useful when a modifier adds some persistent data that 5764 // other modifiers need to use, but the modifier is run after the dependent 5765 // one. 5766 5767 function runModifierEffects() { 5768 state.orderedModifiers.forEach(function (_ref3) { 5769 var name = _ref3.name, 5770 _ref3$options = _ref3.options, 5771 options = _ref3$options === void 0 ? {} : _ref3$options, 5772 effect = _ref3.effect; 5773 5774 if (typeof effect === 'function') { 5775 var cleanupFn = effect({ 5776 state: state, 5777 name: name, 5778 instance: instance, 5779 options: options 5780 }); 5781 5782 var noopFn = function noopFn() {}; 5783 5784 effectCleanupFns.push(cleanupFn || noopFn); 5785 } 5786 }); 5787 } 5788 5789 function cleanupModifierEffects() { 5790 effectCleanupFns.forEach(function (fn) { 5791 return fn(); 5792 }); 5793 effectCleanupFns = []; 5794 } 5795 5796 return instance; 5797 }; 5798 } 5799 var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 5800 5801 var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1]; 5802 var createPopper$1 = /*#__PURE__*/popperGenerator({ 5803 defaultModifiers: defaultModifiers$1 5804 }); // eslint-disable-next-line import/no-unused-modules 5805 5806 var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; 5807 var createPopper = /*#__PURE__*/popperGenerator({ 5808 defaultModifiers: defaultModifiers 5809 }); // eslint-disable-next-line import/no-unused-modules 5810 5811 const Popper = /*#__PURE__*/Object.freeze({ 5812 __proto__: null, 5813 popperGenerator, 5814 detectOverflow, 5815 createPopperBase: createPopper$2, 5816 createPopper, 5817 createPopperLite: createPopper$1, 5818 top, 5819 bottom, 5820 right, 5821 left, 5822 auto, 5823 basePlacements, 5824 start, 5825 end, 5826 clippingParents, 5827 viewport, 5828 popper, 5829 reference, 5830 variationPlacements, 5831 placements, 5832 beforeRead, 5833 read, 5834 afterRead, 5835 beforeMain, 5836 main, 5837 afterMain, 5838 beforeWrite, 5839 write, 5840 afterWrite, 5841 modifierPhases, 5842 applyStyles: applyStyles$1, 5843 arrow: arrow$1, 5844 computeStyles: computeStyles$1, 5845 eventListeners, 5846 flip: flip$1, 5847 hide: hide$1, 5848 offset: offset$1, 5849 popperOffsets: popperOffsets$1, 5850 preventOverflow: preventOverflow$1 5851 }); 5852 5853 /** 5854 * -------------------------------------------------------------------------- 5855 * Bootstrap (v5.1.3): dropdown.js 5856 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5857 * -------------------------------------------------------------------------- 5858 */ 5859 /** 5860 * ------------------------------------------------------------------------ 5861 * Constants 5862 * ------------------------------------------------------------------------ 5863 */ 5864 5865 const NAME$9 = 'dropdown'; 5866 const DATA_KEY$8 = 'bs.dropdown'; 5867 const EVENT_KEY$8 = `.${DATA_KEY$8}`;
5868 const DATA_API_KEY$4 = '.data-api'; 5869 const ESCAPE_KEY$2 = 'Escape'; 5870 const SPACE_KEY = 'Space'; 5871 const TAB_KEY$1 = 'Tab'; 5872 const ARROW_UP_KEY = 'ArrowUp'; 5873 const ARROW_DOWN_KEY = 'ArrowDown'; 5874 const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 5875 5876 const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEY}|${ARROW_DOWN_KEY}|${ESCAPE_KEY$2}`); 5877 const EVENT_HIDE$4 = `hide${EVENT_KEY$8}`; 5878 const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$8}`; 5879 const EVENT_SHOW$4 = `show${EVENT_KEY$8}`; 5880 const EVENT_SHOWN$4 = `shown${EVENT_KEY$8}`; 5881 const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$8}${DATA_API_KEY$4}`; 5882 const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$8}${DATA_API_KEY$4}`; 5883 const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$8}${DATA_API_KEY$4}`; 5884 const CLASS_NAME_SHOW$6 = 'show'; 5885 const CLASS_NAME_DROPUP = 'dropup'; 5886 const CLASS_NAME_DROPEND = 'dropend'; 5887 const CLASS_NAME_DROPSTART = 'dropstart'; 5888 const CLASS_NAME_NAVBAR = 'navbar'; 5889 const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]'; 5890 const SELECTOR_MENU = '.dropdown-menu'; 5891 const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 5892 const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 5893 const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 5894 const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 5895 const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 5896 const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 5897 const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 5898 const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 5899 const Default$8 = { 5900 offset: [0, 2], 5901 boundary: 'clippingParents', 5902 reference: 'toggle', 5903 display: 'dynamic', 5904 popperConfig: null, 5905 autoClose: true 5906 }; 5907 const DefaultType$8 = { 5908 offset: '(array|string|function)', 5909 boundary: '(string|element)', 5910 reference: '(string|element|object)', 5911 display: 'string', 5912 popperConfig: '(null|object|function)', 5913 autoClose: '(boolean|string)' 5914 }; 5915 /** 5916 * ------------------------------------------------------------------------ 5917 * Class Definition 5918 * ------------------------------------------------------------------------ 5919 */ 5920 5921 class Dropdown extends BaseComponent { 5922 constructor(element, config) { 5923 super(element); 5924 this._popper = null; 5925 this._config = this._getConfig(config); 5926 this._menu = this._getMenuElement(); 5927 this._inNavbar = this._detectNavbar(); 5928 } // Getters 5929 5930 5931 static get Default() { 5932 return Default$8; 5933 } 5934 5935 static get DefaultType() { 5936 return DefaultType$8; 5937 } 5938 5939 static get NAME() { 5940 return NAME$9; 5941 } // Public 5942 5943 5944 toggle() { 5945 return this._isShown() ? this.hide() : this.show(); 5946 } 5947 5948 show() { 5949 if (isDisabled(this._element) || this._isShown(this._menu)) { 5950 return; 5951 } 5952 5953 const relatedTarget = { 5954 relatedTarget: this._element 5955 }; 5956 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, relatedTarget); 5957 5958 if (showEvent.defaultPrevented) { 5959 return; 5960 } 5961 5962 const parent = Dropdown.getParentFromElement(this._element); // Totally disable Popper for Dropdowns in Navbar 5963 5964 if (this._inNavbar) { 5965 Manipulator.setDataAttribute(this._menu, 'popper', 'none'); 5966 } else { 5967 this._createPopper(parent); 5968 } // If this is a touch-enabled device we add extra 5969 // empty mouseover listeners to the body's immediate children; 5970 // only needed because of broken event delegation on iOS 5971 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 5972 5973 5974 if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) { 5975 [].concat(...document.body.children).forEach(elem => EventHandler.on(elem, 'mouseover', noop)); 5976 } 5977 5978 this._element.focus(); 5979 5980 this._element.setAttribute('aria-expanded', true); 5981 5982 this._menu.classList.add(CLASS_NAME_SHOW$6); 5983 5984 this._element.classList.add(CLASS_NAME_SHOW$6); 5985 5986 EventHandler.trigger(this._element, EVENT_SHOWN$4, relatedTarget); 5987 } 5988 5989 hide() { 5990 if (isDisabled(this._element) || !this._isShown(this._menu)) { 5991 return; 5992 } 5993 5994 const relatedTarget = { 5995 relatedTarget: this._element 5996 }; 5997 5998 this._completeHide(relatedTarget); 5999 } 6000 6001 dispose() { 6002 if (this._popper) { 6003 this._popper.destroy(); 6004 } 6005 6006 super.dispose(); 6007 } 6008 6009 update() { 6010 this._inNavbar = this._detectNavbar(); 6011 6012 if (this._popper) {
6013 this._popper.update(); 6014 } 6015 } // Private 6016 6017 6018 _completeHide(relatedTarget) { 6019 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4, relatedTarget); 6020 6021 if (hideEvent.defaultPrevented) { 6022 return; 6023 } // If this is a touch-enabled device we remove the extra 6024 // empty mouseover listeners we added for iOS support 6025 6026 6027 if ('ontouchstart' in document.documentElement) { 6028 [].concat(...document.body.children).forEach(elem => EventHandler.off(elem, 'mouseover', noop)); 6029 } 6030 6031 if (this._popper) { 6032 this._popper.destroy(); 6033 } 6034 6035 this._menu.classList.remove(CLASS_NAME_SHOW$6); 6036 6037 this._element.classList.remove(CLASS_NAME_SHOW$6); 6038 6039 this._element.setAttribute('aria-expanded', 'false'); 6040 6041 Manipulator.removeDataAttribute(this._menu, 'popper'); 6042 EventHandler.trigger(this._element, EVENT_HIDDEN$4, relatedTarget); 6043 } 6044 6045 _getConfig(config) { 6046 config = { ...this.constructor.Default, 6047 ...Manipulator.getDataAttributes(this._element), 6048 ...config 6049 }; 6050 typeCheckConfig(NAME$9, config, this.constructor.DefaultType); 6051 6052 if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 6053 // Popper virtual elements require a getBoundingClientRect method 6054 throw new TypeError(`${NAME$9.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 6055 } 6056 6057 return config; 6058 } 6059 6060 _createPopper(parent) { 6061 if (typeof Popper === 'undefined') { 6062 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 6063 } 6064 6065 let referenceElement = this._element; 6066 6067 if (this._config.reference === 'parent') { 6068 referenceElement = parent; 6069 } else if (isElement$1(this._config.reference)) { 6070 referenceElement = getElement(this._config.reference); 6071 } else if (typeof this._config.reference === 'object') { 6072 referenceElement = this._config.reference; 6073 } 6074 6075 const popperConfig = this._getPopperConfig(); 6076 6077 const isDisplayStatic = popperConfig.modifiers.find(modifier => modifier.name === 'applyStyles' && modifier.enabled === false); 6078 this._popper = createPopper(referenceElement, this._menu, popperConfig); 6079 6080 if (isDisplayStatic) { 6081 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); 6082 } 6083 } 6084 6085 _isShown(element = this._element) { 6086 return element.classList.contains(CLASS_NAME_SHOW$6); 6087 } 6088 6089 _getMenuElement() { 6090 return SelectorEngine.next(this._element, SELECTOR_MENU)[0]; 6091 } 6092 6093 _getPlacement() { 6094 const parentDropdown = this._element.parentNode; 6095 6096 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 6097 return PLACEMENT_RIGHT; 6098 } 6099 6100 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 6101 return PLACEMENT_LEFT; 6102 } // We need to trim the value because custom properties can also include spaces 6103 6104 6105 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 6106 6107 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 6108 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 6109 } 6110 6111 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 6112 } 6113 6114 _detectNavbar() { 6115 return this._element.closest(`.${CLASS_NAME_NAVBAR}`) !== null; 6116 } 6117 6118 _getOffset() { 6119 const { 6120 offset 6121 } = this._config; 6122 6123 if (typeof offset === 'string') { 6124 return offset.split(',').map(val => Number.parseInt(val, 10)); 6125 } 6126 6127 if (typeof offset === 'function') { 6128 return popperData => offset(popperData, this._element); 6129 } 6130 6131 return offset; 6132 } 6133 6134 _getPopperConfig() { 6135 const defaultBsPopperConfig = { 6136 placement: this._getPlacement(), 6137 modifiers: [{ 6138 name: 'preventOverflow', 6139 options: { 6140 boundary: this._config.boundary 6141 } 6142 }, { 6143 name: 'offset', 6144 options: { 6145 offset: this._getOffset() 6146 } 6147 }] 6148 }; // Disable Popper if we have a static display 6149 6150 if (this._config.display === 'static') { 6151 defaultBsPopperConfig.modifiers = [{ 6152 name: 'applyStyles', 6153 enabled: false 6154 }]; 6155 } 6156 6157 return { ...defaultBsPopperConfig, 6158 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 6159 }; 6160 } 6161 6162 _selectMenuItem({ 6163 key, 6164 target 6165 }) { 6166 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(isVisible); 6167 6168 if (!items.length) { 6169 return; 6170 } // if target isn't included in items (e.g. when expanding the dropdown) 6171 // allow cycling to get the last item in case key equals ARROW_UP_KEY 6172 6173 6174 getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus(); 6175 } // Static 6176 6177 6178 static jQueryInterface(config) { 6179 return this.each(function () { 6180 const data = Dropdown.getOrCreateInstance(this, config); 6181 6182 if (typeof config !== 'string') { 6183 return; 6184 } 6185 6186 if (typeof data[config] === 'undefined') {
6187 throw new TypeError(`No method named "${config}"`); 6188 } 6189 6190 data[config](); 6191 }); 6192 } 6193 6194 static clearMenus(event) { 6195 if (event && (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1)) { 6196 return; 6197 } 6198 6199 const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE$3); 6200 6201 for (let i = 0, len = toggles.length; i < len; i++) { 6202 const context = Dropdown.getInstance(toggles[i]); 6203 6204 if (!context || context._config.autoClose === false) { 6205 continue; 6206 } 6207 6208 if (!context._isShown()) { 6209 continue; 6210 } 6211 6212 const relatedTarget = { 6213 relatedTarget: context._element 6214 }; 6215 6216 if (event) { 6217 const composedPath = event.composedPath(); 6218 const isMenuTarget = composedPath.includes(context._menu); 6219 6220 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 6221 continue; 6222 } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 6223 6224 6225 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 6226 continue; 6227 } 6228 6229 if (event.type === 'click') { 6230 relatedTarget.clickEvent = event; 6231 } 6232 } 6233 6234 context._completeHide(relatedTarget); 6235 } 6236 } 6237 6238 static getParentFromElement(element) { 6239 return getElementFromSelector(element) || element.parentNode; 6240 } 6241 6242 static dataApiKeydownHandler(event) { 6243 // If not input/textarea: 6244 // - And not a key in REGEXP_KEYDOWN => not a dropdown command 6245 // If input/textarea: 6246 // - If space key => not a dropdown command 6247 // - If key is other than escape 6248 // - If key is not up or down => not a dropdown command 6249 // - If trigger inside the menu => not a dropdown command 6250 if (/input|textarea/i.test(event.target.tagName) ? event.key === SPACE_KEY || event.key !== ESCAPE_KEY$2 && (event.key !== ARROW_DOWN_KEY && event.key !== ARROW_UP_KEY || event.target.closest(SELECTOR_MENU)) : !REGEXP_KEYDOWN.test(event.key)) { 6251 return; 6252 } 6253 6254 const isActive = this.classList.contains(CLASS_NAME_SHOW$6); 6255 6256 if (!isActive && event.key === ESCAPE_KEY$2) { 6257 return; 6258 } 6259 6260 event.preventDefault(); 6261 event.stopPropagation(); 6262 6263 if (isDisabled(this)) { 6264 return; 6265 } 6266 6267 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0]; 6268 const instance = Dropdown.getOrCreateInstance(getToggleButton); 6269 6270 if (event.key === ESCAPE_KEY$2) { 6271 instance.hide(); 6272 return; 6273 } 6274 6275 if (event.key === ARROW_UP_KEY || event.key === ARROW_DOWN_KEY) { 6276 if (!isActive) { 6277 instance.show(); 6278 } 6279 6280 instance._selectMenuItem(event); 6281 6282 return; 6283 } 6284 6285 if (!isActive || event.key === SPACE_KEY) { 6286 Dropdown.clearMenus(); 6287 } 6288 } 6289 6290 } 6291 /** 6292 * ------------------------------------------------------------------------ 6293 * Data Api implementation 6294 * ------------------------------------------------------------------------ 6295 */ 6296 6297 6298 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 6299 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 6300 EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 6301 EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 6302 EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 6303 event.preventDefault(); 6304 Dropdown.getOrCreateInstance(this).toggle(); 6305 }); 6306 /** 6307 * ------------------------------------------------------------------------ 6308 * jQuery 6309 * ------------------------------------------------------------------------ 6310 * add .Dropdown to jQuery only if jQuery is present 6311 */ 6312 6313 defineJQueryPlugin(Dropdown); 6314 6315 /** 6316 * -------------------------------------------------------------------------- 6317 * Bootstrap (v5.1.3): util/scrollBar.js 6318 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6319 * -------------------------------------------------------------------------- 6320 */ 6321 const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 6322 const SELECTOR_STICKY_CONTENT = '.sticky-top'; 6323 6324 class ScrollBarHelper { 6325 constructor() { 6326 this._element = document.body; 6327 } 6328 6329 getWidth() { 6330 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 6331 const documentWidth = document.documentElement.clientWidth; 6332 return Math.abs(window.innerWidth - documentWidth); 6333 } 6334 6335 hide() { 6336 const width = this.getWidth(); 6337 6338 this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width 6339 6340 6341 this._setElementAttributes(this._element, 'paddingRight', calculatedValue => calculatedValue + width);
6341 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 6342 6343 6344 this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + width); 6345 6346 this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - width); 6347 } 6348 6349 _disableOverFlow() { 6350 this._saveInitialAttribute(this._element, 'overflow'); 6351 6352 this._element.style.overflow = 'hidden'; 6353 } 6354 6355 _setElementAttributes(selector, styleProp, callback) { 6356 const scrollbarWidth = this.getWidth(); 6357 6358 const manipulationCallBack = element => { 6359 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 6360 return; 6361 } 6362 6363 this._saveInitialAttribute(element, styleProp); 6364 6365 const calculatedValue = window.getComputedStyle(element)[styleProp]; 6366 element.style[styleProp] = `${callback(Number.parseFloat(calculatedValue))}px`; 6367 }; 6368 6369 this._applyManipulationCallback(selector, manipulationCallBack); 6370 } 6371 6372 reset() { 6373 this._resetElementAttributes(this._element, 'overflow'); 6374 6375 this._resetElementAttributes(this._element, 'paddingRight'); 6376 6377 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight'); 6378 6379 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight'); 6380 } 6381 6382 _saveInitialAttribute(element, styleProp) { 6383 const actualValue = element.style[styleProp]; 6384 6385 if (actualValue) { 6386 Manipulator.setDataAttribute(element, styleProp, actualValue); 6387 } 6388 } 6389 6390 _resetElementAttributes(selector, styleProp) { 6391 const manipulationCallBack = element => { 6392 const value = Manipulator.getDataAttribute(element, styleProp); 6393 6394 if (typeof value === 'undefined') { 6395 element.style.removeProperty(styleProp); 6396 } else { 6397 Manipulator.removeDataAttribute(element, styleProp); 6398 element.style[styleProp] = value; 6399 } 6400 }; 6401 6402 this._applyManipulationCallback(selector, manipulationCallBack); 6403 } 6404 6405 _applyManipulationCallback(selector, callBack) { 6406 if (isElement$1(selector)) { 6407 callBack(selector); 6408 } else { 6409 SelectorEngine.find(selector, this._element).forEach(callBack); 6410 } 6411 } 6412 6413 isOverflowing() { 6414 return this.getWidth() > 0; 6415 } 6416 6417 } 6418 6419 /** 6420 * -------------------------------------------------------------------------- 6421 * Bootstrap (v5.1.3): util/backdrop.js 6422 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6423 * -------------------------------------------------------------------------- 6424 */ 6425 const Default$7 = { 6426 className: 'modal-backdrop', 6427 isVisible: true, 6428 // if false, we use the backdrop helper without adding any element to the dom 6429 isAnimated: false, 6430 rootElement: 'body', 6431 // give the choice to place backdrop under different elements 6432 clickCallback: null 6433 }; 6434 const DefaultType$7 = { 6435 className: 'string', 6436 isVisible: 'boolean', 6437 isAnimated: 'boolean', 6438 rootElement: '(element|string)', 6439 clickCallback: '(function|null)' 6440 }; 6441 const NAME$8 = 'backdrop'; 6442 const CLASS_NAME_FADE$4 = 'fade';
6443 const CLASS_NAME_SHOW$5 = 'show'; 6444 const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$8}`; 6445 6446 class Backdrop { 6447 constructor(config) { 6448 this._config = this._getConfig(config); 6449 this._isAppended = false; 6450 this._element = null; 6451 } 6452 6453 show(callback) { 6454 if (!this._config.isVisible) { 6455 execute(callback); 6456 return; 6457 } 6458 6459 this._append(); 6460 6461 if (this._config.isAnimated) { 6462 reflow(this._getElement()); 6463 } 6464 6465 this._getElement().classList.add(CLASS_NAME_SHOW$5); 6466 6467 this._emulateAnimation(() => { 6468 execute(callback); 6469 }); 6470 } 6471 6472 hide(callback) { 6473 if (!this._config.isVisible) { 6474 execute(callback); 6475 return; 6476 } 6477 6478 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 6479 6480 this._emulateAnimation(() => { 6481 this.dispose(); 6482 execute(callback); 6483 }); 6484 } // Private 6485 6486 6487 _getElement() { 6488 if (!this._element) { 6489 const backdrop = document.createElement('div'); 6490 backdrop.className = this._config.className; 6491 6492 if (this._config.isAnimated) { 6493 backdrop.classList.add(CLASS_NAME_FADE$4); 6494 } 6495 6496 this._element = backdrop; 6497 } 6498 6499 return this._element; 6500 } 6501 6502 _getConfig(config) { 6503 config = { ...Default$7, 6504 ...(typeof config === 'object' ? config : {}) 6505 }; // use getElement() with the default "body" to get a fresh Element on each instantiation 6506 6507 config.rootElement = getElement(config.rootElement); 6508 typeCheckConfig(NAME$8, config, DefaultType$7); 6509 return config; 6510 } 6511 6512 _append() { 6513 if (this._isAppended) { 6514 return; 6515 } 6516 6517 this._config.rootElement.append(this._getElement()); 6518 6519 EventHandler.on(this._getElement(), EVENT_MOUSEDOWN, () => { 6520 execute(this._config.clickCallback); 6521 }); 6522 this._isAppended = true; 6523 } 6524 6525 dispose() { 6526 if (!this._isAppended) { 6527 return; 6528 } 6529 6530 EventHandler.off(this._element, EVENT_MOUSEDOWN); 6531 6532 this._element.remove(); 6533 6534 this._isAppended = false; 6535 } 6536 6537 _emulateAnimation(callback) { 6538 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 6539 } 6540 6541 } 6542 6543 /** 6544 * -------------------------------------------------------------------------- 6545 * Bootstrap (v5.1.3): util/focustrap.js 6546 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6547 * -------------------------------------------------------------------------- 6548 */ 6549 const Default$6 = { 6550 trapElement: null, 6551 // The element to trap focus inside of 6552 autofocus: true 6553 }; 6554 const DefaultType$6 = { 6555 trapElement: 'element', 6556 autofocus: 'boolean' 6557 }; 6558 const NAME$7 = 'focustrap'; 6559 const DATA_KEY$7 = 'bs.focustrap'; 6560 const EVENT_KEY$7 = `.${DATA_KEY$7}`; 6561 const EVENT_FOCUSIN$1 = `focusin${EVENT_KEY$7}`; 6562 const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$7}`; 6563 const TAB_KEY = 'Tab'; 6564 const TAB_NAV_FORWARD = 'forward'; 6565 const TAB_NAV_BACKWARD = 'backward'; 6566 6567 class FocusTrap { 6568 constructor(config) { 6569 this._config = this._getConfig(config); 6570 this._isActive = false; 6571 this._lastTabNavDirection = null; 6572 } 6573 6574 activate() { 6575 const { 6576 trapElement, 6577 autofocus 6578 } = this._config; 6579 6580 if (this._isActive) { 6581 return; 6582 } 6583 6584 if (autofocus) { 6585 trapElement.focus(); 6586 } 6587 6588 EventHandler.off(document, EVENT_KEY$7); // guard against infinite focus loop 6589 6590 EventHandler.on(document, EVENT_FOCUSIN$1, event => this._handleFocusin(event)); 6591 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 6592 this._isActive = true; 6593 } 6594 6595 deactivate() { 6596 if (!this._isActive) { 6597 return; 6598 } 6599 6600 this._isActive = false; 6601 EventHandler.off(document, EVENT_KEY$7); 6602 } // Private 6603 6604 6605 _handleFocusin(event) { 6606 const { 6607 target 6608 } = event; 6609 const { 6610 trapElement 6611 } = this._config; 6612 6613 if (target === document || target === trapElement || trapElement.contains(target)) { 6614 return; 6615 } 6616 6617 const elements = SelectorEngine.focusableChildren(trapElement); 6618 6619 if (elements.length === 0) { 6620 trapElement.focus(); 6621 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 6622 elements[elements.length - 1].focus(); 6623 } else { 6624 elements[0].focus(); 6625 } 6626 } 6627 6628 _handleKeydown(event) { 6629 if (event.key !== TAB_KEY) { 6630 return; 6631 } 6632 6633 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 6634 } 6635 6636 _getConfig(config) { 6637 config = { ...Default$6, 6638 ...(typeof config === 'object' ? config : {}) 6639 }; 6640 typeCheckConfig(NAME$7, config, DefaultType$6); 6641 return config; 6642 } 6643 6644 } 6645 6646 /** 6647 * -------------------------------------------------------------------------- 6648 * Bootstrap (v5.1.3): modal.js 6649 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6650 * -------------------------------------------------------------------------- 6651 */ 6652 /** 6653 * ------------------------------------------------------------------------ 6654 * Constants 6655 * ------------------------------------------------------------------------ 6656 */ 6657 6658 const NAME$6 = 'modal'; 6659 const DATA_KEY$6 = 'bs.modal'; 6660 const EVENT_KEY$6 = `.${DATA_KEY$6}`; 6661 const DATA_API_KEY$3 = '.data-api'; 6662 const ESCAPE_KEY$1 = 'Escape';
6663 const Default$5 = { 6664 backdrop: true, 6665 keyboard: true, 6666 focus: true 6667 }; 6668 const DefaultType$5 = { 6669 backdrop: '(boolean|string)', 6670 keyboard: 'boolean', 6671 focus: 'boolean' 6672 }; 6673 const EVENT_HIDE$3 = `hide${EVENT_KEY$6}`; 6674 const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$6}`; 6675 const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$6}`; 6676 const EVENT_SHOW$3 = `show${EVENT_KEY$6}`; 6677 const EVENT_SHOWN$3 = `shown${EVENT_KEY$6}`; 6678 const EVENT_RESIZE = `resize${EVENT_KEY$6}`; 6679 const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$6}`; 6680 const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$6}`; 6681 const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY$6}`; 6682 const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$6}`; 6683 const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 6684 const CLASS_NAME_OPEN = 'modal-open'; 6685 const CLASS_NAME_FADE$3 = 'fade'; 6686 const CLASS_NAME_SHOW$4 = 'show'; 6687 const CLASS_NAME_STATIC = 'modal-static'; 6688 const OPEN_SELECTOR$1 = '.modal.show'; 6689 const SELECTOR_DIALOG = '.modal-dialog'; 6690 const SELECTOR_MODAL_BODY = '.modal-body'; 6691 const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 6692 /** 6693 * ------------------------------------------------------------------------ 6694 * Class Definition 6695 * ------------------------------------------------------------------------ 6696 */ 6697 6698 class Modal extends BaseComponent { 6699 constructor(element, config) { 6700 super(element); 6701 this._config = this._getConfig(config); 6702 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 6703 this._backdrop = this._initializeBackDrop(); 6704 this._focustrap = this._initializeFocusTrap(); 6705 this._isShown = false; 6706 this._ignoreBackdropClick = false; 6707 this._isTransitioning = false; 6708 this._scrollBar = new ScrollBarHelper(); 6709 } // Getters 6710 6711 6712 static get Default() { 6713 return Default$5; 6714 } 6715 6716 static get NAME() { 6717 return NAME$6; 6718 } // Public 6719 6720 6721 toggle(relatedTarget) { 6722 return this._isShown ? this.hide() : this.show(relatedTarget); 6723 } 6724 6725 show(relatedTarget) { 6726 if (this._isShown || this._isTransitioning) { 6727 return; 6728 } 6729 6730 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 6731 relatedTarget 6732 }); 6733 6734 if (showEvent.defaultPrevented) { 6735 return; 6736 } 6737 6738 this._isShown = true; 6739 6740 if (this._isAnimated()) { 6741 this._isTransitioning = true; 6742 } 6743 6744 this._scrollBar.hide(); 6745 6746 document.body.classList.add(CLASS_NAME_OPEN); 6747 6748 this._adjustDialog(); 6749 6750 this._setEscapeEvent(); 6751 6752 this._setResizeEvent(); 6753 6754 EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => { 6755 EventHandler.one(this._element, EVENT_MOUSEUP_DISMISS, event => { 6756 if (event.target === this._element) { 6757 this._ignoreBackdropClick = true; 6758 } 6759 }); 6760 }); 6761 6762 this._showBackdrop(() => this._showElement(relatedTarget)); 6763 } 6764 6765 hide() { 6766 if (!this._isShown || this._isTransitioning) { 6767 return; 6768 } 6769 6770 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 6771 6772 if (hideEvent.defaultPrevented) { 6773 return; 6774 } 6775 6776 this._isShown = false; 6777 6778 const isAnimated = this._isAnimated(); 6779 6780 if (isAnimated) { 6781 this._isTransitioning = true; 6782 } 6783 6784 this._setEscapeEvent(); 6785 6786 this._setResizeEvent(); 6787 6788 this._focustrap.deactivate(); 6789 6790 this._element.classList.remove(CLASS_NAME_SHOW$4); 6791 6792 EventHandler.off(this._element, EVENT_CLICK_DISMISS); 6793 EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS); 6794 6795 this._queueCallback(() => this._hideModal(), this._element, isAnimated); 6796 } 6797 6798 dispose() { 6799 [window, this._dialog].forEach(htmlElement => EventHandler.off(htmlElement, EVENT_KEY$6)); 6800 6801 this._backdrop.dispose(); 6802 6803 this._focustrap.deactivate(); 6804 6805 super.dispose(); 6806 } 6807 6808 handleUpdate() { 6809 this._adjustDialog(); 6810 } // Private 6811 6812 6813 _initializeBackDrop() { 6814 return new Backdrop({ 6815 isVisible: Boolean(this._config.backdrop), 6816 // 'static' option will be translated to true, and booleans will keep their value 6817 isAnimated: this._isAnimated() 6818 }); 6819 } 6820 6821 _initializeFocusTrap() { 6822 return new FocusTrap({ 6823 trapElement: this._element 6824 }); 6825 } 6826 6827 _getConfig(config) { 6828 config = { ...Default$5, 6829 ...Manipulator.getDataAttributes(this._element), 6830 ...(typeof config === 'object' ? config : {}) 6831 }; 6832 typeCheckConfig(NAME$6, config, DefaultType$5); 6833 return config; 6834 } 6835 6836 _showElement(relatedTarget) { 6837 const isAnimated = this._isAnimated(); 6838 6839 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 6840 6841 if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { 6842 // Don't move modal's DOM position 6843 document.body.append(this._element); 6844 } 6845 6846 this._element.style.display = 'block'; 6847 6848 this._element.removeAttribute('aria-hidden'); 6849 6850 this._element.setAttribute('aria-modal', true); 6851 6852 this._element.setAttribute('role', 'dialog'); 6853 6854 this._element.scrollTop = 0; 6855 6856 if (modalBody) { 6857 modalBody.scrollTop = 0; 6858 } 6859 6860 if (isAnimated) { 6861 reflow(this._element); 6862 } 6863 6864 this._element.classList.add(CLASS_NAME_SHOW$4); 6865 6866 const transitionComplete = () => { 6867 if (this._config.focus) { 6868 this._focustrap.activate(); 6869 } 6870 6871 this._isTransitioning = false;
6872 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 6873 relatedTarget 6874 }); 6875 }; 6876 6877 this._queueCallback(transitionComplete, this._dialog, isAnimated); 6878 } 6879 6880 _setEscapeEvent() { 6881 if (this._isShown) { 6882 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 6883 if (this._config.keyboard && event.key === ESCAPE_KEY$1) { 6884 event.preventDefault(); 6885 this.hide(); 6886 } else if (!this._config.keyboard && event.key === ESCAPE_KEY$1) { 6887 this._triggerBackdropTransition(); 6888 } 6889 }); 6890 } else { 6891 EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS$1); 6892 } 6893 } 6894 6895 _setResizeEvent() { 6896 if (this._isShown) { 6897 EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog()); 6898 } else { 6899 EventHandler.off(window, EVENT_RESIZE); 6900 } 6901 } 6902 6903 _hideModal() { 6904 this._element.style.display = 'none'; 6905 6906 this._element.setAttribute('aria-hidden', true); 6907 6908 this._element.removeAttribute('aria-modal'); 6909 6910 this._element.removeAttribute('role'); 6911 6912 this._isTransitioning = false; 6913 6914 this._backdrop.hide(() => { 6915 document.body.classList.remove(CLASS_NAME_OPEN); 6916 6917 this._resetAdjustments(); 6918 6919 this._scrollBar.reset(); 6920 6921 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 6922 }); 6923 } 6924 6925 _showBackdrop(callback) { 6926 EventHandler.on(this._element, EVENT_CLICK_DISMISS, event => { 6927 if (this._ignoreBackdropClick) { 6928 this._ignoreBackdropClick = false; 6929 return; 6930 } 6931 6932 if (event.target !== event.currentTarget) { 6933 return; 6934 } 6935 6936 if (this._config.backdrop === true) { 6937 this.hide(); 6938 } else if (this._config.backdrop === 'static') { 6939 this._triggerBackdropTransition(); 6940 } 6941 }); 6942 6943 this._backdrop.show(callback); 6944 } 6945 6946 _isAnimated() { 6947 return this._element.classList.contains(CLASS_NAME_FADE$3); 6948 } 6949 6950 _triggerBackdropTransition() { 6951 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 6952 6953 if (hideEvent.defaultPrevented) { 6954 return; 6955 } 6956 6957 const { 6958 classList, 6959 scrollHeight, 6960 style 6961 } = this._element; 6962 const isModalOverflowing = scrollHeight > document.documentElement.clientHeight; // return if the following background transition hasn't yet completed 6963 6964 if (!isModalOverflowing && style.overflowY === 'hidden' || classList.contains(CLASS_NAME_STATIC)) { 6965 return; 6966 } 6967 6968 if (!isModalOverflowing) { 6969 style.overflowY = 'hidden'; 6970 } 6971 6972 classList.add(CLASS_NAME_STATIC); 6973 6974 this._queueCallback(() => { 6975 classList.remove(CLASS_NAME_STATIC); 6976 6977 if (!isModalOverflowing) { 6978 this._queueCallback(() => { 6979 style.overflowY = ''; 6980 }, this._dialog); 6981 } 6982 }, this._dialog); 6983 6984 this._element.focus(); 6985 } // ---------------------------------------------------------------------- 6986 // the following methods are used to handle overflowing modals 6987 // ---------------------------------------------------------------------- 6988 6989 6990 _adjustDialog() { 6991 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 6992 6993 const scrollbarWidth = this._scrollBar.getWidth(); 6994 6995 const isBodyOverflowing = scrollbarWidth > 0; 6996 6997 if (!isBodyOverflowing && isModalOverflowing && !isRTL() || isBodyOverflowing && !isModalOverflowing && isRTL()) { 6998 this._element.style.paddingLeft = `${scrollbarWidth}px`; 6999 } 7000 7001 if (isBodyOverflowing && !isModalOverflowing && !isRTL() || !isBodyOverflowing && isModalOverflowing && isRTL()) { 7002 this._element.style.paddingRight = `${scrollbarWidth}px`; 7003 } 7004 } 7005 7006 _resetAdjustments() { 7007 this._element.style.paddingLeft = ''; 7008 this._element.style.paddingRight = ''; 7009 } // Static 7010 7011 7012 static jQueryInterface(config, relatedTarget) { 7013 return this.each(function () { 7014 const data = Modal.getOrCreateInstance(this, config); 7015 7016 if (typeof config !== 'string') { 7017 return; 7018 } 7019 7020 if (typeof data[config] === 'undefined') {
vendor: 4,925 bytes, lines 7021-7202
7021 throw new TypeError(`No method named "${config}"`); 7022 } 7023 7024 data[config](relatedTarget); 7025 }); 7026 } 7027 7028 } 7029 /** 7030 * ------------------------------------------------------------------------ 7031 * Data Api implementation 7032 * ------------------------------------------------------------------------ 7033 */ 7034 7035 7036 EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 7037 const target = getElementFromSelector(this); 7038 7039 if (['A', 'AREA'].includes(this.tagName)) { 7040 event.preventDefault(); 7041 } 7042 7043 EventHandler.one(target, EVENT_SHOW$3, showEvent => { 7044 if (showEvent.defaultPrevented) { 7045 // only register focus restorer if modal will actually get shown 7046 return; 7047 } 7048 7049 EventHandler.one(target, EVENT_HIDDEN$3, () => { 7050 if (isVisible(this)) { 7051 this.focus(); 7052 } 7053 }); 7054 }); // avoid conflict when clicking moddal toggler while another one is open 7055 7056 const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 7057 7058 if (allReadyOpen) { 7059 Modal.getInstance(allReadyOpen).hide(); 7060 } 7061 7062 const data = Modal.getOrCreateInstance(target); 7063 data.toggle(this); 7064 }); 7065 enableDismissTrigger(Modal); 7066 /** 7067 * ------------------------------------------------------------------------ 7068 * jQuery 7069 * ------------------------------------------------------------------------ 7070 * add .Modal to jQuery only if jQuery is present 7071 */ 7072 7073 defineJQueryPlugin(Modal); 7074 7075 /** 7076 * -------------------------------------------------------------------------- 7077 * Bootstrap (v5.1.3): offcanvas.js 7078 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7079 * -------------------------------------------------------------------------- 7080 */ 7081 /** 7082 * ------------------------------------------------------------------------ 7083 * Constants 7084 * ------------------------------------------------------------------------ 7085 */ 7086 7087 const NAME$5 = 'offcanvas'; 7088 const DATA_KEY$5 = 'bs.offcanvas'; 7089 const EVENT_KEY$5 = `.${DATA_KEY$5}`; 7090 const DATA_API_KEY$2 = '.data-api'; 7091 const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$5}${DATA_API_KEY$2}`; 7092 const ESCAPE_KEY = 'Escape'; 7093 const Default$4 = { 7094 backdrop: true, 7095 keyboard: true, 7096 scroll: false 7097 }; 7098 const DefaultType$4 = { 7099 backdrop: 'boolean', 7100 keyboard: 'boolean', 7101 scroll: 'boolean' 7102 }; 7103 const CLASS_NAME_SHOW$3 = 'show'; 7104 const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 7105 const OPEN_SELECTOR = '.offcanvas.show'; 7106 const EVENT_SHOW$2 = `show${EVENT_KEY$5}`; 7107 const EVENT_SHOWN$2 = `shown${EVENT_KEY$5}`; 7108 const EVENT_HIDE$2 = `hide${EVENT_KEY$5}`; 7109 const EVENT_HIDDEN$2 = `hidden${EVENT_KEY$5}`; 7110 const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$5}${DATA_API_KEY$2}`; 7111 const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$5}`; 7112 const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 7113 /** 7114 * ------------------------------------------------------------------------ 7115 * Class Definition 7116 * ------------------------------------------------------------------------ 7117 */ 7118 7119 class Offcanvas extends BaseComponent { 7120 constructor(element, config) { 7121 super(element); 7122 this._config = this._getConfig(config); 7123 this._isShown = false; 7124 this._backdrop = this._initializeBackDrop(); 7125 this._focustrap = this._initializeFocusTrap(); 7126 7127 this._addEventListeners(); 7128 } // Getters 7129 7130 7131 static get NAME() { 7132 return NAME$5; 7133 } 7134 7135 static get Default() { 7136 return Default$4; 7137 } // Public 7138 7139 7140 toggle(relatedTarget) { 7141 return this._isShown ? this.hide() : this.show(relatedTarget); 7142 } 7143 7144 show(relatedTarget) { 7145 if (this._isShown) { 7146 return; 7147 } 7148 7149 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$2, { 7150 relatedTarget 7151 }); 7152 7153 if (showEvent.defaultPrevented) { 7154 return; 7155 } 7156 7157 this._isShown = true; 7158 this._element.style.visibility = 'visible'; 7159 7160 this._backdrop.show(); 7161 7162 if (!this._config.scroll) { 7163 new ScrollBarHelper().hide(); 7164 } 7165 7166 this._element.removeAttribute('aria-hidden'); 7167 7168 this._element.setAttribute('aria-modal', true); 7169 7170 this._element.setAttribute('role', 'dialog'); 7171 7172 this._element.classList.add(CLASS_NAME_SHOW$3); 7173 7174 const completeCallBack = () => { 7175 if (!this._config.scroll) { 7176 this._focustrap.activate(); 7177 } 7178 7179 EventHandler.trigger(this._element, EVENT_SHOWN$2, { 7180 relatedTarget 7181 }); 7182 }; 7183 7184 this._queueCallback(completeCallBack, this._element, true); 7185 } 7186 7187 hide() { 7188 if (!this._isShown) { 7189 return; 7190 } 7191 7192 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$2); 7193 7194 if (hideEvent.defaultPrevented) { 7195 return; 7196 } 7197 7198 this._focustrap.deactivate(); 7199 7200 this._element.blur(); 7201 7202 this._isShown = false;
7203 7204 this._element.classList.remove(CLASS_NAME_SHOW$3); 7205 7206 this._backdrop.hide(); 7207 7208 const completeCallback = () => { 7209 this._element.setAttribute('aria-hidden', true); 7210 7211 this._element.removeAttribute('aria-modal'); 7212 7213 this._element.removeAttribute('role'); 7214 7215 this._element.style.visibility = 'hidden'; 7216 7217 if (!this._config.scroll) { 7218 new ScrollBarHelper().reset(); 7219 } 7220 7221 EventHandler.trigger(this._element, EVENT_HIDDEN$2); 7222 }; 7223 7224 this._queueCallback(completeCallback, this._element, true); 7225 } 7226 7227 dispose() { 7228 this._backdrop.dispose(); 7229 7230 this._focustrap.deactivate(); 7231 7232 super.dispose(); 7233 } // Private 7234 7235 7236 _getConfig(config) { 7237 config = { ...Default$4, 7238 ...Manipulator.getDataAttributes(this._element), 7239 ...(typeof config === 'object' ? config : {}) 7240 }; 7241 typeCheckConfig(NAME$5, config, DefaultType$4); 7242 return config; 7243 } 7244 7245 _initializeBackDrop() { 7246 return new Backdrop({ 7247 className: CLASS_NAME_BACKDROP, 7248 isVisible: this._config.backdrop, 7249 isAnimated: true, 7250 rootElement: this._element.parentNode, 7251 clickCallback: () => this.hide() 7252 }); 7253 } 7254 7255 _initializeFocusTrap() { 7256 return new FocusTrap({ 7257 trapElement: this._element 7258 }); 7259 } 7260 7261 _addEventListeners() { 7262 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 7263 if (this._config.keyboard && event.key === ESCAPE_KEY) { 7264 this.hide(); 7265 } 7266 }); 7267 } // Static 7268 7269 7270 static jQueryInterface(config) { 7271 return this.each(function () { 7272 const data = Offcanvas.getOrCreateInstance(this, config); 7273 7274 if (typeof config !== 'string') { 7275 return; 7276 } 7277 7278 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7279 throw new TypeError(`No method named "${config}"`); 7280 } 7281 7282 data[config](this); 7283 }); 7284 } 7285 7286 } 7287 /** 7288 * ------------------------------------------------------------------------ 7289 * Data Api implementation 7290 * ------------------------------------------------------------------------ 7291 */ 7292 7293 7294 EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 7295 const target = getElementFromSelector(this); 7296 7297 if (['A', 'AREA'].includes(this.tagName)) { 7298 event.preventDefault(); 7299 } 7300 7301 if (isDisabled(this)) { 7302 return; 7303 } 7304 7305 EventHandler.one(target, EVENT_HIDDEN$2, () => { 7306 // focus on trigger when it is closed 7307 if (isVisible(this)) { 7308 this.focus(); 7309 } 7310 }); // avoid conflict when clicking a toggler of an offcanvas, while another is open 7311 7312 const allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 7313 7314 if (allReadyOpen && allReadyOpen !== target) { 7315 Offcanvas.getInstance(allReadyOpen).hide(); 7316 } 7317 7318 const data = Offcanvas.getOrCreateInstance(target); 7319 data.toggle(this); 7320 }); 7321 EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => SelectorEngine.find(OPEN_SELECTOR).forEach(el => Offcanvas.getOrCreateInstance(el).show())); 7322 enableDismissTrigger(Offcanvas); 7323 /** 7324 * ------------------------------------------------------------------------ 7325 * jQuery 7326 * ------------------------------------------------------------------------ 7327 */ 7328 7329 defineJQueryPlugin(Offcanvas); 7330 7331 /** 7332 * -------------------------------------------------------------------------- 7333 * Bootstrap (v5.1.3): util/sanitizer.js 7334 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7335 * -------------------------------------------------------------------------- 7336 */ 7337 const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 7338 const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 7339 /** 7340 * A pattern that recognizes a commonly useful subset of URLs that are safe. 7341 * 7342 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 7343 */ 7344 7345 const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 7346 /** 7347 * A pattern that matches safe data URLs. Only matches image, video and audio types. 7348 * 7349 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 7350 */ 7351 7352 const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; 7353 7354 const allowedAttribute = (attribute, allowedAttributeList) => {
7355 const attributeName = attribute.nodeName.toLowerCase(); 7356 7357 if (allowedAttributeList.includes(attributeName)) { 7358 if (uriAttributes.has(attributeName)) { 7359 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); 7360 } 7361 7362 return true; 7363 } 7364 7365 const regExp = allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp); // Check if a regular expression validates the attribute. 7366 7367 for (let i = 0, len = regExp.length; i < len; i++) { 7368 if (regExp[i].test(attributeName)) { 7369 return true; 7370 } 7371 } 7372 7373 return false; 7374 }; 7375 7376 const DefaultAllowlist = { 7377 // Global attributes allowed on any supplied element below. 7378 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 7379 a: ['target', 'href', 'title', 'rel'], 7380 area: [], 7381 b: [], 7382 br: [], 7383 col: [], 7384 code: [], 7385 div: [], 7386 em: [], 7387 hr: [], 7388 h1: [], 7389 h2: [], 7390 h3: [], 7391 h4: [], 7392 h5: [], 7393 h6: [], 7394 i: [], 7395 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 7396 li: [], 7397 ol: [], 7398 p: [], 7399 pre: [], 7400 s: [], 7401 small: [], 7402 span: [], 7403 sub: [], 7404 sup: [], 7405 strong: [], 7406 u: [], 7407 ul: [] 7408 }; 7409 function sanitizeHtml(unsafeHtml, allowList, sanitizeFn) { 7410 if (!unsafeHtml.length) { 7411 return unsafeHtml; 7412 } 7413 7414 if (sanitizeFn && typeof sanitizeFn === 'function') { 7415 return sanitizeFn(unsafeHtml); 7416 } 7417 7418 const domParser = new window.DOMParser(); 7419 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 7420 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 7421 7422 for (let i = 0, len = elements.length; i < len; i++) { 7423 const element = elements[i]; 7424 const elementName = element.nodeName.toLowerCase(); 7425 7426 if (!Object.keys(allowList).includes(elementName)) { 7427 element.remove(); 7428 continue; 7429 } 7430 7431 const attributeList = [].concat(...element.attributes); 7432 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 7433 attributeList.forEach(attribute => { 7434 if (!allowedAttribute(attribute, allowedAttributes)) { 7435 element.removeAttribute(attribute.nodeName); 7436 } 7437 }); 7438 } 7439 7440 return createdDocument.body.innerHTML; 7441 } 7442 7443 /** 7444 * -------------------------------------------------------------------------- 7445 * Bootstrap (v5.1.3): tooltip.js 7446 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7447 * -------------------------------------------------------------------------- 7448 */ 7449 /** 7450 * ------------------------------------------------------------------------ 7451 * Constants 7452 * ------------------------------------------------------------------------ 7453 */ 7454 7455 const NAME$4 = 'tooltip'; 7456 const DATA_KEY$4 = 'bs.tooltip'; 7457 const EVENT_KEY$4 = `.${DATA_KEY$4}`; 7458 const CLASS_PREFIX$1 = 'bs-tooltip'; 7459 const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 7460 const DefaultType$3 = { 7461 animation: 'boolean', 7462 template: 'string', 7463 title: '(string|element|function)', 7464 trigger: 'string', 7465 delay: '(number|object)', 7466 html: 'boolean', 7467 selector: '(string|boolean)', 7468 placement: '(string|function)', 7469 offset: '(array|string|function)', 7470 container: '(string|element|boolean)', 7471 fallbackPlacements: 'array', 7472 boundary: '(string|element)', 7473 customClass: '(string|function)', 7474 sanitize: 'boolean', 7475 sanitizeFn: '(null|function)', 7476 allowList: 'object', 7477 popperConfig: '(null|object|function)' 7478 }; 7479 const AttachmentMap = { 7480 AUTO: 'auto', 7481 TOP: 'top', 7482 RIGHT: isRTL() ? 'left' : 'right', 7483 BOTTOM: 'bottom', 7484 LEFT: isRTL() ? 'right' : 'left' 7485 }; 7486 const Default$3 = { 7487 animation: true, 7488 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 7489 trigger: 'hover focus', 7490 title: '', 7491 delay: 0, 7492 html: false, 7493 selector: false, 7494 placement: 'top', 7495 offset: [0, 0], 7496 container: false, 7497 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 7498 boundary: 'clippingParents', 7499 customClass: '', 7500 sanitize: true, 7501 sanitizeFn: null, 7502 allowList: DefaultAllowlist, 7503 popperConfig: null 7504 }; 7505 const Event$2 = { 7506 HIDE: `hide${EVENT_KEY$4}`, 7507 HIDDEN: `hidden${EVENT_KEY$4}`, 7508 SHOW: `show${EVENT_KEY$4}`, 7509 SHOWN: `shown${EVENT_KEY$4}`, 7510 INSERTED: `inserted${EVENT_KEY$4}`, 7511 CLICK: `click${EVENT_KEY$4}`, 7512 FOCUSIN: `focusin${EVENT_KEY$4}`, 7513 FOCUSOUT: `focusout${EVENT_KEY$4}`, 7514 MOUSEENTER: `mouseenter${EVENT_KEY$4}`, 7515 MOUSELEAVE: `mouseleave${EVENT_KEY$4}` 7516 }; 7517 const CLASS_NAME_FADE$2 = 'fade';
7518 const CLASS_NAME_MODAL = 'modal'; 7519 const CLASS_NAME_SHOW$2 = 'show'; 7520 const HOVER_STATE_SHOW = 'show'; 7521 const HOVER_STATE_OUT = 'out'; 7522 const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 7523 const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 7524 const EVENT_MODAL_HIDE = 'hide.bs.modal'; 7525 const TRIGGER_HOVER = 'hover'; 7526 const TRIGGER_FOCUS = 'focus'; 7527 const TRIGGER_CLICK = 'click'; 7528 const TRIGGER_MANUAL = 'manual'; 7529 /** 7530 * ------------------------------------------------------------------------ 7531 * Class Definition 7532 * ------------------------------------------------------------------------ 7533 */ 7534 7535 class Tooltip extends BaseComponent { 7536 constructor(element, config) { 7537 if (typeof Popper === 'undefined') { 7538 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 7539 } 7540 7541 super(element); // private 7542 7543 this._isEnabled = true; 7544 this._timeout = 0; 7545 this._hoverState = ''; 7546 this._activeTrigger = {}; 7547 this._popper = null; // Protected 7548 7549 this._config = this._getConfig(config); 7550 this.tip = null; 7551 7552 this._setListeners(); 7553 } // Getters 7554 7555 7556 static get Default() { 7557 return Default$3; 7558 } 7559 7560 static get NAME() { 7561 return NAME$4; 7562 } 7563 7564 static get Event() { 7565 return Event$2; 7566 } 7567 7568 static get DefaultType() { 7569 return DefaultType$3; 7570 } // Public 7571 7572 7573 enable() { 7574 this._isEnabled = true; 7575 } 7576 7577 disable() { 7578 this._isEnabled = false; 7579 } 7580 7581 toggleEnabled() { 7582 this._isEnabled = !this._isEnabled; 7583 } 7584 7585 toggle(event) { 7586 if (!this._isEnabled) { 7587 return; 7588 } 7589 7590 if (event) { 7591 const context = this._initializeOnDelegatedTarget(event); 7592 7593 context._activeTrigger.click = !context._activeTrigger.click; 7594 7595 if (context._isWithActiveTrigger()) { 7596 context._enter(null, context); 7597 } else { 7598 context._leave(null, context); 7599 } 7600 } else { 7601 if (this.getTipElement().classList.contains(CLASS_NAME_SHOW$2)) { 7602 this._leave(null, this); 7603 7604 return; 7605 } 7606 7607 this._enter(null, this); 7608 } 7609 } 7610 7611 dispose() { 7612 clearTimeout(this._timeout); 7613 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 7614 7615 if (this.tip) { 7616 this.tip.remove(); 7617 } 7618 7619 this._disposePopper(); 7620 7621 super.dispose(); 7622 } 7623 7624 show() { 7625 if (this._element.style.display === 'none') { 7626 throw new Error('Please use show on visible elements'); 7627 } 7628 7629 if (!(this.isWithContent() && this._isEnabled)) { 7630 return; 7631 } 7632 7633 const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW); 7634 const shadowRoot = findShadowRoot(this._element); 7635 const isInTheDom = shadowRoot === null ? this._element.ownerDocument.documentElement.contains(this._element) : shadowRoot.contains(this._element); 7636 7637 if (showEvent.defaultPrevented || !isInTheDom) { 7638 return; 7639 } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title` 7640 // This will be removed later in favor of a `setContent` method 7641 7642 7643 if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) { 7644 this._disposePopper(); 7645 7646 this.tip.remove(); 7647 this.tip = null; 7648 } 7649 7650 const tip = this.getTipElement(); 7651 const tipId = getUID(this.constructor.NAME);
7652 tip.setAttribute('id', tipId); 7653 7654 this._element.setAttribute('aria-describedby', tipId); 7655 7656 if (this._config.animation) { 7657 tip.classList.add(CLASS_NAME_FADE$2); 7658 } 7659 7660 const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; 7661 7662 const attachment = this._getAttachment(placement); 7663 7664 this._addAttachmentClass(attachment); 7665 7666 const { 7667 container 7668 } = this._config; 7669 Data.set(tip, this.constructor.DATA_KEY, this); 7670 7671 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 7672 container.append(tip); 7673 EventHandler.trigger(this._element, this.constructor.Event.INSERTED); 7674 } 7675 7676 if (this._popper) { 7677 this._popper.update(); 7678 } else { 7679 this._popper = createPopper(this._element, tip, this._getPopperConfig(attachment)); 7680 } 7681 7682 tip.classList.add(CLASS_NAME_SHOW$2); 7683 7684 const customClass = this._resolvePossibleFunction(this._config.customClass); 7685 7686 if (customClass) { 7687 tip.classList.add(...customClass.split(' ')); 7688 } // If this is a touch-enabled device we add extra 7689 // empty mouseover listeners to the body's immediate children; 7690 // only needed because of broken event delegation on iOS 7691 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 7692 7693 7694 if ('ontouchstart' in document.documentElement) { 7695 [].concat(...document.body.children).forEach(element => { 7696 EventHandler.on(element, 'mouseover', noop); 7697 }); 7698 } 7699 7700 const complete = () => { 7701 const prevHoverState = this._hoverState; 7702 this._hoverState = null; 7703 EventHandler.trigger(this._element, this.constructor.Event.SHOWN); 7704 7705 if (prevHoverState === HOVER_STATE_OUT) { 7706 this._leave(null, this); 7707 } 7708 }; 7709 7710 const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2); 7711 7712 this._queueCallback(complete, this.tip, isAnimated); 7713 } 7714 7715 hide() { 7716 if (!this._popper) { 7717 return; 7718 } 7719 7720 const tip = this.getTipElement(); 7721 7722 const complete = () => { 7723 if (this._isWithActiveTrigger()) { 7724 return; 7725 } 7726 7727 if (this._hoverState !== HOVER_STATE_SHOW) { 7728 tip.remove(); 7729 } 7730 7731 this._cleanTipClass(); 7732 7733 this._element.removeAttribute('aria-describedby'); 7734 7735 EventHandler.trigger(this._element, this.constructor.Event.HIDDEN); 7736 7737 this._disposePopper(); 7738 }; 7739 7740 const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE); 7741 7742 if (hideEvent.defaultPrevented) { 7743 return; 7744 } 7745 7746 tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra 7747 // empty mouseover listeners we added for iOS support 7748 7749 if ('ontouchstart' in document.documentElement) { 7750 [].concat(...document.body.children).forEach(element => EventHandler.off(element, 'mouseover', noop)); 7751 } 7752 7753 this._activeTrigger[TRIGGER_CLICK] = false; 7754 this._activeTrigger[TRIGGER_FOCUS] = false; 7755 this._activeTrigger[TRIGGER_HOVER] = false; 7756 const isAnimated = this.tip.classList.contains(CLASS_NAME_FADE$2); 7757 7758 this._queueCallback(complete, this.tip, isAnimated); 7759 7760 this._hoverState = ''; 7761 } 7762 7763 update() { 7764 if (this._popper !== null) { 7765 this._popper.update(); 7766 } 7767 } // Protected 7768 7769 7770 isWithContent() { 7771 return Boolean(this.getTitle()); 7772 } 7773 7774 getTipElement() { 7775 if (this.tip) { 7776 return this.tip; 7777 } 7778 7779 const element = document.createElement('div'); 7780 element.innerHTML = this._config.template; 7781 const tip = element.children[0]; 7782 this.setContent(tip); 7783 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 7784 this.tip = tip; 7785 return this.tip; 7786 } 7787 7788 setContent(tip) { 7789 this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TOOLTIP_INNER); 7790 } 7791 7792 _sanitizeAndSetContent(template, content, selector) { 7793 const templateElement = SelectorEngine.findOne(selector, template); 7794 7795 if (!content && templateElement) { 7796 templateElement.remove(); 7797 return; 7798 } // we use append for html objects to maintain js events 7799 7800 7801 this.setElementContent(templateElement, content); 7802 } 7803 7804 setElementContent(element, content) { 7805 if (element === null) { 7806 return; 7807 } 7808 7809 if (isElement$1(content)) { 7810 content = getElement(content); // content is a DOM node or a jQuery 7811 7812 if (this._config.html) { 7813 if (content.parentNode !== element) { 7814 element.innerHTML = ''; 7815 element.append(content); 7816 } 7817 } else { 7818 element.textContent = content.textContent; 7819 } 7820 7821 return; 7822 } 7823 7824 if (this._config.html) { 7825 if (this._config.sanitize) { 7826 content = sanitizeHtml(content, this._config.allowList, this._config.sanitizeFn); 7827 } 7828 7829 element.innerHTML = content; 7830 } else { 7831 element.textContent = content; 7832 } 7833 } 7834 7835 getTitle() { 7836 const title = this._element.getAttribute('data-bs-original-title') || this._config.title; 7837 7838 return this._resolvePossibleFunction(title); 7839 } 7840 7841 updateAttachment(attachment) { 7842 if (attachment === 'right') { 7843 return 'end'; 7844 } 7845 7846 if (attachment === 'left') { 7847 return 'start'; 7848 } 7849 7850 return attachment; 7851 } // Private 7852 7853 7854 _initializeOnDelegatedTarget(event, context) { 7855 return context || this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 7856 } 7857 7858 _getOffset() { 7859 const { 7860 offset 7861 } = this._config; 7862 7863 if (typeof offset === 'string') { 7864 return offset.split(',').map(val => Number.parseInt(val, 10)); 7865 } 7866 7867 if (typeof offset === 'function') { 7868 return popperData => offset(popperData, this._element); 7869 } 7870 7871 return offset; 7872 } 7873 7874 _resolvePossibleFunction(content) { 7875 return typeof content === 'function' ? content.call(this._element) : content; 7876 } 7877 7878 _getPopperConfig(attachment) { 7879 const defaultBsPopperConfig = { 7880 placement: attachment, 7881 modifiers: [{ 7882 name: 'flip', 7883 options: { 7884 fallbackPlacements: this._config.fallbackPlacements 7885 } 7886 }, { 7887 name: 'offset', 7888 options: { 7889 offset: this._getOffset() 7890 } 7891 }, { 7892 name: 'preventOverflow', 7893 options: {
7894 boundary: this._config.boundary 7895 } 7896 }, { 7897 name: 'arrow', 7898 options: { 7899 element: `.${this.constructor.NAME}-arrow` 7900 } 7901 }, { 7902 name: 'onChange', 7903 enabled: true, 7904 phase: 'afterWrite', 7905 fn: data => this._handlePopperPlacementChange(data) 7906 }], 7907 onFirstUpdate: data => { 7908 if (data.options.placement !== data.placement) { 7909 this._handlePopperPlacementChange(data); 7910 } 7911 } 7912 }; 7913 return { ...defaultBsPopperConfig, 7914 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 7915 }; 7916 } 7917 7918 _addAttachmentClass(attachment) { 7919 this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(attachment)}`); 7920 } 7921 7922 _getAttachment(placement) { 7923 return AttachmentMap[placement.toUpperCase()]; 7924 } 7925 7926 _setListeners() { 7927 const triggers = this._config.trigger.split(' '); 7928 7929 triggers.forEach(trigger => { 7930 if (trigger === 'click') { 7931 EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event)); 7932 } else if (trigger !== TRIGGER_MANUAL) { 7933 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN; 7934 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT; 7935 EventHandler.on(this._element, eventIn, this._config.selector, event => this._enter(event)); 7936 EventHandler.on(this._element, eventOut, this._config.selector, event => this._leave(event)); 7937 } 7938 }); 7939 7940 this._hideModalHandler = () => { 7941 if (this._element) { 7942 this.hide(); 7943 } 7944 }; 7945 7946 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 7947 7948 if (this._config.selector) { 7949 this._config = { ...this._config, 7950 trigger: 'manual', 7951 selector: '' 7952 }; 7953 } else { 7954 this._fixTitle(); 7955 } 7956 } 7957 7958 _fixTitle() { 7959 const title = this._element.getAttribute('title'); 7960 7961 const originalTitleType = typeof this._element.getAttribute('data-bs-original-title'); 7962 7963 if (title || originalTitleType !== 'string') { 7964 this._element.setAttribute('data-bs-original-title', title || ''); 7965 7966 if (title && !this._element.getAttribute('aria-label') && !this._element.textContent) { 7967 this._element.setAttribute('aria-label', title); 7968 } 7969 7970 this._element.setAttribute('title', ''); 7971 } 7972 } 7973 7974 _enter(event, context) { 7975 context = this._initializeOnDelegatedTarget(event, context); 7976 7977 if (event) { 7978 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 7979 } 7980 7981 if (context.getTipElement().classList.contains(CLASS_NAME_SHOW$2) || context._hoverState === HOVER_STATE_SHOW) { 7982 context._hoverState = HOVER_STATE_SHOW; 7983 return; 7984 } 7985 7986 clearTimeout(context._timeout); 7987 context._hoverState = HOVER_STATE_SHOW; 7988 7989 if (!context._config.delay || !context._config.delay.show) { 7990 context.show(); 7991 return; 7992 } 7993 7994 context._timeout = setTimeout(() => { 7995 if (context._hoverState === HOVER_STATE_SHOW) { 7996 context.show(); 7997 } 7998 }, context._config.delay.show); 7999 } 8000 8001 _leave(event, context) { 8002 context = this._initializeOnDelegatedTarget(event, context); 8003 8004 if (event) { 8005 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 8006 } 8007 8008 if (context._isWithActiveTrigger()) { 8009 return; 8010 } 8011 8012 clearTimeout(context._timeout); 8013 context._hoverState = HOVER_STATE_OUT; 8014 8015 if (!context._config.delay || !context._config.delay.hide) { 8016 context.hide(); 8017 return; 8018 } 8019 8020 context._timeout = setTimeout(() => { 8021 if (context._hoverState === HOVER_STATE_OUT) { 8022 context.hide(); 8023 } 8024 }, context._config.delay.hide); 8025 } 8026 8027 _isWithActiveTrigger() { 8028 for (const trigger in this._activeTrigger) { 8029 if (this._activeTrigger[trigger]) { 8030 return true; 8031 } 8032 } 8033 8034 return false;
8035 } 8036 8037 _getConfig(config) { 8038 const dataAttributes = Manipulator.getDataAttributes(this._element); 8039 Object.keys(dataAttributes).forEach(dataAttr => { 8040 if (DISALLOWED_ATTRIBUTES.has(dataAttr)) { 8041 delete dataAttributes[dataAttr]; 8042 } 8043 }); 8044 config = { ...this.constructor.Default, 8045 ...dataAttributes, 8046 ...(typeof config === 'object' && config ? config : {}) 8047 }; 8048 config.container = config.container === false ? document.body : getElement(config.container); 8049 8050 if (typeof config.delay === 'number') { 8051 config.delay = { 8052 show: config.delay, 8053 hide: config.delay 8054 }; 8055 } 8056 8057 if (typeof config.title === 'number') { 8058 config.title = config.title.toString(); 8059 } 8060 8061 if (typeof config.content === 'number') { 8062 config.content = config.content.toString(); 8063 } 8064 8065 typeCheckConfig(NAME$4, config, this.constructor.DefaultType); 8066 8067 if (config.sanitize) { 8068 config.template = sanitizeHtml(config.template, config.allowList, config.sanitizeFn); 8069 } 8070 8071 return config; 8072 } 8073 8074 _getDelegateConfig() { 8075 const config = {}; 8076 8077 for (const key in this._config) { 8078 if (this.constructor.Default[key] !== this._config[key]) { 8079 config[key] = this._config[key]; 8080 } 8081 } // In the future can be replaced with: 8082 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 8083 // `Object.fromEntries(keysWithDifferentValues)` 8084 8085 8086 return config; 8087 } 8088 8089 _cleanTipClass() { 8090 const tip = this.getTipElement(); 8091 const basicClassPrefixRegex = new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`, 'g'); 8092 const tabClass = tip.getAttribute('class').match(basicClassPrefixRegex); 8093 8094 if (tabClass !== null && tabClass.length > 0) { 8095 tabClass.map(token => token.trim()).forEach(tClass => tip.classList.remove(tClass)); 8096 } 8097 } 8098 8099 _getBasicClassPrefix() { 8100 return CLASS_PREFIX$1; 8101 } 8102 8103 _handlePopperPlacementChange(popperData) { 8104 const { 8105 state 8106 } = popperData; 8107 8108 if (!state) { 8109 return; 8110 } 8111 8112 this.tip = state.elements.popper; 8113 8114 this._cleanTipClass(); 8115 8116 this._addAttachmentClass(this._getAttachment(state.placement)); 8117 } 8118 8119 _disposePopper() { 8120 if (this._popper) { 8121 this._popper.destroy(); 8122 8123 this._popper = null; 8124 } 8125 } // Static 8126 8127 8128 static jQueryInterface(config) { 8129 return this.each(function () { 8130 const data = Tooltip.getOrCreateInstance(this, config); 8131 8132 if (typeof config === 'string') { 8133 if (typeof data[config] === 'undefined') { 8134 throw new TypeError(`No method named "${config}"`); 8135 } 8136 8137 data[config](); 8138 } 8139 }); 8140 } 8141 8142 } 8143 /** 8144 * ------------------------------------------------------------------------ 8145 * jQuery 8146 * ------------------------------------------------------------------------ 8147 * add .Tooltip to jQuery only if jQuery is present 8148 */ 8149 8150 8151 defineJQueryPlugin(Tooltip); 8152 8153 /** 8154 * -------------------------------------------------------------------------- 8155 * Bootstrap (v5.1.3): popover.js 8156 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8157 * -------------------------------------------------------------------------- 8158 */ 8159 /** 8160 * ------------------------------------------------------------------------ 8161 * Constants 8162 * ------------------------------------------------------------------------ 8163 */ 8164 8165 const NAME$3 = 'popover'; 8166 const DATA_KEY$3 = 'bs.popover'; 8167 const EVENT_KEY$3 = `.${DATA_KEY$3}`; 8168 const CLASS_PREFIX = 'bs-popover'; 8169 const Default$2 = { ...Tooltip.Default, 8170 placement: 'right', 8171 offset: [0, 8], 8172 trigger: 'click', 8173 content: '', 8174 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>' 8175 }; 8176 const DefaultType$2 = { ...Tooltip.DefaultType, 8177 content: '(string|element|function)' 8178 }; 8179 const Event$1 = { 8180 HIDE: `hide${EVENT_KEY$3}`, 8181 HIDDEN: `hidden${EVENT_KEY$3}`, 8182 SHOW: `show${EVENT_KEY$3}`, 8183 SHOWN: `shown${EVENT_KEY$3}`, 8184 INSERTED: `inserted${EVENT_KEY$3}`, 8185 CLICK: `click${EVENT_KEY$3}`, 8186 FOCUSIN: `focusin${EVENT_KEY$3}`, 8187 FOCUSOUT: `focusout${EVENT_KEY$3}`, 8188 MOUSEENTER: `mouseenter${EVENT_KEY$3}`, 8189 MOUSELEAVE: `mouseleave${EVENT_KEY$3}` 8190 }; 8191 const SELECTOR_TITLE = '.popover-header';
8192 const SELECTOR_CONTENT = '.popover-body'; 8193 /** 8194 * ------------------------------------------------------------------------ 8195 * Class Definition 8196 * ------------------------------------------------------------------------ 8197 */ 8198 8199 class Popover extends Tooltip { 8200 // Getters 8201 static get Default() { 8202 return Default$2; 8203 } 8204 8205 static get NAME() { 8206 return NAME$3; 8207 } 8208 8209 static get Event() { 8210 return Event$1; 8211 } 8212 8213 static get DefaultType() { 8214 return DefaultType$2; 8215 } // Overrides 8216 8217 8218 isWithContent() { 8219 return this.getTitle() || this._getContent(); 8220 } 8221 8222 setContent(tip) { 8223 this._sanitizeAndSetContent(tip, this.getTitle(), SELECTOR_TITLE); 8224 8225 this._sanitizeAndSetContent(tip, this._getContent(), SELECTOR_CONTENT); 8226 } // Private 8227 8228 8229 _getContent() { 8230 return this._resolvePossibleFunction(this._config.content); 8231 } 8232 8233 _getBasicClassPrefix() { 8234 return CLASS_PREFIX; 8235 } // Static 8236 8237 8238 static jQueryInterface(config) { 8239 return this.each(function () { 8240 const data = Popover.getOrCreateInstance(this, config); 8241 8242 if (typeof config === 'string') { 8243 if (typeof data[config] === 'undefined') { 8244 throw new TypeError(`No method named "${config}"`); 8245 } 8246 8247 data[config](); 8248 } 8249 }); 8250 } 8251 8252 } 8253 /** 8254 * ------------------------------------------------------------------------ 8255 * jQuery 8256 * ------------------------------------------------------------------------ 8257 * add .Popover to jQuery only if jQuery is present 8258 */ 8259 8260 8261 defineJQueryPlugin(Popover); 8262 8263 /** 8264 * -------------------------------------------------------------------------- 8265 * Bootstrap (v5.1.3): scrollspy.js 8266 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8267 * -------------------------------------------------------------------------- 8268 */ 8269 /** 8270 * ------------------------------------------------------------------------ 8271 * Constants 8272 * ------------------------------------------------------------------------ 8273 */ 8274 8275 const NAME$2 = 'scrollspy'; 8276 const DATA_KEY$2 = 'bs.scrollspy'; 8277 const EVENT_KEY$2 = `.${DATA_KEY$2}`; 8278 const DATA_API_KEY$1 = '.data-api'; 8279 const Default$1 = { 8280 offset: 10, 8281 method: 'auto', 8282 target: '' 8283 }; 8284 const DefaultType$1 = { 8285 offset: 'number', 8286 method: 'string', 8287 target: '(string|element)' 8288 }; 8289 const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 8290 const EVENT_SCROLL = `scroll${EVENT_KEY$2}`; 8291 const EVENT_LOAD_DATA_API = `load${EVENT_KEY$2}${DATA_API_KEY$1}`; 8292 const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 8293 const CLASS_NAME_ACTIVE$1 = 'active'; 8294 const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 8295 const SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group'; 8296 const SELECTOR_NAV_LINKS = '.nav-link'; 8297 const SELECTOR_NAV_ITEMS = '.nav-item'; 8298 const SELECTOR_LIST_ITEMS = '.list-group-item'; 8299 const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}, .${CLASS_NAME_DROPDOWN_ITEM}`; 8300 const SELECTOR_DROPDOWN$1 = '.dropdown'; 8301 const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 8302 const METHOD_OFFSET = 'offset'; 8303 const METHOD_POSITION = 'position'; 8304 /** 8305 * ------------------------------------------------------------------------ 8306 * Class Definition 8307 * ------------------------------------------------------------------------ 8308 */ 8309 8310 class ScrollSpy extends BaseComponent { 8311 constructor(element, config) { 8312 super(element); 8313 this._scrollElement = this._element.tagName === 'BODY' ? window : this._element; 8314 this._config = this._getConfig(config); 8315 this._offsets = []; 8316 this._targets = []; 8317 this._activeTarget = null; 8318 this._scrollHeight = 0; 8319 EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process()); 8320 this.refresh(); 8321 8322 this._process(); 8323 } // Getters 8324 8325 8326 static get Default() { 8327 return Default$1; 8328 } 8329 8330 static get NAME() { 8331 return NAME$2; 8332 } // Public 8333 8334 8335 refresh() { 8336 const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION; 8337 const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; 8338 const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0; 8339 this._offsets = []; 8340 this._targets = []; 8341 this._scrollHeight = this._getScrollHeight(); 8342 const targets = SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target); 8343 targets.map(element => { 8344 const targetSelector = getSelectorFromElement(element); 8345 const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null; 8346 8347 if (target) { 8348 const targetBCR = target.getBoundingClientRect(); 8349 8350 if (targetBCR.width || targetBCR.height) { 8351 return [Manipulator[offsetMethod](target).top + offsetBase, targetSelector]; 8352 } 8353 } 8354 8355 return null; 8356 }).filter(item => item).sort((a, b) =>
8356 a[0] - b[0]).forEach(item => { 8357 this._offsets.push(item[0]); 8358 8359 this._targets.push(item[1]); 8360 }); 8361 } 8362 8363 dispose() { 8364 EventHandler.off(this._scrollElement, EVENT_KEY$2); 8365 super.dispose(); 8366 } // Private 8367 8368 8369 _getConfig(config) { 8370 config = { ...Default$1, 8371 ...Manipulator.getDataAttributes(this._element), 8372 ...(typeof config === 'object' && config ? config : {}) 8373 }; 8374 config.target = getElement(config.target) || document.documentElement; 8375 typeCheckConfig(NAME$2, config, DefaultType$1); 8376 return config; 8377 } 8378 8379 _getScrollTop() { 8380 return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; 8381 } 8382 8383 _getScrollHeight() { 8384 return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); 8385 } 8386 8387 _getOffsetHeight() { 8388 return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; 8389 } 8390 8391 _process() { 8392 const scrollTop = this._getScrollTop() + this._config.offset; 8393 8394 const scrollHeight = this._getScrollHeight(); 8395 8396 const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); 8397 8398 if (this._scrollHeight !== scrollHeight) { 8399 this.refresh(); 8400 } 8401 8402 if (scrollTop >= maxScroll) { 8403 const target = this._targets[this._targets.length - 1]; 8404 8405 if (this._activeTarget !== target) { 8406 this._activate(target); 8407 } 8408 8409 return; 8410 } 8411 8412 if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { 8413 this._activeTarget = null; 8414 8415 this._clear(); 8416 8417 return; 8418 } 8419 8420 for (let i = this._offsets.length; i--;) { 8421 const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); 8422 8423 if (isActiveTarget) { 8424 this._activate(this._targets[i]); 8425 } 8426 } 8427 } 8428 8429 _activate(target) { 8430 this._activeTarget = target; 8431 8432 this._clear(); 8433 8434 const queries = SELECTOR_LINK_ITEMS.split(',').map(selector => `${selector}[data-bs-target="${target}"],${selector}[href="${target}"]`); 8435 const link = SelectorEngine.findOne(queries.join(','), this._config.target); 8436 link.classList.add(CLASS_NAME_ACTIVE$1); 8437 8438 if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 8439 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, link.closest(SELECTOR_DROPDOWN$1)).classList.add(CLASS_NAME_ACTIVE$1); 8440 } else { 8441 SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP$1).forEach(listGroup => { 8442 // Set triggered links parents as active
8443 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 8444 SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); // Handle special case when .nav-link is inside .nav-item 8445 8446 SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS).forEach(navItem => { 8447 SelectorEngine.children(navItem, SELECTOR_NAV_LINKS).forEach(item => item.classList.add(CLASS_NAME_ACTIVE$1)); 8448 }); 8449 }); 8450 } 8451 8452 EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, { 8453 relatedTarget: target 8454 }); 8455 } 8456 8457 _clear() { 8458 SelectorEngine.find(SELECTOR_LINK_ITEMS, this._config.target).filter(node => node.classList.contains(CLASS_NAME_ACTIVE$1)).forEach(node => node.classList.remove(CLASS_NAME_ACTIVE$1)); 8459 } // Static 8460 8461 8462 static jQueryInterface(config) { 8463 return this.each(function () { 8464 const data = ScrollSpy.getOrCreateInstance(this, config); 8465 8466 if (typeof config !== 'string') { 8467 return; 8468 } 8469 8470 if (typeof data[config] === 'undefined') { 8471 throw new TypeError(`No method named "${config}"`); 8472 } 8473 8474 data[config](); 8475 }); 8476 } 8477 8478 } 8479 /** 8480 * ------------------------------------------------------------------------ 8481 * Data Api implementation 8482 * ------------------------------------------------------------------------ 8483 */ 8484 8485 8486 EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 8487 SelectorEngine.find(SELECTOR_DATA_SPY).forEach(spy => new ScrollSpy(spy)); 8488 }); 8489 /** 8490 * ------------------------------------------------------------------------ 8491 * jQuery 8492 * ------------------------------------------------------------------------ 8493 * add .ScrollSpy to jQuery only if jQuery is present 8494 */ 8495 8496 defineJQueryPlugin(ScrollSpy); 8497 8498 /** 8499 * -------------------------------------------------------------------------- 8500 * Bootstrap (v5.1.3): tab.js 8501 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8502 * -------------------------------------------------------------------------- 8503 */ 8504 /** 8505 * ------------------------------------------------------------------------ 8506 * Constants 8507 * ------------------------------------------------------------------------ 8508 */ 8509 8510 const NAME$1 = 'tab'; 8511 const DATA_KEY$1 = 'bs.tab'; 8512 const EVENT_KEY$1 = `.${DATA_KEY$1}`; 8513 const DATA_API_KEY = '.data-api'; 8514 const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 8515 const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 8516 const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 8517 const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 8518 const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}${DATA_API_KEY}`; 8519 const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'; 8520 const CLASS_NAME_ACTIVE = 'active'; 8521 const CLASS_NAME_FADE$1 = 'fade';
8522 const CLASS_NAME_SHOW$1 = 'show'; 8523 const SELECTOR_DROPDOWN = '.dropdown'; 8524 const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 8525 const SELECTOR_ACTIVE = '.active'; 8526 const SELECTOR_ACTIVE_UL = ':scope > li > .active'; 8527 const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; 8528 const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 8529 const SELECTOR_DROPDOWN_ACTIVE_CHILD = ':scope > .dropdown-menu .active'; 8530 /** 8531 * ------------------------------------------------------------------------ 8532 * Class Definition 8533 * ------------------------------------------------------------------------ 8534 */ 8535 8536 class Tab extends BaseComponent { 8537 // Getters 8538 static get NAME() { 8539 return NAME$1; 8540 } // Public 8541 8542 8543 show() { 8544 if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && this._element.classList.contains(CLASS_NAME_ACTIVE)) { 8545 return; 8546 } 8547 8548 let previous; 8549 const target = getElementFromSelector(this._element); 8550 8551 const listElement = this._element.closest(SELECTOR_NAV_LIST_GROUP); 8552 8553 if (listElement) { 8554 const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE; 8555 previous = SelectorEngine.find(itemSelector, listElement); 8556 previous = previous[previous.length - 1]; 8557 } 8558 8559 const hideEvent = previous ? EventHandler.trigger(previous, EVENT_HIDE$1, { 8560 relatedTarget: this._element 8561 }) : null; 8562 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$1, { 8563 relatedTarget: previous 8564 }); 8565 8566 if (showEvent.defaultPrevented || hideEvent !== null && hideEvent.defaultPrevented) { 8567 return; 8568 } 8569 8570 this._activate(this._element, listElement); 8571 8572 const complete = () => { 8573 EventHandler.trigger(previous, EVENT_HIDDEN$1, { 8574 relatedTarget: this._element 8575 }); 8576 EventHandler.trigger(this._element, EVENT_SHOWN$1, { 8577 relatedTarget: previous 8578 }); 8579 }; 8580 8581 if (target) { 8582 this._activate(target, target.parentNode, complete); 8583 } else { 8584 complete(); 8585 } 8586 } // Private 8587 8588 8589 _activate(element, container, callback) { 8590 const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? SelectorEngine.find(SELECTOR_ACTIVE_UL, container) : SelectorEngine.children(container, SELECTOR_ACTIVE); 8591 const active = activeElements[0]; 8592 const isTransitioning = callback && active && active.classList.contains(CLASS_NAME_FADE$1); 8593 8594 const complete = () => this._transitionComplete(element, active, callback); 8595 8596 if (active && isTransitioning) { 8597 active.classList.remove(CLASS_NAME_SHOW$1); 8598 8599 this._queueCallback(complete, element, true); 8600 } else { 8601 complete(); 8602 } 8603 } 8604 8605 _transitionComplete(element, active, callback) { 8606 if (active) { 8607 active.classList.remove(CLASS_NAME_ACTIVE);
8608 const dropdownChild = SelectorEngine.findOne(SELECTOR_DROPDOWN_ACTIVE_CHILD, active.parentNode); 8609 8610 if (dropdownChild) { 8611 dropdownChild.classList.remove(CLASS_NAME_ACTIVE); 8612 } 8613 8614 if (active.getAttribute('role') === 'tab') { 8615 active.setAttribute('aria-selected', false); 8616 } 8617 } 8618 8619 element.classList.add(CLASS_NAME_ACTIVE); 8620 8621 if (element.getAttribute('role') === 'tab') { 8622 element.setAttribute('aria-selected', true); 8623 } 8624 8625 reflow(element); 8626 8627 if (element.classList.contains(CLASS_NAME_FADE$1)) { 8628 element.classList.add(CLASS_NAME_SHOW$1); 8629 } 8630 8631 let parent = element.parentNode; 8632 8633 if (parent && parent.nodeName === 'LI') { 8634 parent = parent.parentNode; 8635 } 8636 8637 if (parent && parent.classList.contains(CLASS_NAME_DROPDOWN_MENU)) { 8638 const dropdownElement = element.closest(SELECTOR_DROPDOWN); 8639 8640 if (dropdownElement) { 8641 SelectorEngine.find(SELECTOR_DROPDOWN_TOGGLE, dropdownElement).forEach(dropdown => dropdown.classList.add(CLASS_NAME_ACTIVE)); 8642 } 8643 8644 element.setAttribute('aria-expanded', true); 8645 } 8646 8647 if (callback) { 8648 callback(); 8649 } 8650 } // Static 8651 8652 8653 static jQueryInterface(config) { 8654 return this.each(function () { 8655 const data = Tab.getOrCreateInstance(this); 8656 8657 if (typeof config === 'string') { 8658 if (typeof data[config] === 'undefined') { 8659 throw new TypeError(`No method named "${config}"`); 8660 } 8661 8662 data[config](); 8663 } 8664 }); 8665 } 8666 8667 } 8668 /** 8669 * ------------------------------------------------------------------------ 8670 * Data Api implementation 8671 * ------------------------------------------------------------------------ 8672 */ 8673 8674 8675 EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 8676 if (['A', 'AREA'].includes(this.tagName)) { 8677 event.preventDefault(); 8678 } 8679 8680 if (isDisabled(this)) { 8681 return; 8682 } 8683 8684 const data = Tab.getOrCreateInstance(this); 8685 data.show(); 8686 }); 8687 /** 8688 * ------------------------------------------------------------------------ 8689 * jQuery 8690 * ------------------------------------------------------------------------ 8691 * add .Tab to jQuery only if jQuery is present 8692 */ 8693 8694 defineJQueryPlugin(Tab); 8695 8696 /** 8697 * -------------------------------------------------------------------------- 8698 * Bootstrap (v5.1.3): toast.js 8699 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8700 * -------------------------------------------------------------------------- 8701 */ 8702 /** 8703 * ------------------------------------------------------------------------ 8704 * Constants 8705 * ------------------------------------------------------------------------ 8706 */ 8707 8708 const NAME = 'toast'; 8709 const DATA_KEY = 'bs.toast'; 8710 const EVENT_KEY = `.${DATA_KEY}`; 8711 const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 8712 const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 8713 const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 8714 const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 8715 const EVENT_HIDE = `hide${EVENT_KEY}`; 8716 const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 8717 const EVENT_SHOW = `show${EVENT_KEY}`; 8718 const EVENT_SHOWN = `shown${EVENT_KEY}`; 8719 const CLASS_NAME_FADE = 'fade';
vendor: 4,599 bytes, lines 8720-8905
8720 const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 8721 8722 const CLASS_NAME_SHOW = 'show'; 8723 const CLASS_NAME_SHOWING = 'showing'; 8724 const DefaultType = { 8725 animation: 'boolean', 8726 autohide: 'boolean', 8727 delay: 'number' 8728 }; 8729 const Default = { 8730 animation: true, 8731 autohide: true, 8732 delay: 5000 8733 }; 8734 /** 8735 * ------------------------------------------------------------------------ 8736 * Class Definition 8737 * ------------------------------------------------------------------------ 8738 */ 8739 8740 class Toast extends BaseComponent { 8741 constructor(element, config) { 8742 super(element); 8743 this._config = this._getConfig(config); 8744 this._timeout = null; 8745 this._hasMouseInteraction = false; 8746 this._hasKeyboardInteraction = false; 8747 8748 this._setListeners(); 8749 } // Getters 8750 8751 8752 static get DefaultType() { 8753 return DefaultType; 8754 } 8755 8756 static get Default() { 8757 return Default; 8758 } 8759 8760 static get NAME() { 8761 return NAME; 8762 } // Public 8763 8764 8765 show() { 8766 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 8767 8768 if (showEvent.defaultPrevented) { 8769 return; 8770 } 8771 8772 this._clearTimeout(); 8773 8774 if (this._config.animation) { 8775 this._element.classList.add(CLASS_NAME_FADE); 8776 } 8777 8778 const complete = () => { 8779 this._element.classList.remove(CLASS_NAME_SHOWING); 8780 8781 EventHandler.trigger(this._element, EVENT_SHOWN); 8782 8783 this._maybeScheduleHide(); 8784 }; 8785 8786 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 8787 8788 8789 reflow(this._element); 8790 8791 this._element.classList.add(CLASS_NAME_SHOW); 8792 8793 this._element.classList.add(CLASS_NAME_SHOWING); 8794 8795 this._queueCallback(complete, this._element, this._config.animation); 8796 } 8797 8798 hide() { 8799 if (!this._element.classList.contains(CLASS_NAME_SHOW)) { 8800 return; 8801 } 8802 8803 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 8804 8805 if (hideEvent.defaultPrevented) { 8806 return; 8807 } 8808 8809 const complete = () => { 8810 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 8811 8812 8813 this._element.classList.remove(CLASS_NAME_SHOWING); 8814 8815 this._element.classList.remove(CLASS_NAME_SHOW); 8816 8817 EventHandler.trigger(this._element, EVENT_HIDDEN); 8818 }; 8819 8820 this._element.classList.add(CLASS_NAME_SHOWING); 8821 8822 this._queueCallback(complete, this._element, this._config.animation); 8823 } 8824 8825 dispose() { 8826 this._clearTimeout(); 8827 8828 if (this._element.classList.contains(CLASS_NAME_SHOW)) { 8829 this._element.classList.remove(CLASS_NAME_SHOW); 8830 } 8831 8832 super.dispose(); 8833 } // Private 8834 8835 8836 _getConfig(config) { 8837 config = { ...Default, 8838 ...Manipulator.getDataAttributes(this._element), 8839 ...(typeof config === 'object' && config ? config : {}) 8840 }; 8841 typeCheckConfig(NAME, config, this.constructor.DefaultType); 8842 return config; 8843 } 8844 8845 _maybeScheduleHide() { 8846 if (!this._config.autohide) { 8847 return; 8848 } 8849 8850 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 8851 return; 8852 } 8853 8854 this._timeout = setTimeout(() => { 8855 this.hide(); 8856 }, this._config.delay); 8857 } 8858 8859 _onInteraction(event, isInteracting) { 8860 switch (event.type) { 8861 case 'mouseover': 8862 case 'mouseout': 8863 this._hasMouseInteraction = isInteracting; 8864 break; 8865 8866 case 'focusin': 8867 case 'focusout': 8868 this._hasKeyboardInteraction = isInteracting; 8869 break; 8870 } 8871 8872 if (isInteracting) { 8873 this._clearTimeout(); 8874 8875 return; 8876 } 8877 8878 const nextElement = event.relatedTarget; 8879 8880 if (this._element === nextElement || this._element.contains(nextElement)) { 8881 return; 8882 } 8883 8884 this._maybeScheduleHide(); 8885 } 8886 8887 _setListeners() { 8888 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 8889 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 8890 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 8891 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 8892 } 8893 8894 _clearTimeout() { 8895 clearTimeout(this._timeout); 8896 this._timeout = null; 8897 } // Static 8898 8899 8900 static jQueryInterface(config) { 8901 return this.each(function () { 8902 const data = Toast.getOrCreateInstance(this, config); 8903 8904 if (typeof config === 'string') { 8905 if (typeof data[config] === 'undefined') {
8906 throw new TypeError(`No method named "${config}"`); 8907 } 8908 8909 data[config](this); 8910 } 8911 }); 8912 } 8913 8914 } 8915 8916 enableDismissTrigger(Toast); 8917 /** 8918 * ------------------------------------------------------------------------ 8919 * jQuery 8920 * ------------------------------------------------------------------------ 8921 * add .Toast to jQuery only if jQuery is present 8922 */ 8923 8924 defineJQueryPlugin(Toast); 8925 8926 /** 8927 * -------------------------------------------------------------------------- 8928 * Bootstrap (v5.1.3): index.umd.js 8929 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 8930 * -------------------------------------------------------------------------- 8931 */ 8932 const index_umd = { 8933 Alert, 8934 Button, 8935 Carousel, 8936 Collapse, 8937 Dropdown, 8938 Modal, 8939 Offcanvas, 8940 Popover, 8941 ScrollSpy, 8942 Tab, 8943 Toast, 8944 Tooltip 8945 }; 8946 8947 return index_umd; 8948 8949})); 8950 8951; 8952!function r(i,o,a){function s(t,e){if(!o[t]){if(!i[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(u)return u(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}n=o[t]={exports:{}},i[t][0].call(n.exports,function(e){return s(i[t][1][e]||e)},n,n.exports,r,i,o,a)}return o[t].exports}for(var u="function"==typeof require&&require,e=0;e<a.length;e++)s(a[e]);return s}({1:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){(0,r.default)(".accordeon-title").click(function(){(0,r.default)(this).hasClass("active")?((0,r.default)(this).removeClass("active"),(0,r.default)(this).next(".accordeon-content").slideUp(300)):((0,r.default)(".accordeon-title").removeClass("active"),(0,r.default)(this).addClass("active"),(0,r.default)(".accordeon-content").slideUp(300),(0,r.default)(this).next().slideDown(300))})}}},{jquery:8}],2:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){(0,r.default)(".tab-content #views-row--1").addClass("active"),(0,r.default)(".menu--satellite-events li.first").addClass("active"),(0,r.default)(".menu--satellite-events li a").attr("data-toggle","tab"),(0,r.default)(".tab-content .tab-pane").each(function(){var e=(0,r.default)(this).find("article h2 span").text().toLowerCase().replace(":","").split(" ").slice(0,3).join("-");(0,r.default)(this).attr("id",e)}),(0,r.default)(".menu--satellite-events li").each(function(){var e=(0,r.default)(this).find("a").text().toLowerCase().replace(":","").split(" ").slice(0,3).join("-");(0,r.default)(this).find("a").attr("href","#"+e)}),(0,r.default)(".pills-pink ul li a").click(function(){(0,r.default)("html,body").animate({scrollTop:(0,r.default)(".main-container").offset().top},"slow")})}}},{jquery:8}],3:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){(0,r.default)(".keynotes-sessions .see-part a").each(function(){(0,r.default)(this).on("click",function(e){e.preventDefault();var e=(0,r.default)(this).closest("section").attr("id"),e=(0,r.default)(".keynotes-sessions div").find("section#"+e),t=(0,r.default)(e).find(".see-part"),e=(0,r.default)(e).find("div .bottom-part");(0,r.default)(t).addClass("hide",{duration:500}),(0,r.default)(e).removeClass("hide",{duration:500})})})}}},{jquery:8}],4:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=o(e("jquery")),i=o(e("./iframeResizer.min"));function o(e){return e&&e.__esModule?e:{default:e}}var a={init:function(){(0,r.default)("body").hasClass("page-node-type-programme")&&(a.programmeIframe("https://interactive-programme.europa-organisation.com/icpp2023/programme_cs_with_glance.php"),setTimeout(function(){(0,i.default)({log:!1,checkOrigin:!1,autoResize:!1,minHeight:2700,warningTimeout:0,initCallback:function(t){(0,r.default)(window).scroll(function(){var e=(0,r.default)(window).scrollTop();t.iFrameResizer.sendMessage('{"top": '+e+"}")})}},"#iframeProgramme")},100))},programmeIframe:function(e){var t=new URLSearchParams(window.location.search).toString(),t=(t&&(e+="?"+t),document.getElementById("iframeProgramme").src=e,document.getElementsByClassName("iframe-wrapper")[0]);document.getElementsByClassName("downloads")[0].append(t)}};n.default=a},{"./iframeResizer.min":5,jquery:8}],5:[function(m,e,y){"use strict";function c(e){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function x(e,t,n){"addEventListener"in window?e.addEventListener(t,n,!1):"attachEvent"in window&&e.attachEvent("on"+t,n)}function W(e,t,n){"removeEventListener"in window?e.removeEventListener(t,n,!1):"detachEvent"in window&&e.detachEvent("on"+t,n)}function v(e){return R+"["+(t="Host page: "+(e=e),t=window.top!==window.self?window.parentIFrame&&window.parentIFrame.getId?window.parentIFrame.getId()+": "+e:"Nested host page: "+e:t)+"]";var t}function n(e){return I[e]?I[e].log:p}function w(e,t){r("log",e,t,n(e))}function T(e,t){r("info",e,t,n(e))}function C(e,t){r("warn",e,t,!0)}function r(e,t,n,r){!0===r&&"object"==c(window.console)&&console[e](v(t),n)}function b(e){function t(){n("Height"),n("Width"),q(function(){N(g),j(m),u("resizedCallback",g)},g,"init")}function n(e){var t=Number(I[m]["max"+e]),n=Number(I[m]["min"+e]),e=e.toLowerCase(),r=Number(g[e]);w(m,"Checking "+e+" is in range "+n+"-"+t),r<n&&(r=n,w(m,"Set "+e+" to min value")),t<r&&(r=t,w(m,"Set "+e+" to max value")),g[e]=""+r}function r(e){return h.substr(h.indexOf(":")+H+e)}function i(n,r){L(function(){var e,t;M("Send Page Info","pageInfo:"+(e=document.body.getBoundingClientRect(),t=g.iframe.getBoundingClientRect(),JSON.stringify({iframeHeight:t.height,iframeWidth:t.width,clientHeight:Math.max(document.documentElement.clientHeight,window.innerHeight||0),clientWidth:Math.max(document.documentElement.clientWidth,window.innerWidth||0),offsetTop:parseInt(t.top-e.top,10),offsetLeft:parseInt(t.left-e.left,10),scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset})),n,r)},32)}function o(e){e=e.getBoundingClientRect();return S(m),{x:Math.floor(Number(e.left)+Number(F.x)),y:Math.floor(Number(e.top)+Number(F.y))}}function a(e){var t=e?o(g.iframe):{x:0,y:0},n={x:Number(g.width)+t.x,y:Number(g.height)+t.y};w(m,"Reposition requested from iFrame (offset x:"+t.x+" y:"+t.y+")"),window.top!==window.self?window.parentIFrame?window.parentIFrame["scrollTo"+(e?"Offset":"")](n.x,n.y):C(m,"Unable to scroll to requested position, window.parentIFrame not found"):(F=n,s(),w(m,"--"))}function s(){!1!==u("scrollCallback",F)?j(m):A()}function u(e,t){return k(m,e,t)}var l,c,f,d,p,h=e.data,g={},m=null;if("[iFrameResizerChild]Ready"===h)for(var y in I)M("iFrame requested init",O(y),document.getElementById(y),y);else if(R===(""+h).substr(0,P)&&h.substr(P).split(":")[0]in I){if(p=h.substr(P).split(":"),g={iframe:I[p[0]].iframe,id:p[0],height:p[1],width:p[2],type:p[3]},m=g.id,I[m].loaded=!0,(p=g.type in{true:1,false:1,undefined:1})&&w(m,"Ignoring init message from meta parent page"),!p&&(d=!0,I[p=m]||(d=!1,C(g.type+" No settings for "+p+". Message was: "+h)),d)&&(w(m,"Received: "+h),p=!0,null===g.iframe&&(C(m,"IFrame ("+g.id+") not found"),p=!1),p&&function(){var r=e.origin,i=I[m].checkOrigin;if(i&&""+r!="null"&&!function(){if(i.constructor!==Array)return e=I[m].remoteHost,w(m,"Checking connection is from: "+e),r===e;var e,t=0,n=!1;for(w(m,"Checking connection is from allowed list of origins: "+i);t<i.length;t++)if(i[t]===r){n=!0;break}return n}())throw new Error("Unexpected message received from: "+r+" for "+g.iframe.id+". Message was: "+e.data+". This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.");return 1}())){switch(I[m].firstRun&&(I[m].firstRun=!1),g.type){case"close"
8952:E(g.iframe);break;case"message":f=r(6),w(m,"MessageCallback passed: {iframe: "+g.iframe.id+", message: "+f+"}"),u("messageCallback",{iframe:g.iframe,message:JSON.parse(f)}),w(m,"--");break;case"scrollTo":a(!1);break;case"scrollToOffset":a(!0);break;case"pageInfo":i(I[m].iframe,m),c=m,v("Add ",x),I[c].stopPageInfo=b;break;case"pageInfoStop":I[m]&&I[m].stopPageInfo&&(I[m].stopPageInfo(),delete I[m].stopPageInfo);break;case"inPageLink":f=(f=r(9)).split("#")[1]||"",l=decodeURIComponent(f),(l=document.getElementById(l)||document.getElementsByName(l)[0])?(l=o(l),w(m,"Moving to in page link (#"+f+") at x: "+l.x+" y: "+l.y),F={x:l.x,y:l.y},s(),w(m,"--")):window.top!==window.self?window.parentIFrame?window.parentIFrame.moveToAnchor(f):w(m,"In page link #"+f+" not found and window.parentIFrame not found"):w(m,"In page link #"+f+" not found");break;case"reset":D(g);break;case"init":t(),u("initCallback",g.iframe);break;default:t()}function v(t,n){function r(){I[c]?i(I[c].iframe,c):b()}["scroll","resize"].forEach(function(e){w(c,t+e+" listener for sendPageInfo"),n(window,e,r)})}function b(){v("Remove ",W)}}}else T(m,"Ignored: "+h)}function k(e,t,n){var r=null,i=null;if(I[e]){if("function"!=typeof(r=I[e][t]))throw new TypeError(t+" on iFrame["+e+"] is not a function");i=r(n)}return i}function E(e){var t=e.id;w(t,"Removing iFrame: "+t),e.parentNode&&e.parentNode.removeChild(e),k(t,"closedCallback",t),w(t,"--"),delete I[t]}function S(e){null===F&&w(e,"Get page position: "+(F={x:window.pageXOffset!==f?window.pageXOffset:document.documentElement.scrollLeft,y:window.pageYOffset!==f?window.pageYOffset:document.documentElement.scrollTop}).x+","+F.y)}function j(e){null!==F&&(window.scrollTo(F.x,F.y),w(e,"Set page position: "+F.x+","+F.y),A())}function A(){F=null}function D(e){w(e.id,"Size reset requested by "+("init"===e.type?"host page":"iFrame")),S(e.id),q(function(){N(e),M("reset","reset",e.iframe,e.id)},e,"reset")}function N(i){function n(e){{var t;!u&&"0"===i[e]&&(u=!0,w(o,"Hidden iFrame detected, creating visibility listener"),e=window.MutationObserver||window.WebKitMutationObserver)&&(t=document.querySelector("body"),new e(r).observe(t,{attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0}))}function n(){for(var e in I)!function(t){function e(e){return"0px"===I[t].iframe.style[e]}null!==I[t].iframe.offsetParent&&(e("height")||e("width"))&&M("Visibility change","resize",I[t].iframe,t)}(e)}function r(e){w("window","Mutation observed: "+e[0].target+" "+e[0].type),L(n,16)}}function e(e){var t;t=e,i.iframe.style[t]=i[t]+"px",w(i.id,"IFrame ("+o+") "+t+" set to "+i[t]+"px"),n(e)}var o=i.iframe.id;I[o]&&(I[o].sizeHeight&&e("height"),I[o].sizeWidth)&&e("width")}function q(e,t,n){n!==t.type&&l?(w(t.id,"Requesting animation frame"),l(e)):e()}function M(e,t,n,r,i){var o,a=!1;r=r||n.id,I[r]&&(n&&"contentWindow"in n&&null!==n.contentWindow?(o=I[r].targetOrigin,w(r,"["+e+"] Sending msg to iframe["+r+"] ("+t+") targetOrigin: "+o),n.contentWindow.postMessage(R+t,o)):C(r,"["+e+"] IFrame("+r+") not found"),i)&&I[r].warningTimeout&&(I[r].msgTimeout=setTimeout(function(){!I[r]||I[r].loaded||a||(a=!0,C(r,"IFrame has not responded within "+I[r].warningTimeout/1e3+" seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ingored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning."))},I[r].warningTimeout))}function O(e){return e+":"+I[e].bodyMarginV1+":"+I[e].sizeWidth+":"+I[e].log+":"+I[e].interval+":"+I[e].enablePublicMethods+":"+I[e].autoResize+":"+I[e].bodyMargin+":"+I[e].heightCalculationMethod+":"+I[e].bodyBackground+":"+I[e].bodyPadding+":"+I[e].tolerance+":"+I[e].inPageLinks+":"+I[e].resizeFrom+":"+I[e].widthCalculationMethod}function o(n,e){t=n.id,""===t&&(n.id=(o=e&&e.id||g.id+d++,null!==document.getElementById(o)&&(o+=d++),t=o),p=(e||{}).log,w(t,"Added missing iframe ID: "+t+" ("+n.src+")"));var t,r,i=t;if(i in I&&"iFrameResizer"in n)C(i,"Ignored iFrame, already setup.");else{var o=e;if(o=o||{},I[i]={firstRun:!0,iframe:n,remoteHost:n.src.split("/").slice(0,3).join("/")},"object"!=c(o))throw new TypeError("Options is not an object");var a,s=o;for(a in g)g.hasOwnProperty(a)&&(I[i][a]=(s.hasOwnProperty(a)?s:g)[a]);switch(I[i].targetOrigin=!0!==I[i].checkOrigin||""===(o=I[i].remoteHost)||"file://"===o?"*":o,w(i,"IFrame scrolling "+(I[i].scrolling?"enabled":"disabled")+" for "+i),n.style.overflow=!1===I[i].scrolling?"hidden":"auto",I[i].scrolling){case!0:n.scrolling="yes";break;case!1:n.scrolling="no";break;default:n.scrolling=I[i].scrolling}l("Height"),l("Width"),u("maxHeight"),u("minHeight"),u("maxWidth"),u("minWidth"),"number"!=typeof I[i].bodyMargin&&"0"!==I[i].bodyMargin||(I[i].bodyMarginV1=I[i].bodyMargin,I[i].bodyMargin=I[i].bodyMargin+"px"),r=O(i),x(n,"load",function(){var e,t;M("iFrame.onload",r,n,f,!0),e=I[i].firstRun,t=I[i].heightCalculationMethod in z,!e&&t&&D({iframe:n,height:0,width:0,type:"init"})}),M("init",r,n,f,!0),Function.prototype.bind&&(I[i].iframe.iFrameResizer={close:E.bind(null,I[i].iframe),resize:M.bind(null,"Window resize","resize",I[i].iframe),moveToAnchor:function(e){M("Move to anchor","moveToAnchor:"+e,I[i].iframe,i)},sendMessage:function(e){M("Send Message","message:"+(e=JSON.stringify(e)),I[i].iframe,i)}})}function u(e){1/0!==I[i][e]&&0!==I[i][e]&&(n.style[e]=I[i][e]+"px",w(i,"Set "+e+" = "+I[i][e]+"px"))}function l(e){if(I[i]["min"+e]>I[i]["max"+e])throw new Error("Value for min"+e+" can not be greater than max"+e)}}
8952function L(e,t){null===h&&(h=setTimeout(function(){h=null,e()},t))}function a(e){w("window","Trigger event: "+e),L(function(){t("Window "+e,"resize")},16)}function s(){"hidden"!==document.visibilityState&&(w("document","Trigger event: Visiblity change"),L(function(){t("Tab Visable","resize")},16))}function t(e,t){for(var n in I)r=n,"parent"===I[r].resizeFrom&&I[r].autoResize&&!I[r].firstRun&&M(e,t,document.getElementById(n),n);var r}function i(){function r(e,t){if(t){if(!t.tagName)throw new TypeError("Object is not a valid DOM element");if("IFRAME"!==t.tagName.toUpperCase())throw new TypeError("Expected <IFRAME> tag, found <"+t.tagName+">");o(t,e),i.push(t)}}for(var i,e=["moz","webkit","o","ms"],t=0;t<e.length&&!l;t+=1)l=window[e[t]+"RequestAnimationFrame"];return l||w("setup","RequestAnimationFrame not supported"),x(window,"message",b),x(window,"resize",function(){a("resize")}),x(document,"visibilitychange",s),x(document,"-webkit-visibilitychange",s),x(window,"focusin",function(){a("focus")}),x(window,"focus",function(){a("focus")}),function(e,t){switch(i=[],(n=e)&&n.enablePublicMethods&&C("enablePublicMethods option has been removed, public methods are now always available in the iFrame"),c(t)){case"undefined":case"string":Array.prototype.forEach.call(document.querySelectorAll(t||"iframe"),r.bind(f,e));break;case"object":r(e,t);break;default:throw new TypeError("Unexpected data type ("+c(t)+")")}var n;return i}}function _(e){e.fn?e.fn.iFrameResize||(e.fn.iFrameResize=function(n){return this.filter("iframe").each(function(e,t){o(t,n)}).end()}):T("","Unable to bind to jQuery, it is not fully loaded.")}var f,d,p,u,H,R,P,F,l,z,I,h,g;"undefined"!=typeof window&&(d=0,u=p=!1,H="message".length,P=(R="[iFrameSizer]").length,F=null,l=window.requestAnimationFrame,g={autoResize:!(h=null),bodyBackground:null,bodyMargin:null,bodyMarginV1:8,bodyPadding:null,checkOrigin:!0,inPageLinks:!"Host Page",enablePublicMethods:!0,heightCalculationMethod:"bodyOffset",id:"iFrameResizer",interval:32,log:!(I={}),maxHeight:1/0,maxWidth:1/0,minHeight:0,minWidth:0,resizeFrom:"parent",scrolling:!(z={max:1,scroll:1,bodyScroll:1,documentElementScroll:1}),sizeHeight:!0,sizeWidth:!1,warningTimeout:5e3,tolerance:0,widthCalculationMethod:"scroll",closedCallback:function(){},initCallback:function(){},messageCallback:function(){C("MessageCallback function not defined")},resizedCallback:function(){},scrollCallback:function(){return!0}},window.jQuery&&_(window.jQuery),"function"==typeof define&&define.amd?define([],i):"object"==(void 0===e?"undefined":c(e))&&"object"==c(e.exports)?e.exports=i():window.iFrameResize=window.iFrameResize||i())},{}],6:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var r=(e=e("jquery"))&&e.__esModule?e:{default:e};n.default={init:function(){var e=(0,r.default)(window).width();e<1100?((0,r.default)("header nav").hide(0),(0,r.default)(".menu-burger").click(function(){(0,r.default)(this).toggleClass("open"),(0,r.default)("header nav").slideToggle(300)})):1100<e&&(0,r.default)("header nav").show(0)}}},{jquery:8}],7:[function(e,t,n){"use strict";var r,i=c(e("jquery")),o=c(e("./libs/menuMobile")),a=c(e("./libs/accordeon")),s=c(e("./libs/animHome")),u=c(e("./libs/animProgramme")),l=c(e("./libs/animKeynotes"));function c(e){return e&&e.__esModule?e:{default:e}}e=Drupal,r=i.default,e.behaviors.themedtechforum={attach:function(e,t){window.screenSize=r(window).width(),e==document&&(o.default.init(),s.default.init(),u.default.init(),a.default.init(),l.default.init(),r(window).resize(function(){o.default.init()}))}}},{"./libs/accordeon":1,"./libs/animHome":2,"./libs/animKeynotes":3,"./libs/animProgramme":4,"./libs/menuMobile":6,jquery:8}],8:[function(e,n,t){!function(e,t){"use strict";"object"==typeof n&&"object"==typeof n.exports?n.exports=e.document?t(e,!0):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)}("undefined"!=typeof window?window:this,function(w,R){"use strict";function v(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item}function P(e){return null!=e&&e===e.window}
vendor: 25,508 bytes, line 8952
8952var t=[],F=Object.getPrototypeOf,s=t.slice,I=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},W=t.push,b=t.indexOf,_={},z=_.toString,B=_.hasOwnProperty,$=B.toString,U=$.call(Object),g={},T=w.document,X={type:!0,src:!0,nonce:!0,noModule:!0};function V(e,t,n){var r,i,o=(n=n||T).createElement("script");if(o.text=e,t)for(r in X)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function Y(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?_[z.call(e)]||"object":typeof e}var G=/HTML$/i,C=function(e,t){return new C.fn.init(e,t)};function Q(e){var t=!!e&&"length"in e&&e.length,n=Y(e);return!v(e)&&!P(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function x(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}C.fn=C.prototype={jquery:"3.7.0",constructor:C,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){e=C.merge(this.constructor(),e);return e.prevObject=this,e},each:function(e){return C.each(this,e)},map:function(n){return this.pushStack(C.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(C.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(C.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,e=+e+(e<0?t:0);return this.pushStack(0<=e&&e<t?[this[e]]:[])},end:function(){return this.prevObject||this.constructor()},push:W,sort:t.sort,splice:t.splice},C.extend=C.fn.extend=function(){var e,t,n,r,i,o=arguments[0]||{},a=1,s=arguments.length,u=!1;for("boolean"==typeof o&&(u=o,o=arguments[a]||{},a++),"object"==typeof o||v(o)||(o={}),a===s&&(o=this,a--);a<s;a++)if(null!=(e=arguments[a]))for(t in e)n=e[t],"__proto__"!==t&&o!==n&&(u&&n&&(C.isPlainObject(n)||(r=Array.isArray(n)))?(i=o[t],i=r&&!Array.isArray(i)?[]:r||C.isPlainObject(i)?i:{},r=!1,o[t]=C.extend(u,i,n)):void 0!==n&&(o[t]=n));return o},C.extend({expando:"jQuery"+("3.7.0"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){return!(!e||"[object Object]"!==z.call(e)||(e=F(e))&&("function"!=typeof(e=B.call(e,"constructor")&&e.constructor)||$.call(e)!==U))},isEmptyObject:function(e){for(var t in e)return!1;return!0},globalEval:function(e,t,n){V(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(Q(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i)return e.textContent;if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=C.text(t);return n},makeArray:function(e,t){t=t||[];return null!=e&&(Q(Object(e))?C.merge(t,"string"==typeof e?[e]:e):W.call(t,e)),t},inArray:function(e,t,n){return null==t?-1:b.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,e=e&&(e.ownerDocument||e).documentElement;return!G.test(t||e&&e.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!=a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(Q(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return I(a)},guid:1,support:g}),"function"==typeof Symbol&&(C.fn[Symbol.iterator]=t[Symbol.iterator]),C.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){_["[object "+t+"]"]=t.toLowerCase()});var J=t.pop,K=t.sort,Z=t.splice,n="[\\x20\\t\\r\\n\\f]",ee=new RegExp("^"+n+"+|((?:^|[^\\\\])(?:\\\\.)*)"+n+"+$","g"),te=(C.contains=function(e,t){t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(e.contains?e.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))},/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g);function ne(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}C.escapeSelector=function(e){return(e+"").replace(te,ne)};var re,k,ie,oe,ae,E,se,S,d,ue,r=T,le=W,j=le,A=C.expando,D=0,ce=0,fe=Ne(),de=Ne(),pe=Ne(),he=Ne(),ge=function(e,t){return e===t&&(ae=!0),0},me="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",e="(?:\\\\[\\da-fA-F]{1,6}"+n+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",i="\\["+n+"*("+e+")(?:"+n+"*([*^$|!~]?=)"+n+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+e+"))|)"+n+"*\\]",o=":("+e+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+i+")*)|.*)\\)|)",ye=new RegExp(n+"+","g"),ve=new RegExp("^"+n+"*,"+n+"*"),be=new RegExp("^"+n+"*([>+~]|"+n+")"+n+"*"),xe=new RegExp(n+"|>"),we=new RegExp(o),Te=new RegExp("^"+e+"$"),Ce={ID:new RegExp("^#("+e+")"),CLASS:new RegExp("^\\.("+e+")"),TAG:new RegExp("^("+e+"|[*])"),ATTR:new RegExp("^"+i),PSEUDO:new RegExp("^"+o),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+n+"*(even|odd|(([+-]|)(\\d*)n|)"+n+"*(?:([+-]|)"+n+"*(\\d+)|))"+n+"*\\)|)","i"),bool:new RegExp("^(?:"+me+")$","i"),needsContext:new RegExp("^"+n+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+n+"*((?:-\\d)?\\d*)"+n+"*\\)|)(?=[^-]|$)","i")},ke=/^(?:input|select|textarea|button)$/i,Ee=/^h\d$/i,Se=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,je=/[+~]/,f=new RegExp("\\\\[\\da-fA-F]{1,6}"+n+"?|\\\\([^\\r\\n\\f])","g"),p=function(e,t){e="0x"+e.slice(1)-65536;return t||(e<0?String.fromCharCode(65536+e):String.fromCharCode(e>>10|55296,1023&e|56320))},Ae=function(){He()},De=Ie(function(e){return!0===e.disabled&&x(e,"fieldset")},{dir:"parentNode",next:"legend"});try{j.apply(t=s.call(r.childNodes),r.childNodes),t[r.childNodes.length].nodeType}catch(e){j={apply:function(e,t){le.apply(e,s.call(t))},call:function(e){le.apply(e,s.call(arguments,1))}}}function N(t,e,n,r){var i,o,a,s,u,l,c=e&&e.ownerDocument,f=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==f&&9!==f&&11!==f)return n;if(!r&&(He(e),e=e||E,S)){if(11!==f&&(s=Se.exec(t)))if(i=s[1]){if(9===f){if(!(l=e.getElementById(i)))return n;if(l.id===i)return j.call(n,l),n}else if(c&&(l=c.getElementById(i))&&N.contains(e,l)&&l.id===i)return j.call(n,l),n}else{if(s[2])return j.apply(n,e.getElementsByTagName(t)),n;if((i=s[3])&&e.getElementsByClassName)return j.apply(n,e.getElementsByClassName(i)),n}if(!(he[t+" "]||d&&d.test(t))){if(l=t,c=e,1===f&&(xe.test(t)||be.test(t))){for((c=je.test(t)&&Le(e.parentNode)||e)==e&&g.scope||((a=e.getAttribute("id"))?a=C.escapeSelector(a):e.setAttribute("id",a=A)),o=(u=Pe(t)).length;o--;)u[o]=(a?"#"+a:":scope")+" "+Fe(u[o]);l=u.join(",")}try{return j.apply(n,c.querySelectorAll(l)),n}catch(e){he(t,!0)}finally{a===A&&e.removeAttribute("id")}}}return Ue(t.replace(ee,"$1"),e,n,r)}function Ne(){var n=[];function r(e,t){return n.push(e+" ")>k.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function u(e){return e[A]=!0,e}function qe(e){var t=E.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function Me(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&De(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function Oe(a){return u(function(o){return o=+o,u(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function Le(e){return e&&void 0!==e.getElementsByTagName&&e}function He(e){var e=e?e.ownerDocument||e:r;return e!=E&&9===e.nodeType&&e.documentElement&&(se=(E=e).documentElement,S=!C.isXMLDoc(E),ue=se.matches||se.webkitMatchesSelector||se.msMatchesSelector,r!=E&&(e=E.defaultView)&&e.top!==e&&e.addEventListener("unload",Ae),g.getById=qe(function(e){return se.appendChild(e).id=C.expando,!E.getElementsByName||!E.getElementsByName(C.expando).length}),g.disconnectedMatch=qe(function(e){return ue.call(e,"*")}),g.scope=qe(function(){return E.querySelectorAll(":scope")}),g.cssHas=qe(function(){try{E.querySelector(":has(*,:jqfake)")}catch(e){return 1}}),g.getById?(k.filter.ID=function(e){var t=e.replace(f,p);return function(e){return e.getAttribute("id")===t}},k.find.ID=function(e,t){if(void 0!==t.getElementById&&S)return(t=t.getElementById(e))?[t]:[]}):(k.filter.ID=function(e){var t=e.replace(f,p);return function(e){e=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}},k.find.ID=function(e,t){if(void 0!==t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),k.find.TAG=function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},k.find.CLASS=function(e,t){if(void 0!==t.getElementsByClassName&&S)return t.getElementsByClassName(e)},d=[],qe(function(e){var t;se.appendChild(e).innerHTML="<a id='"+A+"' href='' disabled='disabled'></a><select id='"+A+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+n+"*(?:value|"+me+")"),e.querySelectorAll("[id~="+A+"-]").length||d.push("~="),e.querySelectorAll("a#"+A+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=E.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),se.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=E.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+n+"*name"+n+"*="+n+"*(?:''|\"\")")}),g.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),ge=function(e,t){var n;return e===t?(ae=!0,0):(n=!e.compareDocumentPosition-!t.compareDocumentPosition)||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!g.sortDetached&&t.compareDocumentPosition(e)===n?e===E||e.ownerDocument==r&&N.contains(r,e)?-1:t===E||t.ownerDocument==r&&N.contains(r,t)?1:oe?b.call(oe,e)-b.call(oe,t):0:4&n?-1:1)}),E}for(re in N.matches=function(e,t){return N(e,null,null,t)},N.matchesSelector=function(e,t){if(He(e),S&&!he[t+" "]&&(!d||!d.test(t)))try{var n=ue.call(e,t);if(n||g.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){he(t,!0)}return 0<N(t,E,null,[e]).length},N.contains=function(e,t){return(e.ownerDocument||e)!=E&&He(e),C.contains(e,t)},N.attr=function(e,t){(e.ownerDocument||e)!=E&&He(e);var n=k.attrHandle[t.toLowerCase()],n=n&&B.call(k.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==n?n:e.getAttribute(t)},N.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},C.uniqueSort=function(e){var t,n=[],r=0,i=0;if(ae=!g.sortStable,oe=!g.sortStable&&s.call(e,0),K.call(e,ge),ae){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)Z.call(e,n[r],1)}return oe=null,e},C.fn.uniqueSort=function(){return this.pushStack(C.uniqueSort(s.apply(this)))},(k=C.expr={cacheLength:50,createPseudo:u,match:Ce,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(f,p),e[3]=(e[3]||e[4]||e[5]||"").replace(f,p),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||N.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&N.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Ce.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&we.test(n)&&(t=(t=Pe(n,!0))&&n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(f,p).toLowerCase();return"*"===e?function(){return!0}:function(e){return x(e,t)}},CLASS:function(e){var t=fe[e+" "];return t||(t=new RegExp("(^|"+n+")"+e+"("+n+"|$)"))&&fe(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(e){e=N.attr(e,t);return null==e?"!="===n:!n||(e+="","="===n?e===r:"!="===n?e!==r:"^="===n?r&&0===e.indexOf(r):"*="===n?r&&-1<e.indexOf(r):"$="===n?r&&e.slice(-r.length)===r:"~="===n?-1<(" "+e.replace(ye," ")+" ").indexOf(r):"|="===n&&(e===r||e.slice(0,r.length+1)===r+"-"))}},CHILD:function(p,e,t,h,g){var m="nth"!==p.slice(0,3),y="last"!==p.slice(-4),v="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=m!=y?"nextSibling":"previousSibling",l=e.parentNode,c=v&&e.nodeName.toLowerCase(),f=!n&&!v,d=!1;if(l){if(m){for(;u;){for(o=e;o=o[u];)if(v?x(o,c):1===o.nodeType)return!1;s=u="only"===p&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){for(d=(a=(r=(i=l[A]||(l[A]={}))[p]||[])[0]===D&&r[1])&&r[2],o=a&&l.childNodes[a];o=++a&&o&&o[u]||(d=a=0,s.pop());)if(1===o.nodeType&&++d&&o===e){i[p]=[D,a,d];break}}else if(!1===(d=f?a=(r=(i=e[A]||(e[A]={}))[p]||[])[0]===D&&r[1]:d))for(;(o=++a&&o&&o[u]||(d=a=0,s.pop()))&&((v?!x(o,c):1!==o.nodeType)||!++d||(f&&((i=o[A]||(o[A]={}))[p]=[D,d]),o!==e)););return(d-=g)===h||d%h==0&&0<=d/h}}},PSEUDO:function(e,o){var t,a=k.pseudos[e]||k.setFilters[e.toLowerCase()]||N.error("unsupported pseudo: "+e);return a[A]?a(o):1<a.length?(t=[e,e,"",o],k.setFilters.hasOwnProperty(e.toLowerCase())?u(function(e,t){for(var n,r=a(e,o),i=r.length;i--;)e[n=b.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:u(function(e){var r=[],i=[],s=$e(e.replace(ee,"$1"));return s[A]?u(function(e,t,n,r){for(var i,o=s(e,null,r,[]),a=e.length;a--;)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:u(function(t){return function(e){return 0<N(t,e).length}}),contains:u(function(t){return t=t.replace(f,p),function(e){return-1<(e.textContent||C.text(e)).indexOf(t)}}),lang:u(function(n){return Te.test(n||"")||N.error("unsupported lang: "+n),n=n.replace(f,p).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=w.location&&w.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===se},focus:function(e){return e===function(){try{return E.activeElement}catch(e){}}()&&E.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:Me(!1),disabled:Me(!0),checked:function(e){return x(e,"input")&&!!e.checked||x(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!k.pseudos.empty(e)},header:function(e){return Ee.test(e.nodeName)},input:function(e){return ke.test(e.nodeName)},button:function(e){return x(e,"input")&&"button"===e.type||x(e,"button")},text:function(e){return x(e,"input")&&"text"===e.type&&(null==(e=e.getAttribute("type"))||"text"===e.toLowerCase())},first:Oe(function(){return[0]}),last:Oe(function(e,t){return[t-1]}),eq:Oe(function(e,t,n){return[n<0?n+t:n]}),even:Oe(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:Oe(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:Oe(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:Oe(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=k.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})k.pseudos[re]=function(t){return function(e){return x(e,"input")&&e.type===t}}(re);for(re in{submit:!0,reset:!0})k.pseudos[re]=function(t){return function(e){return(x(e,"input")||x(e,"button"))&&e.type===t}}(re);function Re(){}function Pe(e,t){var n,r,i,o,a,s,u,l=de[e+" "];if(l)return t?0:l.slice(0);for(a=e,s=[],u=k.preFilter;a;){for(o in n&&!(r=ve.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=be.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ee," ")}),a=a.slice(n.length)),k.filter)!(r=Ce[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?N.error(e):de(e,s).slice(0)}function Fe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Ie(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=ce++;return e.first?function(e,t,n){for(;e=e[s];)if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[D,f];if(n){for(;e=e[s];)if((1===e.nodeType||c)&&a(e,t,n))return!0}else for(;e=e[s];)if(1===e.nodeType||c)if(i=e[A]||(e[A]={}),u&&x(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===D&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function We(i){return 1<i.length?function(e,t,n){for(var r=i.length;r--;)if(!i[r](e,t,n))return!1;return!0}:i[0]}function _e(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)!(o=e[s])||n&&!n(o,r,i)||(a.push(o),l&&t.push(s));return a}function ze(p,h,g,m,y,e){return m&&!m[A]&&(m=ze(m)),y&&!y[A]&&(y=ze(y,e)),u(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)N(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),d=!p||!e&&h?f:_e(f,u,p,n,r);if(g?g(d,s=y||(e?p:c||m)?[]:t,n,r):s=d,m)for(i=_e(s,l),m(i,[],n,r),o=i.length;o--;)(a=i[o])&&(s[l[o]]=!(d[l[o]]=a));if(e){if(y||p){if(y){for(i=[],o=s.length;o--;)(a=s[o])&&i.push(d[o]=a);y(null,s=[],i,r)}for(o=s.length;o--;)(a=s[o])&&-1<(i=y?b.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=_e(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):j.apply(t,s)})}function Be(m,y){function e(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],d=ie,p=e||b&&k.find.TAG("*",i),h=D+=null==d?1:Math.random()||.1,g=p.length;for(i&&(ie=t==E||t||i);l!==g&&null!=(o=p[l]);l++){if(b&&o){for(a=0,t||o.ownerDocument==E||(He(o),n=!S);s=m[a++];)if(s(o,t||E,n)){j.call(r,o);break}i&&(D=h)}v&&((o=!s&&o)&&u--,e)&&c.push(o)}if(u+=l,v&&l!==u){for(a=0;s=y[a++];)s(c,f,t,n);if(e){if(0<u)for(;l--;)c[l]||f[l]||(f[l]=J.call(r));f=_e(f)}j.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&C.uniqueSort(r)}return i&&(D=h,ie=d),c}var v=0<y.length,b=0<m.length;return v?u(e):e}function $e(e,t){var n,r=[],i=[],o=pe[e+" "];if(!o){for(n=(t=t||Pe(e)).length;n--;)((o=function e(t){for(var r,n,i,o=t.length,a=k.relative[t[0].type],s=a||k.relative[" "],u=a?1:0,l=Ie(function(e){return e===r},s,!0),c=Ie(function(e){return-1<b.call(r,e)},s,!0),f=[function(e,t,n){return e=!a&&(n||t!=ie)||((r=t).nodeType?l:c)(e,t,n),r=null,e}];u<o;u++)if(n=k.relative[t[u].type])f=[Ie(We(f),n)];else{if((n=k.filter[t[u].type].apply(null,t[u].matches))[A]){for(i=++u;i<o&&!k.relative[t[i].type];i++);return ze(1<u&&We(f),1<u&&Fe(t.slice(0,u-1).concat({value:" "===t[u-2].type?"*":""})).replace(ee,"$1"),n,u<i&&e(t.slice(u,i)),i<o&&e(t=t.slice(i)),i<o&&Fe(t))}f.push(n)}return We(f)}(t[n]))[A]?r:i).push(o);(o=pe(e,Be(i,r))).selector=e}return o}function Ue(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Pe(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&k.relative[o[1].type]){if(!(t=(k.find.ID(a.matches[0].replace(f,p),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=Ce.needsContext.test(e)?0:o.length;i--&&(a=o[i],!k.relative[s=a.type]);)if((u=k.find[s])&&(r=u(a.matches[0].replace(f,p),je.test(o[0].type)&&Le(t.parentNode)||t))){if(o.splice(i,1),e=r.length&&Fe(o))break;return j.apply(n,r),n}}return(l||$e(e,c))(r,t,!S,n,!t||je.test(e)&&Le(t.parentNode)||t),n}Re.prototype=k.filters=k.pseudos,k.setFilters=new Re,g.sortStable=A.split("").sort(ge).join("")===A,He(),g.sortDetached=qe(function(e){return 1&e.compareDocumentPosition(E.createElement("fieldset"))}),C.find=N,C.expr[":"]=C.expr.pseudos,C.unique=C.uniqueSort,N.compile=$e,N.select=Ue,N.setDocument=He,N.escape=C.escapeSelector,N.getText=C.text,N.isXML=C.isXMLDoc,N.selectors=C.expr,N.support=C.support,N.uniqueSort=C.uniqueSort;function Xe(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&C(e).is(n))break;r.push(e)}return r}function Ve(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}var Ye=C.expr.match.needsContext,Ge=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function Qe(e,n,r){return v(n)?C.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?C.grep(e,function(e){return e===n!==r}):"string"!=typeof n?C.grep(e,function(e){return-1<b.call(n,e)!==r}):C.filter(n,e,r)}C.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?C.find.matchesSelector(r,e)?[r]:[]:C.find.matches(e,C.grep(t,function(e){return 1===e.nodeType}))},C.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(C(e).filter(function(){for(t=0;t<r;t++)if(C.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)C.find(e,i[t],n);return 1<r?C.uniqueSort(n):n},filter:function(e){return this.pushStack(Qe(this,e||[],!1))},not:function(e){return this.pushStack(Qe(this,e||[],!0))},is:function(e){return!!Qe(this,"string"==typeof e&&Ye.test(e)?C(e):e||[],!1).length}});var Je,Ke=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,Ze=((C.fn.init=function(e,t,n){if(e){if(n=n||Je,"string"!=typeof e)return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(C):C.makeArray(e,this);if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:Ke.exec(e))||!r[1]&&t)return(!t||t.jquery?t||n:this.constructor(t)).find(e);if(r[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:T,!0)),Ge.test(r[1])&&C.isPlainObject(t))for(var r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r])}else(n=T.getElementById(r[2]))&&(this[0]=n,this.length=1)}return this}).prototype=C.fn,Je=C(T),/^(?:parents|prev(?:Until|All))/),et={children:!0,contents:!0,next:!0,prev:!0};function tt(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t=C(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(C.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&C(e);if(!Ye.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&C.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?C.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?b.call(C(e),this[0]):b.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(C.uniqueSort(C.merge(this.get(),C(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),C.each({parent:function(e){e=e.parentNode;return e&&11!==e.nodeType?e:null},parents:function(e){return Xe(e,"parentNode")},parentsUntil:function(e,t,n){return Xe(e,"parentNode",n)},next:function(e){return tt(e,"nextSibling")},prev:function(e){return tt(e,"previousSibling")},nextAll:function(e){return Xe(e,"nextSibling")},prevAll:function(e){return Xe(e,"previousSibling")},nextUntil:function(e,t,n){return Xe(e,"nextSibling",n)},prevUntil:function(e,t,n){return Xe(e,"previousSibling",n)},siblings:function(e){return Ve((e.parentNode||{}).firstChild,e)},children:function(e){return Ve(e.firstChild)},contents:function(e){return null!=e.contentDocument&&F(e.contentDocument)?e.contentDocument:(x(e,"template")&&(e=e.content||e),C.merge([],e.childNodes))}},function(r,i){C.fn[r]=function(e,t){var n=C.map(this,i,e);return(t="Until"!==r.slice(-5)?e:t)&&"string"==typeof t&&(n=C.filter(t,n)),1<this.length&&(et[r]||C.uniqueSort(n),Ze.test(r))&&n.reverse(),this.pushStack(n)}});var q=/[^\x20\t\r\n\f]+/g;function nt(e){return e}function rt(e){throw e}function it(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}C.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},C.each(e.match(q)||[],function(e,t){n[t]=!0}),n):C.extend({},r);function i(){for(s=s||r.once,a=o=!0;l.length;c=-1)for(t=l.shift();++c<u.length;)!1===u[c].apply(t[0],t[1])&&r.stopOnFalse&&(c=u.length,t=!1);r.memory||(t=!1),o=!1,s&&(u=t?[]:"")}var o,t,a,s,u=[],l=[],c=-1,f={add:function(){return u&&(t&&!o&&(c=u.length-1,l.push(t)),function n(e){C.each(e,function(e,t){v(t)?r.unique&&f.has(t)||u.push(t):t&&t.length&&"string"!==Y(t)&&n(t)})}(arguments),t)&&!o&&i(),this},remove:function(){return C.each(arguments,function(e,t){for(var n;-1<(n=C.inArray(t,u,n));)u.splice(n,1),n<=c&&c--}),this},has:function(e){return e?-1<C.inArray(e,u):0<u.length},empty:function(){return u=u&&[],this},disable:function(){return s=l=[],u=t="",this},disabled:function(){return!u},lock:function(){return s=l=[],t||o||(u=t=""),this},locked:function(){return!!s},fireWith:function(e,t){return s||(t=[e,(t=t||[]).slice?t.slice():t],l.push(t),o)||i(),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!a}};return f},C.extend({Deferred:function(e){var o=[["notify","progress",C.Callbacks("memory"),C.Callbacks("memory"),2],["resolve","done",C.
vendor: 5,087 bytes, line 8952
8952Callbacks("once memory"),C.Callbacks("once memory"),0,"resolved"],["reject","fail",C.Callbacks("once memory"),C.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},catch:function(e){return a.then(null,e)},pipe:function(){var i=arguments;return C.Deferred(function(r){C.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){function e(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,nt,s),l(u,o,rt,s)):(u++,t.call(e,l(u,o,nt,s),l(u,o,rt,s),l(u,o,nt,o.notifyWith))):(a!==nt&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}}var n=this,r=arguments,t=s?e:function(){try{e()}catch(e){C.Deferred.exceptionHook&&C.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==rt&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(C.Deferred.getErrorHook?t.error=C.Deferred.getErrorHook():C.Deferred.getStackHook&&(t.error=C.Deferred.getStackHook()),w.setTimeout(t))}}return C.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:nt,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:nt)),o[2][3].add(l(0,e,v(n)?n:rt))}).promise()},promise:function(e){return null!=e?C.extend(e,a):a}},s={};return C.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){function t(t){return function(e){i[t]=this,o[t]=1<arguments.length?s.call(arguments):e,--n||a.resolveWith(i,o)}}var n=arguments.length,r=n,i=Array(r),o=s.call(arguments),a=C.Deferred();if(n<=1&&(it(e,a.done(t(r)).resolve,a.reject,!n),"pending"===a.state()||v(o[r]&&o[r].then)))return a.then();for(;r--;)it(o[r],t(r),a.reject);return a.promise()}});var ot=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/,at=(C.Deferred.exceptionHook=function(e,t){w.console&&w.console.warn&&e&&ot.test(e.name)&&w.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},C.readyException=function(e){w.setTimeout(function(){throw e})},C.Deferred());function st(){T.removeEventListener("DOMContentLoaded",st),w.removeEventListener("load",st),C.ready()}C.fn.ready=function(e){return at.then(e).catch(function(e){C.readyException(e)}),this},C.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--C.readyWait:C.isReady)||(C.isReady=!0)!==e&&0<--C.readyWait||at.resolveWith(T,[C])}}),C.ready.then=at.then,"complete"===T.readyState||"loading"!==T.readyState&&!T.documentElement.doScroll?w.setTimeout(C.ready):(T.addEventListener("DOMContentLoaded",st),w.addEventListener("load",st));function c(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===Y(n))for(s in i=!0,n)c(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),t=l?a?(t.call(e,r),null):(l=t,function(e,t,n){return l.call(C(e),n)}):t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o}var ut=/^-ms-/,lt=/-([a-z])/g;function ct(e,t){return t.toUpperCase()}function M(e){return e.replace(ut,"ms-").replace(lt,ct)}function ft(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType}function dt(){this.expando=C.expando+dt.uid++}dt.uid=1,dt.prototype={cache:function(e){var t=e[this.expando];return t||(t={},ft(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[M(t)]=n;else for(r in t)i[M(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][M(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(M):(t=M(t))in r?[t]:t.match(q)||[]).length;for(;n--;)delete r[t[n]]}void 0!==t&&!C.isEmptyObject(r)||(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){e=e[this.expando];return void 0!==e&&!C.isEmptyObject(e)}};var y=new dt,l=new dt,pt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ht=/[A-Z]/g;function gt(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ht,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:pt.test(i)?JSON.parse(i):i)}catch(e){}l.set(e,t,n)}else n=void 0;return n}C.extend({hasData:function(e){return l.hasData(e)||y.hasData(e)},data:function(e,t,n){return l.access(e,t,n)},removeData:function(e,t){l.remove(e,t)},_data:function(e,t,n){return y.access(e,t,n)},_removeData:function(e,t){y.remove(e,t)}}),C.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;
vendor: 54,710 bytes, line 8952
8952if(void 0!==n)return"object"==typeof n?this.each(function(){l.set(this,n)}):c(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=l.get(o,n))||void 0!==(t=gt(o,n))?t:void 0;this.each(function(){l.set(this,n,e)})},null,e,1<arguments.length,null,!0);if(this.length&&(i=l.get(o),1===o.nodeType)&&!y.get(o,"hasDataAttrs")){for(t=a.length;t--;)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=M(r.slice(5)),gt(o,r,i[r]));y.set(o,"hasDataAttrs",!0)}return i},removeData:function(e){return this.each(function(){l.remove(this,e)})}}),C.extend({queue:function(e,t,n){var r;if(e)return r=y.get(e,t=(t||"fx")+"queue"),n&&(!r||Array.isArray(n)?r=y.access(e,t,C.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=C.queue(e,t),r=n.length,i=n.shift(),o=C._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){C.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return y.get(e,n)||y.access(e,n,{empty:C.Callbacks("once memory").add(function(){y.remove(e,[t+"queue",n])})})}}),C.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?C.queue(this[0],t):void 0===n?this:this.each(function(){var e=C.queue(this,t,n);C._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&C.dequeue(this,t)})},dequeue:function(e){return this.each(function(){C.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){function n(){--i||o.resolveWith(a,[a])}var r,i=1,o=C.Deferred(),a=this,s=this.length;for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";s--;)(r=y.get(a[s],e+"queueHooks"))&&r.empty&&(i++,r.empty.add(n));return n(),o.promise(t)}});function mt(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&bt(e)&&"none"===C.css(e,"display")}var e=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,yt=new RegExp("^(?:([+-])=|)("+e+")([a-z%]*)$","i"),h=["Top","Right","Bottom","Left"],vt=T.documentElement,bt=function(e){return C.contains(e.ownerDocument,e)},xt={composed:!0};vt.getRootNode&&(bt=function(e){return C.contains(e.ownerDocument,e)||e.getRootNode(xt)===e.ownerDocument});function wt(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return C.css(e,t,"")},u=s(),l=n&&n[3]||(C.cssNumber[t]?"":"px"),c=e.nodeType&&(C.cssNumber[t]||"px"!==l&&+u)&&yt.exec(C.css(e,t));if(c&&c[3]!==l){for(l=l||c[3],c=+(u/=2)||1;a--;)C.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;C.style(e,t,(c*=2)+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r)&&(r.unit=l,r.start=c,r.end=i),i}var Tt={};function Ct(e,t){for(var n,r,i,o,a,s=[],u=0,l=e.length;u<l;u++)(r=e[u]).style&&(n=r.style.display,t?("none"===n&&(s[u]=y.get(r,"display")||null,s[u]||(r.style.display="")),""===r.style.display&&mt(r)&&(s[u]=(a=o=void 0,o=(i=r).ownerDocument,i=i.nodeName,(a=Tt[i])||(o=o.body.appendChild(o.createElement(i)),a=C.css(o,"display"),o.parentNode.removeChild(o),Tt[i]=a="none"===a?"block":a),a))):"none"!==n&&(s[u]="none",y.set(r,"display",n)));for(u=0;u<l;u++)null!=s[u]&&(e[u].style.display=s[u]);return e}C.fn.extend({show:function(){return Ct(this,!0)},hide:function(){return Ct(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){mt(this)?C(this).show():C(this).hide()})}});var kt=/^(?:checkbox|radio)$/i,Et=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,St=/^$|^module$|\/(?:java|ecma)script/i,m=(i=T.createDocumentFragment().appendChild(T.createElement("div")),(o=T.createElement("input")).setAttribute("type","radio"),o.setAttribute("checked","checked"),o.setAttribute("name","t"),i.appendChild(o),g.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,i.innerHTML="<textarea>x</textarea>",g.noCloneChecked=!!i.cloneNode(!0).lastChild.defaultValue,i.innerHTML="<option></option>",g.option=!!i.lastChild,{thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]});function O(e,t){var n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[];return void 0===t||t&&x(e,t)?C.merge([e],n):n}function jt(e,t){for(var n=0,r=e.length;n<r;n++)y.set(e[n],"globalEval",!t||y.get(t[n],"globalEval"))}m.tbody=m.tfoot=m.colgroup=m.caption=m.thead,m.th=m.td,g.option||(m.optgroup=m.option=[1,"<select multiple='multiple'>","</select>"]);var At=/<|&#?\w+;/;function Dt(e,t,n,r,i){for(var o,a,s,u,l,c=t.createDocumentFragment(),f=[],d=0,p=e.length;d<p;d++)if((o=e[d])||0===o)if("object"===Y(o))C.merge(f,o.nodeType?[o]:o);else if(At.test(o)){for(a=a||c.appendChild(t.createElement("div")),s=(Et.exec(o)||["",""])[1].toLowerCase(),s=m[s]||m._default,a.innerHTML=s[1]+C.htmlPrefilter(o)+s[2],l=s[0];l--;)a=a.lastChild;C.merge(f,a.childNodes),(a=c.firstChild).textContent=""}else f.push(t.createTextNode(o));for(c.textContent="",d=0;o=f[d++];)if(r&&-1<C.inArray(o,r))i&&i.push(o);else if(u=bt(o),a=O(c.appendChild(o),"script"),u&&jt(a),n)for(l=0;o=a[l++];)St.test(o.type||"")&&n.push(o);return c}var Nt=/^([^.]*)(?:\.(.+)|)/;function qt(){return!0}function Mt(){return!1}function Ot(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ot(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Mt;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return C().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=C.guid++)),e.each(function(){C.event.add(this,t,i,r,n)})}function Lt(e,r,t){t?(y.set(e,r,!1),C.event.add(e,r,{namespace:!1,handler:function(e){var t,n=y.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(C.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=s.call(arguments),y.set(this,r,n),this[r](),t=y.get(this,r),y.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(y.set(this,r,C.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=qt)}})):void 0===y.get(e,r)&&C.event.add(e,r,qt)}C.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,d,p,h=y.get(t);if(ft(t))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&C.find.matchesSelector(vt,i),n.guid||(n.guid=C.guid++),s=(s=h.events)||(h.events=Object.create(null)),a=(a=h.handle)||(h.handle=function(e){return void 0!==C&&C.event.triggered!==e.type?C.event.dispatch.apply(t,arguments):void 0}),u=(e=(e||"").match(q)||[""]).length;u--;)f=p=(d=Nt.exec(e[u])||[])[1],d=(d[2]||"").split(".").sort(),f&&(l=C.event.special[f]||{},f=(i?l.delegateType:l.bindType)||f,l=C.event.special[f]||{},p=C.extend({type:f,origType:p,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&C.expr.match.needsContext.test(i),namespace:d.join(".")},o),(c=s[f])||((c=s[f]=[]).delegateCount=0,l.setup&&!1!==l.setup.call(t,r,d,a))||t.addEventListener&&t.addEventListener(f,a),l.add&&(l.add.call(t,p),p.handler.guid||(p.handler.guid=n.guid)),i?c.splice(c.delegateCount++,0,p):c.push(p),C.event.global[f]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,m=y.hasData(e)&&y.get(e);if(m&&(u=m.events)){for(l=(t=(t||"").match(q)||[""]).length;l--;)if(p=g=(s=Nt.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p){for(f=C.event.special[p]||{},d=u[p=(r?f.delegateType:f.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)c=d[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,m.handle)||C.removeEvent(e,p,m.handle),delete u[p])}else for(p in u)C.event.remove(e,p+t[l],n,r,!0);C.isEmptyObject(u)&&y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a=new Array(arguments.length),s=C.event.fix(e),e=(y.get(this,"events")||Object.create(null))[s.type]||[],u=C.event.special[s.type]||{};for(a[0]=s,t=1;t<arguments.length;t++)a[t]=arguments[t];if(s.delegateTarget=this,!u.preDispatch||!1!==u.preDispatch.call(this,s)){for(o=C.event.handlers.call(this,s,e),t=0;(r=o[t++])&&!s.isPropagationStopped();)for(s.currentTarget=r.elem,n=0;(i=r.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!1!==i.namespace&&!s.rnamespace.test(i.namespace)||(s.handleObj=i,s.data=i.data,void 0!==(i=((C.event.special[i.origType]||{}).handle||i.handler).apply(r.elem,a))&&!1===(s.result=i)&&(s.preventDefault(),s.stopPropagation()));return u.postDispatch&&u.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<C(i,this).index(l):C.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(C.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[C.expando]?e:new C.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){e=this||e;return kt.test(e.type)&&e.click&&x(e,"input")&&Lt(e,"click",!0),!1},trigger:function(e){e=this||e;return kt.test(e.type)&&e.click&&x(e,"input")&&Lt(e,"click"),!0},_default:function(e){e=e.target;return kt.test(e.type)&&e.click&&x(e,"input")&&y.get(e,"click")||x(e,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},C.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},C.Event=function(e,t){if(!(this instanceof C.Event))return new C.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?qt:Mt,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&C.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[C.expando]=!0},C.Event.prototype={constructor:C.Event,isDefaultPrevented:Mt,isPropagationStopped:Mt,isImmediatePropagationStopped:Mt,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=qt,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=qt,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=qt,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},C.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},C.event.addProp),C.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){var t,n;T.documentMode?(t=y.get(this,"handle"),(n=C.event.fix(e)).type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)):C.event.simulate(i,e.target,C.event.fix(e))}C.event.special[r]={setup:function(){var e;if(Lt(this,r,!0),!T.documentMode)return!1;(e=y.get(this,i))||this.addEventListener(i,o),y.set(this,i,(e||0)+1)},trigger:function(){return Lt(this,r),!0},teardown:function(){var e;if(!T.documentMode)return!1;(e=y.get(this,i)-1)?y.set(this,i,e):(this.removeEventListener(i,o),y.remove(this,i))},_default:function(e){return y.get(e.target,r)},delegateType:i},C.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=T.documentMode?this:e,n=y.get(t,i);n||(T.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),y.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=T.documentMode?this:e,n=y.get(t,i)-1;n?y.set(t,i,n):(T.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),y.remove(t,i))}}}),C.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){C.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||C.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),C.fn.extend({on:function(e,t,n,r){return Ot(this,e,t,n,r)},one:function(e,t,n,r){return Ot(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)r=e.handleObj,C(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler);else{if("object"!=typeof e)return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Mt),this.each(function(){C.event.remove(this,e,n,t)});for(i in e)this.off(i,t,e[i])}return this}});var Ht=/<script|<style|<link/i,Rt=/checked\s*(?:[^=]|=\s*.checked.)/i,Pt=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Ft(e,t){return x(e,"table")&&x(11!==t.nodeType?t:t.firstChild,"tr")&&C(e).children("tbody")[0]||e}function It(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Wt(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function _t(e,t){var n,r,i,o;if(1===t.nodeType){if(y.hasData(e)&&(o=y.get(e).events))for(i in y.remove(t,"handle events"),o)for(n=0,r=o[i].length;n<r;n++)C.event.add(t,i,o[i][n]);l.hasData(e)&&(e=l.access(e),e=C.extend({},e),l.set(t,e))}}function zt(n,r,i,o){r=I(r);var e,t,a,s,u,l,c=0,f=n.length,d=f-1,p=r[0],h=v(p);if(h||1<f&&"string"==typeof p&&!g.checkClone&&Rt.test(p))return n.each(function(e){var t=n.eq(e);h&&(r[0]=p.call(this,e,t.html())),zt(t,r,i,o)});if(f&&(t=(e=Dt(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=C.map(O(e,"script"),It)).length;c<f;c++)u=e,c!==d&&(u=C.clone(u,!0,!0),s)&&C.merge(a,O(u,"script")),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,C.map(a,Wt),c=0;c<s;c++)u=a[c],St.test(u.type||"")&&!y.access(u,"globalEval")&&C.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?C._evalUrl&&!u.noModule&&C._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):V(u.textContent.replace(Pt,""),u,l))}return n}function Bt(e,t,n){for(var r,i=t?C.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||C.cleanData(O(r)),r.parentNode&&(n&&bt(r)&&jt(O(r,"script")),r.parentNode.removeChild(r));return e}C.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=bt(e);if(!(g.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||C.isXMLDoc(e)))for(a=O(c),r=0,i=(o=O(e)).length;r<i;r++)s=o[r],u=a[r],l=void 0,"input"===(l=u.nodeName.toLowerCase())&&kt.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||O(e),a=a||O(c),r=0,i=o.length;r<i;r++)_t(o[r],a[r]);else _t(e,c);return 0<(a=O(c,"script")).length&&jt(a,!f&&O(e,"script")),c},cleanData:function(e){for(var t,n,r,i=C.event.special,o=0;void 0!==(n=e[o]);o++)if(ft(n)){if(t=n[y.expando]){if(t.events)for(r in t.events)i[r]?C.event.remove(n,r):C.removeEvent(n,r,t.handle);n[y.expando]=void 0}n[l.expando]&&(n[l.expando]=void 0)}}}),C.fn.extend({detach:function(e){return Bt(this,e,!0)},remove:function(e){return Bt(this,e)},text:function(e){return c(this,function(e){return void 0===e?C.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return zt(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ft(this,e).appendChild(e)})},prepend:function(){return zt(this,arguments,function(e){var t;1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(t=Ft(this,e)).insertBefore(e,t.firstChild)})},before:function(){return zt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return zt(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(C.cleanData(O(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return C.clone(this,e,t)})},html:function(e){return c(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ht.test(e)&&!m[(Et.exec(e)||["",""])[1].toLowerCase()]){e=C.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(C.cleanData(O(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return zt(this,arguments,function(e){var t=this.parentNode;C.inArray(this,n)<0&&(C.cleanData(O(this)),t)&&t.replaceChild(e,this)},n)}}),C.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){C.fn[e]=function(e){for(var t,n=[],r=C(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),C(r[o])[a](t),W.apply(n,t.get());return this.pushStack(n)}});function $t(e){var t=e.ownerDocument.defaultView;return(t=t&&t.opener?t:w).getComputedStyle(e)}function Ut(e,t,n){var r,i={};for(r in t)i[r]=e.style[r],e.style[r]=t[r];for(r in n=n.call(e),t)e.style[r]=i[r];return n}var Xt,Vt,Yt,Gt,Qt,Jt,Kt,a,Zt=new RegExp("^("+e+")(?!px)[a-z%]+$","i"),en=/^--/,tn=new RegExp(h.join("|"),"i");function nn(){var e;a&&(Kt.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",a.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",vt.appendChild(Kt).appendChild(a),e=w.getComputedStyle(a),Xt="1%"!==e.top,Jt=12===rn(e.marginLeft),a.style.right="60%",Gt=36===rn(e.right),Vt=36===rn(e.width),a.style.position="absolute",Yt=12===rn(a.offsetWidth/3),vt.removeChild(Kt),a=null)}function rn(e){return Math.round(parseFloat(e))}function on(e,t,n){var r,i=en.test(t),o=e.style;return(n=n||$t(e))&&(r=n.getPropertyValue(t)||n[t],""!==(r=i?r&&(r.replace(ee,"$1")||void 0):r)||bt(e)||(r=C.style(e,t)),!g.pixelBoxStyles())&&Zt.test(r)&&tn.test(t)&&(i=o.width,e=o.minWidth,t=o.maxWidth,o.minWidth=o.maxWidth=o.width=r,r=n.width,o.width=i,o.minWidth=e,o.maxWidth=t),void 0!==r?r+"":r}function an(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}Kt=T.createElement("div"),(a=T.createElement("div")).style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",g.clearCloneStyle="content-box"===a.style.backgroundClip,C.extend(g,{boxSizingReliable:function(){return nn(),Vt},pixelBoxStyles:function(){return nn(),Gt},pixelPosition:function(){return nn(),Xt},reliableMarginLeft:function(){return nn(),Jt},scrollboxSize:function(){return nn(),Yt},reliableTrDimensions:function(){var e,t,n;return null==Qt&&(e=T.createElement("table"),t=T.createElement("tr"),n=T.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",vt.appendChild(e).appendChild(t).appendChild(n),n=w.getComputedStyle(t),Qt=parseInt(n.height,10)+parseInt(n.borderTopWidth,10)+parseInt(n.borderBottomWidth,10)===t.offsetHeight,vt.removeChild(e)),Qt}}));var sn=["Webkit","Moz","ms"],un=T.createElement("div").style,ln={};function cn(e){var t=C.cssProps[e]||ln[e];return t||(e in un?e:ln[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=sn.length;n--;)if((e=sn[n]+t)in un)return e}(e)||e)}var fn=/^(none|table(?!-c[ea]).+)/,dn={position:"absolute",visibility:"hidden",display:"block"},pn={letterSpacing:"0",fontWeight:"400"};function hn(e,t,n){var r=yt.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function gn(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=C.css(e,n+h[a],!0,i)),r?("content"===n&&(u-=C.css(e,"padding"+h[a],!0,i)),"margin"!==n&&(u-=C.css(e,"border"+h[a]+"Width",!0,i))):(u+=C.css(e,"padding"+h[a],!0,i),"padding"!==n?u+=C.css(e,"border"+h[a]+"Width",!0,i):s+=C.css(e,"border"+h[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function mn(e,t,n){var r=$t(e),i=(!g.boxSizingReliable()||n)&&"border-box"===C.css(e,"boxSizing",!1,r),o=i,a=on(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Zt.test(a)){if(!n)return a;a="auto"}return(!g.boxSizingReliable()&&i||!g.reliableTrDimensions()&&x(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===C.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===C.css(e,"boxSizing",!1,r),o=s in e)&&(a=e[s]),(a=parseFloat(a)||0)+gn(e,t,n||(i?"border":"content"),o,r,a)+"px"}function L(e,t,n,r,i){return new L.prototype.init(e,t,n,r,i)}C.extend({cssHooks:{opacity:{get:function(e,t){if(t)return""===(t=on(e,"opacity"))?"1":t}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=M(t),u=en.test(t),l=e.style;if(u||(t=cn(s)),a=C.cssHooks[t]||C.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=yt.exec(n))&&i[1]&&(n=wt(e,t,i),o="number"),null==n||n!=n||("number"!==o||u||(n+=i&&i[3]||(C.cssNumber[s]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r)))||(u?l.setProperty(t,n):l[t]=n)}},css:function(e,t,n,r){var i,o=M(t);return en.test(t)||(t=cn(o)),"normal"===(i=void 0===(i=(o=C.cssHooks[t]||C.cssHooks[o])&&"get"in o?o.get(e,!0,n):i)?on(e,t,r):i)&&t in pn&&(i=pn[t]),(""===n||n)&&(o=parseFloat(i),!0===n||isFinite(o))?o||0:i}}),C.each(["height","width"],function(e,a){C.cssHooks[a]={get:function(e,t,n){if(t)return!fn.test(C.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?mn(e,a,n):Ut(e,dn,function(){return mn(e,a,n)})},set:function(e,t,n){var r=$t(e),i=!g.scrollboxSize()&&"absolute"===r.position,o=(i||n)&&"border-box"===C.css(e,"boxSizing",!1,r),n=n?gn(e,a,n,o,r):0;return o&&i&&(n-=Math.ceil(e["offset"+a[0].toUpperCase()+a.slice(1)]-parseFloat(r[a])-gn(e,a,"border",!1,r)-.5)),n&&(o=yt.exec(t))&&"px"!==(o[3]||"px")&&(e.style[a]=t,t=C.css(e,a)),hn(0,t,n)}}}),C.cssHooks.marginLeft=an(g.reliableMarginLeft,function(e,t){if(t)return(parseFloat(on(e,"marginLeft"))||e.getBoundingClientRect().left-Ut(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),C.each({margin:"",padding:"",border:"Width"},function(i,o){C.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+h[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(C.cssHooks[i+o].set=hn)}),C.fn.extend({css:function(e,t){return c(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$t(e),i=t.length;a<i;a++)o[t[a]]=C.css(e,t[a],!1,r);return o}return void 0!==n?C.style(e,t,n):C.css(e,t)},e,t,1<arguments.length)}}),((C.Tween=L).prototype={constructor:L,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||C.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(C.cssNumber[n]?"":"px")},cur:function(){var e=L.propHooks[this.prop];return(e&&e.get?e:L.propHooks._default).get(this)},run:function(e){var t,n=L.propHooks[this.prop];return this.options.duration?this.pos=t=C.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),(n&&n.set?n:L.propHooks._default).set(this),this}}).init.prototype=L.prototype,(L.propHooks={_default:{get:function(e){return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(e=C.css(e.elem,e.prop,""))&&"auto"!==e?e:0},set:function(e){C.fx.step[e.prop]?C.fx.step[e.prop](e):1!==e.elem.nodeType||!C.cssHooks[e.prop]&&null==e.elem.style[cn(e.prop)]?e.elem[e.prop]=e.now:C.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=L.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},C.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},C.fx=L.prototype.init,C.fx.step={};var yn,vn,bn=/^(?:toggle|show|hide)$/,xn=/queueHooks$/;function wn(){vn&&(!1===T.hidden&&w.requestAnimationFrame?w.requestAnimationFrame(wn):w.setTimeout(wn,C.fx.interval),C.fx.tick())}function Tn(){return w.setTimeout(function(){yn=void 0}),yn=Date.now()}function Cn(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=h[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function kn(e,t,n){for(var r,i=(H.tweeners[t]||[]).concat(H.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function H(i,e,t){var n,o,r,a,s,u,l,c=0,f=H.prefilters.length,d=C.Deferred().always(function(){delete p.elem}),p=function(){if(!o){for(var e=yn||Tn(),e=Math.max(0,h.startTime+h.duration-e),t=1-(e/h.duration||0),n=0,r=h.tweens.length;n<r;n++)h.tweens[n].run(t);if(d.notifyWith(i,[h,t,e]),t<1&&r)return e;r||d.notifyWith(i,[h,1,0]),d.resolveWith(i,[h])}return!1},h=d.promise({elem:i,props:C.extend({},e),opts:C.extend(!0,{specialEasing:{},easing:C.easing._default},t),originalProperties:e,originalOptions:t,startTime:yn||Tn(),duration:t.duration,tweens:[],createTween:function(e,t){t=C.Tween(i,h.opts,e,t,h.opts.specialEasing[e]||h.opts.easing);return h.tweens.push(t),t},stop:function(e){var t=0,n=e?h.tweens.length:0;if(!o){for(o=!0;t<n;t++)h.tweens[t].run(1);e?(d.notifyWith(i,[h,1,0]),d.resolveWith(i,[h,e])):d.rejectWith(i,[h,e])}return this}}),g=h.props,m=g,y=h.opts.specialEasing;for(r in m)if(s=y[a=M(r)],u=m[r],Array.isArray(u)&&(s=u[1],u=m[r]=u[0]),r!==a&&(m[a]=u,delete m[r]),(l=C.cssHooks[a])&&"expand"in l)for(r in u=l.expand(u),delete m[a],u)r in m||(m[r]=u[r],y[r]=s);else y[a]=s;for(;c<f;c++)if(n=H.prefilters[c].call(h,i,g,h.opts))return v(n.stop)&&(C._queueHooks(h.elem,h.opts.queue).stop=n.stop.bind(n)),n;return C.map(g,kn,h),v(h.opts.start)&&h.opts.start.call(i,h),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always),C.fx.timer(C.extend(p,{elem:i,anim:h,queue:h.opts.queue})),h}C.Animation=C.extend(H,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return wt(n.elem,e,yt.exec(t),n),n}]},tweener:function(e,t){for(var n,r=0,i=(e=v(e)?(t=e,["*"]):e.match(q)).length;r<i;r++)n=e[r],H.tweeners[n]=H.tweeners[n]||[],H.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c="width"in t||"height"in t,f=this,d={},p=e.style,h=e.nodeType&&mt(e),g=y.get(e,"fxshow");for(r in n.queue||(null==(a=C._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,f.always(function(){f.always(function(){a.unqueued--,C.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],bn.test(i)){if(delete t[r],o=o||"toggle"===i,i===(h?"hide":"show")){if("show"!==i||!g||void 0===g[r])continue;h=!0}d[r]=g&&g[r]||C.style(e,r)}if((u=!C.isEmptyObject(t))||!C.isEmptyObject(d))for(r in c&&1===e.nodeType&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],null==(l=g&&g.display)&&(l=y.get(e,"display")),"none"===(c=C.css(e,"display"))&&(l?c=l:(Ct([e],!0),l=e.style.display||l,c=C.css(e,"display"),Ct([e]))),"inline"===c||"inline-block"===c&&null!=l)&&"none"===C.css(e,"float")&&(u||(f.done(function(){p.display=l}),null==l&&(c=p.display,l="none"===c?"":c)),p.display="inline-block"),n.overflow&&(p.overflow="hidden",f.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]})),u=!1,d)u||(g?"hidden"in g&&(h=g.hidden):g=y.access(e,"fxshow",{display:l}),o&&(g.hidden=!h),h&&Ct([e],!0),f.done(function(){for(r in h||Ct([e]),y.remove(e,"fxshow"),d)C.style(e,r,d[r])})),u=kn(h?g[r]:0,r,f),r in g||(g[r]=u.start,h&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?H.prefilters.unshift(e):H.prefilters.push(e)}}),C.speed=function(e,t,n){var r=e&&"object"==typeof e?C.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return C.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in C.fx.speeds?r.duration=C.fx.speeds[r.duration]:r.duration=C.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&C.dequeue(this,r.queue)},r},C.fn.extend({fadeTo:function(e,t,n,r){return this.filter(mt).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){function i(){var e=H(this,C.extend({},t),a);(o||y.get(this,"finish"))&&e.stop(!0)}var o=C.isEmptyObject(t),a=C.speed(e,n,r);return i.finish=i,o||!1===a.queue?this.each(i):this.queue(a.queue,i)},stop:function(i,e,o){function a(e){var t=e.stop;delete e.stop,t(o)}return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=C.timers,r=y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&xn.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||C.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=C.timers,o=n?n.length:0;for(t.finish=!0,C.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),C.each(["toggle","show","hide"],function(e,r){var i=C.fn[r];C.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(Cn(r,!0),e,t,n)}}),C.each({slideDown:Cn("show"),slideUp:Cn("hide"),slideToggle:Cn("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){C.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),C.timers=[],C.fx.tick=function(){var e,t=0,n=C.timers;for(yn=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||C.fx.stop(),yn=void 0},C.fx.timer=function(e){C.timers.push(e),C.fx.start()},C.fx.interval=13,C.fx.start=function(){vn||(vn=!0,wn())},C.fx.stop=function(){vn=null},C.fx.speeds={slow:600,fast:200,_default:400},C.fn.delay=function(r,e){return r=C.fx&&C.fx.speeds[r]||r,this.queue(e=e||"fx",function(e,t){var n=w.setTimeout(e,r);t.stop=function(){w.clearTimeout(n)}})},o=T.createElement("input"),i=T.createElement("select").appendChild(T.createElement("option")),o.type="checkbox",g.checkOn=""!==o.value,g.optSelected=i.selected,(o=T.createElement("input")).value="t",o.type="radio",g.radioValue="t"===o.value;var En,Sn=C.expr.attrHandle,jn=(C.fn.extend({attr:function(e,t){return c(this,C.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){C.removeAttr(this,e)})}}),C.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?C.prop(e,t,n):(1===o&&C.isXMLDoc(e)||(i=C.attrHooks[t.toLowerCase()]||(C.expr.match.bool.test(t)?En:void 0)),void 0!==n?null===n?void C.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):!(i&&"get"in i&&null!==(r=i.get(e,t)))&&null==(r=C.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){var n;if(!g.radioValue&&"radio"===t&&x(e,"input"))return n=e.value,e.setAttribute("type",t),n&&(e.value=n),t}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(q);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),En={set:function(e,t,n){return!1===t?C.removeAttr(e,n):e.setAttribute(n,n),n}},C.each(C.expr.match.bool.source.match(/\w+/g),function(e,t){var a=Sn[t]||C.find.attr;Sn[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=Sn[o],Sn[o]=r,r=null!=a(e,t,n)?o:null,Sn[o]=i),r}}),/^(?:input|select|textarea|button)$/i),An=/^(?:a|area)$/i;function Dn(e){return(e.match(q)||[]).join(" ")}function Nn(e){return e.getAttribute&&e.getAttribute("class")||""}function qn(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(q)||[]}C.fn.extend({prop:function(e,t){return c(this,C.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[C.propFix[e]||e]})}}),C.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&C.isXMLDoc(e)||(t=C.propFix[t]||t,i=C.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=C.find.attr(e,"tabindex");return t?parseInt(t,10):jn.test(e.nodeName)||An.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(C.propHooks.selected={get:function(e){e=e.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(e){e=e.parentNode;e&&(e.selectedIndex,e.parentNode)&&e.parentNode.selectedIndex}}),C.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){C.propFix[this.toLowerCase()]=this}),C.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){C(this).addClass(t.call(this,e,Nn(this)))}):(e=qn(t)).length?this.each(function(){if(r=Nn(this),n=1===this.nodeType&&" "+Dn(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Dn(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){C(this).removeClass(t.call(this,e,Nn(this)))}):arguments.length?(e=qn(t)).length?this.each(function(){if(r=Nn(this),n=1===this.nodeType&&" "+Dn(r)+" "){for(o=0;o<e.length;o++)for(i=e[o];-1<n.indexOf(" "+i+" ");)n=n.replace(" "+i+" "," ");a=Dn(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"==a||Array.isArray(t);return v(t)?this.each(function(e){C(this).toggleClass(t.call(this,e,Nn(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=qn(t),this.each(function(){if(s)for(o=C(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!=a||((r=Nn(this))&&y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",!r&&!1!==t&&y.get(this,"__className__")||""))}))},hasClass:function(e){for(var t,n=0,r=" "+e+" ";t=this[n++];)if(1===t.nodeType&&-1<(" "+Dn(Nn(t))+" ").indexOf(r))return!0;return!1}});function Mn(e){e.stopPropagation()}var On=/\r/g,Ln=(C.fn.extend({val:function(t){var n,e,r,i=this[0];return arguments.length?(r=v(t),this.each(function(e){1!==this.nodeType||(null==(e=r?t.call(this,e,C(this).val()):t)?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=C.map(e,function(e){return null==e?"":e+""})),(n=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&"set"in n&&void 0!==n.set(this,e,"value"))||(this.value=e)})):i?(n=C.valHooks[i.type]||C.valHooks[i.nodeName.toLowerCase()])&&"get"in n&&void 0!==(e=n.get(i,"value"))?e:"string"==typeof(e=i.value)?e.replace(On,""):null==e?"":e:void 0}}),C.extend({valHooks:{option:{get:function(e){var t=C.find.attr(e,"value");return null!=t?t:Dn(C.text(e))}},select:{get:function(e){for(var t,n=e.options,r=e.selectedIndex,i="select-one"===e.type,o=i?null:[],a=i?r+1:n.length,s=r<0?a:i?r:0;s<a;s++)if(((t=n[s]).selected||s===r)&&!t.disabled&&(!t.parentNode.disabled||!x(t.parentNode,"optgroup"))){if(t=C(t).val(),i)return t;o.push(t)}return o},set:function(e,t){for(var n,r,i=e.options,o=C.makeArray(t),a=i.length;a--;)((r=i[a]).selected=-1<C.inArray(C.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),C.each(["radio","checkbox"],function(){C.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<C.inArray(C(e).val(),t)}},g.checkOn||(C.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),w.location),Hn={guid:Date.now()},Rn=/\?/,Pn=(C.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new w.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||C.error("Invalid XML: "+(n?C.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t},/^(?:focusinfocus|focusoutblur)$/),Fn=(C.extend(C.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f=[n||T],d=B.call(e,"type")?e.type:e,p=B.call(e,"namespace")?e.namespace.split("."):[],h=c=o=n=n||T;if(3!==n.nodeType&&8!==n.nodeType&&!Pn.test(d+C.event.triggered)&&(-1<d.indexOf(".")&&(d=(p=d.split(".")).shift(),p.sort()),s=d.indexOf(":")<0&&"on"+d,(e=e[C.expando]?e:new C.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=p.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:C.makeArray(t,[e]),l=C.event.special[d]||{},r||!l.trigger||!1!==l.trigger.apply(n,t))){if(!r&&!l.noBubble&&!P(n)){for(a=l.delegateType||d,Pn.test(a+d)||(h=h.parentNode);h;h=h.parentNode)f.push(h),o=h;o===(n.ownerDocument||T)&&f.push(o.defaultView||o.parentWindow||w)}for(i=0;(h=f[i++])&&!e.isPropagationStopped();)c=h,e.type=1<i?a:l.bindType||d,(u=(y.get(h,"events")||Object.create(null))[e.type]&&y.get(h,"handle"))&&u.apply(h,t),(u=s&&h[s])&&u.apply&&ft(h)&&(e.result=u.apply(h,t),!1===e.result)&&e.preventDefault();return e.type=d,r||e.isDefaultPrevented()||l._default&&!1!==l._default.apply(f.pop(),t)||!ft(n)||s&&v(n[d])&&!P(n)&&((o=n[s])&&(n[s]=null),C.event.triggered=d,e.isPropagationStopped()&&c.addEventListener(d,Mn),n[d](),e.isPropagationStopped()&&c.removeEventListener(d,Mn),C.event.triggered=void 0,o)&&(n[s]=o),e.result}},simulate:function(e,t,n){n=C.extend(new C.Event,n,{type:e,isSimulated:!0});C.event.trigger(n,null,t)}}),C.fn.extend({trigger:function(e,t){return this.each(function(){C.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return C.event.trigger(e,t,n,!0)}}),/\[\]$/),In=/\r?\n/g,Wn=/^(?:submit|button|image|reset|file)$/i,_n=/^(?:input|select|textarea|keygen)/i;C.param=function(e,t){function n(e,t){t=v(t)?t():t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==t?"":t)}var r,i=[];if(null==e)return"";if(Array.isArray(e)||e.jquery&&!C.isPlainObject(e))C.each(e,function(){n(this.name,this.value)});else for(r in e)!function n(r,e,i,o){if(Array.isArray(e))C.each(e,function(e,t){i||Fn.test(r)?o(r,t):n(r+"["+("object"==typeof t&&null!=t?e:"")+"]",t,i,o)});else if(i||"object"!==Y(e))o(r,e);else for(var t in e)n(r+"["+t+"]",e[t],i,o)}(r,e[r],t,n);return i.join("&")},C.fn.extend({serialize:function(){return C.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=C.prop(this,"elements");return e?C.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!C(this).is(":disabled")&&_n.test(this.nodeName)&&!Wn.test(e)&&(this.checked||!kt.test(e))}).map(function(e,t){var n=C(this).val();return null==n?null:Array.isArray(n)?C.map(n,function(e){return{name:t.name,value:e.replace(In,"\r\n")}}):{name:t.name,value:n.replace(In,"\r\n")}}).get()}});var zn=/%20/g,Bn=/#.*$/,$n=/([?&])_=[^&]*/,Un=/^(.*?):[ \t]*([^\r\n]*)$/gm,Xn=/^(?:GET|HEAD)$/,Vn=/^\/\//,Yn={},Gn={},Qn="*/".concat("*"),Jn=T.createElement("a");function Kn(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(q)||[];if(v(t))for(;n=i[r++];)"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Zn(t,r,i,o){var a={},s=t===Gn;function u(e){var n;return a[e]=!0,C.each(t[e]||[],function(e,t){t=t(r,i,o);return"string"!=typeof t||s||a[t]?s?!(n=t):void 0:(r.dataTypes.unshift(t),u(t),!1)}),n}return u(r.dataTypes[0])||!a["*"]&&u("*")}function er(e,t){var n,r,i=C.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r=r||{})[n]=t[n]);return r&&C.extend(!0,e,r),e}Jn.href=Ln.href,C.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ln.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ln.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":C.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?er(er(e,C.ajaxSettings),t):er(C.ajaxSettings,e)},ajaxPrefilter:Kn(Yn),ajaxTransport:Kn(Gn),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0);var u,l,c,n,f,d,p,r,h=C.ajaxSetup({},t=t||{}),g=h.context||h,m=h.context&&(g.nodeType||g.jquery)?C(g):C.event,y=C.Deferred(),v=C.Callbacks("once memory"),b=h.statusCode||{},i={},o={},a="canceled",x={readyState:0,getResponseHeader:function(e){var t;if(d){if(!n)for(n={};t=Un.exec(c);)n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return d?c:null},setRequestHeader:function(e,t){return null==d&&(e=o[e.toLowerCase()]=o[e.toLowerCase()]||e,i[e]=t),this},overrideMimeType:function(e){return null==d&&(h.mimeType=e),this},statusCode:function(e){if(e)if(d)x.always(e[x.status]);else for(var t in e)b[t]=[b[t],e[t]];return this},abort:function(e){e=e||a;return u&&u.abort(e),s(0,e),this}};if(y.promise(x),h.url=((e||h.url||Ln.href)+"").replace(Vn,Ln.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(q)||[""],null==h.crossDomain){e=T.createElement("a");try{e.href=h.url,e.href=e.href,h.crossDomain=Jn.protocol+"//"+Jn.host!=e.protocol+"//"+e.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=C.param(h.data,h.traditional)),Zn(Yn,h,t,x),!d){for(r in(p=C.event&&h.global)&&0==C.active++&&C.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Xn.test(h.type),l=h.url.replace(Bn,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(zn,"+")):(e=h.url.slice(l.length),h.data&&(h.processData||"string"==typeof h.data)&&(l+=(Rn.test(l)?"&":"?")+h.data,delete h.data),!1===h.cache&&(l=l.replace($n,"$1"),e=(Rn.test(l)?"&":"?")+"_="+Hn.guid+++e),h.url=l+e),h.ifModified&&(C.lastModified[l]&&x.setRequestHeader("If-Modified-Since",C.lastModified[l]),C.etag[l])&&x.setRequestHeader("If-None-Match",C.etag[l]),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&x.setRequestHeader("Content-Type",h.contentType),x.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+Qn+"; q=0.01":""):h.accepts["*"]),h.headers)x.setRequestHeader(r,h.headers[r]);if(h.beforeSend&&(!1===h.beforeSend.call(g,x,h)||d))return x.abort();if(a="abort",v.add(h.complete),x.done(h.success),x.fail(h.error),u=Zn(Gn,h,t,x)){if(x.readyState=1,p&&m.trigger("ajaxSend",[x,h]),d)return x;h.async&&0<h.timeout&&(f=w.setTimeout(function(){x.abort("timeout")},h.timeout));try{d=!1,u.send(i,s)}catch(e){if(d)throw e;s(-1,e)}}else s(-1,"No Transport")}return x;function s(e,t,n,r){var i,o,a,s=t;d||(d=!0,f&&w.clearTimeout(f),u=void 0,c=r||"",x.readyState=0<e?4:0,r=200<=e&&e<300||304===e,n&&(a=function(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a=a||i}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(h,x,n)),!r&&-1<C.inArray("script",h.dataTypes)&&C.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){}),a=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(h,a,x,r),r?(h.ifModified&&((n=x.getResponseHeader("Last-Modified"))&&(C.lastModified[l]=n),n=x.getResponseHeader("etag"))&&(C.etag[l]=n),204===e||"HEAD"===h.type?s="nocontent":304===e?s="notmodified":(s=a.state,i=a.data,r=!(o=a.error))):(o=s,!e&&s||(s="error",e<0&&(e=0))),x.status=e,x.statusText=(t||s)+"",r?y.resolveWith(g,[i,s,x]):y.rejectWith(g,[x,s,o]),x.statusCode(b),b=void 0,p&&m.trigger(r?"ajaxSuccess":"ajaxError",[x,h,r?i:o]),v.fireWith(g,[x,s]),p&&(m.trigger("ajaxComplete",[x,h]),--C.active||C.event.trigger("ajaxStop")))}},getJSON:function(e,t,n){return C.get(e,t,n,"json")},getScript:function(e,t){return C.get(e,void 0,t,"script")}}),C.each(["get","post"],function(e,i){C[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),C.ajax(C.extend({url:e,type:i,dataType:r,data:t,success:n},C.isPlainObject(e)&&e))}}),C.ajaxPrefilter(function(e){for(var t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),C._evalUrl=function(e,t,n){return C.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){C.globalEval(e,t,n)}})},C.fn.extend({wrapAll:function(e){return this[0]&&(v(e)&&(e=e.call(this[0])),e=C(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){C(this).wrapInner(n.call(this,e))}):this.each(function(){var e=C(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){C(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){C(this).replaceWith(this.childNodes)}),this}}),C.expr.pseudos.hidden=function(e){return!C.expr.pseudos.visible(e)},C.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},C.ajaxSettings.xhr=function(){try{return new w.XMLHttpRequest}catch(e){}};var tr={0:200,1223:204},nr=C.ajaxSettings.xhr(),rr=(g.cors=!!nr&&"withCredentials"in nr,g.ajax=nr=!!nr,C.ajaxTransport(function(i){var o,a;if(g.cors||nr&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(tr[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&w.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),C.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),C.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return C.globalEval(e),e}}}),C.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),C.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=C("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),T.head.appendChild(r[0])},abort:function(){i&&i()}}}),[]),ir=/(=)\?(?=&|$)|\?\?/,or=(C.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=rr.pop()||C.expando+"_"+Hn.guid++;return this[e]=!0,e}}),C.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(ir.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&ir.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(ir,"$1"+r):!1!==e.jsonp&&(e.url+=(Rn.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||C.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=w[r],w[r]=function(){o=arguments},n.always(function(){void 0===i?C(w).removeProp(r):w[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,rr.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),g.createHTMLDocument=((e=T.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===e.childNodes.length),C.parseHTML=function(e,t,n){var r;return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(g.createHTMLDocument?((r=(t=T.implementation.createHTMLDocument("")).createElement("base")).href=T.location.href,t.head.appendChild(r)):t=T),r=!n&&[],(n=Ge.exec(e))?[t.createElement(n[1])]:(n=Dt([e],t,r),r&&r.length&&C(r).remove(),C.merge([],n.childNodes)))},C.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Dn(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&C.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?C("<div>").append(C.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},C.expr.pseudos.animated=function(t){return C.grep(C.timers,function(e){return t===e.elem}).length},C.offset={setOffset:function(e,t,n){var r,i,o,a,s=C.css(e,"position"),u=C(e),l={};"static"===s&&(e.style.position="relative"),o=u.offset(),r=C.css(e,"top"),a=C.css(e,"left"),s=("absolute"===s||"fixed"===s)&&-1<(r+a).indexOf("auto")?(i=(s=u.position()).top,s.left):(i=parseFloat(r)||0,parseFloat(a)||0),null!=(t=v(t)?t.call(e,n,C.extend({},o)):t).top&&(l.top=t.top-o.top+i),null!=t.left&&(l.left=t.left-o.left+s),"using"in t?t.using.call(e,l):u.css(l)}},C.fn.extend({offset:function(t){var e,n;return arguments.length?void 0===t?this:this.each(function(e){C.offset.setOffset(this,t,e)}):(n=this[0])?n.getClientRects().length?(e=n.getBoundingClientRect(),n=n.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===C.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===C.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=C(e).offset()).top+=C.css(e,"borderTopWidth",!0),i.left+=C.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-C.css(r,"marginTop",!0),left:t.left-i.left-C.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===C.css(e,"position");)e=e.offsetParent;return e||vt})}}),C.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;C.fn[t]=function(e){return c(this,function(e,t,n){var r;if(P(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),C.each(["top","left"],function(e,n){C.cssHooks[n]=an(g.pixelPosition,function(e,t){if(t)return t=on(e,n),Zt.test(t)?C(e).position()[n]+"px":t})}),C.each({Height:"height",Width:"width"},function(a,s){C.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){C.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return c(this,function(e,t,n){var r;return P(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?C.css(e,t,i):C.style(e,t,n,i)},s,n?e:void 0,n)}})}),C.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){C.fn[t]=function(e){return this.on(t,e)}}),C.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),C.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){C.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g),ar=(C.proxy=function(e,t){var n,r;if("string"==typeof t&&(r=e[t],t=e,e=r),v(e))return n=s.call(arguments,2),(r=function(){return e.apply(t||this,n.concat(s.call(arguments)))}).guid=e.guid=e.guid||C.guid++,r},C.holdReady=function(e){e?C.readyWait++:C.ready(!0)},C.isArray=Array.isArray,C.parseJSON=JSON.parse,C.nodeName=x,C.isFunction=v,C.isWindow=P,C.camel
8952Case=M,C.type=Y,C.now=Date.now,C.isNumeric=function(e){var t=C.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},C.trim=function(e){return null==e?"":(e+"").replace(or,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return C}),w.jQuery),sr=w.$;return C.noConflict=function(e){return w.$===C&&(w.$=sr),e&&w.jQuery===C&&(w.jQuery=ar),C},void 0===R&&(w.jQuery=w.$=C),C})},{}]},{},[7]);; 8953/*jslint browser: true, evil: true */ 8954 8955var scripts = document.getElementsByTagName('script'), 8956 path = scripts[scripts.length - 1].src.split('?')[0], 8957 tarteaucitronForceCDN = (tarteaucitronForceCDN === undefined) ? '' : tarteaucitronForceCDN, 8958 cdn = (tarteaucitronForceCDN === '') ? path.split('/').slice(0, -1).join('/') + '/' : tarteaucitronForceCDN, 8959 alreadyLaunch = (alreadyLaunch === undefined) ? 0 : alreadyLaunch, 8960 tarteaucitronForceLanguage = (tarteaucitronForceLanguage === undefined) ? '' : tarteaucitronForceLanguage, 8961 tarteaucitronForceExpire = (tarteaucitronForceExpire === undefined) ? '' : tarteaucitronForceExpire, 8962 tarteaucitronCustomText = (tarteaucitronCustomText === undefined) ? '' : tarteaucitronCustomText, 8963 // tarteaucitronExpireInDay: true for day(s) value - false for hour(s) value 8964 tarteaucitronExpireInDay = (tarteaucitronExpireInDay === undefined || typeof tarteaucitronExpireInDay !== "boolean") ? true : tarteaucitronExpireInDay, 8965 timeExpire = 31536000000, 8966 tarteaucitronProLoadServices, 8967 tarteaucitronNoAdBlocker = false; 8968 8969 8970 8971var tarteaucitron = { 8972 "version": 20220322, 8973 "cdn": cdn, 8974 "user": {}, 8975 "lang": {}, 8976 "services": {}, 8977 "added": [], 8978 "idprocessed": [], 8979 "state": [], 8980 "launch": [], 8981 "parameters": {}, 8982 "isAjax": false, 8983 "reloadThePage": false, 8984 "events": { 8985 "init": function () {}, 8986 "load": function () {}, 8987 }, 8988 "init": function (params) { 8989 "use strict"; 8990 var origOpen; 8991 8992 tarteaucitron.parameters = params; 8993 if (alreadyLaunch === 0) { 8994 alreadyLaunch = 1; 8995 if (window.addEventListener) { 8996 window.addEventListener("load", function () { 8997 tarteaucitron.initEvents.loadEvent(false); 8998 }, false); 8999 window.addEventListener("scroll", function () { 9000 tarteaucitron.initEvents.scrollEvent(); 9001 }, false); 9002 9003 window.addEventListener("keydown", function (evt) { 9004 tarteaucitron.initEvents.keydownEvent(false, evt); 9005 }, false); 9006 window.addEventListener("hashchange", function () { 9007 tarteaucitron.initEvents.hashchangeEvent(); 9008 }, false); 9009 window.addEventListener("resize", function () { 9010 tarteaucitron.initEvents.resizeEvent(); 9011 }, false); 9012 } else { 9013 window.attachEvent("onload", function () { 9014 tarteaucitron.initEvents.loadEvent(true); 9015 });
vendor: 5,716 bytes, lines 9015-9148
9015 9016 window.attachEvent("onscroll", function () { 9017 tarteaucitron.initEvents.scrollEvent(); 9018 }); 9019 window.attachEvent("onkeydown", function (evt) { 9020 tarteaucitron.initEvents.keydownEvent(true, evt); 9021 9022 }); 9023 window.attachEvent("onhashchange", function () { 9024 tarteaucitron.initEvents.hashchangeEvent(); 9025 }); 9026 window.attachEvent("onresize", function () { 9027 tarteaucitron.initEvents.resizeEvent(); 9028 }); 9029 } 9030 9031 if (typeof XMLHttpRequest !== 'undefined') { 9032 origOpen = XMLHttpRequest.prototype.open; 9033 XMLHttpRequest.prototype.open = function () { 9034 9035 if (window.addEventListener) { 9036 this.addEventListener("load", function () { 9037 if (typeof tarteaucitronProLoadServices === 'function') { 9038 tarteaucitronProLoadServices(); 9039 } 9040 }, false); 9041 } else if (typeof this.attachEvent !== 'undefined') { 9042 this.attachEvent("onload", function () { 9043 if (typeof tarteaucitronProLoadServices === 'function') { 9044 tarteaucitronProLoadServices(); 9045 } 9046 }); 9047 } else { 9048 if (typeof tarteaucitronProLoadServices === 'function') { 9049 setTimeout(tarteaucitronProLoadServices, 1000); 9050 } 9051 } 9052 9053 try { 9054 origOpen.apply(this, arguments); 9055 } catch (err) {} 9056 }; 9057 } 9058 } 9059 9060 if(tarteaucitron.events.init) { 9061 tarteaucitron.events.init(); 9062 } 9063 }, 9064 "initEvents": { 9065 "loadEvent": function (isOldBrowser) { 9066 tarteaucitron.load(); 9067 tarteaucitron.fallback(['tarteaucitronOpenPanel'], function (elem) { 9068 if (isOldBrowser) { 9069 elem.attachEvent("onclick", function (event) { 9070 tarteaucitron.userInterface.openPanel(); 9071 event.preventDefault(); 9072 }); 9073 } else { 9074 elem.addEventListener("click", function (event) { 9075 tarteaucitron.userInterface.openPanel(); 9076 event.preventDefault(); 9077 }, false); 9078 } 9079 }, true); 9080 }, 9081 "keydownEvent": function (isOldBrowser, evt) { 9082 if (evt.keyCode === 27) { 9083 tarteaucitron.userInterface.closePanel(); 9084 } 9085 9086 if (isOldBrowser) { 9087 if ( evt.keyCode === 9 && focusableEls.indexOf(evt.target) >= 0) { 9088 if ( evt.shiftKey ) /* shift + tab */ { 9089 if (document.activeElement === firstFocusableEl) { 9090 lastFocusableEl.focus(); 9091 evt.preventDefault(); 9092 } 9093 } else /* tab */ { 9094 if (document.activeElement === lastFocusableEl) { 9095 firstFocusableEl.focus(); 9096 evt.preventDefault(); 9097 } 9098 } 9099 } 9100 } 9101 }, 9102 "hashchangeEvent": function () { 9103 if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') { 9104 tarteaucitron.userInterface.openPanel(); 9105 } 9106 }, 9107 "resizeEvent": function () { 9108 var tacElem = document.getElementById('tarteaucitron'); 9109 var tacCookieContainer = document.getElementById('tarteaucitronCookiesListContainer'); 9110 9111 if (tacElem && tacElem.style.display === 'block') { 9112 tarteaucitron.userInterface.jsSizing('main'); 9113 } 9114 9115 if (tacCookieContainer && tacCookieContainer.style.display === 'block') { 9116 tarteaucitron.userInterface.jsSizing('cookie'); 9117 } 9118 }, 9119 "scrollEvent": function () { 9120 var scrollPos = window.pageYOffset || document.documentElement.scrollTop; 9121 var heightPosition; 9122 var tacPercentage = document.getElementById('tarteaucitronPercentage'); 9123 var tacAlertBig = document.getElementById('tarteaucitronAlertBig'); 9124 9125 if (tacAlertBig && !tarteaucitron.highPrivacy) { 9126 if (tacAlertBig.style.display === 'block') { 9127 heightPosition = tacAlertBig.offsetHeight + 'px'; 9128 9129 if (scrollPos > (screen.height * 2)) { 9130 tarteaucitron.userInterface.respondAll(true); 9131 } else if (scrollPos > (screen.height / 2)) { 9132 document.getElementById('tarteaucitronDisclaimerAlert').innerHTML = '<strong>' + tarteaucitron.lang.alertBigScroll + '</strong> ' + tarteaucitron.lang.alertBig; 9133 } 9134 9135 if (tacPercentage) { 9136 if (tarteaucitron.orientation === 'top') { 9137 tacPercentage.style.top = heightPosition; 9138 } else { 9139 tacPercentage.style.bottom = heightPosition; 9140 } 9141 tacPercentage.style.width = ((100 / (screen.height * 2)) * scrollPos) + '%'; 9142 } 9143 } 9144 } 9145 }, 9146 }, 9147 "load": function () { 9148 "use strict";
9149 var cdn = tarteaucitron.cdn, 9150 language = tarteaucitron.getLanguage(), 9151 useJSDelivrMinifiedJS = (cdn.indexOf('cdn.jsdelivr.net') >= 0), 9152 pathToLang = cdn + 'lang/tarteaucitron.' + language + (useJSDelivrMinifiedJS ? '.min' : '') + '.js?v=' + tarteaucitron.version, 9153 pathToServices = cdn + 'tarteaucitron.services' + (useJSDelivrMinifiedJS ? '.min' : '') + '.js?v=' + tarteaucitron.version, 9154 linkElement = document.createElement('link'), 9155 defaults = { 9156 "adblocker": false, 9157 "hashtag": '#tarteaucitron', 9158 "cookieName": 'tarteaucitron', 9159 "highPrivacy": true, 9160 "orientation": "middle", 9161 "bodyPosition": "bottom", 9162 "removeCredit": false, 9163 "showAlertSmall": false, 9164 "showIcon": true, 9165 "iconPosition": "BottomRight", 9166 "cookieslist": false, 9167 "handleBrowserDNTRequest": false, 9168 "DenyAllCta": true, 9169 "AcceptAllCta" : true, 9170 "moreInfoLink": true, 9171 "privacyUrl": "", 9172 "useExternalCss": false, 9173 "useExternalJs": false, 9174 "mandatory": true, 9175 "mandatoryCta": true, 9176 "closePopup": false, 9177 "groupServices": false, 9178 "serviceDefaultState": 'wait', 9179 }, 9180 params = tarteaucitron.parameters; 9181 9182 // Don't show the middle bar if we are on the privacy policy or more page 9183 if (((tarteaucitron.parameters.readmoreLink !== undefined && window.location.href == tarteaucitron.parameters.readmoreLink) || window.location.href == tarteaucitron.parameters.privacyUrl) && tarteaucitron.parameters.orientation == "middle") { 9184 tarteaucitron.parameters.orientation = "bottom"; 9185 } 9186 9187 // Step -1 9188 if (typeof tarteaucitronCustomPremium !== 'undefined') { 9189 tarteaucitronCustomPremium(); 9190 } 9191 9192 // Step 0: get params 9193 if (params !== undefined) { 9194 9195 for (var k in defaults) { 9196 if(!tarteaucitron.parameters.hasOwnProperty(k)) { 9197 tarteaucitron.parameters[k] = defaults[k]; 9198 } 9199 } 9200 } 9201 9202 // global 9203 tarteaucitron.orientation = tarteaucitron.parameters.orientation; 9204 tarteaucitron.hashtag = tarteaucitron.parameters.hashtag; 9205 tarteaucitron.highPrivacy = tarteaucitron.parameters.highPrivacy; 9206 tarteaucitron.handleBrowserDNTRequest = tarteaucitron.parameters.handleBrowserDNTRequest; 9207 tarteaucitron.customCloserId = tarteaucitron.parameters.customCloserId; 9208 9209 // Step 1: load css 9210 if ( !tarteaucitron.parameters.useExternalCss ) { 9211 linkElement.rel = 'stylesheet'; 9212 linkElement.type = 'text/css'; 9213 linkElement.href = cdn + 'css/tarteaucitron' + (useJSDelivrMinifiedJS ? '.min' : '') + '.css?v=' + tarteaucitron.version; 9214 document.getElementsByTagName('head')[0].appendChild(linkElement); 9215 } 9216 // Step 2: load language and services 9217 tarteaucitron.addInternalScript(pathToLang, '', function () { 9218 9219 if(tarteaucitronCustomText !== ''){ 9220 tarteaucitron.lang = tarteaucitron.AddOrUpdate(tarteaucitron.lang, tarteaucitronCustomText); 9221 } 9222 tarteaucitron.addInternalScript(pathToServices, '', function () { 9223 9224 // css for the middle bar TODO: add it on the css file 9225 if (tarteaucitron.orientation === 'middle') { 9226 var customThemeMiddle = document.createElement('style'), 9227 cssRuleMiddle = 'div#tarteaucitronRoot.tarteaucitronBeforeVisible:before {content: \'\';position: fixed;width: 100%;height: 100%;background: white;top: 0;left: 0;z-index: 999;opacity: 0.5;}div#tarteaucitronAlertBig:before {content: \'' + tarteaucitron.lang.middleBarHead + '\';font-size: 35px;}body #tarteaucitronRoot div#tarteaucitronAlertBig {width: 60%;min-width: 285px;height: auto;margin: auto;left: 50%;top: 50%;transform: translate(-50%, -50%);box-shadow: 0 0 9000px #000;border-radius: 20px;padding: 35px 25px;}
9227span#tarteaucitronDisclaimerAlert {padding: 0 30px;}#tarteaucitronRoot span#tarteaucitronDisclaimerAlert {margin: 10px 0 30px;display: block;text-align: center;font-size: 21px;}@media screen and (max-width: 900px) {div#tarteaucitronAlertBig button {margin: 0 auto 10px!important;display: block!important;}}'; 9228 9229 customThemeMiddle.type = 'text/css'; 9230 if (customThemeMiddle.styleSheet) { 9231 customThemeMiddle.styleSheet.cssText = cssRuleMiddle; 9232 } else { 9233 customThemeMiddle.appendChild(document.createTextNode(cssRuleMiddle)); 9234 } 9235 document.getElementsByTagName('head')[0].appendChild(customThemeMiddle); 9236 } 9237 9238 // css for the popup bar TODO: add it on the css file 9239 if (tarteaucitron.orientation === 'popup') { 9240 var customThemePopup = document.createElement('style'), 9241 cssRulePopup = 'div#tarteaucitronAlertBig:before {content: \'' + tarteaucitron.lang.middleBarHead + '\';font-size: 22px;}body #tarteaucitronRoot div#tarteaucitronAlertBig {bottom: 0;top: auto!important;left: 8px!important;right: auto!important;transform: initial!important;border-radius: 5px 5px 0 0!important;max-width: 250px!important;width: Calc(100% - 16px)!important;min-width: 0!important;padding: 25px 0;}span#tarteaucitronDisclaimerAlert {padding: 0 30px;font-size: 15px!important;}#tarteaucitronRoot span#tarteaucitronDisclaimerAlert {margin: 10px 0 30px;display: block;text-align: center;font-size: 21px;}div#tarteaucitronAlertBig button {margin: 0 auto 10px!important;display: block!important;width: Calc(100% - 60px);box-sizing: border-box;}'; 9242 9243 customThemePopup.type = 'text/css'; 9244 if (customThemePopup.styleSheet) { 9245 customThemePopup.styleSheet.cssText = cssRulePopup; 9246 } else { 9247 customThemePopup.appendChild(document.createTextNode(cssRulePopup)); 9248 } 9249 document.getElementsByTagName('head')[0].appendChild(customThemePopup); 9250 } 9251 9252 var body = document.body, 9253 div = document.createElement('div'), 9254 html = '', 9255 index, 9256 orientation = 'Top', 9257 cat = ['ads', 'analytic', 'api', 'comment', 'social', 'support', 'video', 'other'], 9258 i; 9259 9260 cat = cat.sort(function (a, b) { 9261 if (tarteaucitron.lang[a].title > tarteaucitron.lang[b].title) { return 1; } 9262 if (tarteaucitron.lang[a].title < tarteaucitron.lang[b].title) { return -1; } 9263 return 0; 9264 }); 9265 9266 // Step 3: prepare the html 9267 html += '<div role="heading" aria-level="1" id="tac_title" class="tac_visually-hidden">' + tarteaucitron.lang.title + '</div>'; 9268 html += '<div id="tarteaucitronPremium"></div>'; 9269 if (tarteaucitron.reloadThePage) { 9270 html += '<button type="button" id="tarteaucitronBack" aria-label="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')"></button>'; 9271 } else { 9272 html += '<button type="button" id="tarteaucitronBack" aria-label="' + tarteaucitron.lang.close + '" title="' + tarteaucitron.lang.close + '"></button>'; 9273 } 9274 html += '<div id="tarteaucitron" role="dialog" aria-modal="true" aria-labelledby="dialogTitle" tabindex="-1">'; 9275 if (tarteaucitron.reloadThePage) { 9276 html += ' <button type="button" id="tarteaucitronClosePanel" aria-label="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')">'; 9277 } else { 9278 html += ' <button type="button" id="tarteaucitronClosePanel">'; 9279 } 9280 html += ' ' + tarteaucitron.lang.close; 9281 html += ' </button>'; 9282 html += ' <div id="tarteaucitronServices">'; 9283 html += ' <div class="tarteaucitronLine tarteaucitronMainLine" id="tarteaucitronMainLineOffset">';
vendor: 11,410 bytes, lines 9284-9425
9284 html += ' <span class="tarteaucitronH1" role="heading" aria-level="1" id="dialogTitle">'+ tarteaucitron.lang.title + '</span>'; 9285 html += ' <div id="tarteaucitronInfo">'; 9286 html += ' ' + tarteaucitron.lang.disclaimer; 9287 if (tarteaucitron.parameters.privacyUrl !== "") { 9288 html += ' <br/><br/>'; 9289 html += ' <button type="button" id="tarteaucitronPrivacyUrlDialog" role="link">'; 9290 html += ' ' + tarteaucitron.lang.privacyUrl; 9291 html += ' </button>'; 9292 } 9293 html += ' </div>'; 9294 html += ' <div class="tarteaucitronName">'; 9295 html += ' <span class="tarteaucitronH2" role="heading" aria-level="2">' + tarteaucitron.lang.all + '</span>'; 9296 html += ' </div>'; 9297 html += ' <div class="tarteaucitronAsk" id="tarteaucitronScrollbarAdjust">'; 9298 html += ' <button type="button" id="tarteaucitronAllAllowed" class="tarteaucitronAllow">'; 9299 html += ' <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allowAll; 9300 html += ' </button> '; 9301 html += ' <button type="button" id="tarteaucitronAllDenied" class="tarteaucitronDeny">'; 9302 html += ' <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.denyAll; 9303 html += ' </button>'; 9304 html += ' </div>'; 9305 html += ' </div>'; 9306 html += ' <div class="tarteaucitronBorder">'; 9307 html += ' <div class="clear"></div><ul>'; 9308 9309 9310 if (tarteaucitron.parameters.mandatory == true) { 9311 html += '<li id="tarteaucitronServicesTitle_mandatory">'; 9312 html += '<div class="tarteaucitronTitle">'; 9313 html += ' <button type="button" tabindex="-1"><span class="tarteaucitronPlus" aria-hidden="true"></span> ' + tarteaucitron.lang.mandatoryTitle + '</button>'; 9314 html += '</div>'; 9315 html += '<ul id="tarteaucitronServices_mandatory">'; 9316 html += '<li class="tarteaucitronLine">'; 9317 html += ' <div class="tarteaucitronName">'; 9318 html += ' <span class="tarteaucitronH3" role="heading" aria-level="3">' + tarteaucitron.lang.mandatoryText + '</span>'; 9319 html += ' <span class="tarteaucitronListCookies" aria-hidden="true"></span><br/>'; 9320 html += ' </div>'; 9321 if (tarteaucitron.parameters.mandatoryCta == true) { 9322 html += ' <div class="tarteaucitronAsk">'; 9323 html += ' <button type="button" class="tarteaucitronAllow" tabindex="-1" disabled>'; 9324 html += ' <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow; 9325 html += ' </button> '; 9326 html += ' <button type="button" class="tarteaucitronDeny" style="visibility:hidden" tabindex="-1">'; 9327 html += ' <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.deny; 9328 html += ' </button> '; 9329 html += ' </div>'; 9330 } 9331 html += '</li>'; 9332 html += '</ul></li>'; 9333 } 9334 9335 for (i = 0; i < cat.length; i += 1) { 9336 html += ' <li id="tarteaucitronServicesTitle_' + cat[i] + '" class="tarteaucitronHidden">'; 9337 html += ' <div class="tarteaucitronTitle" role="heading" aria-level="2">'; 9338 html += ' <button type="button" class="catToggleBtn" aria-expanded="false" data-cat="tarteaucitronDetails' + cat[i] + '"><span class="tarteaucitronPlus" aria-hidden="true"></span> ' + tarteaucitron.lang[cat[i]].title + '</button>'; 9339 html += ' </div>'; 9340 html += ' <div id="tarteaucitronDetails' + cat[i] + '" class="tarteaucitronDetails tarteaucitronInfoBox">'; 9341 html += ' ' + tarteaucitron.lang[cat[i]].details; 9342 html += ' </div>'; 9343 html += ' <ul id="tarteaucitronServices_' + cat[i] + '"></ul></li>'; 9344 } 9345 html += ' <li id="tarteaucitronNoServicesTitle" class="tarteaucitronLine">' + tarteaucitron.lang.noServices + '</li>'; 9346 html += ' </ul>'; 9347 html += ' <div class="tarteaucitronHidden tarteaucitron-spacer-20" id="tarteaucitronScrollbarChild"></div>'; 9348 if (tarteaucitron.parameters.removeCredit === false) { 9349 html += ' <a class="tarteaucitronSelfLink" href="https://tarteaucitron.io/" rel="nofollow noreferrer noopener" target="_blank" title="tarteaucitron ' + tarteaucitron.lang.newWindow + '"><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHcAAAAeCAYAAAAWwoEYAAADl0lEQVRoge1Y0W3bQAx9CjKARlC+9GVUmqDJBHEmiDyB6wkcTxBngtgTxJ0gzgQW4C/9aYOmE6g4lTQo+k6y3Rb94QOERNQd+cjj8XiGwWAwGAwGg8FgMBgMBoPB8F8RNRXe+whEKe7c36ZCAeCRxC9Rig2PUd8kPgAsoxSfQ3YAzAA8D/HwYYCb05kBKKO0teFkmbC1jlKsAnq/Abjn+QBqAIsoRS30ttwG/HNz1wH/XIxWTicLdvtW7xTAGEAMtP685CNsBTe2d/BLydfXAG57SEnMAST0zgYZSUCPk02bCvkJduIzuJzDLfPolbY+tLKmar+/8+IRePy4qdpE03qHuH8fipFb4N2+XdA3AJ/0vaQxt7s9FvkIS2XvtqnwM0rxpOQfbnE5G2LhTCmUO2fHIngOmcv+KG3HafDchB6ntwjYqenR2PqC7sOZ3E7FXHB0vqxoFyUyLh7OEH7LOGouvhhN3eIBeKXv0n5MsufdHqXcwYR5U2EbpV35lSspVPJmQj4TcgRK7jTg5IzmPUhhwM5a2WHUFCx+NgiDucmgh7idikLovHFlL0pxQ9xzX+IIP9Y6FrJsqhjlQpZRAkFVDCjZfcCHt6bqJDmuh5ylCWx0RVnk3oumaknqTH5sqrY0fBWyULaHUIgAgxb46MxV3DbieAhxOxUxjSuljig9lMQ/Bcfoi9BTEv9aLORSndVxYOH525sUDC6u2gWxcNzBNRxPanyh3ktKinOgy3WoxPbtUM0t6RkbQnzBnFPgi9GCOEubY9UffIryz9iKRe8s/FUfEWosJJGxagp85bpUO3VywQ46lOtAWfNxKwa4JXQ+628+bpxYGXXMzp5rXH401VEyXwIdowXFaKWSMFHvMTVmGnc+P3oXV2QOiBCfgex8QtcQCbcQE/H+eoHzrkFo1KM7zVO4jVVj5s6lRiWF7zyXyfRMc97J3tzj87mYqZ7E2YjzUct9GUi4tjHLR8dVkBLjQcuHFleWvQfRNEhFR7uX7pkctOwvZXsft7sAtyldEUIN2UTeLxnEfxKYswzdi88BdbZ8hifUoSMftQvP+muRwN6+Q3DeqqRExP9QmTtcheiHh0Ot1x2i2km1bP9pbufw5zZdyWsOrh7vQae5OZWbsMv30pi7cd/CKj3coPEVaCP4Zhx4eQWhOZ1Y9MTXGyP8/iGjEyfa1T4fO/4Lea9vBoPBYDAYDAaDwWAwGAwGwz8GgF8siXCCbrSRhgAAAABJRU5ErkJggg==" alt="tarteaucitron.io" /></a>'; 9350 } 9351 html += ' </div>'; 9352 html += ' </div>'; 9353 html += '</div>'; 9354 9355 if (tarteaucitron.parameters.orientation === 'bottom') { 9356 orientation = 'Bottom'; 9357 } 9358 9359 if (tarteaucitron.parameters.highPrivacy && !tarteaucitron.parameters.AcceptAllCta) { 9360 html += '<div tabindex="-1" id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">'; 9361 //html += '<div class="tarteaucitronAlertBigWrapper">'; 9362 html += ' <span id="tarteaucitronDisclaimerAlert">'; 9363 html += ' ' + tarteaucitron.lang.alertBigPrivacy; 9364 html += ' </span>'; 9365 //html += ' <span class="tarteaucitronAlertBigBtnWrapper">'; 9366 html += ' <button type="button" id="tarteaucitronPersonalize" aria-label="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '">'; 9367 html += ' ' + tarteaucitron.lang.personalize; 9368 html += ' </button>'; 9369 9370 if (tarteaucitron.parameters.privacyUrl !== "") { 9371 html += ' <button role="link" type="button" id="tarteaucitronPrivacyUrl">'; 9372 html += ' ' + tarteaucitron.lang.privacyUrl; 9373 html += ' </button>'; 9374 } 9375 9376 //html += ' </span>'; 9377 //html += '</div>'; 9378 html += '</div>'; 9379 } else { 9380 html += '<div tabindex="-1" id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + '">'; 9381 //html += '<div class="tarteaucitronAlertBigWrapper">'; 9382 html += ' <span id="tarteaucitronDisclaimerAlert">'; 9383 9384 if (tarteaucitron.parameters.highPrivacy) { 9385 html += ' ' + tarteaucitron.lang.alertBigPrivacy; 9386 } else { 9387 html += ' ' + tarteaucitron.lang.alertBigClick + ' ' + tarteaucitron.lang.alertBig; 9388 } 9389 9390 html += ' </span>'; 9391 //html += ' <span class="tarteaucitronAlertBigBtnWrapper">'; 9392 html += ' <button type="button" class="tarteaucitronCTAButton tarteaucitronAllow" id="tarteaucitronPersonalize2">'; 9393 html += ' <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.acceptAll; 9394 html += ' </button>'; 9395 9396 9397 if (tarteaucitron.parameters.DenyAllCta) { 9398 if (tarteaucitron.reloadThePage) { 9399 html += ' <button type="button" class="tarteaucitronCTAButton tarteaucitronDeny" id="tarteaucitronAllDenied2" aria-label="' + tarteaucitron.lang.denyAll + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.denyAll + ' (' + tarteaucitron.lang.reload + ')">'; 9400 } else { 9401 html += ' <button type="button" class="tarteaucitronCTAButton tarteaucitronDeny" id="tarteaucitronAllDenied2">'; 9402 } 9403 html += ' <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.denyAll; 9404 html += ' </button>'; 9405 //html += ' <br/><br/>'; 9406 } 9407 9408 html += ' <button type="button" id="tarteaucitronCloseAlert" aria-label="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.personalize + ' ' + tarteaucitron.lang.modalWindow + '">'; 9409 html += ' ' + tarteaucitron.lang.personalize; 9410 html += ' </button>'; 9411 9412 if (tarteaucitron.parameters.privacyUrl !== "") { 9413 html += ' <button type="button" id="tarteaucitronPrivacyUrl" role="link">'; 9414 html += ' ' + tarteaucitron.lang.privacyUrl; 9415 html += ' </button>'; 9416 } 9417 9418 //html += ' </span>'; 9419 //html += '</div>'; 9420 html += '</div>'; 9421 html += '<div id="tarteaucitronPercentage"></div>'; 9422 } 9423 9424 if (tarteaucitron.parameters.showIcon === true) { 9425 html += '<div id="tarteaucitronIcon" class="tarteaucitronIcon' + tarteaucitron.parameters.iconPosition + '" style="display: block
vendor: 4,897 bytes, lines 9425-9453
9425">'; 9426 html += ' <button type="button" id="tarteaucitronManager" aria-label="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '">'; 9427 html += ' <img src="' + (tarteaucitron.parameters.iconSrc ? tarteaucitron.parameters.iconSrc : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAGA0lEQVRoge1a207bWBRdBtJwLYZhKDMVmlSK1LxNkPo+ZH6g8B6p5AuALwC+APoFoVLeoT8whPeRSt+CZKmZVu3AiIsRlEtCktGyjy8xzuXYhvahS0JJHJ/4rLP3XnuffcAPfGdQ7mM6jRLSAF4BxqsbewB2lRS2o35mpEQaJcwCyANIdLi1DGBNSWEzqmdHRqRRwjqAJclhtExOSUEP+/xIiDRKhhUWfL7ShTtBuJnqcw+/z4Ql0xNmMEwSSz4kuNIzSgpjSsqYJP/GeE185wYJroedRyiLNEpGLLzzrHSuk+83SgbxvOcyyRaDziWsRVZkSRDinpzPbwVGWIucuohsKynMS47fAQyls/BMSRmKJo3AFhG5wm2N1wF+Zs3zebbFfR0RxrXcJHQlgH+LMW616pR/WiIMEXfW3mtzXyeEGWsjKot8c4TOI98L+iKaR5PS6IUk88RLAO9F8UjrbYoYMOosNavpfmODIiwRXRR/G3ohaWVo1RU/c30jV8ab2mV8qVGzHWBOLyTLZiWs5Rolg/C3ySOi0tXP/k4aEwOwSBKPJs7Rp16ABJTe+p1xVX0It/owqqdDEMRoqd3RFxqDPh20Ig6VEPVC0i5RSCD+6wl6HlW7GksSlUMV11/GrUs5NasFLusDE9ELSVphXemtJwaT/8JyIRvxNNCfBmIiNdR04LII3DSrbe0yjqvyJF/ppptqVlt+MCLCEh/oOkPPP6N38Mb5cnQBGFsEqmXg5j3QMwoMzwGnr4HYbybBq13gZAOom/FO63zdf2qQArCsZrUN2TlJy69eSDKYV+6Q4MpP75ivHzPA53ngaBW4eGuSOt0A/lsGPmXMz0+3TFJcTfFbPfFbfnwlhON+iQhlWmA82CQ4ocQ7c6KcfL3DHuls0yT6Sx4YnLXJDCQOIRRv5yGIJBgP8Sdisj2qubpc5UGJmo+W49ifVmzL8HcpGhQPvZCUKiCliIhEN0tr2OCqHuSA8gwQ/92MkU7gxEmeVqGrTTgpxPXbUrtGWYus0I9thRIraagRQUIDf7Qn4yZhKRiFQIyhfMfUr3yblokVWSJ6k8xSnc7eNN/RjowfCYiFoDUFer1S3gW6JiJ8Nt30EMbEhU+vzSIztuRYjRLsR8IHLjlf7HZ+MrWWEXxNmbvapt4jGSqZRYSkGUetSNTPzHsui5YMQ2ajJUNks6mw4wT54Ok2ShnzzIPCUGshzawCRKy5FqvrTZe0RWzQGvw79m67XZjKmxJrLsICjtZa55gxXy+6F4sYsEtxTqhXdRTLC8ulSDaWoCLsolfN+8YUhOsJV709H7Cudr0LlVEtzqBcN+shEyThdR941OnAbF8pirKJqXyupTRTtQSReiVmXW1j7oBErB0d9xM2WEd5J9ZKYtuR4WKwwBSoORbpGrJ5ZI9lt71irJmGX1px0JYE26uNErawr2zfIcP4OHEKXm66PA3wjpCNEfpJunI4muifPjKvsFCkGjExTq63yxMJsZNMYF/J4HmDC5A3Yq36jy0ClePHVhwuu/b1HSFlEfHD5ZtD1bEK44Qu1mWys6tbWmZyPWckzlPTGiRw/XHCuk+q4Rek+mVrVL/UppwrdDEGNV2kpyuhccgc5Oxm9vWnn+19vJrVpLor0kTUrGacMplb1CfOFyTD4o9uNrHqr2Z+ZMSp1c2XcVSORnh9Q81q3k599ETgkNnjg0nGzi10K7rX+bZpHbrblPcY5A4Zxk2xcjzCvTpd9027Aa0QtouyyrKFRR6D/04DwkFGvHPXM3Qda/Jb4nPgI7hQLVM1q5HIBt2MzQNa57Z1DiiLAGa5Mi+O4Sz3Mpp6laPHO6InII3ITnX1QtI+EOX+m9ZxleOZ/j9PiuKoLi3aqXPuEoSye/Vhkm+LalbLtHhMS0R6zu7aZ3vP2jOjL7QVv4McxhcDnZIelAQibGIbULOapf3PuE1Vs9qeaOTdkVKr00gCQiw4NlBzDvf1Lxx+uP5r3Dgv5KQZRzWn+GRwz8jmDS8itUg7iB6vLuJCF5Uty4A9mVKkFR6MiJDachST/oHvHgD+B4SoUIitpF05AAAAAElFTkSuQmCC') + '" alt="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.icon + ' ' + tarteaucitron.lang.modalWindow + '">'; 9428 html += ' </button>'; 9429 html += '</div>'; 9430 } 9431 9432 if (tarteaucitron.parameters.showAlertSmall === true) { 9433 html += '<div id="tarteaucitronAlertSmall" class="tarteaucitronAlertSmall' + orientation + '">'; 9434 html += ' <button type="button" id="tarteaucitronManager" aria-label="' + tarteaucitron.lang.alertSmall + ' ' + tarteaucitron.lang.modalWindow + '" title="' + tarteaucitron.lang.alertSmall + ' ' + tarteaucitron.lang.modalWindow + '">'; 9435 html += ' ' + tarteaucitron.lang.alertSmall; 9436 html += ' <span id="tarteaucitronDot">'; 9437 html += ' <span id="tarteaucitronDotGreen"></span>'; 9438 html += ' <span id="tarteaucitronDotYellow"></span>'; 9439 html += ' <span id="tarteaucitronDotRed"></span>'; 9440 html += ' </span>'; 9441 if (tarteaucitron.parameters.cookieslist === true) { 9442 html += ' </button><!-- @whitespace'; 9443 html += ' --><button type="button" id="tarteaucitronCookiesNumber" aria-expanded="false" aria-controls="tarteaucitronCookiesListContainer">0</button>'; 9444 html += ' <div id="tarteaucitronCookiesListContainer">'; 9445 if (tarteaucitron.reloadThePage) { 9446 html += ' <button type="button" id="tarteaucitronClosePanelCookie" aria-label="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')" title="' + tarteaucitron.lang.close + ' (' + tarteaucitron.lang.reload + ')">'; 9447 } else { 9448 html += ' <button type="button" id="tarteaucitronClosePanelCookie">'; 9449 } 9450 html += ' ' + tarteaucitron.lang.close; 9451 html += ' </button>'; 9452 html += ' <div class="tarteaucitronCookiesListMain" id="tarteaucitronCookiesTitle">'; 9453 html += ' <span class="tarteaucitronH2" role="heading" aria-level="
vendor: 12,634 bytes, lines 9453-9657
94532" id="tarteaucitronCookiesNumberBis">0 cookie</span>'; 9454 html += ' </div>'; 9455 html += ' <div id="tarteaucitronCookiesList"></div>'; 9456 html += ' </div>'; 9457 } else { 9458 html += ' </div>'; 9459 } 9460 html += '</div>'; 9461 } 9462 9463 tarteaucitron.addInternalScript(tarteaucitron.cdn + 'advertising' + (useJSDelivrMinifiedJS ? '.min' : '') + '.js?v=' + tarteaucitron.version, '', function () { 9464 if (tarteaucitronNoAdBlocker === true || tarteaucitron.parameters.adblocker === false) { 9465 9466 // create a wrapper container at the same level than tarteaucitron so we can add an aria-hidden when tarteaucitron is opened 9467 /*var wrapper = document.createElement('div'); 9468 wrapper.id = "tarteaucitronContentWrapper"; 9469 9470 while (document.body.firstChild) 9471 { 9472 wrapper.appendChild(document.body.firstChild); 9473 } 9474 9475 // Append the wrapper to the body 9476 document.body.appendChild(wrapper);*/ 9477 9478 div.id = 'tarteaucitronRoot'; 9479 if (tarteaucitron.parameters.bodyPosition === 'top') { 9480 // Prepend tarteaucitron: #tarteaucitronRoot first-child of the body for better accessibility 9481 var bodyFirstChild = body.firstChild; 9482 body.insertBefore(div, bodyFirstChild); 9483 } 9484 else { 9485 // Append tarteaucitron: #tarteaucitronRoot last-child of the body 9486 body.appendChild(div, body); 9487 } 9488 9489 div.setAttribute('data-nosnippet', 'true'); 9490 div.setAttribute('lang', language); 9491 div.setAttribute('role', 'region'); 9492 div.setAttribute('aria-labelledby', 'tac_title'); 9493 9494 div.innerHTML = html; 9495 9496 //ie compatibility 9497 var tacRootAvailableEvent; 9498 if(typeof(Event) === 'function') { 9499 tacRootAvailableEvent = new Event("tac.root_available"); 9500 }else if (typeof(document.createEvent) === 'function'){ 9501 tacRootAvailableEvent = document.createEvent('Event'); 9502 tacRootAvailableEvent.initEvent("tac.root_available", true, true); 9503 } 9504 //end ie compatibility 9505 9506 if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacRootAvailableEvent);} 9507 9508 if (tarteaucitron.job !== undefined) { 9509 tarteaucitron.job = tarteaucitron.cleanArray(tarteaucitron.job); 9510 for (index = 0; index < tarteaucitron.job.length; index += 1) { 9511 tarteaucitron.addService(tarteaucitron.job[index]); 9512 } 9513 } else { 9514 tarteaucitron.job = []; 9515 } 9516 9517 if (tarteaucitron.job.length === 0) { 9518 tarteaucitron.userInterface.closeAlert(); 9519 } 9520 9521 tarteaucitron.isAjax = true; 9522 9523 tarteaucitron.job.push = function (id) { 9524 9525 // ie <9 hack 9526 if (typeof tarteaucitron.job.indexOf === 'undefined') { 9527 tarteaucitron.job.indexOf = function (obj, start) { 9528 var i, 9529 j = this.length; 9530 for (i = (start || 0); i < j; i += 1) { 9531 if (this[i] === obj) { return i; } 9532 } 9533 return -1; 9534 }; 9535 } 9536 9537 if (tarteaucitron.job.indexOf(id) === -1) { 9538 Array.prototype.push.call(this, id); 9539 } 9540 tarteaucitron.launch[id] = false; 9541 tarteaucitron.addService(id); 9542 }; 9543 9544 if (document.location.hash === tarteaucitron.hashtag && tarteaucitron.hashtag !== '') { 9545 tarteaucitron.userInterface.openPanel(); 9546 } 9547 9548 tarteaucitron.cookie.number(); 9549 setInterval(tarteaucitron.cookie.number, 60000); 9550 } 9551 }, tarteaucitron.parameters.adblocker); 9552 9553 if (tarteaucitron.parameters.adblocker === true) { 9554 setTimeout(function () { 9555 if (tarteaucitronNoAdBlocker === false) { 9556 html = '<div id="tarteaucitronAlertBig" class="tarteaucitronAlertBig' + orientation + ' tarteaucitron-display-block" role="alert" aria-live="polite">'; 9557 html += ' <p id="tarteaucitronDisclaimerAlert">'; 9558 html += ' ' + tarteaucitron.lang.adblock + '<br/>'; 9559 html += ' <strong>' + tarteaucitron.lang.adblock_call + '</strong>'; 9560 html += ' </p>'; 9561 html += ' <button type="button" class="tarteaucitronCTAButton" id="tarteaucitronCTAButton">'; 9562 html += ' ' + tarteaucitron.lang.reload; 9563 html += ' </button>'; 9564 html += '</div>'; 9565 html += '<div role="heading" aria-level="1" id="tac_title" class="tac_visually-hidden">' + tarteaucitron.lang.title + '</div>'; 9566 html += '<div id="tarteaucitronPremium"></div>'; 9567 9568 div.id = 'tarteaucitronRoot'; 9569 if (tarteaucitron.parameters.bodyPosition === 'top') { 9570 // Prepend tarteaucitron: #tarteaucitronRoot first-child of the body for better accessibility 9571 var bodyFirstChild = body.firstChild; 9572 body.insertBefore(div, bodyFirstChild); 9573 } 9574 else { 9575 // Append tarteaucitron: #tarteaucitronRoot last-child of the body 9576 body.appendChild(div, body); 9577 } 9578 9579 div.setAttribute('data-nosnippet', 'true'); 9580 div.setAttribute('lang', language); 9581 div.setAttribute('role', 'region'); 9582 div.setAttribute('aria-labelledby', 'tac_title'); 9583 9584 div.innerHTML = html; 9585 } 9586 }, 1500); 9587 } 9588 if(tarteaucitron.parameters.closePopup === true){ 9589 setTimeout(function() { 9590 var closeElement = document.getElementById('tarteaucitronAlertBig'), 9591 closeSpan = document.createElement('span'); 9592 if (closeElement) { 9593 closeSpan.textContent = 'X'; 9594 closeSpan.setAttribute('id', "tarteaucitronCloseCross"); 9595 closeElement.insertBefore(closeSpan, closeElement.firstElementChild); 9596 } 9597 }, 100); 9598 } 9599 9600 9601 if(tarteaucitron.parameters.groupServices === true) { 9602 var tac_group_style = document.createElement('style'); 9603 tac_group_style.innerHTML = '.tarteaucitronTitle{display:none}'; 9604 document.head.appendChild(tac_group_style); 9605 var cats = document.querySelectorAll('[id^="tarteaucitronServicesTitle_"]') 9606 Array.prototype.forEach.call(cats, function(item) { 9607 var cat = item.getAttribute('id').replace(/^(tarteaucitronServicesTitle_)/, ""); 9608 if (cat !== "mandatory") { 9609 var html = ''; 9610 html += '<li class="tarteaucitronLine">'; 9611 html += ' <div class="tarteaucitronName">'; 9612 html += ' <span class="tarteaucitronH3" role="heading" aria-level="2">'+tarteaucitron.lang[cat].title+'</span>'; 9613 html += ' <span>'+tarteaucitron.lang[cat].details+'</span>'; 9614 html += ' <button type="button" aria-expanded="false" class="tarteaucitron-toggle-group" id="tarteaucitron-toggle-group-'+cat+'">'+tarteaucitron.lang.alertSmall+' ('+document.getElementById("tarteaucitronServices_"+cat).childElementCount+')</button>'; 9615 html += ' </div>'; 9616 html += ' <div class="tarteaucitronAsk" id="tarteaucitron-group-'+cat+'">'; 9617 html += ' <button type="button" aria-label="' + tarteaucitron.lang.allow + ' ' + tarteaucitron.lang[cat].title + '" class="tarteaucitronAllow" id="tarteaucitron-accept-group-'+cat+'">'; 9618 html += ' <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow; 9619 html += ' </button> '; 9620 html += ' <button type="button" aria-label="' + tarteaucitron.lang.deny + ' ' + tarteaucitron.lang[cat].title + '" class="tarteaucitronDeny" id="tarteaucitron-reject-group-'+cat+'">'; 9621 html += ' <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.deny; 9622 html += ' </button>'; 9623 html += ' </div>'; 9624 html += '</li>'; 9625 var ul = document.createElement('ul'); 9626 ul.innerHTML = html; 9627 item.insertBefore(ul, item.querySelector('#tarteaucitronServices_'+cat+'')); 9628 document.querySelector('#tarteaucitronServices_' + cat).style.display = 'none'; 9629 tarteaucitron.addClickEventToId("tarteaucitron-toggle-group-" + cat, function () { 9630 tarteaucitron.userInterface.toggle('tarteaucitronServices_' + cat); 9631 if (document.getElementById('tarteaucitronServices_' + cat).style.display == 'block') { 9632 tarteaucitron.userInterface.addClass('tarteaucitronServicesTitle_' + cat, 'tarteaucitronIsExpanded'); 9633 document.getElementById('tarteaucitron-toggle-group-'+cat).setAttribute('aria-expanded', 'true'); 9634 } else { 9635 tarteaucitron.userInterface.removeClass('tarteaucitronServicesTitle_' + cat, 'tarteaucitronIsExpanded'); 9636 document.getElementById('tarteaucitron-toggle-group-'+cat).setAttribute('aria-expanded', 'false'); 9637 } 9638 }); 9639 tarteaucitron.addClickEventToId("tarteaucitron-accept-group-" + cat, function () { 9640 tarteaucitron.userInterface.respondAll(true, cat); 9641 }); 9642 tarteaucitron.addClickEventToId("tarteaucitron-reject-group-" + cat, function () { 9643 tarteaucitron.userInterface.respondAll(false, cat); 9644 }); 9645 } 9646 }); 9647 } 9648 tarteaucitron.userInterface.color("", true); 9649 9650 // add a little timeout to be sure everything is accessible 9651 setTimeout(function () { 9652 9653 // Setup events 9654 tarteaucitron.addClickEventToId("tarteaucitronCloseCross", function () { 9655 tarteaucitron.userInterface.closeAlert(); 9656 }); 9657 tarteaucitron.addClickEventToId("tarteaucitronPersonalize", function () {
9658 tarteaucitron.userInterface.openPanel(); 9659 }); 9660 tarteaucitron.addClickEventToId("tarteaucitronPersonalize2", function () { 9661 tarteaucitron.userInterface.respondAll(true); 9662 }); 9663 tarteaucitron.addClickEventToId("tarteaucitronManager", function () { 9664 tarteaucitron.userInterface.openPanel(); 9665 }); 9666 tarteaucitron.addClickEventToId("tarteaucitronBack", function () { 9667 tarteaucitron.userInterface.closePanel(); 9668 }); 9669 tarteaucitron.addClickEventToId("tarteaucitronClosePanel", function () { 9670 tarteaucitron.userInterface.closePanel(); 9671 }); 9672 tarteaucitron.addClickEventToId("tarteaucitronClosePanelCookie", function () { 9673 tarteaucitron.userInterface.closePanel(); 9674 }); 9675 tarteaucitron.addClickEventToId("tarteaucitronPrivacyUrl", function () { 9676 document.location = tarteaucitron.parameters.privacyUrl; 9677 }); 9678 tarteaucitron.addClickEventToId("tarteaucitronPrivacyUrlDialog", function () { 9679 document.location = tarteaucitron.parameters.privacyUrl; 9680 }); 9681 tarteaucitron.addClickEventToId("tarteaucitronCookiesNumber", function () { 9682 tarteaucitron.userInterface.toggleCookiesList(); 9683 }); 9684 tarteaucitron.addClickEventToId("tarteaucitronAllAllowed", function () { 9685 tarteaucitron.userInterface.respondAll(true); 9686 }); 9687 tarteaucitron.addClickEventToId("tarteaucitronAllDenied", function () { 9688 tarteaucitron.userInterface.respondAll(false); 9689 }); 9690 tarteaucitron.addClickEventToId("tarteaucitronAllDenied2", function () { 9691 tarteaucitron.userInterface.respondAll(false, '', true); 9692 if (tarteaucitron.reloadThePage === true) { 9693 window.location.reload(); 9694 } 9695 }); 9696 tarteaucitron.addClickEventToId("tarteaucitronCloseAlert", function () {
vendor: 37,127 bytes, lines 9697-10432
9697 tarteaucitron.userInterface.openPanel(); 9698 }); 9699 tarteaucitron.addClickEventToId("tarteaucitronCTAButton", function () { 9700 location.reload(); 9701 }); 9702 var toggleBtns = document.getElementsByClassName("catToggleBtn"), i; 9703 for (i = 0; i < toggleBtns.length; i++) { 9704 toggleBtns[i].dataset.index = i; 9705 tarteaucitron.addClickEventToElement(toggleBtns[i], function () { 9706 tarteaucitron.userInterface.toggle('tarteaucitronDetails' + cat[this.dataset.index], 'tarteaucitronInfoBox'); 9707 if (document.getElementById('tarteaucitronDetails' + cat[this.dataset.index]).style.display === 'block') { 9708 this.setAttribute('aria-expanded', 'true'); 9709 } else { 9710 this.setAttribute('aria-expanded', 'false'); 9711 } 9712 return false; 9713 }); 9714 } 9715 9716 var allowBtns = document.getElementsByClassName("tarteaucitronAllow"); 9717 for (i = 0; i < allowBtns.length; i++) { 9718 tarteaucitron.addClickEventToElement(allowBtns[i], function () { 9719 tarteaucitron.userInterface.respond(this, true); 9720 }); 9721 } 9722 var denyBtns = document.getElementsByClassName("tarteaucitronDeny"); 9723 for (i = 0; i < denyBtns.length; i++) { 9724 tarteaucitron.addClickEventToElement(denyBtns[i], function () { 9725 tarteaucitron.userInterface.respond(this, false); 9726 }); 9727 } 9728 if(tarteaucitron.events.load) { 9729 tarteaucitron.events.load(); 9730 } 9731 }, 500); 9732 9733 }); 9734 }); 9735 }, 9736 "addService": function (serviceId) { 9737 "use strict"; 9738 var html = '', 9739 s = tarteaucitron.services, 9740 service = s[serviceId], 9741 cookie = tarteaucitron.cookie.read(), 9742 hostname = document.location.hostname, 9743 hostRef = document.referrer.split('/')[2], 9744 isNavigating = (hostRef === hostname && window.location.href !== tarteaucitron.parameters.privacyUrl), 9745 isAutostart = (!service.needConsent), 9746 isWaiting = (cookie.indexOf(service.key + '=wait') >= 0), 9747 isDenied = (cookie.indexOf(service.key + '=false') >= 0), 9748 isAllowed = ((cookie.indexOf(service.key + '=true') >= 0) || (!service.needConsent && cookie.indexOf(service.key + '=false') < 0)), 9749 isResponded = (cookie.indexOf(service.key + '=false') >= 0 || cookie.indexOf(service.key + '=true') >= 0), 9750 isDNTRequested = (navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1" || window.doNotTrack === "1"), 9751 currentStatus = (isAllowed) ? tarteaucitron.lang.allowed : tarteaucitron.lang.disallowed, 9752 state = (undefined !== service.defaultState) ? service.defaultState : 9753 (undefined !== tarteaucitron.parameters.serviceDefaultState ? tarteaucitron.parameters.serviceDefaultState : 'wait'); 9754 9755 9756 if (tarteaucitron.added[service.key] !== true) { 9757 tarteaucitron.added[service.key] = true; 9758 9759 html += '<li id="' + service.key + 'Line" class="tarteaucitronLine">'; 9760 html += ' <div class="tarteaucitronName">'; 9761 html += ' <span class="tarteaucitronH3" role="heading" aria-level="3">' + service.name + '</span>'; 9762 html += ' <span class="tacCurrentStatus" id="tacCurrentStatus' + service.key + '">'+currentStatus+'</span>'; 9763 html += ' <span class="tarteaucitronReadmoreSeparator"> - </span>'; 9764 html += ' <span id="tacCL' + service.key + '" class="tarteaucitronListCookies">'; 9765 if (drupalSettings.tacjs.services[service.key] !== undefined) { 9766 html += drupalSettings.tacjs.services[service.key].readMore; 9767 } 9768 html += '</span><br/>'; 9769 if (tarteaucitron.parameters.moreInfoLink == true) { 9770 9771 var link = 'https://tarteaucitron.io/service/' + service.key + '/'; 9772 if (service.readmoreLink !== undefined && service.readmoreLink !== '') { 9773 link = service.readmoreLink; 9774 } 9775 if (tarteaucitron.parameters.readmoreLink !== undefined && tarteaucitron.parameters.readmoreLink !== '') { 9776 link = tarteaucitron.parameters.readmoreLink; 9777 } 9778 html += ' <a href="' + link + '" target="_blank" rel="noreferrer noopener nofollow" title="' + tarteaucitron.lang.more + ' : ' + tarteaucitron.lang.cookieDetail + ' ' + service.name + ' ' + tarteaucitron.lang.ourSite + ' ' + tarteaucitron.lang.newWindow +'" class="tarteaucitronReadmoreInfo">'; 9779 html += ' ' + tarteaucitron.lang.more; 9780 html += ' </a>'; 9781 html += ' <span class="tarteaucitronReadmoreSeparator"> - </span>'; 9782 html += ' <a href="' + service.uri + '" target="_blank" rel="noreferrer noopener" title="' + tarteaucitron.lang.source + ' ' + service.name + ' ' + tarteaucitron.lang.newWindow + '" class="tarteaucitronReadmoreOfficial">'; 9783 html += ' ' + tarteaucitron.lang.source; 9784 html += ' </a>'; 9785 } 9786 9787 html += ' </div>'; 9788 html += ' <div class="tarteaucitronAsk">'; 9789 html += ' <button type="button" aria-label="' + tarteaucitron.lang.allow + ' ' + service.name + '" id="' + service.key + 'Allowed" class="tarteaucitronAllow">'; 9790 html += ' <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow; 9791 html += ' </button> '; 9792 html += ' <button type="button" aria-label="' + tarteaucitron.lang.deny + ' ' + service.name + '" id="' + service.key + 'Denied" class="tarteaucitronDeny">'; 9793 html += ' <span class="tarteaucitronCross" aria-hidden="true"></span> ' + tarteaucitron.lang.deny; 9794 html += ' </button>'; 9795 html += ' </div>'; 9796 html += '</li>'; 9797 9798 tarteaucitron.userInterface.css('tarteaucitronServicesTitle_' + service.type, 'display', 'block'); 9799 9800 if (document.getElementById('tarteaucitronServices_' + service.type) !== null) { 9801 document.getElementById('tarteaucitronServices_' + service.type).innerHTML += html; 9802 } 9803 9804 tarteaucitron.userInterface.css('tarteaucitronNoServicesTitle', 'display', 'none'); 9805 9806 tarteaucitron.userInterface.order(service.type); 9807 9808 tarteaucitron.addClickEventToId(service.key + 'Allowed', function () { 9809 tarteaucitron.userInterface.respond(this, true); 9810 }); 9811 9812 tarteaucitron.addClickEventToId(service.key + 'Denied', function () { 9813 tarteaucitron.userInterface.respond(this, false); 9814 }); 9815 } 9816 9817 tarteaucitron.pro('!' + service.key + '=' + isAllowed); 9818 9819 // allow by default for non EU 9820 if (isResponded === false && tarteaucitron.user.bypass === true) { 9821 isAllowed = true; 9822 tarteaucitron.cookie.create(service.key, true); 9823 } 9824 9825 if ((!isResponded && (isAutostart || (isNavigating && isWaiting)) && !tarteaucitron.highPrivacy) || isAllowed) { 9826 if (!isAllowed || (!service.needConsent && cookie.indexOf(service.key + '=false') < 0)) { 9827 tarteaucitron.cookie.create(service.key, true); 9828 } 9829 if (tarteaucitron.launch[service.key] !== true) { 9830 tarteaucitron.launch[service.key] = true; 9831 if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) { service.js(); } 9832 tarteaucitron.sendEvent(service.key + '_loaded'); 9833 } 9834 tarteaucitron.state[service.key] = true; 9835 tarteaucitron.userInterface.color(service.key, true); 9836 } else if (isDenied) { 9837 if (typeof service.fallback === 'function') { 9838 if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) { service.fallback(); } 9839 } 9840 tarteaucitron.state[service.key] = false; 9841 tarteaucitron.userInterface.color(service.key, false); 9842 } else if (!isResponded && isDNTRequested && tarteaucitron.handleBrowserDNTRequest) { 9843 tarteaucitron.cookie.create(service.key, 'false'); 9844 if (typeof service.fallback === 'function') { 9845 if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) { service.fallback(); } 9846 } 9847 tarteaucitron.state[service.key] = false; 9848 tarteaucitron.userInterface.color(service.key, false); 9849 } else if (!isResponded) { 9850 tarteaucitron.cookie.create(service.key, state); 9851 if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + service.key + "_") < 0) { 9852 if(true === state && typeof service.js === 'function') { 9853 service.js(); 9854 } else if (typeof service.fallback === 'function') { 9855 service.fallback(); 9856 } 9857 } 9858 9859 tarteaucitron.userInterface.color(service.key, state); 9860 9861 if( 'wait' === state ) { 9862 tarteaucitron.userInterface.openAlert(); 9863 } 9864 } 9865 9866 tarteaucitron.cookie.checkCount(service.key); 9867 tarteaucitron.sendEvent(service.key + '_added') 9868 }, 9869 "sendEvent" : function(event_key) { 9870 if(event_key !== undefined) { 9871 //ie compatibility 9872 var send_event_item; 9873 if(typeof(Event) === 'function') { 9874 send_event_item = new Event(event_key); 9875 }else if (typeof(document.createEvent) === 'function'){ 9876 send_event_item = document.createEvent('Event'); 9877 send_event_item.initEvent(event_key, true, true); 9878 } 9879 //end ie compatibility 9880 9881 document.dispatchEvent(send_event_item); 9882 } 9883 }, 9884 "cleanArray": function cleanArray(arr) { 9885 "use strict"; 9886 var i, 9887 len = arr.length, 9888 out = [], 9889 obj = {}, 9890 s = tarteaucitron.services; 9891 9892 for (i = 0; i < len; i += 1) { 9893 if (!obj[arr[i]]) { 9894 obj[arr[i]] = {}; 9895 if (tarteaucitron.services[arr[i]] !== undefined) { 9896 out.push(arr[i]); 9897 } 9898 } 9899 } 9900 9901 out = out.sort(function (a, b) { 9902 if (s[a].type + s[a].key > s[b].type + s[b].key) { return 1; } 9903 if (s[a].type + s[a].key < s[b].type + s[b].key) { return -1; } 9904 return 0; 9905 }); 9906 9907 return out; 9908 }, 9909 "userInterface": { 9910 "css": function (id, property, value) { 9911 "use strict"; 9912 if (document.getElementById(id) !== null) { 9913 9914 if (property == "display" && value == "none" && (id == "tarteaucitron" || id == "tarteaucitronBack" || id == "tarteaucitronAlertBig")) { 9915 document.getElementById(id).style["opacity"] = "0"; 9916 9917 setTimeout(function() {document.getElementById(id).style[property] = value;}, 200); 9918 } else { 9919 9920 document.getElementById(id).style[property] = value; 9921 9922 if (property == "display" && value == "block" && (id == "tarteaucitron" || id == "tarteaucitronAlertBig")) { 9923 document.getElementById(id).style["opacity"] = "0"; 9924 setTimeout(function() {document.getElementById(id).style["opacity"] = "1";}, 1); 9925 } 9926 9927 if (property == "display" && value == "block" && id == "tarteaucitronBack") { 9928 document.getElementById(id).style["opacity"] = "0"; 9929 setTimeout(function() {document.getElementById(id).style["opacity"] = "0.7";}, 1); 9930 } 9931 } 9932 } 9933 }, 9934 "addClass": function (id, className) { 9935 "use strict"; 9936 if (document.getElementById(id) !== null && document.getElementById(id).classList !== undefined) { 9937 document.getElementById(id).classList.add(className); 9938 } 9939 }, 9940 "removeClass": function (id, className) { 9941 "use strict"; 9942 if (document.getElementById(id) !== null && document.getElementById(id).classList !== undefined) { 9943 document.getElementById(id).classList.remove(className); 9944 } 9945 }, 9946 "respondAll": function (status, type, allowSafeAnalytics) { 9947 "use strict"; 9948 var s = tarteaucitron.services, 9949 service, 9950 key, 9951 index = 0; 9952 9953 for (index = 0; index < tarteaucitron.job.length; index += 1) { 9954 9955 if (typeof type !== 'undefined' && type !== '' && s[tarteaucitron.job[index]].type !== type) { 9956 continue; 9957 } 9958 9959 if (allowSafeAnalytics && typeof s[tarteaucitron.job[index]].safeanalytic !== "undefined" && s[tarteaucitron.job[index]].safeanalytic === true) { 9960 continue; 9961 } 9962 9963 service = s[tarteaucitron.job[index]]; 9964 key = service.key; 9965 if (tarteaucitron.state[key] !== status) { 9966 if (status === false && tarteaucitron.launch[key] === true) { 9967 tarteaucitron.reloadThePage = true; 9968 if (tarteaucitron.checkIfExist('tarteaucitronClosePanel')) { 9969 var ariaCloseValue = document.getElementById('tarteaucitronClosePanel').textContent.trim() + ' (' + tarteaucitron.lang.reload + ')'; 9970 document.getElementById('tarteaucitronClosePanel').setAttribute("aria-label", ariaCloseValue); 9971 document.getElementById('tarteaucitronClosePanel').setAttribute("title", ariaCloseValue); 9972 } 9973 } 9974 if (tarteaucitron.launch[key] !== true && status === true) { 9975 9976 tarteaucitron.pro('!' + key + '=engage'); 9977 9978 tarteaucitron.launch[key] = true; 9979 if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + key + "_") < 0) { tarteaucitron.services[key].js(); } 9980 tarteaucitron.sendEvent(key + '_loaded'); 9981 } 9982 var itemStatusElem = document.getElementById('tacCurrentStatus'+key); 9983 if(status == true){ 9984 itemStatusElem.innerHTML = tarteaucitron.lang.allowed; 9985 tarteaucitron.sendEvent(key + '_allowed'); 9986 }else{ 9987 itemStatusElem.innerHTML = tarteaucitron.lang.disallowed; 9988 tarteaucitron.sendEvent(key + '_disallowed'); 9989 } 9990 tarteaucitron.state[key] = status; 9991 tarteaucitron.cookie.create(key, status); 9992 tarteaucitron.userInterface.color(key, status); 9993 } 9994 } 9995 }, 9996 "respond": function (el, status) { 9997 "use strict"; 9998 if (el.id === '') { 9999 return; 10000 } 10001 var key = el.id.replace(new RegExp("(Eng[0-9]+|Allow|Deni)ed", "g"), ''); 10002 10003 if (key.substring(0, 13) === 'tarteaucitron' || key === '') {return;} 10004 10005 // return if same state 10006 if (tarteaucitron.state[key] === status) { 10007 return; 10008 } 10009 10010 if (status === false && tarteaucitron.launch[key] === true) { 10011 tarteaucitron.reloadThePage = true; 10012 if (tarteaucitron.checkIfExist('tarteaucitronClosePanel')) { 10013 var ariaCloseValue = document.getElementById('tarteaucitronClosePanel').textContent.trim() + ' (' + tarteaucitron.lang.reload + ')'; 10014 document.getElementById('tarteaucitronClosePanel').setAttribute("aria-label", ariaCloseValue); 10015 document.getElementById('tarteaucitronClosePanel').setAttribute("title", ariaCloseValue); 10016 } 10017 } 10018 10019 // if not already launched... launch the service 10020 if (status === true) { 10021 if (tarteaucitron.launch[key] !== true) { 10022 10023 tarteaucitron.pro('!' + key + '=engage'); 10024 10025 tarteaucitron.launch[key] = true; 10026 if (typeof tarteaucitronMagic === 'undefined' || tarteaucitronMagic.indexOf("_" + key + "_") < 0) { tarteaucitron.services[key].js(); } 10027 tarteaucitron.sendEvent(key + '_loaded'); 10028 } 10029 } 10030 var itemStatusElem = document.getElementById('tacCurrentStatus'+key); 10031 if(status == true){ 10032 itemStatusElem.innerHTML = tarteaucitron.lang.allowed; 10033 tarteaucitron.sendEvent(key + '_allowed'); 10034 }else{ 10035 itemStatusElem.innerHTML = tarteaucitron.lang.disallowed; 10036 tarteaucitron.sendEvent(key + '_disallowed'); 10037 } 10038 tarteaucitron.state[key] = status; 10039 tarteaucitron.cookie.create(key, status); 10040 tarteaucitron.userInterface.color(key, status); 10041 }, 10042 "color": function (key, status) { 10043 "use strict"; 10044 var c = 'tarteaucitron', 10045 nbDenied = 0, 10046 nbPending = 0, 10047 nbAllowed = 0, 10048 sum = tarteaucitron.job.length, 10049 index, 10050 s = tarteaucitron.services; 10051 10052 if (key !== "") { 10053 10054 if (status === true) { 10055 tarteaucitron.userInterface.addClass(key + 'Line', 'tarteaucitronIsAllowed'); 10056 tarteaucitron.userInterface.removeClass(key + 'Line', 'tarteaucitronIsDenied'); 10057 document.getElementById(key + 'Allowed').setAttribute('aria-pressed', 'true'); 10058 document.getElementById(key + 'Denied').setAttribute('aria-pressed', 'false'); 10059 } else if (status === false) { 10060 tarteaucitron.userInterface.removeClass(key + 'Line', 'tarteaucitronIsAllowed'); 10061 tarteaucitron.userInterface.addClass(key + 'Line', 'tarteaucitronIsDenied'); 10062 document.getElementById(key + 'Allowed').setAttribute('aria-pressed', 'false'); 10063 document.getElementById(key + 'Denied').setAttribute('aria-pressed', 'true'); 10064 } else { 10065 document.getElementById(key + 'Allowed').setAttribute('aria-pressed', 'false'); 10066 document.getElementById(key + 'Denied').setAttribute('aria-pressed', 'false'); 10067 } 10068 10069 // check if all services are allowed 10070 var sumToRemove = 0; 10071 for (index = 0; index < sum; index += 1) { 10072 10073 if (typeof s[tarteaucitron.job[index]].safeanalytic !== "undefined" && s[tarteaucitron.job[index]].safeanalytic === true) { 10074 sumToRemove += 1; 10075 continue; 10076 } 10077 10078 if (tarteaucitron.state[tarteaucitron.job[index]] === false) { 10079 nbDenied += 1; 10080 } else if (tarteaucitron.state[tarteaucitron.job[index]] === undefined) { 10081 nbPending += 1; 10082 } else if (tarteaucitron.state[tarteaucitron.job[index]] === true) { 10083 nbAllowed += 1; 10084 } 10085 } 10086 sum -= sumToRemove; 10087 10088 tarteaucitron.userInterface.css(c + 'DotGreen', 'width', ((100 / sum) * nbAllowed) + '%'); 10089 tarteaucitron.userInterface.css(c + 'DotYellow', 'width', ((100 / sum) * nbPending) + '%'); 10090 tarteaucitron.userInterface.css(c + 'DotRed', 'width', ((100 / sum) * nbDenied) + '%'); 10091 10092 if (nbDenied === 0 && nbPending === 0) { 10093 tarteaucitron.userInterface.removeClass(c + 'AllDenied', c + 'IsSelected'); 10094 tarteaucitron.userInterface.addClass(c + 'AllAllowed', c + 'IsSelected'); 10095 10096 tarteaucitron.userInterface.addClass(c + 'MainLineOffset', c + 'IsAllowed'); 10097 tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsDenied'); 10098 10099 document.getElementById(c + 'AllDenied').setAttribute('aria-pressed', 'false'); 10100 document.getElementById(c + 'AllAllowed').setAttribute('aria-pressed', 'true'); 10101 10102 } else if (nbAllowed === 0 && nbPending === 0) { 10103 tarteaucitron.userInterface.removeClass(c + 'AllAllowed', c + 'IsSelected'); 10104 tarteaucitron.userInterface.addClass(c + 'AllDenied', c + 'IsSelected'); 10105 10106 tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsAllowed'); 10107 tarteaucitron.userInterface.addClass(c + 'MainLineOffset', c + 'IsDenied'); 10108 10109 document.getElementById(c + 'AllDenied').setAttribute('aria-pressed', 'true'); 10110 document.getElementById(c + 'AllAllowed').setAttribute('aria-pressed', 'false'); 10111 10112 } else { 10113 tarteaucitron.userInterface.removeClass(c + 'AllAllowed', c + 'IsSelected'); 10114 tarteaucitron.userInterface.removeClass(c + 'AllDenied', c + 'IsSelected'); 10115 10116 tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsAllowed'); 10117 tarteaucitron.userInterface.removeClass(c + 'MainLineOffset', c + 'IsDenied'); 10118 10119 document.getElementById(c + 'AllDenied').setAttribute('aria-pressed', 'false'); 10120 document.getElementById(c + 'AllAllowed').setAttribute('aria-pressed', 'false'); 10121 } 10122 10123 // close the alert if all service have been reviewed 10124 if (nbPending === 0) { 10125 tarteaucitron.userInterface.closeAlert(); 10126 } 10127 10128 if (tarteaucitron.services[key].cookies.length > 0 && status === false) { 10129 tarteaucitron.cookie.purge(tarteaucitron.services[key].cookies); 10130 } 10131 10132 if (status === true) { 10133 if (document.getElementById('tacCL' + key) !== null) { 10134 if (drupalSettings.tacjs.services[key] !== undefined && drupalSettings.tacjs.services[key].readMore !== '' ) { 10135 document.getElementById('tacCL' + key).innerHTML = drupalSettings.tacjs.services[key].readMore; 10136 } else { 10137 document.getElementById('tacCL' + key).innerHTML = '...'; 10138 } 10139 } 10140 setTimeout(function () { 10141 tarteaucitron.cookie.checkCount(key); 10142 }, 2500); 10143 } else { 10144 tarteaucitron.cookie.checkCount(key); 10145 } 10146 10147 } 10148 10149 // groups 10150 var cats = document.querySelectorAll('[id^="tarteaucitronServicesTitle_"]') 10151 Array.prototype.forEach.call(cats, function(item) { 10152 var cat = item.getAttribute('id').replace(/^(tarteaucitronServicesTitle_)/, ""), 10153 total = document.getElementById("tarteaucitronServices_"+cat).childElementCount; 10154 var doc = document.getElementById("tarteaucitronServices_"+cat), 10155 groupdenied = 0, 10156 groupallowed = 0; 10157 for (var ii = 0; ii < doc.children.length; ii++) { 10158 if (doc.children[ii].className == "tarteaucitronLine tarteaucitronIsDenied") { 10159 groupdenied++; 10160 } 10161 if (doc.children[ii].className == "tarteaucitronLine tarteaucitronIsAllowed") { 10162 groupallowed++; 10163 } 10164 } 10165 if (total === groupallowed) { 10166 tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsDenied'); 10167 tarteaucitron.userInterface.addClass('tarteaucitron-group-'+cat, 'tarteaucitronIsAllowed'); 10168 10169 if (document.getElementById('tarteaucitron-reject-group-'+cat)) { 10170 document.getElementById('tarteaucitron-reject-group-'+cat).setAttribute('aria-pressed', 'false'); 10171 document.getElementById('tarteaucitron-accept-group-'+cat).setAttribute('aria-pressed', 'true'); 10172 } 10173 } 10174 if (total === groupdenied) { 10175 tarteaucitron.userInterface.addClass('tarteaucitron-group-'+cat, 'tarteaucitronIsDenied'); 10176 tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsAllowed'); 10177 10178 if (document.getElementById('tarteaucitron-reject-group-'+cat)) { 10179 document.getElementById('tarteaucitron-reject-group-'+cat).setAttribute('aria-pressed', 'true'); 10180 document.getElementById('tarteaucitron-accept-group-'+cat).setAttribute('aria-pressed', 'false'); 10181 } 10182 } 10183 if (total !== groupdenied && total !== groupallowed) { 10184 tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsDenied'); 10185 tarteaucitron.userInterface.removeClass('tarteaucitron-group-'+cat, 'tarteaucitronIsAllowed'); 10186 10187 if (document.getElementById('tarteaucitron-reject-group-'+cat)) { 10188 document.getElementById('tarteaucitron-reject-group-'+cat).setAttribute('aria-pressed', 'false'); 10189 document.getElementById('tarteaucitron-accept-group-'+cat).setAttribute('aria-pressed', 'false'); 10190 } 10191 } 10192 groupdenied = 0; 10193 groupallowed = 0; 10194 }); 10195 10196 }, 10197 "openPanel": function () { 10198 "use strict"; 10199 10200 tarteaucitron.userInterface.css('tarteaucitron', 'display', 'block'); 10201 tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block'); 10202 tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none'); 10203 10204 document.getElementById('tarteaucitronClosePanel').focus(); 10205 if (document.getElementsByTagName('body')[0].classList !== undefined) { 10206 document.getElementsByTagName('body')[0].classList.add('tarteaucitron-modal-open'); 10207 } 10208 tarteaucitron.userInterface.focusTrap(); 10209 tarteaucitron.userInterface.jsSizing('main'); 10210 10211 //ie compatibility 10212 var tacOpenPanelEvent; 10213 if(typeof(Event) === 'function') { 10214 tacOpenPanelEvent = new Event("tac.open_panel"); 10215 }else if (typeof(document.createEvent) === 'function'){ 10216 tacOpenPanelEvent = document.createEvent('Event'); 10217 tacOpenPanelEvent.initEvent("tac.open_panel", true, true); 10218 } 10219 //end ie compatibility 10220 10221 if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacOpenPanelEvent);} 10222 }, 10223 "closePanel": function () { 10224 "use strict"; 10225 10226 if (document.location.hash === tarteaucitron.hashtag) { 10227 if (window.history) { 10228 window.history.replaceState('', document.title, window.location.pathname + window.location.search); 10229 } else { 10230 document.location.hash = ''; 10231 } 10232 } 10233 if (tarteaucitron.checkIfExist('tarteaucitron')) { 10234 // accessibility: manage focus on close panel 10235 if (tarteaucitron.checkIfExist('tarteaucitronCloseAlert')) { 10236 document.getElementById('tarteaucitronCloseAlert').focus(); 10237 } else if (tarteaucitron.checkIfExist('tarteaucitronManager')) { 10238 document.getElementById('tarteaucitronManager').focus(); 10239 } else if (tarteaucitron.customCloserId && tarteaucitron.checkIfExist(tarteaucitron.customCloserId)) { 10240 document.getElementById(tarteaucitron.customCloserId).focus(); 10241 } 10242 tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none'); 10243 } 10244 10245 if (tarteaucitron.checkIfExist('tarteaucitronCookiesListContainer') && tarteaucitron.checkIfExist('tarteaucitronCookiesNumber')) { 10246 // accessibility: manage focus on close cookies list 10247 document.getElementById('tarteaucitronCookiesNumber').focus(); 10248 document.getElementById('tarteaucitronCookiesNumber').setAttribute("aria-expanded", "false"); 10249 tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'display', 'none'); 10250 } 10251 10252 tarteaucitron.fallback(['tarteaucitronInfoBox'], function (elem) { 10253 elem.style.display = 'none'; 10254 }, true); 10255 10256 if (tarteaucitron.reloadThePage === true) { 10257 window.location.reload(); 10258 } else { 10259 tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none'); 10260 } 10261 if (document.getElementsByTagName('body')[0].classList !== undefined) { 10262 document.getElementsByTagName('body')[0].classList.remove('tarteaucitron-modal-open'); 10263 } 10264 10265 //ie compatibility 10266 var tacClosePanelEvent; 10267 if(typeof(Event) === 'function') { 10268 tacClosePanelEvent = new Event("tac.close_panel"); 10269 }else if (typeof(document.createEvent) === 'function'){ 10270 tacClosePanelEvent = document.createEvent('Event'); 10271 tacClosePanelEvent.initEvent("tac.close_panel", true, true); 10272 } 10273 //end ie compatibility 10274 10275 if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacClosePanelEvent);} 10276 }, 10277 "focusTrap": function() { 10278 "use strict"; 10279 10280 var focusableEls, 10281 firstFocusableEl, 10282 lastFocusableEl, 10283 filtered; 10284 10285 focusableEls = document.getElementById('tarteaucitron').querySelectorAll('a[href], button'); 10286 filtered = []; 10287 10288 // get only visible items 10289 for (var i = 0, max = focusableEls.length; i < max; i++) { 10290 if (focusableEls[i].offsetHeight > 0) { 10291 filtered.push(focusableEls[i]); 10292 } 10293 } 10294 10295 firstFocusableEl = filtered[0]; 10296 lastFocusableEl = filtered[filtered.length - 1]; 10297 10298 //loop focus inside tarteaucitron 10299 document.getElementById('tarteaucitron').addEventListener("keydown", function (evt) { 10300 10301 if ( evt.key === 'Tab' || evt.keyCode === 9 ) { 10302 10303 if ( evt.shiftKey ) /* shift + tab */ { 10304 if (document.activeElement === firstFocusableEl) { 10305 lastFocusableEl.focus(); 10306 evt.preventDefault(); 10307 } 10308 } else /* tab */ { 10309 if (document.activeElement === lastFocusableEl) { 10310 firstFocusableEl.focus(); 10311 evt.preventDefault(); 10312 } 10313 } 10314 } 10315 }) 10316 }, 10317 "openAlert": function () { 10318 "use strict"; 10319 var c = 'tarteaucitron'; 10320 tarteaucitron.userInterface.css(c + 'Percentage', 'display', 'block'); 10321 tarteaucitron.userInterface.css(c + 'AlertSmall', 'display', 'none'); 10322 tarteaucitron.userInterface.css(c + 'Icon', 'display', 'none'); 10323 tarteaucitron.userInterface.css(c + 'AlertBig', 'display', 'block'); 10324 tarteaucitron.userInterface.addClass(c + 'Root', 'tarteaucitronBeforeVisible'); 10325 10326 //ie compatibility 10327 var tacOpenAlertEvent; 10328 if(typeof(Event) === 'function') { 10329 tacOpenAlertEvent = new Event("tac.open_alert"); 10330 }else if (typeof(document.createEvent) === 'function'){ 10331 tacOpenAlertEvent = document.createEvent('Event'); 10332 tacOpenAlertEvent.initEvent("tac.open_alert", true, true); 10333 } 10334 //end ie compatibility 10335 10336 if (document.getElementById('tarteaucitronAlertBig') !== null) { 10337 document.getElementById('tarteaucitronAlertBig').focus(); 10338 } 10339 10340 if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacOpenAlertEvent);} 10341 }, 10342 "closeAlert": function () { 10343 "use strict"; 10344 var c = 'tarteaucitron'; 10345 tarteaucitron.userInterface.css(c + 'Percentage', 'display', 'none'); 10346 tarteaucitron.userInterface.css(c + 'AlertSmall', 'display', 'block'); 10347 tarteaucitron.userInterface.css(c + 'Icon', 'display', 'block'); 10348 tarteaucitron.userInterface.css(c + 'AlertBig', 'display', 'none'); 10349 tarteaucitron.userInterface.removeClass(c + 'Root', 'tarteaucitronBeforeVisible'); 10350 tarteaucitron.userInterface.jsSizing('box'); 10351 10352 //ie compatibility 10353 var tacCloseAlertEvent; 10354 if(typeof(Event) === 'function') { 10355 tacCloseAlertEvent = new Event("tac.close_alert"); 10356 }else if (typeof(document.createEvent) === 'function'){ 10357 tacCloseAlertEvent = document.createEvent('Event'); 10358 tacCloseAlertEvent.initEvent("tac.close_alert", true, true); 10359 } 10360 //end ie compatibility 10361 10362 if (typeof(window.dispatchEvent) === 'function') {window.dispatchEvent(tacCloseAlertEvent);} 10363 }, 10364 "toggleCookiesList": function () { 10365 "use strict"; 10366 var div = document.getElementById('tarteaucitronCookiesListContainer'), 10367 togglediv = document.getElementById('tarteaucitronCookiesNumber'); 10368 10369 if (div === null) { 10370 return; 10371 } 10372 10373 if (div.style.display !== 'block') { 10374 tarteaucitron.cookie.number(); 10375 div.style.display = 'block'; 10376 togglediv.setAttribute("aria-expanded", "true"); 10377 tarteaucitron.userInterface.jsSizing('cookie'); 10378 tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none'); 10379 tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'block'); 10380 tarteaucitron.fallback(['tarteaucitronInfoBox'], function (elem) { 10381 elem.style.display = 'none'; 10382 }, true); 10383 } else { 10384 div.style.display = 'none'; 10385 togglediv.setAttribute("aria-expanded", "false"); 10386 tarteaucitron.userInterface.css('tarteaucitron', 'display', 'none'); 10387 tarteaucitron.userInterface.css('tarteaucitronBack', 'display', 'none'); 10388 } 10389 }, 10390 "toggle": function (id, closeClass) { 10391 "use strict"; 10392 var div = document.getElementById(id); 10393 10394 if (div === null) { 10395 return; 10396 } 10397 10398 if (closeClass !== undefined) { 10399 tarteaucitron.fallback([closeClass], function (elem) { 10400 if (elem.id !== id) { 10401 elem.style.display = 'none'; 10402 } 10403 }, true); 10404 } 10405 10406 if (div.style.display !== 'block') { 10407 div.style.display = 'block'; 10408 } else { 10409 div.style.display = 'none'; 10410 } 10411 }, 10412 "order": function (id) { 10413 "use strict"; 10414 var main = document.getElementById('tarteaucitronServices_' + id), 10415 allDivs, 10416 store = [], 10417 i; 10418 10419 if (main === null) { 10420 return; 10421 } 10422 10423 allDivs = main.childNodes; 10424 10425 if (typeof Array.prototype.map === 'function' && typeof Enumerable === 'undefined') { 10426 Array.prototype.map.call(main.children, Object).sort(function (a, b) { 10427 //var mainChildren = Array.from(main.children); 10428 //mainChildren.sort(function (a, b) { 10429 if (tarteaucitron.services[a.id.replace(/Line/g, '')].name > tarteaucitron.services[b.id.replace(/Line/g, '')].name) { return 1; } 10430 if (tarteaucitron.services[a.id.replace(/Line/g, '')].name < tarteaucitron.services[b.id.replace(/Line/g, '')].name) { return -1; } 10431 return 0; 10432 }
10432).forEach(function (element) { 10433 main.appendChild(element); 10434 }); 10435 } 10436 }, 10437 "jsSizing": function (type) { 10438 "use strict"; 10439 var scrollbarMarginRight = 10, 10440 scrollbarWidthParent, 10441 scrollbarWidthChild, 10442 servicesHeight, 10443 e = window, 10444 a = 'inner', 10445 windowInnerHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight, 10446 mainTop, 10447 mainHeight, 10448 closeButtonHeight, 10449 headerHeight, 10450 cookiesListHeight, 10451 cookiesCloseHeight, 10452 cookiesTitleHeight, 10453 paddingBox, 10454 alertSmallHeight, 10455 cookiesNumberHeight; 10456 10457 if (type === 'box') { 10458 if (document.getElementById('tarteaucitronAlertSmall') !== null && document.getElementById('tarteaucitronCookiesNumber') !== null) { 10459 10460 // reset 10461 tarteaucitron.userInterface.css('tarteaucitronCookiesNumber', 'padding', '0px 10px'); 10462 10463 // calculate 10464 alertSmallHeight = document.getElementById('tarteaucitronAlertSmall').offsetHeight; 10465 cookiesNumberHeight = document.getElementById('tarteaucitronCookiesNumber').offsetHeight; 10466 paddingBox = (alertSmallHeight - cookiesNumberHeight) / 2; 10467 10468 // apply 10469 tarteaucitron.userInterface.css('tarteaucitronCookiesNumber', 'padding', paddingBox + 'px 10px'); 10470 } 10471 } else if (type === 'main') { 10472 10473 // get the real window width for media query 10474 if (window.innerWidth === undefined) { 10475 a = 'client'; 10476 e = document.documentElement || document.body; 10477 } 10478 10479 // height of the services list container 10480 if (document.getElementById('tarteaucitron') !== null && document.getElementById('tarteaucitronClosePanel') !== null && document.getElementById('tarteaucitronMainLineOffset') !== null) { 10481 10482 // reset 10483 tarteaucitron.userInterface.css('tarteaucitronServices', 'height', 'auto'); 10484 10485 // calculate 10486 mainHeight = document.getElementById('tarteaucitron').offsetHeight; 10487 closeButtonHeight = document.getElementById('tarteaucitronClosePanel').offsetHeight; 10488 10489 // apply 10490 servicesHeight = (mainHeight - closeButtonHeight + 2); 10491 tarteaucitron.userInterface.css('tarteaucitronServices', 'height', servicesHeight + 'px'); 10492 tarteaucitron.userInterface.css('tarteaucitronServices', 'overflow-x', 'auto'); 10493 } 10494 10495 // align the main allow/deny button depending on scrollbar width 10496 if (document.getElementById('tarteaucitronServices') !== null && document.getElementById('tarteaucitronScrollbarChild') !== null) { 10497 10498 // media query 10499 if (e[a + 'Width'] <= 479) { 10500 //tarteaucitron.userInterface.css('tarteaucitronScrollbarAdjust', 'marginLeft', '11px'); 10501 } else if (e[a + 'Width'] <= 767) { 10502 scrollbarMarginRight = 12; 10503 } 10504 10505 scrollbarWidthParent = document.getElementById('tarteaucitronServices').offsetWidth; 10506 scrollbarWidthChild = document.getElementById('tarteaucitronScrollbarChild').offsetWidth; 10507 //tarteaucitron.userInterface.css('tarteaucitronScrollbarAdjust', 'marginRight', ((scrollbarWidthParent - scrollbarWidthChild) + scrollbarMarginRight) + 'px'); 10508 } 10509 10510 // center the main panel 10511 if (document.getElementById('tarteaucitron') !== null) { 10512 10513 // media query 10514 if (e[a + 'Width'] <= 767) { 10515 mainTop = 0; 10516 } else { 10517 mainTop = ((windowInnerHeight - document.getElementById('tarteaucitron').offsetHeight) / 2) - 21; 10518 } 10519 10520 if (document.getElementById('tarteaucitronMainLineOffset') !== null) { 10521 if (document.getElementById('tarteaucitron').offsetHeight < (windowInnerHeight / 2)) { 10522 mainTop -= document.getElementById('tarteaucitronMainLineOffset').offsetHeight; 10523 } 10524 } 10525 10526 // correct 10527 if (mainTop < 0) { 10528 mainTop = 0; 10529 } 10530 10531 // apply 10532 tarteaucitron.userInterface.css('tarteaucitron', 'top', mainTop + 'px'); 10533 } 10534 10535 10536 } else if (type === 'cookie') { 10537 10538 // put cookies list at bottom 10539 if (document.getElementById('tarteaucitronAlertSmall') !== null) { 10540 tarteaucitron.userInterface.css('tarteaucitronCookiesListContainer', 'bottom', (document.getElementById('tarteaucitronAlertSmall').offsetHeight) + 'px'); 10541 } 10542 10543 // height of cookies list 10544 if (document.getElementById('tarteaucitronCookiesListContainer') !== null) { 10545 10546 // reset 10547 tarteaucitron.userInterface.css('tarteaucitronCookiesList', 'height', 'auto'); 10548 10549 // calculate 10550 cookiesListHeight = document.getElementById('tarteaucitronCookiesListContainer').offsetHeight; 10551 cookiesCloseHeight = document.getElementById('tarteaucitronClosePanelCookie').offsetHeight; 10552 cookiesTitleHeight = document.getElementById('tarteaucitronCookiesTitle').offsetHeight; 10553 10554 // apply 10555 tarteaucitron.userInterface.css('tarteaucitronCookiesList', 'height', (cookie
vendor: 15,212 bytes, lines 10555-10894
10555sListHeight - cookiesCloseHeight - cookiesTitleHeight - 2) + 'px'); 10556 } 10557 } 10558 } 10559 }, 10560 "cookie": { 10561 "owner": {}, 10562 "create": function (key, status) { 10563 "use strict"; 10564 10565 if (tarteaucitronForceExpire !== '') { 10566 // The number of day(s)/hour(s) can't be higher than 1 year 10567 if ((tarteaucitronExpireInDay && tarteaucitronForceExpire < 365) || (!tarteaucitronExpireInDay && tarteaucitronForceExpire < 8760)) { 10568 if (tarteaucitronExpireInDay) { 10569 // Multiplication to tranform the number of days to milliseconds 10570 timeExpire = tarteaucitronForceExpire * 86400000; 10571 } else { 10572 // Multiplication to tranform the number of hours to milliseconds 10573 timeExpire = tarteaucitronForceExpire * 3600000; 10574 } 10575 } 10576 } 10577 10578 var d = new Date(), 10579 time = d.getTime(), 10580 expireTime = time + timeExpire, // 365 days 10581 regex = new RegExp("!" + key + "=(wait|true|false)", "g"), 10582 cookie = tarteaucitron.cookie.read().replace(regex, ""), 10583 value = tarteaucitron.parameters.cookieName + '=' + cookie + '!' + key + '=' + status, 10584 domain = (tarteaucitron.parameters.cookieDomain !== undefined && tarteaucitron.parameters.cookieDomain !== '') ? '; domain=' + tarteaucitron.parameters.cookieDomain : '', 10585 secure = location.protocol === 'https:' ? '; Secure' : ''; 10586 10587 d.setTime(expireTime); 10588 document.cookie = value + '; expires=' + d.toGMTString() + '; path=/' + domain + secure + '; samesite=lax'; 10589 }, 10590 "read": function () { 10591 "use strict"; 10592 var nameEQ = tarteaucitron.parameters.cookieName + "=", 10593 ca = document.cookie.split(';'), 10594 i, 10595 c; 10596 10597 for (i = 0; i < ca.length; i += 1) { 10598 c = ca[i]; 10599 while (c.charAt(0) === ' ') { 10600 c = c.substring(1, c.length); 10601 } 10602 if (c.indexOf(nameEQ) === 0) { 10603 return c.substring(nameEQ.length, c.length); 10604 } 10605 } 10606 return ''; 10607 }, 10608 "purge": function (arr) { 10609 "use strict"; 10610 var i; 10611 10612 for (i = 0; i < arr.length; i += 1) { 10613 10614 var rgxpCookie = new RegExp("^(.*;)?\\s*" + arr[i] + "\\s*=\\s*[^;]+(.*)?$"); 10615 if (document.cookie.match(rgxpCookie)) { 10616 document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/;'; 10617 document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/; domain=.' + location.hostname + ';'; 10618 document.cookie = arr[i] + '=; expires=Thu, 01 Jan 2000 00:00:00 GMT; path=/; domain=.' + location.hostname.split('.').slice(-2).join('.') + ';'; 10619 } 10620 } 10621 }, 10622 "checkCount": function (key) { 10623 "use strict"; 10624 var arr = tarteaucitron.services[key].cookies, 10625 nb = arr.length, 10626 nbCurrent = 0, 10627 html = '', 10628 i, 10629 status = document.cookie.indexOf(key + '=true'); 10630 10631 if (status >= 0 && nb === 0) { 10632 html += tarteaucitron.lang.useNoCookie; 10633 } else if (status >= 0) { 10634 for (i = 0; i < nb; i += 1) { 10635 if (document.cookie.indexOf(arr[i] + '=') !== -1) { 10636 nbCurrent += 1; 10637 if (tarteaucitron.cookie.owner[arr[i]] === undefined) { 10638 tarteaucitron.cookie.owner[arr[i]] = []; 10639 } 10640 if (tarteaucitron.cookie.crossIndexOf(tarteaucitron.cookie.owner[arr[i]], tarteaucitron.services[key].name) === false) { 10641 tarteaucitron.cookie.owner[arr[i]].push(tarteaucitron.services[key].name); 10642 } 10643 } 10644 } 10645 10646 if (nbCurrent > 0) { 10647 html += tarteaucitron.lang.useCookieCurrent + ' ' + nbCurrent + ' cookie'; 10648 if (nbCurrent > 1) { 10649 html += 's'; 10650 } 10651 html += '.'; 10652 } else { 10653 html += tarteaucitron.lang.useNoCookie; 10654 } 10655 } else if (nb === 0) { 10656 html = tarteaucitron.lang.noCookie; 10657 } else { 10658 html += tarteaucitron.lang.useCookie + ' ' + nb + ' cookie'; 10659 if (nb > 1) { 10660 html += 's'; 10661 } 10662 html += '.'; 10663 } 10664 10665 if (document.getElementById('tacCL' + key) !== null) { 10666 if (drupalSettings.tacjs.services[key] !== undefined && drupalSettings.tacjs.services[key].readMore !== '' ) { 10667 document.getElementById('tacCL' + key).innerHTML = drupalSettings.tacjs.services[key].readMore + '<br>' + html; 10668 } else { 10669 document.getElementById('tacCL' + key).innerHTML = html; 10670 } 10671 } 10672 }, 10673 "crossIndexOf": function (arr, match) { 10674 "use strict"; 10675 var i; 10676 for (i = 0; i < arr.length; i += 1) { 10677 if (arr[i] === match) { 10678 return true; 10679 } 10680 } 10681 return false; 10682 }, 10683 "number": function () { 10684 "use strict"; 10685 var cookies = document.cookie.split(';'), 10686 nb = (document.cookie !== '') ? cookies.length : 0, 10687 html = '', 10688 i, 10689 name, 10690 namea, 10691 nameb, 10692 c, 10693 d, 10694 s = (nb > 1) ? 's' : '', 10695 savedname, 10696 regex = /^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i, 10697 regexedDomain = (tarteaucitron.cdn.match(regex) !== null) ? tarteaucitron.cdn.match(regex)[1] : tarteaucitron.cdn, 10698 host = (tarteaucitron.domain !== undefined) ? tarteaucitron.domain : regexedDomain; 10699 10700 cookies = cookies.sort(function (a, b) { 10701 namea = a.split('=', 1).toString().replace(/ /g, ''); 10702 nameb = b.split('=', 1).toString().replace(/ /g, ''); 10703 c = (tarteaucitron.cookie.owner[namea] !== undefined) ? tarteaucitron.cookie.owner[namea] : '0'; 10704 d = (tarteaucitron.cookie.owner[nameb] !== undefined) ? tarteaucitron.cookie.owner[nameb] : '0'; 10705 if (c + a > d + b) { return 1; } 10706 if (c + a < d + b) { return -1; } 10707 return 0; 10708 }); 10709 10710 if (document.cookie !== '') { 10711 for (i = 0; i < nb; i += 1) { 10712 name = cookies[i].split('=', 1).toString().replace(/ /g, ''); 10713 if (tarteaucitron.cookie.owner[name] !== undefined && tarteaucitron.cookie.owner[name].join(' // ') !== savedname) { 10714 savedname = tarteaucitron.cookie.owner[name].join(' // '); 10715 html += '<div class="tarteaucitronHidden">'; 10716 html += ' <span class="tarteaucitronTitle tarteaucitronH3" role="heading" aria-level="3">'; 10717 html += ' ' + tarteaucitron.cookie.owner[name].join(' // '); 10718 html += ' </span>'; 10719 html += '</div><ul class="cookie-list">'; 10720 } else if (tarteaucitron.cookie.owner[name] === undefined && host !== savedname) { 10721 savedname = host; 10722 html += '<div class="tarteaucitronHidden">'; 10723 html += ' <span class="tarteaucitronTitle tarteaucitronH3" role="heading" aria-level="3">'; 10724 html += ' ' + host; 10725 html += ' </span>'; 10726 html += '</div><ul class="cookie-list">'; 10727 } 10728 html += '<li class="tarteaucitronCookiesListMain">'; 10729 html += ' <div class="tarteaucitronCookiesListLeft"><button type="button" class="purgeBtn" data-cookie="' + tarteaucitron.fixSelfXSS(cookies[i].split('=', 1)) + '"><strong>×</strong></button> <strong>' + tarteaucitron.fixSelfXSS(name) + '</strong>'; 10730 html += ' </div>'; 10731 html += ' <div class="tarteaucitronCookiesListRight">' + tarteaucitron.fixSelfXSS(cookies[i].split('=').slice(1).join('=')) + '</div>'; 10732 html += '</li>'; 10733 } 10734 html += '</ul>'; 10735 } else { 10736 html += '<div class="tarteaucitronCookiesListMain">'; 10737 html += ' <div class="tarteaucitronCookiesListLeft"><strong>-</strong></div>'; 10738 html += ' <div class="tarteaucitronCookiesListRight"></div>'; 10739 html += '</div>'; 10740 } 10741 10742 html += '<div class="tarteaucitronHidden tarteaucitron-spacer-20"></div>'; 10743 10744 if (document.getElementById('tarteaucitronCookiesList') !== null) { 10745 document.getElementById('tarteaucitronCookiesList').innerHTML = html; 10746 } 10747 10748 if (document.getElementById('tarteaucitronCookiesNumber') !== null) { 10749 document.getElementById('tarteaucitronCookiesNumber').innerHTML = nb; 10750 document.getElementById('tarteaucitronCookiesNumber').setAttribute("aria-label", nb + ' cookie' + s + " - " + tarteaucitron.lang.toggleInfoBox); 10751 document.getElementById('tarteaucitronCookiesNumber').setAttribute("title", nb + ' cookie' + s + " - " + tarteaucitron.lang.toggleInfoBox); 10752 } 10753 10754 if (document.getElementById('tarteaucitronCookiesNumberBis') !== null) { 10755 document.getElementById('tarteaucitronCookiesNumberBis').innerHTML = nb + ' cookie' + s; 10756 } 10757 10758 var purgeBtns = document.getElementsByClassName("purgeBtn"); 10759 for (i = 0; i < purgeBtns.length; i++) { 10760 tarteaucitron.addClickEventToElement(purgeBtns[i], function () { 10761 tarteaucitron.cookie.purge([this.dataset.cookie]); 10762 tarteaucitron.cookie.number(); 10763 tarteaucitron.userInterface.jsSizing('cookie'); 10764 return false; 10765 }); 10766 } 10767 10768 for (i = 0; i < tarteaucitron.job.length; i += 1) { 10769 tarteaucitron.cookie.checkCount(tarteaucitron.job[i]); 10770 } 10771 } 10772 }, 10773 "fixSelfXSS": function(html) { 10774 return html.toString().replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'"); 10775 }, 10776 "getLanguage": function () { 10777 "use strict"; 10778 10779 var availableLanguages = 'ar,bg,ca,cn,cs,da,de,et,el,en,es,fi,fr,hu,it,ja,lt,lv,nl,no,oc,pl,pt,ro,ru,se,sk,sv,tr,uk,vi,zh', 10780 defaultLanguage = 'en'; 10781 10782 if (tarteaucitronForceLanguage !== '') { 10783 if (availableLanguages.indexOf(tarteaucitronForceLanguage) !== -1) { 10784 return tarteaucitronForceLanguage; 10785 } 10786 } 10787 10788 // get the html lang 10789 if (availableLanguages.indexOf(document.documentElement.getAttribute("lang")) !== -1) { 10790 return document.documentElement.getAttribute("lang"); 10791 } 10792 10793 if (!navigator) { return defaultLanguage; } 10794 10795 var lang = navigator.language || navigator.browserLanguage || 10796 navigator.systemLanguage || navigator.userLang || null, 10797 userLanguage = lang ? lang.substr(0, 2) : null; 10798 10799 if (availableLanguages.indexOf(userLanguage) !== -1) { 10800 return userLanguage; 10801 } 10802 10803 return defaultLanguage; 10804 }, 10805 "getLocale": function () { 10806 "use strict"; 10807 if (!navigator) { return 'en_US'; } 10808 10809 var lang = navigator.language || navigator.browserLanguage || 10810 navigator.systemLanguage || navigator.userLang || null, 10811 userLanguage = lang ? lang.substr(0, 2) : null; 10812 10813 if (userLanguage === 'fr') { 10814 return 'fr_FR'; 10815 } else if (userLanguage === 'en') { 10816 return 'en_US'; 10817 } else if (userLanguage === 'de') { 10818 return 'de_DE'; 10819 } else if (userLanguage === 'es') { 10820 return 'es_ES'; 10821 } else if (userLanguage === 'it') { 10822 return 'it_IT'; 10823 } else if (userLanguage === 'pt') { 10824 return 'pt_PT'; 10825 } else if (userLanguage === 'nl') { 10826 return 'nl_NL'; 10827 } else if (userLanguage === 'el') { 10828 return 'el_EL'; 10829 } else { 10830 return 'en_US'; 10831 } 10832 }, 10833 "addScript": function (url, id, callback, execute, attrName, attrVal, internal) { 10834 "use strict"; 10835 var script, 10836 done = false; 10837 10838 if (execute === false) { 10839 if (typeof callback === 'function') { 10840 callback(); 10841 } 10842 } else { 10843 script = document.createElement('script'); 10844 script.id = (id !== undefined) ? id : ''; 10845 script.async = true; 10846 script.src = url; 10847 10848 if (attrName !== undefined && attrVal !== undefined) { 10849 script.setAttribute(attrName, attrVal); 10850 } 10851 10852 if (typeof callback === 'function') { 10853 if ( !tarteaucitron.parameters.useExternalJs || !internal ) { 10854 script.onreadystatechange = script.onload = function () { 10855 var state = script.readyState; 10856 if (!done && (!state || /loaded|complete/.test(state))) { 10857 done = true; 10858 callback(); 10859 } 10860 }; 10861 } else { 10862 callback(); 10863 } 10864 } 10865 10866 if ( !tarteaucitron.parameters.useExternalJs || !internal ) { 10867 document.getElementsByTagName('head')[0].appendChild(script); 10868 } 10869 } 10870 }, 10871 "addInternalScript": function (url, id, callback, execute, attrName, attrVal) { 10872 tarteaucitron.addScript(url, id, callback, execute, attrName, attrVal, true); 10873 }, 10874 "checkIfExist": function (elemId) { 10875 "use strict"; 10876 return document.getElementById(elemId) !== null && document.getElementById(elemId).offsetWidth !== 0 && document.getElementById(elemId).offsetHeight !== 0; 10877 }, 10878 "makeAsync": { 10879 "antiGhost": 0, 10880 "buffer": '', 10881 "init": function (url, id) { 10882 "use strict"; 10883 var savedWrite = document.write, 10884 savedWriteln = document.writeln; 10885 10886 document.write = function (content) { 10887 tarteaucitron.makeAsync.buffer += content; 10888 }; 10889 document.writeln = function (content) { 10890 tarteaucitron.makeAsync.buffer += content.concat("\n"); 10891 }; 10892 10893 setTimeout(function () { 10894 document.write = savedWrite;
10895 document.writeln = savedWriteln; 10896 }, 20000); 10897 10898 tarteaucitron.makeAsync.getAndParse(url, id); 10899 }, 10900 "getAndParse": function (url, id) { 10901 "use strict"; 10902 if (tarteaucitron.makeAsync.antiGhost > 9) { 10903 tarteaucitron.makeAsync.antiGhost = 0; 10904 return; 10905 } 10906 tarteaucitron.makeAsync.antiGhost += 1; 10907 tarteaucitron.addInternalScript(url, '', function () { 10908 if (document.getElementById(id) !== null) { 10909 document.getElementById(id).innerHTML += "<span class='tarteaucitron-display-none'> </span>" + tarteaucitron.makeAsync.buffer; 10910 tarteaucitron.makeAsync.buffer = ''; 10911 tarteaucitron.makeAsync.execJS(id); 10912 } 10913 }); 10914 }, 10915 "execJS": function (id) { 10916 /* not strict because third party scripts may have errors */ 10917 var i, 10918 scripts, 10919 childId, 10920 type; 10921 10922 if (document.getElementById(id) === null) { 10923 return; 10924 } 10925 10926 scripts = document.getElementById(id).getElementsByTagName('script'); 10927 for (i = 0; i < scripts.length; i += 1) { 10928 type = (scripts[i].getAttribute('type') !== null) ? scripts[i].getAttribute('type') : ''; 10929 if (type === '') { 10930 type = (scripts[i].getAttribute('language') !== null) ? scripts[i].getAttribute('language') : ''; 10931 } 10932 if (scripts[i].getAttribute('src') !== null && scripts[i].getAttribute('src') !== '') { 10933 childId = id + Math.floor(Math.random() * 99999999999); 10934 document.getElementById(id).innerHTML += '<div id="' + childId + '"></div>'; 10935 tarteaucitron.makeAsync.getAndParse(scripts[i].getAttribute('src'), childId); 10936 } else if (type.indexOf('javascript') !== -1 || type === '') { 10937 eval(scripts[i].innerHTML); 10938 } 10939 } 10940 } 10941 }, 10942 "fallback": function (matchClass, content, noInner) { 10943 "use strict"; 10944 var elems = document.getElementsByTagName('*'), 10945 i, 10946 index = 0; 10947 10948 for (i in elems) { 10949 if (elems[i] !== undefined) { 10950 for (index = 0; index < matchClass.length; index += 1) { 10951 if ((' ' + elems[i].className + ' ') 10952 .indexOf(' ' + matchClass[index] + ' ') > -1) { 10953 if (typeof content === 'function') { 10954 if (noInner === true) { 10955 content(elems[i]); 10956 } else { 10957 elems[i].innerHTML = content(elems[i]); 10958 } 10959 } else { 10960 elems[i].innerHTML = content; 10961 } 10962 } 10963 } 10964 } 10965 } 10966 }, 10967 "engage": function (id) { 10968 "use strict"; 10969 var html = '', 10970 r = Math.floor(Math.random() * 100000), 10971 engage = tarteaucitron.services[id].name + ' ' + tarteaucitron.lang.fallback; 10972 10973 if (tarteaucitron.lang['engage-' + id] !== undefined) { 10974 engage = tarteaucitron.lang['engage-' + id]; 10975 } 10976 10977 html += '<div class="tac_activate tac_activate_' + id + '">'; 10978 html += ' <div class="tac_float">'; 10979 html += ' ' + engage; 10980 html += ' <button type="button" class="tarteaucitronAllow" id="Eng' + r + 'ed' + id + '">'; 10981 html += ' <span class="tarteaucitronCheck" aria-hidden="true"></span> ' + tarteaucitron.lang.allow; 10982 html += ' </button>'; 10983 html += ' </div>'; 10984 html += '</div>'; 10985 10986 return html; 10987 }, 10988 "extend": function (a, b) { 10989 "use strict"; 10990 var prop; 10991 for (prop in b) { 10992 if (b.hasOwnProperty(prop)) { 10993 a[prop] = b[prop]; 10994 } 10995 } 10996 }, 10997 "proTemp": '', 10998 "proTimer": function () { 10999 "use strict"; 11000 setTimeout(tarteaucitron.proPing, 500); 11001 }, 11002 "pro": function (list) { 11003 "use strict"; 11004 tarteaucitron.proTemp += list; 11005 clearTimeout(tarteaucitron.proTimer); 11006 tarteaucitron.proTimer = setTimeout(tarteaucitron.proPing, 500); 11007 }, 11008 "proPing": function () { 11009 "use strict"; 11010 if (tarteaucitron.uuid !== '' && tarteaucitron.uuid !== undefined && tarteaucitron.proTemp !== '' && tarteaucitronStatsEnabled) { 11011 var div = document.getElementById('tarteaucitronPremium'), 11012 timestamp = new Date().getTime(), 11013 url = 'https://tarteaucitron.io/log/?'; 11014 11015 if (div === null) { 11016 return; 11017 } 11018 11019 url += 'account=' + tarteaucitron.uuid + '&'; 11020 url += 'domain=' + tarteaucitron.domain + '&'; 11021 url += 'status=' + encodeURIComponent(tarteaucitron.proTemp) + '&'; 11022 url += '_time=' + timestamp; 11023 11024 div.innerHTML = '<img src="' + url + '" class="tarteaucitron-display-none" alt="" />'; 11025 11026 tarteaucitron.proTemp = ''; 11027 } 11028 11029 tarteaucitron.cookie.number(); 11030 }, 11031 "AddOrUpdate" : function(source, custom){ 11032 /** 11033 Utility function to Add or update the fields of obj1 with the ones in obj2 11034 */ 11035 for(var key in custom){ 11036 if(custom[key] instanceof Object){ 11037 source[key] = tarteaucitron.AddOrUpdate(source[key], custom[key]); 11038 }else{ 11039 source[key] = custom[key]; 11040 } 11041 } 11042 return source; 11043 }, 11044 "getElemWidth": function(elem) { 11045 return elem.getAttribute('width') || elem.clientWidth; 11046 }, 11047 "getElemHeight": function(elem) { 11048 return elem.getAttribute('height') || elem.clientHeight; 11049 }, 11050 "getElemAttr": function (elem, attr) { 11051 return elem.getAttribute('data-' + attr) || elem.getAttribute(attr); 11052 }, 11053 "addClickEventToId": function (elemId, func) { 11054 tarteaucitron.addClickEventToElement(document.getElementById(elemId), func); 11055 }, 11056 "addClickEventToElement": function (e, func) { 11057 if (e) { 11058 if (e.addEventListener) { 11059 e.addEventListener("click", func); 11060 } else { 11061 e.attachEvent("onclick", func); 11062 } 11063 } 11064 }, 11065 "triggerJobsAfterAjaxCall": function() { 11066 tarteaucitron.job.forEach(function(e) { tarteaucitron.job.push(e) }); 11067 var i; 11068 var allowBtns = document.getElementsByClassName("tarteaucitronAllow"); 11069 for (i = 0; i < allowBtns.length; i++) { 11070 tarteaucitron.addClickEventToElement(allowBtns[i], function () { 11071 tarteaucitron.userInterface.respond(this, true); 11072 }); 11073 } 11074 var denyBtns = document.getElementsByClassName("tarteaucitronDeny"); 11075 for (i = 0; i < denyBtns.length; i++) { 11076 tarteaucitron.addClickEventToElement(denyBtns[i], function () { 11077 tarteaucitron.userInterface.respond(this, false); 11078 }); 11079 } 11080 } 11081}; 11082; 11083/*global tarteaucitron, ga, Shareaholic, stLight, clicky, top, google, Typekit, FB, ferankReady, IN, stButtons, twttr, PCWidget*/ 11084/*jslint regexp: true, nomen: true*/ 11085 11086// generic iframe 11087tarteaucitron.services.iframe = {
vendor: 4,769 bytes, lines 11088-11229
11088 "key": "iframe", 11089 "type": "other", 11090 "name": "Web content", 11091 "uri": "", 11092 "needConsent": true, 11093 "cookies": [], 11094 "js": function () { 11095 "use strict"; 11096 tarteaucitron.fallback(['tac_iframe'], function (x) { 11097 var frame_title = (tarteaucitron.getElemAttr(x,"title")) ? tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x,"title")) : '', 11098 width = tarteaucitron.getElemAttr(x,"width"), 11099 height = tarteaucitron.getElemAttr(x,"height"), 11100 allowfullscreen = tarteaucitron.getElemAttr(x,"allowfullscreen"), 11101 url = tarteaucitron.getElemAttr(x,"url"); 11102 11103 return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 11104 }); 11105 }, 11106 "fallback": function () { 11107 "use strict"; 11108 var id = 'iframe'; 11109 tarteaucitron.fallback(['tac_iframe'], function (elem) { 11110 elem.style.width = tarteaucitron.getElemAttr(elem,'width') + 'px'; 11111 elem.style.height = tarteaucitron.getElemAttr(elem,'height') + 'px'; 11112 return tarteaucitron.engage(id); 11113 }); 11114 } 11115}; 11116 11117// kwanko 11118tarteaucitron.services.kwanko = { 11119 "key": "kwanko", 11120 "type": "ads", 11121 "name": "Kwanko", 11122 "uri": "https://www.kwanko.com/fr/rgpd/politique-gestion-donnees/", 11123 "needConsent": true, 11124 "cookies": [], 11125 "js": function () { 11126 "use strict"; 11127 tarteaucitron.fallback(['tac_kwanko'], function (x) { 11128 var mclic = x.getAttribute("data-mclic"); 11129 11130 return '<img src="https://action.metaffiliation.com/trk.php?mclic=' + mclic + '" width="1" height="1" border="0" />'; 11131 }); 11132 }, 11133 "fallback": function () { 11134 "use strict"; 11135 var id = 'kwanko'; 11136 tarteaucitron.fallback(['tac_kwanko'], function (elem) { 11137 return tarteaucitron.engage(id); 11138 }); 11139 } 11140}; 11141 11142// leadforensics 11143tarteaucitron.services.leadforensics = { 11144 "key": "leadforensics", 11145 "type": "ads", 11146 "name": "Lead Forensics", 11147 "uri": "https://www.leadforensics.com/cookie-policy/", 11148 "needConsent": true, 11149 "cookies": ['ifuuid'], 11150 "js": function () { 11151 "use strict"; 11152 if (tarteaucitron.user.leadforensicsId === undefined) { 11153 return; 11154 } 11155 11156 tarteaucitron.addScript('https://secure.team8save.com/js/sc/'+ tarteaucitron.user.leadforensicsId +'.js'); 11157 } 11158}; 11159 11160// ubib 11161tarteaucitron.services.ubib = { 11162 "key": "ubib", 11163 "type": "support", 11164 "name": "Ubib Chatbot", 11165 "uri": "https://ubib.libanswers.com/", 11166 "needConsent": true, 11167 "cookies": [], 11168 "js": function () { 11169 "use strict"; 11170 11171 if (tarteaucitron.user.ubibId === undefined || tarteaucitron.user.ubibHash === undefined) { 11172 return; 11173 } 11174 11175 tarteaucitron.addScript('https://' + tarteaucitron.user.ubibId + '.libanswers.com/load_chat.php?hash=' + tarteaucitron.user.ubibHash); 11176 } 11177}; 11178 11179// wysistathightrack 11180tarteaucitron.services.wysistathightrack = { 11181 "key": "wysistathightrack", 11182 "type": "analytic", 11183 "name": "Wysistat (privacy by design)", 11184 "uri": "https://www.wysistat.net/webanalytics/exemption-cnil/", 11185 "needConsent": false, 11186 "cookies": ['wysistat'], 11187 "js": function () { 11188 "use strict"; 11189 11190 if (tarteaucitron.user.wysistatNom === undefined) { 11191 return; 11192 } 11193 11194 window._wsq = window._wsq || []; 11195 window._wsq.push(['_setNom', tarteaucitron.user.wysistatNom]); 11196 window._wsq.push(['_wysistat']); 11197 11198 tarteaucitron.addScript('https://www.wysistat.com/ws.jsa'); 11199 } 11200}; 11201 11202// robofabrica 11203tarteaucitron.services.robofabrica = { 11204 "key": "robofabrica", 11205 "type": "support", 11206 "name": "Robo Fabrica Chatbot", 11207 "uri": "https://robofabrica.tech/charte-vie-privee/", 11208 "needConsent": true, 11209 "cookies": [], 11210 "js": function () { 11211 "use strict"; 11212 11213 if (tarteaucitron.user.robofabricaUuid === undefined) { 11214 return; 11215 } 11216 11217 tarteaucitron.addScript('https://app.robofabrica.tech/widget/script', 'inceptive-cw-script', function() { 11218 11219 document.getElementById('inceptive-cw-script').setAttribute('unique-url', tarteaucitron.user.robofabricaUuid); 11220 document.getElementById('inceptive-cw-script').setAttribute('label', 'start'); 11221 document.getElementById('inceptive-cw-script').setAttribute('launch-btn-id', 'inceptive-cw-launch'); 11222 document.getElementById('inceptive-cw-script').setAttribute('chat-server-url', 'https://app.robofabrica.tech:443'); 11223 11224 }); 11225 } 11226}; 11227 11228// trustpilot 11229tarteaucitron.services.trustpilot = {
11230 "key": "trustpilot", 11231 "type": "other", 11232 "name": "Trustpilot", 11233 "uri": "https://fr.legal.trustpilot.com/for-reviewers/end-user-privacy-terms", 11234 "needConsent": true, 11235 "cookies": [], 11236 "js": function () { 11237 "use strict"; 11238 tarteaucitron.fallback(['trustpilot-widget'], ''); 11239 tarteaucitron.addScript('https://widget.trustpilot.com/bootstrap/v5/tp.widget.sync.bootstrap.min.js'); 11240 }, 11241 "fallback": function () { 11242 "use strict"; 11243 var id = 'trustpilot'; 11244 tarteaucitron.fallback(['trustpilot-widget'], function (elem) { 11245 elem.style.width = elem.getAttribute('data-style-width'); 11246 elem.style.height = elem.getAttribute('data-style-height'); 11247 return tarteaucitron.engage(id); 11248 }); 11249 } 11250}; 11251 11252// snapchat 11253tarteaucitron.services.snapchat = { 11254 "key": "snapchat", 11255 "type": "analytic", 11256 "name": "Snapchat", 11257 "uri": "https://snap.com/fr-FR/privacy/privacy-policy", 11258 "needConsent": true, 11259 "cookies": [], 11260 "js": function () { 11261 "use strict"; 11262 11263 if (tarteaucitron.user.snapchatId === undefined || tarteaucitron.user.snapchatEmail === undefined) { 11264 return; 11265 } 11266 11267 var a = window.snaptr = function() { 11268 a.handleRequest ? a.handleRequest.apply(a, arguments) : a.queue.push(arguments) 11269 }; 11270 a.queue = []; 11271 window.snaptr('init', tarteaucitron.user.snapchatId, { 11272 'user_email': tarteaucitron.user.snapchatEmail 11273 }); 11274 window.snaptr('track', 'PAGE_VIEW'); 11275 11276 tarteaucitron.addScript('https://sc-static.net/scevent.min.js'); 11277 11278 if (typeof tarteaucitron.user.snapchatMore === 'function') { 11279 tarteaucitron.user.snapchatMore(); 11280 } 11281 } 11282}; 11283 11284// antvoice 11285tarteaucitron.services.antvoice = { 11286 "key": "antvoice", 11287 "type": "ads", 11288 "name": "antvoice", 11289 "uri": "https://www.antvoice.com/fr/privacy-policy/", 11290 "needConsent": true, 11291 "cookies": ['antvoice'], 11292 "js": function () { 11293 "use strict"; 11294 11295 if (tarteaucitron.user.antvoiceId === undefined) { 11296 return; 11297 } 11298 11299 window.avDataLayer = window.avDataLayer || []; 11300 window.avtag = window.avtag || function(_cmd,_p) { 11301 window.avDataLayer.push({cmd:_cmd,p:_p}); 11302 } 11303 window.avtag('setConsent', {consent:true}); 11304 window.avtag('init', {id: tarteaucitron.user.antvoiceId}); 11305 11306 tarteaucitron.addScript('https://static.avads.net/avtag.min.js'); 11307 } 11308}; 11309 11310// plausible 11311tarteaucitron.services.plausible = { 11312 "key": "plausible", 11313 "type": "analytic", 11314 "name": "Plausible", 11315 "uri": "https://plausible.io/privacy", 11316 "needConsent": false, 11317 "cookies": [], 11318 "js": function () { 11319 "use strict"; 11320 11321 if (tarteaucitron.user.plausibleDomain === undefined) { 11322 return; 11323 } 11324 11325 tarteaucitron.addScript('https://plausible.io/js/script.js', '', '', '', 'data-domain', tarteaucitron.user.plausibleDomain); 11326 } 11327}; 11328 11329// videas 11330tarteaucitron.services.videas = { 11331 "key": "videas", 11332 "type": "video", 11333 "name": "Videas", 11334 "uri": "https://videas.fr/fr/legal", 11335 "needConsent": true, 11336 "cookies": [], 11337 "js": function () { 11338 "use strict"; 11339 tarteaucitron.fallback(['tac_videas'], function (x) { 11340 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Videas iframe'), 11341 width = x.getAttribute("width"), 11342 height = x.getAttribute("height"), 11343 id = x.getAttribute("data-id"), 11344 allowfullscreen = x.getAttribute("allowfullscreen"); 11345 11346 return '<iframe title="' + frame_title + '" src="https://app.videas.fr/embed/' + id + '/" width="' + width + '" height="' + height + '" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 11347 }); 11348 }, 11349 "fallback": function () { 11350 "use strict"; 11351 var id = 'videas'; 11352 tarteaucitron.fallback(['tac_videas'], function (elem) { 11353 elem.style.width = elem.getAttribute('width') + 'px'; 11354 elem.style.height = elem.getAttribute('height') + 'px'; 11355 return tarteaucitron.engage(id); 11356 }); 11357 } 11358}; 11359 11360// myfeelback 11361tarteaucitron.services.myfeelback = {
vendor: 14,209 bytes, lines 11362-11753
11362 "key": "myfeelback", 11363 "type": "api", 11364 "name": "MyFeelBack (Skeepers)", 11365 "uri": "https://help.myfeelback.com/fr/quels-sont-les-cookies-d%C3%A9pos%C3%A9s-par-un-dispositif-de-collecte-myfeelback", 11366 "needConsent": true, 11367 "cookies": [], 11368 "js": function () { 11369 "use strict"; 11370 if (tarteaucitron.user.myfeelbackId === undefined) { 11371 return; 11372 } 11373 11374 window._Mfb_useCookie = true; 11375 window._Mfb_ud = { 11376 var1: undefined, 11377 var2: undefined, 11378 varN: undefined, 11379 _context: { 11380 lang: undefined, 11381 privacyMode: false, 11382 _page: { 11383 url: location.pathname, 11384 storageDuration: 30 11385 } 11386 } 11387 }; 11388 tarteaucitron.addScript('https://actorssl-5637.kxcdn.com/actor/'+tarteaucitron.user.myfeelbackId+'/action', 'MFBActor'); 11389 } 11390}; 11391 11392// arcio 11393tarteaucitron.services.arcio = { 11394 "key": "arcio", 11395 "type": "api", 11396 "name": "Arc.io", 11397 "uri": "https://arc.io/about", 11398 "needConsent": true, 11399 "cookies": [], 11400 "js": function () { 11401 "use strict"; 11402 if (tarteaucitron.user.arcId === undefined) { 11403 return; 11404 } 11405 11406 tarteaucitron.addScript('https://arc.io/widget.min.js#'+tarteaucitron.user.arcId); 11407 } 11408}; 11409 11410// doubleclick 11411tarteaucitron.services.doubleclick = { 11412 "key": "doubleclick", 11413 "type": "ads", 11414 "name": "DoubleClick", 11415 "uri": "https://support.google.com/admanager/answer/2839090", 11416 "needConsent": true, 11417 "cookies": [], 11418 "js": function () { 11419 "use strict"; 11420 tarteaucitron.fallback(['doubleclick_container'], function (x) { 11421 var id1 = tarteaucitron.getElemAttr(x, "data-id1"), 11422 id2 = tarteaucitron.getElemAttr(x, "data-id2"), 11423 type = tarteaucitron.getElemAttr(x, "data-type"), 11424 cat = tarteaucitron.getElemAttr(x, "data-cat"), 11425 item = tarteaucitron.getElemAttr(x, "data-item"), 11426 quantity = tarteaucitron.getElemAttr(x, "data-quantity"), 11427 price = tarteaucitron.getElemAttr(x, "data-price"), 11428 postage = tarteaucitron.getElemAttr(x, "data-postage"), 11429 seller = tarteaucitron.getElemAttr(x, "data-seller"), 11430 gdpr = tarteaucitron.getElemAttr(x, "data-gdpr"), 11431 gdpr_consent = tarteaucitron.getElemAttr(x, "data-gdpr-consent"), 11432 ord = tarteaucitron.getElemAttr(x, "data-ord"), 11433 num = tarteaucitron.getElemAttr(x, "data-num"); 11434 11435 return '<iframe src="https://'+id1+'.fls.doubleclick.net/activityi;src='+id2+';type='+type+';cat='+cat+';item='+item+';quantity='+quantity+';price='+price+';postage='+postage+';seller='+seller+';gdpr='+gdpr+';gdpr_consent='+gdpr_consent+';num='+num+';ord='+ord+'?" width="1" height="1" frameborder="0" style="display:none"></iframe>'; 11436 }); 11437 } 11438}; 11439 11440// userpilot 11441tarteaucitron.services.userpilot = { 11442 "key": "userpilot", 11443 "type": "analytic", 11444 "name": "UserPilot", 11445 "uri": "https://userpilot.com/privacy-policy", 11446 "needConsent": true, 11447 "cookies": [], 11448 "js": function () { 11449 "use strict"; 11450 if (tarteaucitron.user.userpilotToken === undefined) { 11451 return; 11452 } 11453 11454 window.userpilotSettings = {token: tarteaucitron.user.userpilotToken}; 11455 tarteaucitron.addScript('https://js.userpilot.io/sdk/latest.js'); 11456 } 11457}; 11458 11459tarteaucitron.services.piwikpro = { 11460 "key": "piwikpro", 11461 "type": "analytic", 11462 "name": "Piwik Pro", 11463 "uri": "https://piwik.pro/privacy-policy/", 11464 "needConsent": true, 11465 "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'piwik_ignore', '_pk_uid'], 11466 "js": function () { 11467 "use strict"; 11468 if (tarteaucitron.user.piwikProId === undefined) { 11469 return; 11470 } 11471 11472 window['dataLayer'] = window['dataLayer'] || [], window['dataLayer'].push({ 11473 start: (new Date).getTime(), 11474 event: "stg.start" 11475 }); 11476 11477 function stgCreateCookie(a, b, c) { 11478 var d = ""; 11479 if (c) { 11480 var e = new Date; 11481 e.setTime(e.getTime() + 24 * c * 60 * 60 * 1e3), d = "; expires=" + e.toUTCString() 11482 } 11483 document.cookie = a + "=" + b + d + "; path=/" 11484 } 11485 11486 var isStgDebug = (window.location.href.match("stg_debug") || document.cookie.match("stg_debug")) && !window.location.href.match("stg_disable_debug"); 11487 stgCreateCookie("stg_debug", isStgDebug ? 1 : "", isStgDebug ? 14 : -1); 11488 var qP = []; 11489 11490 var qPString = qP.length > 0 ? ("?" + qP.join("&")) : ""; 11491 tarteaucitron.addScript('https://carsatse.containers.piwik.pro/'+tarteaucitron.user.piwikProId+'.js'+qPString); 11492 11493 ! function(a, n, i) { 11494 a[n] = a[n] || {}; 11495 for (var c = 0; c < i.length; c++) ! function(i) { 11496 a[n][i] = a[n][i] || {}, a[n][i].api = a[n][i].api || function() { 11497 var a = [].slice.call(arguments, 0); 11498 "string" == typeof a[0] && window['dataLayer'].push({ 11499 event: n + "." + i + ":" + a[0], 11500 parameters: [].slice.call(arguments, 1) 11501 }) 11502 } 11503 }(i[c]) 11504 }(window, "ppms", ["tm", "cm"]); 11505 } 11506}; 11507 11508// pinterestpixel 11509tarteaucitron.services.pinterestpixel = { 11510 "key": "pinterestpixel", 11511 "type": "ads", 11512 "name": "Pinterest Pixel", 11513 "uri": "https://help.pinterest.com/fr/business/article/track-conversions-with-pinterest-tag", 11514 "needConsent": true, 11515 "cookies": ['_pinterest_sess', '_pinterest_ct', '_pinterest_ct_mw', '_pinterest_ct_rt', '_epik', '_derived_epik', '_pin_unauth', '_pinterest_ct_ua'], 11516 "js": function () { 11517 "use strict"; 11518 11519 if (tarteaucitron.user.pinterestpixelId === undefined) { 11520 return; 11521 } 11522 11523 if (!window.pintrk) { 11524 window.pintrk = function () { 11525 window.pintrk.queue.push(Array.prototype.slice.call(arguments)); 11526 }; 11527 11528 var n = window.pintrk; 11529 n.queue = []; 11530 n.version = "3.0"; 11531 11532 tarteaucitron.addScript('https://s.pinimg.com/ct/core.js', '', function () { 11533 window.pintrk('load', tarteaucitron.user.pinterestpixelId); 11534 window.pintrk('page'); 11535 }); 11536 } 11537 } 11538}; 11539 11540// elfsight 11541tarteaucitron.services.elfsight = { 11542 "key": "elfsight", 11543 "type": "support", 11544 "name": "Elfsight", 11545 "uri": "https://elfsight.com/privacy-policy/", 11546 "needConsent": true, 11547 "cookies": ['__cfduid', '_p_hfp_client_id', 'session_id'], 11548 "js": function () { 11549 "use strict"; 11550 11551 tarteaucitron.addScript('https://apps.elfsight.com/p/platform.js'); 11552 } 11553}; 11554 11555// plezi 11556tarteaucitron.services.plezi = { 11557 "key": "plezi", 11558 "type": "analytic", 11559 "name": "Plezi", 11560 "uri": "https://www.plezi.co/fr/mentions-legales/", 11561 "needConsent": true, 11562 "cookies": [], 11563 "js": function () { 11564 "use strict"; 11565 11566 if (tarteaucitron.user.pleziTenant === undefined || tarteaucitron.user.pleziTw === undefined) { 11567 return; 11568 } 11569 11570 tarteaucitron.addScript('https://app.plezi.co/scripts/ossleads_analytics.js?tenant=' + tarteaucitron.user.pleziTenant + '&tw=' + tarteaucitron.user.pleziTw); 11571 } 11572}; 11573 11574 11575// smartsupp 11576tarteaucitron.services.smartsupp = { 11577 "key": "smartsupp", 11578 "type": "support", 11579 "name": "Smartsupp", 11580 "uri": "https://www.smartsupp.com/help/privacy/", 11581 "needConsent": true, 11582 "cookies": ['ssupp.vid', 'ssupp.visits', 'AWSALB', 'AWSALBCORS'], 11583 "js": function () { 11584 "use strict"; 11585 11586 if (tarteaucitron.user.smartsuppKey === undefined) { 11587 return; 11588 } 11589 11590 window._smartsupp = window._smartsupp || {}; 11591 window._smartsupp.key = tarteaucitron.user.smartsuppKey; 11592 window.smartsupp = function () { 11593 window.smartsupp._.push(arguments) 11594 }; 11595 window.smartsupp._ = []; 11596 11597 tarteaucitron.addScript('https://www.smartsuppchat.com/loader.js'); 11598 } 11599}; 11600 11601 11602 11603// sharpspring 11604tarteaucitron.services.sharpspring = { 11605 "key": "sharpspring", 11606 "type": "analytic", 11607 "name": "SharpSpring", 11608 "uri": "https://sharpspring.com/legal/sharpspring-cookie-policy/", 11609 "needConsent": true, 11610 "cookies": ['koitk', '__ss', '__ss_tk', '__ss_referrer'], 11611 "js": function () { 11612 "use strict"; 11613 11614 if (tarteaucitron.user.ssId === undefined || tarteaucitron.user.ssAccount === undefined) { 11615 return; 11616 } 11617 11618 window._ss = window._ss || []; 11619 window._ss.push(['_setDomain', 'https://' + tarteaucitron.user.ssId + '.marketingautomation.services/net']); 11620 window._ss.push(['_setAccount', tarteaucitron.user.ssAccount]); 11621 window._ss.push(['_trackPageView']); 11622 11623 window._pa = window._pa || {}; 11624 11625 tarteaucitron.addScript('https://' + tarteaucitron.user.ssId + '.marketingautomation.services/client/ss.js'); 11626 } 11627}; 11628 11629// pardot 11630tarteaucitron.services.pardot = { 11631 "key": "pardot", 11632 "type": "analytic", 11633 "name": "Pardot", 11634 "uri": "https://www.salesforce.com/company/privacy/full_privacy/", 11635 "needConsent": true, 11636 "cookies": ['visitor_id'], 11637 "js": function () { 11638 "use strict"; 11639 if (tarteaucitron.user.piAId === undefined || tarteaucitron.user.piCId === undefined) { 11640 return; 11641 } 11642 11643 window.piAId = tarteaucitron.user.piAId; 11644 window.piCId = tarteaucitron.user.piCId; 11645 window.piHostname = 'pi.pardot.com'; 11646 11647 tarteaucitron.addScript('https://pi.pardot.com/pd.js'); 11648 } 11649}; 11650 11651// Open Web Analytics 11652tarteaucitron.services.openwebanalytics = { 11653 "key": "openwebanalytics", 11654 "type": "analytic", 11655 "name": "Open Web Analytics", 11656 "uri": "", 11657 "needConsent": true, 11658 "cookies": [], 11659 "js": function () { 11660 "use strict"; 11661 11662 if (tarteaucitron.user.openwebanalyticsId === undefined || tarteaucitron.user.openwebanalyticsHost === undefined) { 11663 return; 11664 } 11665 11666 window.owa_baseUrl = tarteaucitron.user.openwebanalyticsHost; 11667 window.owa_cmds = window.owa_cmds || []; 11668 window.owa_cmds.push(['setSiteId', tarteaucitron.user.openwebanalyticsId]); 11669 window.owa_cmds.push(['trackPageView']); 11670 window.owa_cmds.push(['trackClicks']); 11671 11672 tarteaucitron.addScript(window.owa_baseUrl + 'modules/base/js/owa.tracker-combined-min.js'); 11673 } 11674}; 11675 11676// xandr universal pixel 11677// https://docs.xandr.com/bundle/invest_invest-standard/page/topics/universal-pixel-overview.html 11678tarteaucitron.services.xandr = { 11679 "key": "xandr", 11680 "type": "ads", 11681 "name": "Xandr (Universal)", 11682 "uri": "https://www.xandr.com/privacy/cookie-policy/", 11683 "needConsent": true, 11684 "cookies": ['uuid2', 'uids', 'sess', 'icu', 'anj', 'usersync'], 11685 "js": function () { 11686 "use strict"; 11687 if (tarteaucitron.user.xandrId === undefined) { 11688 return; 11689 } 11690 11691 if (!window.pixie) { 11692 var n = window.pixie = function (e, i, a) { 11693 n.actionQueue.push({ 11694 action: e, 11695 actionValue: i, 11696 params: a 11697 }) 11698 }; 11699 n.actionQueue = []; 11700 } 11701 11702 tarteaucitron.addScript('https://acdn.adnxs.com/dmp/up/pixie.js', '', function () { 11703 window.pixie('init', tarteaucitron.user.xandrId); 11704 window.pixie('event', 'PageView'); 11705 }); 11706 } 11707}; 11708 11709// xandr segment 11710// https://docs.xandr.com/bundle/invest_invest-standard/page/topics/segment-pixels-advanced.html 11711tarteaucitron.services.xandrsegment = { 11712 "key": "xandrsegment", 11713 "type": "ads", 11714 "name": "Xandr (Segment)", 11715 "uri": "https://www.xandr.com/privacy/cookie-policy/", 11716 "needConsent": true, 11717 "cookies": ['uuid2', 'uids', 'sess', 'icu', 'anj', 'usersync'], 11718 "js": function () { 11719 "use strict"; 11720 var uniqIds = [], 11721 i, 11722 uri; 11723 11724 tarteaucitron.fallback(['xandrsegment-canvas'], function (x) { 11725 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 11726 uniqIds.push(uniqId); 11727 return '<div id="' + uniqId + '" xandrsegmentAdd="' + x.getAttribute('xandrsegmentAdd') + '" xandrsegmentAddCode="' + x.getAttribute('xandrsegmentAddCode') + '" xandrsegmentRemove="' + x.getAttribute('xandrsegmentRemove') + '" xandrsegmentRemoveCode="' + x.getAttribute('xandrsegmentRemoveCode') + '" xandrsegmentMember="' + x.getAttribute('xandrsegmentMember') + '" xandrsegmentRedir="' + x.getAttribute('xandrsegmentRedir') + '" xandrsegmentValue="' + x.getAttribute('xandrsegmentValue') + '" xandrsegmentOther="' + x.getAttribute('xandrsegmentOther') + '"></div>'; 11728 }); 11729 11730 for (i = 0; i < uniqIds.length; i += 1) { 11731 uri = '//ib.adnxs.com/seg?t=2&'; 11732 uri += 'add=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentAdd') + '&'; 11733 uri += 'add_code=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentAddCode') + '&'; 11734 uri += 'remove=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentRemove') + '&'; 11735 uri += 'remove_code=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentRemoveCode') + '&'; 11736 uri += 'member=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentMember') + '&'; 11737 uri += 'redir=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentRedir') + '&'; 11738 uri += 'value=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentValue') + '&'; 11739 uri += 'other=' + document.getElementById(uniqIds[i]).getAttribute('xandrsegmentOther'); 11740 11741 document.getElementById(uniqIds[i]).innerHTML = '<img src=\'' + uri + '\' width=\'1\' height=\'1\' />'; 11742 } 11743 }, 11744 "fallback": function () { 11745 "use strict"; 11746 var id = 'xandrsegment'; 11747 tarteaucitron.fallback(['xandrsegment-canvas'], tarteaucitron.engage(id)); 11748 } 11749}; 11750 11751// xandr conversion 11752// https://docs.xandr.com/bundle/invest_invest-standard/page/topics/working-with-conversion-pixels.html 11753tarteaucitron.services.xandrconversion = {
11754 "key": "xandrconversion", 11755 "type": "ads", 11756 "name": "Xandr (Conversion)", 11757 "uri": "https://www.xandr.com/privacy/cookie-policy/", 11758 "needConsent": true, 11759 "cookies": ['uuid2', 'uids', 'sess', 'icu', 'anj', 'usersync'], 11760 "js": function () { 11761 "use strict"; 11762 var uniqIds = [], 11763 i, 11764 uri; 11765 11766 tarteaucitron.fallback(['xandrconversion-canvas'], function (x) { 11767 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 11768 uniqIds.push(uniqId); 11769 return '<div id="' + uniqId + '" xandrconversionId="' + x.getAttribute('xandrconversionId') + '" xandrconversionSeg="' + x.getAttribute('xandrconversionSeg') + '" xandrconversionOrderId="' + x.getAttribute('xandrconversionOrderId') + '" xandrconversionValue="' + x.getAttribute('xandrconversionValue') + '" xandrconversionRedir="' + x.getAttribute('xandrconversionRedir') + '" xandrconversionOther="' + x.getAttribute('xandrconversionOther') + '"></div>'; 11770 }); 11771 11772 for (i = 0; i < uniqIds.length; i += 1) { 11773 uri = '//ib.adnxs.com/px?t=2&'; 11774 uri += 'id=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionId') + '&'; 11775 uri += 'seg=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionSeg') + '&'; 11776 uri += 'order_id=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionOrderId') + '&'; 11777 uri += 'value=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionValue') + '&'; 11778 uri += 'redir=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionRedir') + '&'; 11779 uri += 'other=' + document.getElementById(uniqIds[i]).getAttribute('xandrconversionOther'); 11780 11781 document.getElementById(uniqIds[i]).innerHTML = '<img src=\'' + uri + '\' width=\'1\' height=\'1\' />'; 11782 } 11783 }, 11784 "fallback": function () { 11785 "use strict"; 11786 var id = 'xandrconversion'; 11787 tarteaucitron.fallback(['xandrconversion-canvas'], tarteaucitron.engage(id)); 11788 } 11789}; 11790 11791// helloasso 11792tarteaucitron.services.helloasso = { 11793 "key": "helloasso", 11794 "type": "api", 11795 "name": "HelloAsso", 11796 "uri": "https://www.helloasso.com/confidentialite", 11797 "needConsent": true, 11798 "cookies": [], 11799 "js": function () { 11800 "use strict"; 11801 tarteaucitron.fallback(['tac_helloasso'], function (x) { 11802 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'HelloAsso iframe'), 11803 width = x.getAttribute("width"), 11804 height = x.getAttribute("height"), 11805 url = x.getAttribute("data-url"), 11806 allowfullscreen = x.getAttribute("allowfullscreen"); 11807 11808 return '<iframe title="' + frame_title + '" id="haWidget" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 11809 }); 11810 }, 11811 "fallback": function () { 11812 "use strict"; 11813 var id = 'helloasso'; 11814 tarteaucitron.fallback(['tac_helloasso'], function (elem) { 11815 elem.style.width = elem.getAttribute('width') + 'px'; 11816 elem.style.height = elem.getAttribute('height') + 'px'; 11817 return tarteaucitron.engage(id); 11818 }); 11819 } 11820}; 11821 11822// podcloud 11823tarteaucitron.services.podcloud = { 11824 "key": "podcloud", 11825 "type": "video", 11826 "name": "podCloud", 11827 "uri": "https://podcloud.fr/privacy", 11828 "needConsent": true, 11829 "cookies": [], 11830 "js": function () { 11831 "use strict"; 11832 tarteaucitron.fallback(['tac_podcloud'], function (x) { 11833 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'podCloud iframe'), 11834 width = x.getAttribute("width"), 11835 height = x.getAttribute("height"), 11836 url = x.getAttribute("data-url"), 11837 allowfullscreen = x.getAttribute("allowfullscreen"); 11838 11839 return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 11840 }); 11841 }, 11842 "fallback": function () { 11843 "use strict"; 11844 var id = 'podcloud'; 11845 tarteaucitron.fallback(['tac_podcloud'], function (elem) { 11846 elem.style.width = elem.getAttribute('width') + 'px'; 11847 elem.style.height = elem.getAttribute('height') + 'px'; 11848 return tarteaucitron.engage(id); 11849 }); 11850 } 11851}; 11852 11853// facebookpost 11854tarteaucitron.services.facebookpost = {
vendor: 8,205 bytes, lines 11855-12056
11855 "key": "facebookpost", 11856 "type": "social", 11857 "name": "Facebook (post)", 11858 "uri": "https://www.facebook.com/policy.php", 11859 "needConsent": true, 11860 "cookies": [], 11861 "js": function () { 11862 "use strict"; 11863 tarteaucitron.fallback(['tac_facebookpost'], function (x) { 11864 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Facebook iframe'), 11865 width = x.getAttribute("width"), 11866 height = x.getAttribute("height"), 11867 url = x.getAttribute("data-url"), 11868 appId = x.getAttribute("data-appid"), 11869 allowfullscreen = x.getAttribute("allowfullscreen"), 11870 showText = x.getAttribute("data-show-text"); 11871 11872 return '<iframe title="' + frame_title + '" src="https://www.facebook.com/plugins/post.php?href=' + encodeURIComponent(url) + '&width=' + width + '&show_text=false&appId=' + appId + '&show_text=' + showText + '&height=' + height + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 11873 }); 11874 }, 11875 "fallback": function () { 11876 "use strict"; 11877 var id = 'facebookpost'; 11878 tarteaucitron.fallback(['tac_facebookpost'], function (elem) { 11879 elem.style.width = elem.getAttribute('width') + 'px'; 11880 elem.style.height = elem.getAttribute('height') + 'px'; 11881 return tarteaucitron.engage(id); 11882 }); 11883 } 11884}; 11885 11886// amplitude 11887tarteaucitron.services.amplitude = { 11888 "key": "amplitude", 11889 "type": "analytic", 11890 "name": "Amplitude", 11891 "uri": "https://amplitude.com/privacy", 11892 "needConsent": true, 11893 "cookies": [], 11894 "js": function () { 11895 "use strict"; 11896 if (tarteaucitron.user.amplitude === undefined) { 11897 return; 11898 } 11899 tarteaucitron.addScript('https://cdn.amplitude.com/libs/amplitude-5.8.0-min.gz.js', '', function () { 11900 11901 window.amplitude = { 11902 _q: [], 11903 _iq: {} 11904 }; 11905 function s(e, t) { e.prototype[t] = function () { this._q.push([t].concat(Array.prototype.slice.call(arguments, 0))); return this } } 11906 var o = function () { this._q = []; return this }; 11907 var a = ["add", "append", "clearAll", "prepend", "set", "setOnce", "unset"]; 11908 for (var u = 0; u < a.length; u++) { s(o, a[u]) } 11909 amplitude.Identify = o; 11910 var c = function () { this._q = []; return this }; 11911 var l = ["setProductId", "setQuantity", "setPrice", "setRevenueType", "setEventProperties"]; 11912 for (var p = 0; p < l.length; p++) { s(c, l[p]) } 11913 amplitude.Revenue = c; 11914 var d = ["init", "logEvent", "logRevenue", "setUserId", "setUserProperties", "setOptOut", "setVersionName", "setDomain", "setDeviceId", "enableTracking", "setGlobalUserProperties", "identify", "clearUserProperties", "setGroup", "logRevenueV2", "regenerateDeviceId", "groupIdentify", "onInit", "logEventWithTimestamp", "logEventWithGroups", "setSessionId", "resetSessionId"]; 11915 function v(e) { function t(t) { e[t] = function () { e._q.push([t].concat(Array.prototype.slice.call(arguments, 0))) } } for (var n = 0; n < d.length; n++) { t(d[n]) } } 11916 v(amplitude); 11917 amplitude.getInstance = function (e) { e = (!e || e.length === 0 ? "$default_instance" : e).toLowerCase(); if (!amplitude._iq.hasOwnProperty(e)) { amplitude._iq[e] = { _q: [] }; v(amplitude._iq[e]) } return amplitude._iq[e] }; 11918 11919 amplitude.getInstance().init(tarteaucitron.user.amplitude); 11920 }); 11921 } 11922}; 11923 11924// abtasty 11925tarteaucitron.services.abtasty = { 11926 "key": "abtasty", 11927 "type": "api", 11928 "name": "ABTasty", 11929 "uri": "https://www.abtasty.com/terms-of-use/", 11930 "needConsent": true, 11931 "cookies": ['ABTasty', 'ABTastySession'], 11932 "js": function () { 11933 "use strict"; 11934 if (tarteaucitron.user.abtastyID === undefined) { 11935 return; 11936 } 11937 tarteaucitron.addScript('//try.abtasty.com/' + tarteaucitron.user.abtastyID + '.js'); 11938 } 11939}; 11940 11941 11942// yandex metrica 11943tarteaucitron.services.metrica = { 11944 "key": "metrica", 11945 "type": "analytic", 11946 "name": "Yandex Metrica", 11947 "uri": "https://yandex.com/legal/confidential/", 11948 "needConsent": true, 11949 "cookies": ['_ym_metrika_enabled', '_ym_isad', '_ym_uid', '_ym_d', 'yabs-sid', '_ym_debug', '_ym_mp2_substs', '_ym_hostIndex', '_ym_mp2_track', 'yandexuid', 'usst'], 11950 "js": function () { 11951 "use strict"; 11952 if (tarteaucitron.user.yandexmetrica === undefined) { 11953 return; 11954 } 11955 tarteaucitron.addScript('https://mc.yandex.ru/metrika/tag.js', '', function () { 11956 11957 (function (m, e, t, r, i, k, a) { 11958 m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments) }; 11959 m[i].l = 1 * new Date(); k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a) 11960 }) 11961 (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); 11962 11963 ym(tarteaucitron.user.yandexmetrica, "init", { 11964 clickmap: true, 11965 trackLinks: true, 11966 accurateTrackBounce: true, 11967 webvisor: true, 11968 ecommerce: "dataLayer" 11969 }); 11970 }); 11971 } 11972}; 11973 11974// addthis 11975tarteaucitron.services.addthis = { 11976 "key": "addthis", 11977 "type": "social", 11978 "name": "AddThis", 11979 "uri": "https://www.addthis.com/privacy/privacy-policy#publisher-visitors", 11980 "needConsent": true, 11981 "cookies": ['__atuvc', '__atuvs'], 11982 "js": function () { 11983 "use strict"; 11984 if (tarteaucitron.user.addthisPubId === undefined) { 11985 return; 11986 } 11987 if (tarteaucitron.isAjax === true) { 11988 window.addthis = null; 11989 window._adr = null; 11990 window._atc = null; 11991 window._atd = null; 11992 window._ate = null; 11993 window._atr = null; 11994 window._atw = null; 11995 } 11996 tarteaucitron.fallback(['addthis_inline_share_toolbox'], ''); 11997 tarteaucitron.addScript('//s7.addthis.com/js/300/addthis_widget.js#pubid=' + tarteaucitron.user.addthisPubId); 11998 }, 11999 "fallback": function () { 12000 "use strict"; 12001 var id = 'addthis'; 12002 tarteaucitron.fallback(['addthis_inline_share_toolbox'], tarteaucitron.engage(id)); 12003 } 12004}; 12005 12006// addtoanyfeed 12007tarteaucitron.services.addtoanyfeed = { 12008 "key": "addtoanyfeed", 12009 "type": "social", 12010 "name": "AddToAny (feed)", 12011 "uri": "https://www.addtoany.com/privacy", 12012 "needConsent": true, 12013 "cookies": [], 12014 "js": function () { 12015 "use strict"; 12016 if (tarteaucitron.user.addtoanyfeedUri === undefined) { 12017 return; 12018 } 12019 tarteaucitron.user.addtoanyfeedSubscribeLink = 'https://www.addtoany.com/subscribe?linkurl=' + tarteaucitron.user.addtoanyfeedUri; 12020 window.a2a_config = window.a2a_config || {}; 12021 window.a2a_config.linkurl = tarteaucitron.user.addtoanyfeedUri; 12022 tarteaucitron.addScript('//static.addtoany.com/menu/feed.js'); 12023 }, 12024 "fallback": function () { 12025 "use strict"; 12026 tarteaucitron.user.addtoanyfeedSubscribeLink = 'https://www.addtoany.com/subscribe?linkurl=' + tarteaucitron.user.addtoanyfeedUri; 12027 } 12028}; 12029 12030// addtoanyshare 12031tarteaucitron.services.addtoanyshare = { 12032 "key": "addtoanyshare", 12033 "type": "social", 12034 "name": "AddToAny (share)", 12035 "uri": "https://www.addtoany.com/privacy", 12036 "needConsent": true, 12037 "cookies": [], 12038 "js": function () { 12039 "use strict"; 12040 tarteaucitron.fallback(['tac_addtoanyshare'], function (elem) { 12041 elem.remove(); 12042 }, true); 12043 tarteaucitron.addScript('//static.addtoany.com/menu/page.js'); 12044 }, 12045 "fallback": function () { 12046 "use strict"; 12047 var id = 'addtoanyshare'; 12048 tarteaucitron.fallback(['tac_addtoanyshare'], tarteaucitron.engage(id)); 12049 } 12050}; 12051 12052// aduptech ads 12053tarteaucitron.services.aduptech_ads = { 12054 "key": "aduptech_ads", 12055 "type": "ads", 12056 "name": "Ad Up Technology (ads)",
12057 "uri": "https://www.adup-tech.com/datenschutz", 12058 "needConsent": true, 12059 "cookies": [], 12060 "js": function () { 12061 "use strict"; 12062 12063 var IDENTIFIER = "aduptech_ads", 12064 API_URL = "https://s.d.adup-tech.com/jsapi"; 12065 12066 var elements = document.getElementsByClassName(IDENTIFIER); 12067 if (!elements || elements.length === 0) { 12068 return; 12069 } 12070 12071 tarteaucitron.fallback([IDENTIFIER], ""); 12072 12073 tarteaucitron.addScript(API_URL, "", function () { 12074 for (var i = 0; i < elements.length; i++) { 12075 var element = elements[i]; 12076 12077 if (!element.getAttribute("id")) { 12078 element.setAttribute("id", IDENTIFIER + Math.random().toString(36).substr(2, 9)); 12079 } 12080 12081 window.uAd.embed(element.getAttribute("id"), { 12082 placementKey: element.getAttribute("placementKey"), 12083 responsive: Boolean(element.getAttribute("responsive")), 12084 lazy: Boolean(element.getAttribute("lazy")), 12085 adtest: Boolean(element.getAttribute("test")), 12086 query: element.getAttribute("query") || "", 12087 minCpc: element.getAttribute("minCpc") || "", 12088 pageUrl: element.getAttribute("pageUrl") || "", 12089 skip: element.getAttribute("skip") || "" 12090 }); 12091 } 12092 }); 12093 12094 }, 12095 "fallback": function () { 12096 "use strict"; 12097 tarteaucitron.fallback(["aduptech_ads"], tarteaucitron.engage("aduptech_ads")); 12098 } 12099}; 12100 12101// aduptech conversion 12102tarteaucitron.services.aduptech_conversion = { 12103 "key": "aduptech_conversion", 12104 "type": "ads", 12105 "name": "Ad Up Technology (conversion)", 12106 "uri": "https://www.adup-tech.com/datenschutz", 12107 "needConsent": true, 12108 "cookies": [], 12109 "js": function () { 12110 "use strict"; 12111 12112 var IDENTIFIER = "aduptech_conversion", 12113 CONVERSION_PIXEL_BASE_URL = "https://d.adup-tech.com/campaign/conversion"; 12114 12115 var elements = document.getElementsByClassName(IDENTIFIER); 12116 if (!elements || elements.length === 0) { 12117 return; 12118 } 12119 12120 tarteaucitron.fallback([IDENTIFIER], ""); 12121 12122 for (var i = 0; i < elements.length; i++) { 12123 var element = elements[i]; 12124 12125 if (!element.getAttribute("advertiserId") || !element.getAttribute("conversionCode")) { 12126 continue; 12127 } 12128 12129 var url = CONVERSION_PIXEL_BASE_URL + 12130 "/" + encodeURIComponent(element.getAttribute("advertiserId")) + 12131 "?t=" + encodeURIComponent(element.getAttribute("conversionCode")); 12132 12133 if (element.getAttribute("price")) { 12134 url += "&price=" + encodeURIComponent(element.getAttribute("price")); 12135 } 12136 12137 if (element.getAttribute("quantity")) { 12138 url += "&quantity=" + encodeURIComponent(element.getAttribute("quantity")); 12139 } 12140 12141 if (element.getAttribute("total")) { 12142 url += "&total=" + encodeURIComponent(element.getAttribute("total")); 12143 } 12144 12145 if (element.getAttribute("orderId")) { 12146 url += "&order_id=" + encodeURIComponent(element.getAttribute("orderId")); 12147 } 12148 12149 if (element.getAttribute("itemNumber")) { 12150 url += "&item_number=" + encodeURIComponent(element.getAttribute("itemNumber")); 12151 } 12152 12153 if (element.getAttribute("description")) { 12154 url += "&description=" + encodeURIComponent(element.getAttribute("description")); 12155 } 12156 12157 (new Image()).src = url; 12158 } 12159 } 12160}; 12161 12162// aduptech retargeting 12163tarteaucitron.services.aduptech_retargeting = { 12164 "key": "aduptech_retargeting", 12165 "type": "ads", 12166 "name": "Ad Up Technology (retargeting)", 12167 "uri": "https://www.adup-tech.com/datenschutz", 12168 "needConsent": true, 12169 "cookies": [], 12170 "js": function () { 12171 "use strict"; 12172 12173 var IDENTIFIER = "aduptech_retargeting", 12174 API_URL = "https://s.d.adup-tech.com/services/retargeting.js"; 12175 12176 var elements = document.getElementsByClassName(IDENTIFIER); 12177 if (!elements || elements.length === 0) { 12178 return; 12179 } 12180 12181 tarteaucitron.fallback([IDENTIFIER], ""); 12182 12183 window.AdUpRetargeting = function (api) { 12184 for (var i = 0; i < elements.length; i++) { 12185 var element = elements[i]; 12186 12187 api.init(); 12188 12189 api.setAccount(element.getAttribute("account")); 12190 12191 if (element.getAttribute("email")) { 12192 api.setEmail(element.getAttribute("email")); 12193 } else if (element.getAttribute("hashedEmail")) { 12194 api.setHashedEmail(element.getAttribute("hashedEmail")); 12195 } 12196 12197 if (element.getAttribute("product")) { 12198 try {
12199 api.setProduct(JSON.parse(element.getAttribute("product"))); 12200 } catch (e) { 12201 api.setProduct(element.getAttribute("product")); 12202 } 12203 } 12204 12205 if (element.getAttribute("transaction")) { 12206 try { 12207 api.setTransaction(JSON.parse(element.getAttribute("transaction"))); 12208 } catch (e) { 12209 api.setTransaction(element.getAttribute("transaction")); 12210 } 12211 } 12212 12213 if (element.getAttribute("demarkUser")) { 12214 api.setDemarkUser(); 12215 } else if (element.getAttribute("demarkProducts")) { 12216 api.setDemarkProducts(); 12217 } 12218 12219 if (element.getAttribute("conversionCode")) { 12220 api.setConversionCode(element.getAttribute("conversionCode")); 12221 } 12222 12223 if (element.getAttribute("device")) { 12224 var setter = "set" + element.getAttribute("device").charAt(0).toUpperCase() + element.getAttribute("device").slice(1); 12225 if (typeof api[setter] === 'function') { 12226 api[setter](); 12227 } 12228 } 12229 12230 if (element.getAttribute("track")) { 12231 var tracker = "track" + element.getAttribute("track").charAt(0).toUpperCase() + element.getAttribute("track").slice(1); 12232 if (typeof api[tracker] === "function") { 12233 api[tracker](); 12234 } else { 12235 api.trackHomepage(); 12236 } 12237 } 12238 }; 12239 }; 12240 12241 tarteaucitron.addScript(API_URL); 12242 } 12243}; 12244 12245// alexa 12246tarteaucitron.services.alexa = { 12247 "key": "alexa", 12248 "type": "analytic", 12249 "name": "Alexa", 12250 "uri": "https://www.alexa.com/help/privacy", 12251 "needConsent": true, 12252 "cookies": ['__asc', '__auc'], 12253 "js": function () { 12254 "use strict"; 12255 if (tarteaucitron.user.alexaAccountID === undefined) { 12256 return; 12257 } 12258 window._atrk_opts = { 12259 atrk_acct: tarteaucitron.user.alexaAccountID, 12260 domain: window.location.hostname.match(/[^\.]*\.[^.]*$/)[0], 12261 dynamic: true 12262 }; 12263 tarteaucitron.addScript('https://d31qbv1cthcecs.cloudfront.net/atrk.js'); 12264 } 12265}; 12266 12267// amazon 12268tarteaucitron.services.amazon = { 12269 "key": "amazon", 12270 "type": "ads", 12271 "name": "Amazon", 12272 "uri": "https://www.amazon.com/gp/help/customer/display.html/ref=help_search_1-1?ie=UTF8&nodeId=201909010&qid=1544617177&sr=1-1", 12273 "needConsent": true, 12274 "cookies": [], 12275 "js": function () { 12276 "use strict"; 12277 tarteaucitron.fallback(['amazon_product'], function (x) { 12278 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Amazon iframe'), 12279 amazonId = x.getAttribute("amazonid"), 12280 productId = x.getAttribute("productid"), 12281 url = '//ws-eu.amazon-adsystem.com/widgets/q?ServiceVersion=20070822&OneJS=1&Operation=GetAdHtml&MarketPlace=' + tarteaucitron.getLanguage().toUpperCase() + '&source=ss&ref=ss_til&ad_type=product_link&tracking_id=' + amazonId + '&marketplace=amazon®ion=' + tarteaucitron.getLanguage().toUpperCase() + '&placement=' + productId + '&asins=' + productId + '&show_border=true&link_opens_in_new_window=true', 12282 iframe = '<iframe title="' + frame_title + '" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" src="' + url + '"></iframe>'; 12283 12284 return iframe; 12285 }); 12286 }, 12287 "fallback": function () { 12288 "use strict"; 12289 var id = 'amazon'; 12290 tarteaucitron.fallback(['amazon_product'], tarteaucitron.engage(id)); 12291 } 12292}; 12293 12294// calameo 12295tarteaucitron.services.calameo = { 12296 "key": "calameo", 12297 "type": "video", 12298 "name": "Calameo", 12299 "uri": "https://fr.calameo.com/privacy", 12300 "needConsent": true, 12301 "cookies": [], 12302 "js": function () { 12303 "use strict"; 12304 tarteaucitron.fallback(['calameo-canvas'], function (x) { 12305 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Calameo iframe'), 12306 id = x.getAttribute("data-id"), 12307 width = x.getAttribute("width"), 12308 height = x.getAttribute("height"), 12309 url = '//v.calameo.com/?bkcode=' + id, 12310 allowfullscreen = x.getAttribute("allowfullscreen"); 12311 12312 return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 12313 }); 12314 }, 12315 "fallback": function () { 12316 "use strict"; 12317 var id = 'calameo'; 12318 tarteaucitron.fallback(['calameo-canvas'], function (elem) { 12319 elem.style.width = elem.getAttribute('width') + 'px'; 12320 elem.style.height = elem.getAttribute('height') + 'px'; 12321 return tarteaucitron.engage(id); 12322 }); 12323 } 12324}; 12325 12326// clicky 12327tarteaucitron.services.clicky = {
vendor: 8,642 bytes, lines 12328-12564
12328 "key": "clicky", 12329 "type": "analytic", 12330 "name": "Clicky", 12331 "uri": "https://clicky.com/terms", 12332 "needConsent": true, 12333 "cookies": ['_jsuid', '_eventqueue', '_referrer_og', '_utm_og', '_first_pageview', 'clicky_olark', 'no_trackyy_' + tarteaucitron.user.clickyId, 'unpoco_' + tarteaucitron.user.clickyId, 'heatmaps_g2g_' + tarteaucitron.user.clickyId], 12334 "js": function () { 12335 "use strict"; 12336 if (tarteaucitron.user.clickyId === undefined) { 12337 return; 12338 } 12339 tarteaucitron.addScript('//static.getclicky.com/js', '', function () { 12340 if (typeof clicky.init === 'function') { 12341 clicky.init(tarteaucitron.user.clickyId); 12342 } 12343 if (typeof tarteaucitron.user.clickyMore === 'function') { 12344 tarteaucitron.user.clickyMore(); 12345 } 12346 }); 12347 } 12348}; 12349 12350// clicmanager 12351tarteaucitron.services.clicmanager = { 12352 "key": "clicmanager", 12353 "type": "ads", 12354 "name": "Clicmanager", 12355 "uri": "http://www.clicmanager.fr/infos_legales.php", 12356 "needConsent": true, 12357 "cookies": [], 12358 "js": function () { 12359 "use strict"; 12360 var uniqIds = [], 12361 i, 12362 uri; 12363 12364 tarteaucitron.fallback(['clicmanager-canvas'], function (x) { 12365 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 12366 uniqIds.push(uniqId); 12367 return '<div id="' + uniqId + '" c="' + x.getAttribute('c') + '" s="' + x.getAttribute('s') + '" t="' + x.getAttribute('t') + '"></div>'; 12368 }); 12369 12370 for (i = 0; i < uniqIds.length; i += 1) { 12371 uri = '//ads.clicmanager.fr/exe.php?'; 12372 uri += 'c=' + document.getElementById(uniqIds[i]).getAttribute('c') + '&'; 12373 uri += 's=' + document.getElementById(uniqIds[i]).getAttribute('s') + '&'; 12374 uri += 't=' + document.getElementById(uniqIds[i]).getAttribute('t'); 12375 12376 tarteaucitron.makeAsync.init(uri, uniqIds[i]); 12377 } 12378 }, 12379 "fallback": function () { 12380 "use strict"; 12381 var id = 'clicmanager'; 12382 tarteaucitron.fallback(['clicmanager-canvas'], tarteaucitron.engage(id)); 12383 } 12384}; 12385 12386// compteur 12387tarteaucitron.services.compteur = { 12388 "key": "compteur", 12389 "type": "analytic", 12390 "name": "Compteur.fr", 12391 "uri": "https://www.compteur.fr/help_privacy_policy.htm", 12392 "needConsent": true, 12393 "cookies": [], 12394 "js": function () { 12395 "use strict"; 12396 if (tarteaucitron.user.compteurID === undefined) { 12397 return; 12398 } 12399 tarteaucitron.addScript('https://server2.compteur.fr/log7.js', '', function () { wtslog7(tarteaucitron.user.compteurID, 1); }); 12400 } 12401}; 12402 12403// contentsquare 12404tarteaucitron.services.contentsquare = { 12405 "key": "contentsquare", 12406 "type": "api", 12407 "name": "ContentSquare", 12408 "uri": "https://docs.contentsquare.com/uxa-en/#collected-data", 12409 "needConsent": true, 12410 "cookies": ['_cs_id', '_cs_s', '_cs_vars', '_cs_ex', '_cs_c', '_cs_optout'], 12411 "js": function () { 12412 "use strict"; 12413 if (tarteaucitron.user.contentsquareID === undefined) { 12414 return; 12415 } 12416 tarteaucitron.addScript('//t.contentsquare.net/uxa/' + tarteaucitron.user.contentsquareID + '.js'); 12417 } 12418}; 12419 12420// crazyegg 12421tarteaucitron.services.crazyegg = { 12422 "key": "crazyegg", 12423 "type": "analytic", 12424 "name": "Crazy Egg", 12425 "uri": "https://www.crazyegg.com/privacy", 12426 "needConsent": true, 12427 "cookies": [], 12428 "js": function () { 12429 "use strict"; 12430 12431 if (tarteaucitron.user.crazyeggId === undefined) { 12432 return; 12433 } 12434 12435 tarteaucitron.addScript('//script.crazyegg.com/pages/scripts/' + tarteaucitron.user.crazyeggId.substr(0, 4) + '/' + tarteaucitron.user.crazyeggId.substr(4, 4) + '.js'); 12436 } 12437}; 12438 12439// clarity 12440tarteaucitron.services.clarity = { 12441 "key": "clarity", 12442 "type": "analytic", 12443 "name": "Clarity", 12444 "uri": "https://clarity.microsoft.com/", 12445 "needConsent": true, 12446 "cookies": [], 12447 "js": function () { 12448 "use strict"; 12449 12450 window["clarity"] = window["clarity"] || function () { (window["clarity"].q = window["clarity"].q || []).push(arguments) }; 12451 12452 tarteaucitron.addScript('https://www.clarity.ms/tag/' + tarteaucitron.user.clarity); 12453 } 12454}; 12455 12456// criteo 12457tarteaucitron.services.criteo = { 12458 "key": "criteo", 12459 "type": "ads", 12460 "name": "Criteo", 12461 "uri": "http://www.criteo.com/privacy/", 12462 "needConsent": true, 12463 "cookies": [], 12464 "js": function () { 12465 "use strict"; 12466 document.MAX_ct0 = ''; 12467 var uniqIds = [], 12468 i, 12469 uri; 12470 12471 tarteaucitron.fallback(['criteo-canvas'], function (x) { 12472 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 12473 uniqIds.push(uniqId); 12474 return '<div id="' + uniqId + '" zoneid="' + x.getAttribute('zoneid') + '"></div>'; 12475 }); 12476 12477 for (i = 0; i < uniqIds.length; i += 1) { 12478 uri = '//cas.criteo.com/delivery/ajs.php?'; 12479 uri += 'zoneid=' + document.getElementById(uniqIds[i]).getAttribute('zoneid'); 12480 uri += '&nodis=1&cb=' + Math.floor(Math.random() * 99999999999); 12481 uri += '&loc=' + encodeURI(window.location); 12482 uri += (document.MAX_used !== ',') ? '&exclude=' + document.MAX_used : ''; 12483 uri += (document.charset !== undefined ? '&charset=' + document.charset : ''); 12484 uri += (document.characterSet !== undefined ? '&charset=' + document.characterSet : ''); 12485 uri += (document.referrer !== undefined) ? '&referer=' + encodeURI(document.referrer) : ''; 12486 uri += (document.context !== undefined) ? '&context=' + encodeURI(document.context) : ''; 12487 uri += ((document.MAX_ct0 !== undefined) && (document.MAX_ct0.substring(0, 4) === 'http')) ? '&ct0=' + encodeURI(document.MAX_ct0) : ''; 12488 uri += (document.mmm_fo !== undefined) ? '&mmm_fo=1' : ''; 12489 12490 tarteaucitron.makeAsync.init(uri, uniqIds[i]); 12491 } 12492 }, 12493 "fallback": function () { 12494 "use strict"; 12495 var id = 'criteo'; 12496 tarteaucitron.fallback(['criteo-canvas'], tarteaucitron.engage(id)); 12497 } 12498}; 12499 12500// criteo onetag 12501tarteaucitron.services.criteoonetag = { 12502 "key": "criteoonetag", 12503 "type": "ads", 12504 "name": "Criteo OneTag", 12505 "uri": "https://www.criteo.com/privacy/", 12506 "needConsent": true, 12507 "cookies": ['uid', 'tk', 'uid3pd'], 12508 "js": function() { 12509 "use strict"; 12510 if (tarteaucitron.user.criteoonetagAccount === undefined) return; 12511 12512 window.criteo_q = window.criteo_q || []; 12513 window.criteo_q.push({ 12514 event: "setAccount", 12515 account: tarteaucitron.user.criteoonetagAccount 12516 }) 12517 12518 tarteaucitron.addScript('//static.criteo.net/js/ld/ld.js', '', function() { 12519 if (typeof tarteaucitron.user.criteoonetagMore === 'function') { 12520 tarteaucitron.user.criteoonetagMore(); 12521 } 12522 }); 12523 } 12524}; 12525 12526// artetv 12527tarteaucitron.services.artetv = { 12528 "key": "artetv", 12529 "type": "video", 12530 "name": "Arte.tv", 12531 "uri": "https://www.arte.tv/sites/fr/corporate/donnees-personnelles/", 12532 "needConsent": true, 12533 "cookies": [], 12534 "js": function () { 12535 "use strict"; 12536 tarteaucitron.fallback(['artetv_player'], function (x) { 12537 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Arte.tv iframe'), 12538 video_json = x.getAttribute("json"), 12539 video_width = x.getAttribute("width"), 12540 video_height = x.getAttribute("height"), 12541 video_frame, 12542 video_allowfullscreen = x.getAttribute("allowfullscreen"); 12543 12544 if (video_json === undefined) { 12545 return ""; 12546 } 12547 12548 video_frame = '<iframe title="' + frame_title + '" style="transition-duration: 0; transition-property: no; margin: 0 auto; position: relative; display: block; background-color: #000000;" src="https://www.arte.tv/player/v5/index.php?json_url=' + video_json + '" width="' + video_width + '" height="' + video_height + '" scrolling="no" ' + (video_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 12549 return video_frame; 12550 }); 12551 }, 12552 "fallback": function () { 12553 "use strict"; 12554 var id = 'artetv'; 12555 tarteaucitron.fallback(['artetv_player'], function (elem) { 12556 elem.style.width = elem.getAttribute('width') + 'px'; 12557 elem.style.height = elem.getAttribute('height') + 'px'; 12558 return tarteaucitron.engage(id); 12559 }); 12560 } 12561}; 12562 12563// dailymotion 12564tarteaucitron.services.dailymotion = {
12565 "key": "dailymotion", 12566 "type": "video", 12567 "name": "Dailymotion", 12568 "uri": "https://www.dailymotion.com/legal/privacy", 12569 "needConsent": true, 12570 "cookies": ['ts', 'dmvk', 'hist', 'v1st', 's_vi'], 12571 "js": function () { 12572 "use strict"; 12573 tarteaucitron.fallback(['dailymotion_player'], function (x) { 12574 var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Dailymotion iframe'), 12575 video_id = tarteaucitron.getElemAttr(x, "videoID"), 12576 video_width = tarteaucitron.getElemAttr(x, "width"), 12577 frame_width = 'width=', 12578 video_height = tarteaucitron.getElemAttr(x, "height"), 12579 frame_height = 'height=', 12580 video_frame, 12581 embed_type = tarteaucitron.getElemAttr(x, "embedType"), 12582 allowfullscreen = tarteaucitron.getElemAttr(x, "allowfullscreen"), 12583 showinfo = tarteaucitron.getElemAttr(x, "showinfo"), 12584 autoplay = tarteaucitron.getElemAttr(x, "autoplay"), 12585 api = tarteaucitron.getElemAttr(x, "api"), 12586 params = 'info=' + showinfo + '&autoPlay=' + autoplay + '&api=' + api; 12587 12588 if (video_id === undefined) { 12589 return ""; 12590 } 12591 if (video_width !== undefined) { 12592 frame_width += '"' + video_width + '" '; 12593 } else { 12594 frame_width += '"" '; 12595 } 12596 if (video_height !== undefined) { 12597 frame_height += '"' + video_height + '" '; 12598 } else { 12599 frame_height += '"" '; 12600 } 12601 if (embed_type === undefined || !['video', 'playlist'].includes(embed_type)) { 12602 embed_type = "video"; 12603 } 12604 video_frame = '<iframe title="' + frame_title + '" src="//www.dailymotion.com/embed/' + embed_type + '/' + video_id + '?' + params + '" ' + frame_width + frame_height + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 12605 return video_frame; 12606 }); 12607 }, 12608 "fallback": function () { 12609 "use strict"; 12610 var id = 'dailymotion'; 12611 tarteaucitron.fallback(['dailymotion_player'], function (elem) { 12612 elem.style.width = elem.getAttribute('width') + 'px'; 12613 elem.style.height = elem.getAttribute('height') + 'px'; 12614 return tarteaucitron.engage(id); 12615 }); 12616 } 12617}; 12618 12619// dating affiliation 12620tarteaucitron.services.datingaffiliation = { 12621 "key": "datingaffiliation", 12622 "type": "ads", 12623 "name": "Dating Affiliation", 12624 "uri": "http://www.dating-affiliation.com/conditions-generales.php", 12625 "needConsent": true, 12626 "cookies": [], 12627 "js": function () { 12628 "use strict"; 12629 tarteaucitron.fallback(['datingaffiliation-canvas'], function (x) { 12630 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Dating Affiliation iframe'), 12631 comfrom = x.getAttribute("data-comfrom"), 12632 r = x.getAttribute("data-r"), 12633 p = x.getAttribute("data-p"), 12634 cf0 = x.getAttribute("data-cf0"), 12635 langue = x.getAttribute("data-langue"), 12636 forward_affiliate = x.getAttribute("data-forwardAffiliate"), 12637 cf2 = x.getAttribute("data-cf2"), 12638 cfsa2 = x.getAttribute("data-cfsa2"), 12639 width = x.getAttribute("width"), 12640 height = x.getAttribute("height"), 12641 url = 'http://www.tools-affil2.com/rotaban/ban.php?' + comfrom; 12642 12643 return '<iframe title="' + frame_title + '" src="' + url + '&r=' + r + '&p=' + p + '&cf0=' + cf0 + '&langue=' + langue + '&forward_affiliate=' + forward_affiliate + '&cf2=' + cf2 + '&cfsa2=' + cfsa2 + '" width="' + width + '" height="' + height + '" marginheight="0" marginwidth="0" scrolling="no"></iframe>'; 12644 }); 12645 }, 12646 "fallback": function () { 12647 "use strict"; 12648 var id = 'datingaffiliation'; 12649 tarteaucitron.fallback(['datingaffiliation-canvas'], function (elem) { 12650 elem.style.width = elem.getAttribute('width') + 'px'; 12651 elem.style.height = elem.getAttribute('height') + 'px'; 12652 return tarteaucitron.engage(id); 12653 }); 12654 } 12655}; 12656 12657// dating affiliation popup 12658tarteaucitron.services.datingaffiliationpopup = {
12659 "key": "datingaffiliationpopup", 12660 "type": "ads", 12661 "name": "Dating Affiliation (Pop Up)", 12662 "uri": "http://www.dating-affiliation.com/conditions-generales.php", 12663 "needConsent": true, 12664 "cookies": ['__utma', '__utmb', '__utmc', '__utmt_Tools', '__utmv', '__utmz', '_ga', '_gat', '_gat_UA-65072040-17', '__da-pu-xflirt-ID-pc-o169'], 12665 "js": function () { 12666 "use strict"; 12667 var uniqIds = [], 12668 i, 12669 uri; 12670 12671 tarteaucitron.fallback(['datingaffiliationpopup-canvas'], function (x) { 12672 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 12673 uniqIds.push(uniqId); 12674 return '<div id="' + uniqId + '" uri="' + x.getAttribute('uri') + '" comfrom="' + x.getAttribute('comfrom') + '" promo="' + x.getAttribute('promo') + '" productid="' + x.getAttribute('productid') + '" submitconfig="' + x.getAttribute('submitconfig') + '" ur="' + x.getAttribute('ur') + '" brand="' + x.getAttribute('brand') + '" lang="' + x.getAttribute('lang') + '" cf0="' + x.getAttribute('cf0') + '" cf2="' + x.getAttribute('cf2') + '" subid1="' + x.getAttribute('subid1') + '" cfsa2="' + x.getAttribute('cfsa2') + '" subid2="' + x.getAttribute('subid2') + '" nicheid="' + x.getAttribute('nicheid') + '" degreid="' + x.getAttribute('degreid') + '" bt="' + x.getAttribute('bt') + '" vis="' + x.getAttribute('vis') + '" hid="' + x.getAttribute('hid') + '" snd="' + x.getAttribute('snd') + '" aabd="' + x.getAttribute('aabd') + '" aabs="' + x.getAttribute('aabs') + '"></div>'; 12675 }); 12676 12677 for (i = 0; i < uniqIds.length; i += 1) { 12678 uri = 'http://www.promotools.biz/da/popunder/script.php?'; 12679 uri += 'comfrom=' + document.getElementById(uniqIds[i]).getAttribute('comfrom') + '&'; 12680 uri += 'promo=' + document.getElementById(uniqIds[i]).getAttribute('promo') + '&'; 12681 uri += 'product_id=' + document.getElementById(uniqIds[i]).getAttribute('productid') + '&'; 12682 uri += 'submitconfig=' + document.getElementById(uniqIds[i]).getAttribute('submitconfig') + '&'; 12683 uri += 'ur=' + document.getElementById(uniqIds[i]).getAttribute('ur') + '&'; 12684 uri += 'brand=' + document.getElementById(uniqIds[i]).getAttribute('brand') + '&'; 12685 uri += 'lang=' + document.getElementById(uniqIds[i]).getAttribute('lang') + '&'; 12686 uri += 'cf0=' + document.getElementById(uniqIds[i]).getAttribute('cf0') + '&'; 12687 uri += 'cf2=' + document.getElementById(uniqIds[i]).getAttribute('cf2') + '&'; 12688 uri += 'subid1=' + document.getElementById(uniqIds[i]).getAttribute('subid1') + '&'; 12689 uri += 'cfsa2=' + document.getElementById(uniqIds[i]).getAttribute('cfsa2') + '&'; 12690 uri += 'subid2=' + document.getElementById(uniqIds[i]).getAttribute('subid2') + '&'; 12691 uri += 'nicheId=' + document.getElementById(uniqIds[i]).getAttribute('nicheid') + '&'; 12692 uri += 'degreId=' + document.getElementById(uniqIds[i]).getAttribute('degreid') + '&'; 12693 uri += 'bt=' + document.getElementById(uniqIds[i]).getAttribute('bt') + '&'; 12694 uri += 'vis=' + document.getElementById(uniqIds[i]).getAttribute('vis') + '&'; 12695 uri += 'hid=' + document.getElementById(uniqIds[i]).getAttribute('hid') + '&'; 12696 uri += 'snd=' + document.getElementById(uniqIds[i]).getAttribute('snd') + '&'; 12697 uri += 'aabd=' + document.getElementById(uniqIds[i]).getAttribute('aabd') + '&'; 12698 uri += 'aabs=' + document.getElementById(uniqIds[i]).getAttribute('aabs'); 12699 12700 tarteaucitron.makeAsync.init(uri, uniqIds[i]); 12701 } 12702 }, 12703 "fallback": function () { 12704 "use strict"; 12705 var id = 'datingaffiliationpopup'; 12706 tarteaucitron.fallback(['datingaffiliationpopup-canvas'], tarteaucitron.engage(id)); 12707 } 12708}; 12709 12710// deezer 12711tarteaucitron.services.deezer = { 12712 "key": "deezer", 12713 "type": "video", 12714 "name": "Deezer", 12715 "uri": "https://www.deezer.com/legal/personal-datas", 12716 "needConsent": true, 12717 "cookies": [], 12718 "js": function () { 12719 "use strict"; 12720 tarteaucitron.fallback(['deezer_player'], function (x) { 12721 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Deezer iframe'), 12722 deezer_id = x.getAttribute("deezerID"), 12723 deezer_width = x.getAttribute("width"), 12724 frame_width = 'width=', 12725 deezer_height = x.getAttribute("height"), 12726 frame_height = 'height=', 12727 deezer_frame, 12728 embed_theme = x.getAttribute("theme"), 12729 embed_type = x.getAttribute("embedType"), 12730 radius = x.getAttribute("radius"), 12731 tracklist = x.getAttribute("tracklist"), 12732 allowfullscreen = x.getAttribute("allowfullscreen"), 12733 params; 12734 12735 if (deezer_id === undefined) { 12736 return ""; 12737 } 12738 if (deezer_width !== undefined) { 12739 frame_width += '"' + deezer_width + '" '; 12740 } else { 12741 frame_width += '"" '; 12742 } 12743 if (deezer_height !== undefined) { 12744 frame_height += '"' + deezer_height + '" '; 12745 } else { 12746 frame_height += '"" '; 12747 } 12748 if (embed_theme === undefined || !['auto', 'light', 'dark'].includes(embed_theme)) { 12749 embed_theme = "auto"; 12750 } 12751 if (embed_type === undefined || !['album', 'track', 'playlist'].includes(embed_type)) { 12752 embed_type = "album"; 12753 } 12754 if (radius === undefined || !['true', 'false'].includes(radius)) { 12755 radius = "true"; 12756 } 12757 if (tracklist === undefined || !['true', 'false'].includes(tracklist)) { 12758 tracklist = "true"; 12759 } 12760 params = 'tracklist=' + tracklist + '&radius=' + radiu
vendor: 26,749 bytes, lines 12760-13532
12760s; 12761 deezer_frame = '<iframe title="' + frame_title + '" src="//widget.deezer.com/widget/' + embed_theme + '/' + embed_type + '/' + deezer_id + '?' + params + '" ' + frame_width + frame_height + ' ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 12762 return deezer_frame; 12763 }); 12764 }, 12765 "fallback": function () { 12766 "use strict"; 12767 var id = 'deezer'; 12768 tarteaucitron.fallback(['deezer_player'], function (elem) { 12769 elem.style.width = elem.getAttribute('width') + 'px'; 12770 elem.style.height = elem.getAttribute('height') + 'px'; 12771 return tarteaucitron.engage(id); 12772 }); 12773 } 12774}; 12775 12776// leadforensics 12777tarteaucitron.services.leadforensics = { 12778 "key": "leadforensics", 12779 "type": "analytic", 12780 "name": "LeadForensics", 12781 "uri": "https://www.leadforensics.com/privacy-policy/", 12782 "needConsent": true, 12783 "cookies": ['trackalyzer'], 12784 "js": function () { 12785 "use strict"; 12786 if (tarteaucitron.user.leadforensicsSf14gv === undefined || 12787 tarteaucitron.user.leadforensicsIidentifier === undefined) { 12788 return; 12789 } 12790 12791 window.sf14gv = tarteaucitron.user.leadforensicsSf14gv; 12792 12793 (function () { 12794 var sf14g = document.createElement('script'); sf14g.async = true; 12795 sf14g.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 't.sf14g.com/sf14g.js'; 12796 var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sf14g, s); 12797 })(); 12798 12799 tarteaucitron.addScript('//secure.leadforensics.com/js/' + tarteaucitron.user.leadforensicsIidentifier + '.js'); 12800 } 12801}; 12802 12803// disqus 12804tarteaucitron.services.disqus = { 12805 "key": "disqus", 12806 "type": "comment", 12807 "name": "Disqus", 12808 "uri": "https://help.disqus.com/customer/portal/articles/466259-privacy-policy", 12809 "needConsent": true, 12810 "cookies": [], 12811 "js": function () { 12812 "use strict"; 12813 if (tarteaucitron.user.disqusShortname === undefined) { 12814 return; 12815 } 12816 tarteaucitron.addScript('//' + tarteaucitron.user.disqusShortname + '.disqus.com/embed.js'); 12817 tarteaucitron.addScript('//' + tarteaucitron.user.disqusShortname + '.disqus.com/count.js'); 12818 }, 12819 "fallback": function () { 12820 "use strict"; 12821 var id = 'disqus'; 12822 12823 if (document.getElementById('disqus_thread')) { 12824 document.getElementById('disqus_thread').innerHTML = tarteaucitron.engage(id); 12825 } 12826 } 12827}; 12828 12829// ekomi 12830tarteaucitron.services.ekomi = { 12831 "key": "ekomi", 12832 "type": "social", 12833 "name": "eKomi", 12834 "uri": "http://www.ekomi-us.com/us/privacy/", 12835 "needConsent": true, 12836 "cookies": [], 12837 "js": function () { 12838 "use strict"; 12839 if (tarteaucitron.user.ekomiCertId === undefined) { 12840 return; 12841 } 12842 window.eKomiIntegrationConfig = [ 12843 { certId: tarteaucitron.user.ekomiCertId } 12844 ]; 12845 tarteaucitron.addScript('//connect.ekomi.de/integration_1410173009/' + tarteaucitron.user.ekomiCertId + '.js'); 12846 } 12847}; 12848 12849// etracker 12850tarteaucitron.services.etracker = { 12851 "key": "etracker", 12852 "type": "analytic", 12853 "name": "eTracker", 12854 "uri": "https://www.etracker.com/en/data-protection.html", 12855 "needConsent": true, 12856 "cookies": [], 12857 "js": function () { 12858 "use strict"; 12859 if (tarteaucitron.user.etracker === undefined) { 12860 return; 12861 } 12862 12863 tarteaucitron.addScript('//static.etracker.com/code/e.js', '_etLoader', function () { }, true, "data-secure-code", tarteaucitron.user.etracker); 12864 } 12865}; 12866 12867// facebook 12868tarteaucitron.services.facebook = { 12869 "key": "facebook", 12870 "type": "social", 12871 "name": "Facebook", 12872 "uri": "https://www.facebook.com/policy.php", 12873 "needConsent": true, 12874 "cookies": ['xs', 'sb', 'fr', 'datr', 'dpr', 'c_user'], 12875 "js": function () { 12876 "use strict"; 12877 tarteaucitron.fallback(['fb-post', 'fb-follow', 'fb-activity', 'fb-send', 'fb-share-button', 'fb-like', 'fb-video'], ''); 12878 tarteaucitron.addScript('//connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk.js#xfbml=1&version=v2.0', 'facebook-jssdk'); 12879 if (tarteaucitron.isAjax === true) { 12880 if (typeof FB !== "undefined") { 12881 FB.XFBML.parse(); 12882 } 12883 } 12884 }, 12885 "fallback": function () { 12886 "use strict"; 12887 var id = 'facebook'; 12888 tarteaucitron.fallback(['fb-post', 'fb-follow', 'fb-activity', 'fb-send', 'fb-share-button', 'fb-like', 'fb-video'], tarteaucitron.engage(id)); 12889 } 12890}; 12891 12892// facebooklikebox 12893tarteaucitron.services.facebooklikebox = { 12894 "key": "facebooklikebox", 12895 "type": "social", 12896 "name": "Facebook (like box)", 12897 "uri": "https://www.facebook.com/policy.php", 12898 "needConsent": true, 12899 "cookies": [], 12900 "js": function () { 12901 "use strict"; 12902 tarteaucitron.fallback(['fb-like-box', 'fb-page'], ''); 12903 tarteaucitron.addScript('//connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk.js#xfbml=1&version=v2.3', 'facebook-jssdk'); 12904 if (tarteaucitron.isAjax === true) { 12905 if (typeof FB !== "undefined") { 12906 FB.XFBML.parse(); 12907 } 12908 } 12909 }, 12910 "fallback": function () { 12911 "use strict"; 12912 var id = 'facebooklikebox'; 12913 tarteaucitron.fallback(['fb-like-box', 'fb-page'], tarteaucitron.engage(id)); 12914 } 12915}; 12916 12917// facebookcomment 12918tarteaucitron.services.facebookcomment = { 12919 "key": "facebookcomment", 12920 "type": "comment", 12921 "name": "Facebook (commentaire)", 12922 "uri": "https://www.facebook.com/policy.php", 12923 "needConsent": true, 12924 "cookies": [], 12925 "js": function () { 12926 "use strict"; 12927 tarteaucitron.fallback(['fb-comments'], ''); 12928 tarteaucitron.addScript('//connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk.js#xfbml=1&version=v2.0', 'facebook-jssdk'); 12929 if (tarteaucitron.isAjax === true) { 12930 if (typeof FB !== "undefined") { 12931 FB.XFBML.parse(); 12932 } 12933 } 12934 }, 12935 "fallback": function () { 12936 "use strict"; 12937 var id = 'facebookcomment'; 12938 tarteaucitron.fallback(['fb-comments'], tarteaucitron.engage(id)); 12939 } 12940}; 12941 12942// ferank 12943tarteaucitron.services.ferank = { 12944 "key": "ferank", 12945 "type": "analytic", 12946 "name": "FERank", 12947 "uri": "https://www.ferank.fr/respect-vie-privee/#mesureaudience", 12948 "needConsent": false, 12949 "cookies": [], 12950 "js": function () { 12951 "use strict"; 12952 tarteaucitron.addScript('//static.ferank.fr/pixel.js', '', function () { 12953 if (typeof tarteaucitron.user.ferankMore === 'function') { 12954 tarteaucitron.user.ferankMore(); 12955 } 12956 }); 12957 } 12958}; 12959 12960// pingdom 12961tarteaucitron.services.pingdom = { 12962 "key": "pingdom", 12963 "type": "api", 12964 "name": "Pingdom", 12965 "uri": "https://www.solarwinds.com/general-data-protection-regulation-cloud", 12966 "needConsent": true, 12967 "cookies": [], 12968 "js": function () { 12969 "use strict"; 12970 12971 if (tarteaucitron.user.pingdomId === undefined) { 12972 return; 12973 } 12974 12975 window._prum = [['id', tarteaucitron.user.pingdomId], ['mark', 'firstbyte', (new Date()).getTime()]]; 12976 12977 tarteaucitron.addScript('https://rum-static.pingdom.net/prum.min.js'); 12978 } 12979}; 12980 12981 12982// simpleanalytics 12983tarteaucitron.services.simpleanalytics = { 12984 "key": "simpleanalytics", 12985 "type": "analytic", 12986 "name": "Simple Analytics", 12987 "uri": "https://docs.simpleanalytics.com/what-we-collect", 12988 "needConsent": false, 12989 "cookies": [], 12990 "js": function () { 12991 "use strict"; 12992 tarteaucitron.addScript('https://scripts.simpleanalyticscdn.com/latest.js'); 12993 } 12994}; 12995 12996// stonly 12997tarteaucitron.services.stonly = { 12998 "key": "stonly", 12999 "type": "api", 13000 "name": "Stonly", 13001 "uri": "https://stonly.com/privacy", 13002 "needConsent": true, 13003 "cookies": [], 13004 "js": function () { 13005 "use strict"; 13006 if (tarteaucitron.user.stonlyId === undefined) { 13007 return; 13008 } 13009 13010 window.STONLY_WID = tarteaucitron.user.stonlyId; 13011 window.StonlyWidget || ((window.w = window.StonlyWidget = function () { 13012 window.w._api ? window.w._api.apply(window.w, arguments) : window.w.queue.push(arguments) 13013 }).queue = []); 13014 13015 tarteaucitron.addScript('https://stonly.com/js/widget/v2/stonly-widget.js?v=' + Date.now()); 13016 } 13017}; 13018 13019// stripe 13020/*tarteaucitron.services.stripe = { 13021 "key": "stripe", 13022 "type": "api", 13023 "name": "Stripe", 13024 "uri": "https://stripe.com/cookies-policy/legal", 13025 "needConsent": true, 13026 "cookies": [], 13027 "js": function () { 13028 "use strict"; 13029 tarteaucitron.addScript('https://js.stripe.com/v3/'); 13030 } 13031};*/ 13032 13033// ferank pub 13034tarteaucitron.services.ferankpub = { 13035 "key": "ferankpub", 13036 "type": "ads", 13037 "name": "FERank (pub)", 13038 "uri": "https://www.ferank.fr/respect-vie-privee/#regiepublicitaire", 13039 "needConsent": false, 13040 "cookies": [], 13041 "js": function () { 13042 "use strict"; 13043 tarteaucitron.addScript('//static.ferank.fr/publicite.async.js'); 13044 if (tarteaucitron.isAjax === true) { 13045 if (typeof ferankReady === 'function') { 13046 ferankReady(); 13047 } 13048 } 13049 }, 13050 "fallback": function () { 13051 "use strict"; 13052 var id = 'ferankpub'; 13053 tarteaucitron.fallback(['ferank-publicite'], tarteaucitron.engage(id)); 13054 } 13055}; 13056 13057// get+ 13058tarteaucitron.services.getplus = { 13059 "key": "getplus", 13060 "type": "analytic", 13061 "name": "Get+", 13062 "uri": "http://www.getplus.fr/Conditions-generales-de-vente_a226.html", 13063 "needConsent": true, 13064 "cookies": ['_first_pageview', '_jsuid', 'no_trackyy_' + tarteaucitron.user.getplusId, '_eventqueue'], 13065 "js": function () { 13066 "use strict"; 13067 if (tarteaucitron.user.getplusId === undefined) { 13068 return; 13069 } 13070 13071 window.webleads_site_ids = window.webleads_site_ids || []; 13072 window.webleads_site_ids.push(tarteaucitron.user.getplusId); 13073 tarteaucitron.addScript('//stats.webleads-tracker.com/js'); 13074 } 13075}; 13076 13077// google+ 13078tarteaucitron.services.gplus = { 13079 "key": "gplus", 13080 "type": "social", 13081 "name": "Google+", 13082 "uri": "https://policies.google.com/privacy", 13083 "needConsent": true, 13084 "cookies": [], 13085 "js": function () { 13086 "use strict"; 13087 tarteaucitron.addScript('https://apis.google.com/js/platform.js'); 13088 }, 13089 "fallback": function () { 13090 "use strict"; 13091 var id = 'gplus'; 13092 tarteaucitron.fallback(['g-plus', 'g-plusone'], tarteaucitron.engage(id)); 13093 } 13094}; 13095 13096// google+ badge 13097tarteaucitron.services.gplusbadge = { 13098 "key": "gplusbadge", 13099 "type": "social", 13100 "name": "Google+ (badge)", 13101 "uri": "https://policies.google.com/privacy", 13102 "needConsent": true, 13103 "cookies": [], 13104 "js": function () { 13105 "use strict"; 13106 tarteaucitron.addScript('https://apis.google.com/js/platform.js'); 13107 }, 13108 "fallback": function () { 13109 "use strict"; 13110 var id = 'gplusbadge'; 13111 tarteaucitron.fallback(['g-page', 'g-person'], tarteaucitron.engage(id)); 13112 } 13113}; 13114 13115// google adsense 13116tarteaucitron.services.adsense = { 13117 "key": "adsense", 13118 "type": "ads", 13119 "name": "Google Adsense", 13120 "uri": "https://adssettings.google.com/", 13121 "needConsent": true, 13122 "readmoreLink": "https://policies.google.com/technologies/partner-sites", 13123 "cookies": ['__gads'], 13124 "js": function () { 13125 "use strict"; 13126 tarteaucitron.fallback(['adsbygoogle'], ''); 13127 tarteaucitron.addScript('https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js'); 13128 }, 13129 "fallback": function () { 13130 "use strict"; 13131 var id = 'adsense'; 13132 tarteaucitron.fallback(['adsbygoogle'], tarteaucitron.engage(id)); 13133 } 13134}; 13135 13136 13137// google adsense automatic 13138tarteaucitron.services.adsenseauto = { 13139 "key": "adsenseauto", 13140 "type": "ads", 13141 "name": "Google Adsense Automatic", 13142 "uri": "https://adssettings.google.com/", 13143 "needConsent": true, 13144 "readmoreLink": "https://policies.google.com/technologies/partner-sites", 13145 "cookies": ['__gads'], 13146 "js": function () { 13147 "use strict"; 13148 13149 if (tarteaucitron.user.adsensecapub === undefined) { 13150 return; 13151 } 13152 tarteaucitron.addScript('https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=' + tarteaucitron.user.adsensecapub, '', '', '', 'crossorigin', 'anonymous'); 13153 } 13154}; 13155 13156// Google Adsense Search 13157tarteaucitron.services.adsensesearch = { 13158 "key": "adsensesearch", 13159 "type": "ads", 13160 "name": "Google Adsense Search", 13161 "uri": "https://adssettings.google.com/", 13162 "needConsent": true, 13163 "readmoreLink": "https://policies.google.com/technologies/partner-sites", 13164 "cookies": ['__gads'], 13165 "js": function () { 13166 "use strict"; 13167 tarteaucitron.addScript('https://www.google.com/adsense/search/ads.js'); 13168 }, 13169 "fallback": function () { 13170 "use strict"; 13171 var id = 'adsensesearch'; 13172 tarteaucitron.fallback(['afscontainer1'], tarteaucitron.engage(id)); 13173 } 13174}; 13175 13176// google partners badge 13177tarteaucitron.services.googlepartners = { 13178 "key": "googlepartners", 13179 "type": "ads", 13180 "name": "Google Partners Badge", 13181 "uri": "https://adssettings.google.com/", 13182 "needConsent": true, 13183 "cookies": [], 13184 "js": function () { 13185 "use strict"; 13186 tarteaucitron.addScript('https://apis.google.com/js/platform.js'); 13187 }, 13188 "fallback": function () { 13189 "use strict"; 13190 var id = 'googlepartners'; 13191 tarteaucitron.fallback(['g-partnersbadge'], tarteaucitron.engage(id)); 13192 } 13193}; 13194 13195// google adsense search (form) 13196tarteaucitron.services.adsensesearchform = { 13197 "key": "adsensesearchform", 13198 "type": "ads", 13199 "name": "Google Adsense Search (form)", 13200 "uri": "https://adssettings.google.com/", 13201 "needConsent": true, 13202 "cookies": [], 13203 "js": function () { 13204 "use strict"; 13205 tarteaucitron.addScript('//www.google.com/coop/cse/brand?form=cse-search-box&lang=' + tarteaucitron.getLanguage()); 13206 } 13207}; 13208 13209// google adsense search (result) 13210tarteaucitron.services.adsensesearchresult = { 13211 "key": "adsensesearchresult", 13212 "type": "ads", 13213 "name": "Google Adsense Search (result)", 13214 "uri": "https://adssettings.google.com/", 13215 "needConsent": true, 13216 "cookies": [], 13217 "js": function () { 13218 "use strict"; 13219 if (tarteaucitron.user.adsensesearchresultCx === undefined) { 13220 return; 13221 } 13222 tarteaucitron.addScript('//www.google.com/cse/cse.js?cx=' + tarteaucitron.user.adsensesearchresultCx); 13223 }, 13224 "fallback": function () { 13225 "use strict"; 13226 var id = 'adsensesearchresult'; 13227 13228 if (document.getElementById('gcse_searchresults')) { 13229 document.getElementById('gcse_searchresults').innerHTML = tarteaucitron.engage(id); 13230 } 13231 } 13232}; 13233 13234// googleadwordsconversion 13235tarteaucitron.services.googleadwordsconversion = { 13236 "key": "googleadwordsconversion", 13237 "type": "ads", 13238 "name": "Google Adwords (conversion)", 13239 "uri": "https://www.google.com/settings/ads", 13240 "needConsent": true, 13241 "cookies": [], 13242 "js": function () { 13243 "use strict"; 13244 if (tarteaucitron.user.adwordsconversionId === undefined) { 13245 return; 13246 } 13247 13248 tarteaucitron.addScript('//www.googleadservices.com/pagead/conversion_async.js', '', function () { 13249 window.google_trackConversion({ 13250 google_conversion_id: tarteaucitron.user.adwordsconversionId, 13251 google_conversion_label: tarteaucitron.user.adwordsconversionLabel, 13252 google_conversion_language: tarteaucitron.user.adwordsconversionLanguage, 13253 google_conversion_format: tarteaucitron.user.adwordsconversionFormat, 13254 google_conversion_color: tarteaucitron.user.adwordsconversionColor, 13255 google_conversion_value: tarteaucitron.user.adwordsconversionValue, 13256 google_conversion_currency: tarteaucitron.user.adwordsconversionCurrency, 13257 google_custom_params: { 13258 parameter1: tarteaucitron.user.adwordsconversionCustom1, 13259 parameter2: tarteaucitron.user.adwordsconversionCustom2 13260 } 13261 }); 13262 }); 13263 } 13264}; 13265 13266// googleadwordsremarketing 13267tarteaucitron.services.googleadwordsremarketing = { 13268 "key": "googleadwordsremarketing", 13269 "type": "ads", 13270 "name": "Google Adwords (remarketing)", 13271 "uri": "https://www.google.com/settings/ads", 13272 "needConsent": true, 13273 "cookies": [], 13274 "js": function () { 13275 "use strict"; 13276 if (tarteaucitron.user.adwordsremarketingId === undefined) { 13277 return; 13278 } 13279 13280 tarteaucitron.addScript('//www.googleadservices.com/pagead/conversion_async.js', '', function () { 13281 window.google_trackConversion({ 13282 google_conversion_id: tarteaucitron.user.adwordsremarketingId, 13283 google_remarketing_only: true 13284 }); 13285 }); 13286 } 13287}; 13288 13289// google analytics (old) 13290tarteaucitron.services.gajs = { 13291 "key": "gajs", 13292 "type": "analytic", 13293 "name": "Google Analytics (ga.js)", 13294 "uri": "https://policies.google.com/privacy", 13295 "needConsent": true, 13296 "cookies": (function () { 13297 var googleIdentifier = tarteaucitron.user.gajsUa, 13298 tagUaCookie = '_gat_gtag_' + googleIdentifier, 13299 tagGCookie = '_ga_' + googleIdentifier; 13300 13301 tagUaCookie = tagUaCookie.replace(/-/g, '_'); 13302 tagGCookie = tagGCookie.replace(/G-/g, ''); 13303 13304 return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au']; 13305 })(), 13306 "js": function () { 13307 "use strict"; 13308 window._gaq = window._gaq || []; 13309 window._gaq.push(['_setAccount', tarteaucitron.user.gajsUa]); 13310 if (timeExpire !== undefined) { 13311 _gaq.push(['_setVisitorCookieTimeout', timeExpire]); 13312 } 13313 13314 if (tarteaucitron.user.gajsAnonymizeIp) { 13315 window._gaq.push(['_gat._anonymizeIp']); 13316 } 13317 13318 if (tarteaucitron.user.gajsPageView) { 13319 window._gaq.push(['_trackPageview, ' + tarteaucitron.user.gajsPageView]); 13320 } else { 13321 window._gaq.push(['_trackPageview']); 13322 } 13323 13324 tarteaucitron.addScript('//www.google-analytics.com/ga.js', '', function () { 13325 if (typeof tarteaucitron.user.gajsMore === 'function') { 13326 tarteaucitron.user.gajsMore(); 13327 } 13328 }); 13329 } 13330}; 13331 13332// google analytics 13333tarteaucitron.services.analytics = { 13334 "key": "analytics", 13335 "type": "analytic", 13336 "name": "Google Analytics (universal)", 13337 "uri": "https://policies.google.com/privacy", 13338 "needConsent": true, 13339 "cookies": (function () { 13340 var googleIdentifier = tarteaucitron.user.analyticsUa, 13341 tagUaCookie = '_gat_gtag_' + googleIdentifier, 13342 tagGCookie = '_ga_' + googleIdentifier; 13343 13344 tagUaCookie = tagUaCookie.replace(/-/g, '_'); 13345 tagGCookie = tagGCookie.replace(/G-/g, ''); 13346 13347 return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au']; 13348 })(), 13349 "js": function () { 13350 "use strict"; 13351 window.GoogleAnalyticsObject = 'ga'; 13352 window.ga = window.ga || function () { 13353 window.ga.q = window.ga.q || []; 13354 window.ga.q.push(arguments); 13355 }; 13356 window.ga.l = new Date(); 13357 tarteaucitron.addScript('https://www.google-analytics.com/analytics.js', '', function () { 13358 var uaCreate = { 'cookieExpires': (timeExpire !== undefined) ? timeExpire : 34128000 }; 13359 tarteaucitron.extend(uaCreate, tarteaucitron.user.analyticsUaCreate || {}); 13360 ga('create', tarteaucitron.user.analyticsUa, uaCreate); 13361 13362 if (tarteaucitron.user.analyticsAnonymizeIp) { 13363 ga('set', 'anonymizeIp', true); 13364 } 13365 13366 if (typeof tarteaucitron.user.analyticsPrepare === 'function') { 13367 tarteaucitron.user.analyticsPrepare(); 13368 } 13369 13370 if (tarteaucitron.user.analyticsPageView) { 13371 ga('send', 'pageview', tarteaucitron.user.analyticsPageView); 13372 } else { 13373 ga('send', 'pageview'); 13374 } 13375 13376 if (typeof tarteaucitron.user.analyticsMore === 'function') { 13377 tarteaucitron.user.analyticsMore(); 13378 } 13379 }); 13380 } 13381}; 13382 13383// google ads 13384tarteaucitron.services.googleads = { 13385 "key": "googleads", 13386 "type": "ads", 13387 "name": "Google Ads", 13388 "uri": "https://policies.google.com/privacy", 13389 "needConsent": true, 13390 "cookies": (function () { 13391 var googleIdentifier = tarteaucitron.user.googleadsId, 13392 tagUaCookie = '_gat_gtag_' + googleIdentifier, 13393 tagGCookie = '_ga_' + googleIdentifier; 13394 13395 tagUaCookie = tagUaCookie.replace(/-/g, '_'); 13396 tagGCookie = tagGCookie.replace(/G-/g, ''); 13397 13398 return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au']; 13399 })(), 13400 "js": function () { 13401 "use strict"; 13402 window.dataLayer = window.dataLayer || []; 13403 tarteaucitron.addScript('https://www.googletagmanager.com/gtag/js?id=' + tarteaucitron.user.googleadsId, '', function () { 13404 window.gtag = function gtag() { dataLayer.push(arguments); } 13405 gtag('js', new Date()); 13406 var additional_config_info = (timeExpire !== undefined) ? {'anonymize_ip': true, 'cookie_expires': timeExpire / 1000} : {'anonymize_ip': true}; 13407 13408 gtag('config', tarteaucitron.user.googleadsId, additional_config_info); 13409 13410 if (typeof tarteaucitron.user.googleadsMore === 'function') { 13411 tarteaucitron.user.googleadsMore(); 13412 } 13413 }); 13414 } 13415}; 13416 13417// google analytics 13418tarteaucitron.services.gtag = { 13419 "key": "gtag", 13420 "type": "analytic", 13421 "name": "Google Analytics (GA4)", 13422 "uri": "https://policies.google.com/privacy", 13423 "needConsent": true, 13424 "cookies": (function () { 13425 var googleIdentifier = tarteaucitron.user.gtagUa, 13426 tagUaCookie = '_gat_gtag_' + googleIdentifier, 13427 tagGCookie = '_ga_' + googleIdentifier; 13428 13429 tagUaCookie = tagUaCookie.replace(/-/g, '_'); 13430 tagGCookie = tagGCookie.replace(/G-/g, ''); 13431 13432 return ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', tagUaCookie, tagGCookie, '_gcl_au']; 13433 })(), 13434 "js": function () { 13435 "use strict"; 13436 window.dataLayer = window.dataLayer || []; 13437 tarteaucitron.addScript('https://www.googletagmanager.com/gtag/js?id=' + tarteaucitron.user.gtagUa, '', function () { 13438 window.gtag = function gtag() { dataLayer.push(arguments); } 13439 gtag('js', new Date()); 13440 var additional_config_info = (timeExpire !== undefined) ? {'anonymize_ip': true, 'cookie_expires': timeExpire / 1000} : {'anonymize_ip': true}; 13441 13442 if (tarteaucitron.user.gtagCrossdomain) { 13443 /** 13444 * https://support.google.com/analytics/answer/7476333?hl=en 13445 * https://developers.google.com/analytics/devguides/collection/gtagjs/cross-domain 13446 */ 13447 gtag('config', tarteaucitron.user.gtagUa, additional_config_info, { linker: { domains: tarteaucitron.user.gtagCrossdomain, } }); 13448 } else { 13449 gtag('config', tarteaucitron.user.gtagUa, additional_config_info); 13450 } 13451 13452 if (typeof tarteaucitron.user.gtagMore === 'function') { 13453 tarteaucitron.user.gtagMore(); 13454 } 13455 }); 13456 } 13457}; 13458 13459tarteaucitron.services.firebase = { 13460 "key": "firebase", 13461 "type": "analytic", 13462 "name": "Firebase", 13463 "uri": "https://firebase.google.com/support/privacy", 13464 "needConsent": true, 13465 "cookies": (function () { 13466 var googleIdentifier = tarteaucitron.user.firebaseMeasurementId, 13467 tagGCookie = '_ga_' + googleIdentifier; 13468 13469 tagGCookie = tagGCookie.replace(/G-/g, ''); 13470 13471 return ['_ga', tagGCookie]; 13472 })(), 13473 "js": function () { 13474 "use strict"; 13475 13476 if (tarteaucitron.user.firebaseApiKey === undefined) { 13477 return; 13478 } 13479 13480 tarteaucitron.addScript('https://www.gstatic.com/firebasejs/8.6.2/firebase-app.js', '', function () { 13481 tarteaucitron.addScript('https://www.gstatic.com/firebasejs/8.6.2/firebase-analytics.js', '', function () { 13482 13483 var firebaseConfig = { 13484 apiKey: tarteaucitron.user.firebaseApiKey, 13485 authDomain: tarteaucitron.user.firebaseAuthDomain, 13486 databaseURL: tarteaucitron.user.firebaseDatabaseUrl, 13487 projectId: tarteaucitron.user.firebaseProjectId, 13488 storageBucket: tarteaucitron.user.firebaseStorageBucket, 13489 appId: tarteaucitron.user.firebaseAppId, 13490 measurementId: tarteaucitron.user.firebaseMeasurementId, 13491 }; 13492 firebase.initializeApp(firebaseConfig); 13493 firebase.analytics(); 13494 }); 13495 }); 13496 } 13497}; 13498 13499// genially 13500tarteaucitron.services.genially = { 13501 "key": "genially", 13502 "type": "api", 13503 "name": "genially", 13504 "uri": "https://www.genial.ly/cookies", 13505 "needConsent": true, 13506 "cookies": ['_gat', '_ga', '_gid'], 13507 "js": function () { 13508 "use strict"; 13509 13510 tarteaucitron.fallback(['tac_genially'], function (x) { 13511 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'genially iframe'), 13512 width = x.getAttribute("width"), 13513 height = x.getAttribute("height"), 13514 geniallyid = x.getAttribute("geniallyid"), 13515 allowfullscreen = x.getAttribute("allowfullscreen"); 13516 13517 return '<div style="position: relative; padding-bottom: 109.00%; padding-top: 0; height: 0;"><iframe style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" title="' + frame_title + '" src="https://view.genial.ly/' + geniallyid + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe></div>'; 13518 }); 13519 }, 13520 "fallback": function () { 13521 "use strict"; 13522 var id = 'genially'; 13523 tarteaucitron.fallback(['tac_genially'], function (elem) { 13524 elem.style.width = elem.getAttribute('width') + 'px'; 13525 elem.style.height = elem.getAttribute('height') + 'px'; 13526 return tarteaucitron.engage(id); 13527 }); 13528 } 13529}; 13530 13531// google maps 13532tarteaucitron.services.googlemaps = {
13533 "key": "googlemaps", 13534 "type": "api", 13535 "name": "Google Maps", 13536 "uri": "https://policies.google.com/privacy", 13537 "needConsent": true, 13538 "cookies": [], 13539 "js": function () { 13540 "use strict"; 13541 var mapOptions, 13542 map, 13543 uniqIds = [], 13544 i; 13545 13546 if (tarteaucitron.user.mapscallback === undefined) { 13547 tarteaucitron.user.mapscallback = 'tac_googlemaps_callback'; 13548 } 13549 13550 // Add Google Maps libraries if any (https://developers.google.com/maps/documentation/javascript/libraries) 13551 var googleMapsLibraries = ''; 13552 if (tarteaucitron.user.googlemapsLibraries) { 13553 googleMapsLibraries = '&libraries=' + tarteaucitron.user.googlemapsLibraries; 13554 } 13555 13556 tarteaucitron.addScript('//maps.googleapis.com/maps/api/js?v=3.exp&key=' + tarteaucitron.user.googlemapsKey + '&callback=' + tarteaucitron.user.mapscallback + googleMapsLibraries); 13557 13558 window.tac_googlemaps_callback = function () { 13559 tarteaucitron.fallback(['googlemaps-canvas'], function (x) { 13560 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 13561 uniqIds.push(uniqId); 13562 return '<div id="' + uniqId + '" zoom="' + x.getAttribute('zoom') + '" latitude="' + x.getAttribute('latitude') + '" longitude="' + x.getAttribute('longitude') + '" style="width:' + x.offsetWidth + 'px;height:' + x.offsetHeight + 'px"></div>'; 13563 }); 13564 13565 var i; 13566 for (i = 0; i < uniqIds.length; i += 1) { 13567 mapOptions = { 13568 zoom: parseInt(document.getElementById(uniqIds[i]).getAttribute('zoom'), 10), 13569 center: new google.maps.LatLng(parseFloat(document.getElementById(uniqIds[i]).getAttribute('latitude'), 10), parseFloat(document.getElementById(uniqIds[i]).getAttribute('longitude'), 10)) 13570 }; 13571 map = new google.maps.Map(document.getElementById(uniqIds[i]), mapOptions); 13572 new google.maps.Marker({ position: { lat: parseFloat(document.getElementById(uniqIds[i]).getAttribute('latitude'), 10), lng: parseFloat(document.getElementById(uniqIds[i]).getAttribute('longitude'), 10) }, map: map }); 13573 } 13574 }; 13575 }, 13576 "fallback": function () { 13577 "use strict"; 13578 var id = 'googlemaps'; 13579 tarteaucitron.fallback(['googlemaps-canvas'], tarteaucitron.engage(id)); 13580 } 13581}; 13582 13583// googlemaps search 13584tarteaucitron.services.googlemapssearch = { 13585 "key": "googlemapssearch", 13586 "type": "api", 13587 "name": "Google Maps Search API", 13588 "uri": "https://policies.google.com/privacy", 13589 "needConsent": true, 13590 "cookies": ['nid'], 13591 "js": function () { 13592 "use strict"; 13593 tarteaucitron.fallback(['googlemapssearch'], function (x) { 13594 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Google search iframe'), 13595 width = x.getAttribute("width"), 13596 height = x.getAttribute("height"), 13597 // url = x.getAttribute("data-url"); 13598 query = escape(x.getAttribute("data-search")), 13599 key = x.getAttribute("data-api-key"); 13600 13601 return '<iframe title="' + frame_title + '" width="' + width + '" height="' + height + '" style="border:0" src="https://www.google.com/maps/embed/v1/place?q=' + query + '&key=' + key + '" allowfullscreen></iframe> ' 13602 }); 13603 }, 13604 "fallback": function () { 13605 "use strict"; 13606 var id = 'googlemapssearch'; 13607 tarteaucitron.fallback(['googlemapssearch'], function (elem) { 13608 elem.style.width = elem.getAttribute('width') + 'px'; 13609 elem.style.height = elem.getAttribute('height') + 'px'; 13610 return tarteaucitron.engage(id); 13611 }); 13612 } 13613}; 13614 13615// googlemaps embed iframe 13616tarteaucitron.services.googlemapsembed = { 13617 "key": "googlemapsembed", 13618 "type": "api", 13619 "name": "Google Maps Embed", 13620 "uri": "https://policies.google.com/privacy", 13621 "needConsent": true, 13622 "cookies": ['apisid', 'hsid', 'nid', 'sapisid', 'sid', 'sidcc', 'ssid', '1p_jar'], 13623 "js": function () { 13624 "use strict"; 13625 tarteaucitron.fallback(['googlemapsembed'], function (x) { 13626 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Google maps iframe'), 13627 width = tarteaucitron.getElemWidth(x), 13628 height = tarteaucitron.getElemHeight(x), 13629 url = x.getAttribute("data-url"); 13630 13631 return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency allowfullscreen></iframe>'; 13632 }); 13633 }, 13634 "fallback": function () { 13635 "use strict"; 13636 var id = 'googlemapsembed'; 13637 tarteaucitron.fallback(['googlemapsembed'], function (elem) { 13638 elem.style.width = tarteaucitron.getElemWidth(elem) + 'px'; 13639 elem.style.height = tarteaucitron.getElemHeight(elem) + 'px'; 13640 return tarteaucitron.engage(id); 13641 }); 13642 } 13643}; 13644 13645 13646// openstreetmap embed iframe 13647tarteaucitron.services.openstreetmap = {
13648 "key": "openstreetmap", 13649 "type": "api", 13650 "name": "Openstreetmap Embed", 13651 "uri": "https://wiki.osmfoundation.org/wiki/Privacy_Policy#Cookies", 13652 "needConsent": true, 13653 "cookies": ['apisid', 'hsid', 'nid', 'sapisid', 'sid', 'sidcc', 'ssid', '1p_jar'], 13654 "js": function () { 13655 "use strict"; 13656 tarteaucitron.fallback(['openstreetmap'], function (x) { 13657 var width = tarteaucitron.getElemWidth(x), 13658 height = tarteaucitron.getElemHeight(x), 13659 url = x.getAttribute("data-url"); 13660 13661 return '<iframe src="' + url + '" width="' + width + '" height="' + height + '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" allowfullscreen></iframe>'; 13662 }); 13663 }, 13664 "fallback": function () { 13665 "use strict"; 13666 var id = 'openstreetmap'; 13667 tarteaucitron.fallback(['openstreetmap'], function (elem) { 13668 elem.style.width = tarteaucitron.getElemWidth(elem) + 'px'; 13669 elem.style.height = tarteaucitron.getElemHeight(elem) + 'px'; 13670 return tarteaucitron.engage(id); 13671 }); 13672 } 13673}; 13674 13675// geoportail embed iframe 13676tarteaucitron.services.geoportail = { 13677 "key": "geoportail", 13678 "type": "api", 13679 "name": "Geoportail maps Embed", 13680 "uri": "https://www.ign.fr/institut/gestion-des-cookies", 13681 "needConsent": true, 13682 "cookies": ['apisid', 'hsid', 'nid', 'sapisid', 'sid', 'sidcc', 'ssid', '1p_jar'], 13683 "js": function () { 13684 "use strict"; 13685 tarteaucitron.fallback(['geoportail'], function (x) { 13686 var width = tarteaucitron.getElemWidth(x), 13687 height = tarteaucitron.getElemHeight(x), 13688 url = x.getAttribute("data-url"); 13689 13690 return '<iframe src="' + url + '" width="' + width + '" height="' + height + '" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" sandbox="allow-forms allow-scripts allow-same-origin" allowfullscreen></iframe>'; 13691 }); 13692 }, 13693 "fallback": function () { 13694 "use strict"; 13695 var id = 'geoportail'; 13696 tarteaucitron.fallback(['geoportail'], function (elem) { 13697 elem.style.width = tarteaucitron.getElemWidth(elem) + 'px'; 13698 elem.style.height = tarteaucitron.getElemHeight(elem) + 'px'; 13699 return tarteaucitron.engage(id); 13700 }); 13701 } 13702}; 13703 13704 13705// google tag manager 13706tarteaucitron.services.googletagmanager = { 13707 "key": "googletagmanager", 13708 "type": "api", 13709 "name": "Google Tag Manager", 13710 "uri": "https://policies.google.com/privacy", 13711 "needConsent": true, 13712 "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'], 13713 "js": function () { 13714 "use strict"; 13715 if (tarteaucitron.user.googletagmanagerId === undefined) { 13716 return; 13717 } 13718 window.dataLayer = window.dataLayer || []; 13719 window.dataLayer.push({ 13720 'gtm.start': new Date().getTime(), 13721 event: 'gtm.js' 13722 }); 13723 tarteaucitron.addScript('https://www.googletagmanager.com/gtm.js?id=' + tarteaucitron.user.googletagmanagerId); 13724 } 13725}; 13726 13727// google tag manager multiple 13728tarteaucitron.services.multiplegoogletagmanager = { 13729 "key": "multiplegoogletagmanager", 13730 "type": "api", 13731 "name": "Google Tag Manager", 13732 "uri": "https://policies.google.com/privacy", 13733 "needConsent": true, 13734 "cookies": ['_ga', '_gat', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '__gads', '_drt_', 'FLC', 'exchange_uid', 'id', 'fc', 'rrs', 'rds', 'rv', 'uid', 'UIDR', 'UID', 'clid', 'ipinfo', 'acs'], 13735 "js": function () { 13736 "use strict"; 13737 if (tarteaucitron.user.multiplegoogletagmanagerId === undefined) { 13738 return; 13739 } 13740 window.dataLayer = window.dataLayer || []; 13741 window.dataLayer.push({ 13742 'gtm.start': new Date().getTime(), 13743 event: 'gtm.js' 13744 }); 13745 13746 tarteaucitron.user.multiplegoogletagmanagerId.forEach(function (id) { 13747 tarteaucitron.addScript('https://www.googletagmanager.com/gtm.js?id=' + id); 13748 }); 13749 13750 } 13751}; 13752 13753// google webfonts 13754tarteaucitron.services.googlefonts = {
13755 "key": "googlefonts", 13756 "type": "api", 13757 "name": "Google Webfonts", 13758 "uri": "https://policies.google.com/privacy", 13759 "needConsent": true, 13760 "cookies": [], 13761 "js": function () { 13762 "use strict"; 13763 if (tarteaucitron.user.googleFonts === undefined) { 13764 return; 13765 } 13766 tarteaucitron.addScript('//ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js', '', function () { 13767 WebFont.load({ 13768 google: { 13769 families: tarteaucitron.user.googleFonts 13770 } 13771 }); 13772 }); 13773 } 13774}; 13775 13776// hubspot 13777tarteaucitron.services.hubspot = { 13778 "key": "hubspot", 13779 "type": "analytic", 13780 "name": "Hubspot", 13781 "uri": "https://legal.hubspot.com/privacy-policy", 13782 "needConsent": true, 13783 "cookies": ['hubspotutk', 'fr', '__hstc', '__hssrc', '__hssc', '__cfduid'], 13784 "js": function () { 13785 "use strict"; 13786 tarteaucitron.addScript('//js.hs-scripts.com/' + tarteaucitron.user.hubspotId + '.js', 'hs-script-loader'); 13787 } 13788}; 13789 13790// instagram 13791tarteaucitron.services.instagram = { 13792 "key": "instagram", 13793 "type": "social", 13794 "name": "Instagram", 13795 "uri": "https://www.instagram.com/legal/privacy/", 13796 "needConsent": true, 13797 "cookies": ['shbts', 'sessionid', 'csrftoken', 'rur', 'shbid', 'mid', 'ds_usr_id', 'ig_did', 'ig_cb', 'datr'], 13798 "js": function () { 13799 "use strict"; 13800 tarteaucitron.fallback(['instagram_post'], function (x) { 13801 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Instagram iframe'), 13802 post_id = x.getAttribute('postId'), 13803 post_permalink = x.getAttribute('data-instgrm-permalink'), 13804 embed_width = x.getAttribute('width'), 13805 embed_height = x.getAttribute('height'), 13806 frame_width, 13807 frame_height, 13808 post_frame; 13809 13810 if (post_permalink != null) { 13811 tarteaucitron.addScript('//www.instagram.com/embed.js', 'instagram-embed'); 13812 13813 return ''; 13814 } 13815 13816 if (post_id === undefined) { 13817 return ""; 13818 } 13819 13820 if (embed_width !== undefined) { 13821 frame_width = 'width="' + embed_width + '" '; 13822 } else { 13823 frame_width = '"" '; 13824 } 13825 if (embed_height !== undefined) { 13826 frame_height = 'height="' + embed_height + '" '; 13827 } else { 13828 frame_height = '"" '; 13829 } 13830 13831 post_frame = '<iframe title="' + frame_title + '" src="//www.instagram.com/' + post_id + '/embed" ' + frame_width + frame_height + '></iframe>'; 13832 13833 return post_frame; 13834 }); 13835 }, 13836 "fallback": function () { 13837 "use strict"; 13838 var id = 'instagram'; 13839 tarteaucitron.fallback(['instagram_post'], function (elem) { 13840 elem.style.width = elem.getAttribute('width') + 'px'; 13841 elem.style.height = elem.getAttribute('height') + 'px'; 13842 return tarteaucitron.engage(id); 13843 }); 13844 } 13845}; 13846 13847// jsapi 13848tarteaucitron.services.jsapi = { 13849 "key": "jsapi", 13850 "type": "api", 13851 "name": "Google jsapi", 13852 "uri": "https://policies.google.com/privacy", 13853 "needConsent": true, 13854 "cookies": [], 13855 "js": function () { 13856 "use strict"; 13857 tarteaucitron.addScript('//www.google.com/jsapi'); 13858 } 13859}; 13860 13861// twitterwidgetsapi 13862tarteaucitron.services.twitterwidgetsapi = { 13863 "key": "twitterwidgetsapi", 13864 "type": "api", 13865 "name": "Twitter Widgets API", 13866 "uri": "https://support.twitter.com/articles/20170514", 13867 "needConsent": true, 13868 "cookies": [], 13869 "js": function () { 13870 "use strict"; 13871 tarteaucitron.fallback(['tacTwitterAPI'], ''); 13872 tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs'); 13873 }, 13874 "fallback": function () { 13875 "use strict"; 13876 var id = 'twitterwidgetsapi'; 13877 tarteaucitron.fallback(['tacTwitterAPI'], tarteaucitron.engage(id)); 13878 } 13879}; 13880 13881// recaptcha 13882tarteaucitron.services.recaptcha = { 13883 "key": "recaptcha", 13884 "type": "api", 13885 "name": "reCAPTCHA", 13886 "uri": "https://policies.google.com/privacy", 13887 "needConsent": true, 13888 "cookies": ['nid'], 13889 "js": function () { 13890 "use strict"; 13891 window.tacRecaptchaOnLoad = tarteaucitron.user.recaptchaOnLoad || function () { }; 13892 tarteaucitron.fallback(['g-recaptcha'], ''); 13893 13894 if (tarteaucitron.user.recaptchaapi === undefined) { 13895 tarteaucitron.addScript('https://www.google.com/recaptcha/api.js?onload=tacRecaptchaOnLoad'); 13896 } else { 13897 tarteaucitron.addScript('https://www.google.com/recaptcha/api.js?onload=tacRecaptchaOnLoad&render=' + tarteaucitron.user.recaptchaapi); 13898 } 13899 13900 }, 13901 "fallback": function () { 13902 "use strict"; 13903 var id = 'recaptcha'; 13904 tarteaucitron.fallback(['g-recaptcha'], tarteaucitron.engage(id)); 13905 } 13906}; 13907 13908// linkedin 13909tarteaucitron.services.linkedin = {
vendor: 5,096 bytes, lines 13910-14063
13910 "key": "linkedin", 13911 "type": "social", 13912 "name": "Linkedin", 13913 "uri": "https://www.linkedin.com/legal/cookie_policy", 13914 "needConsent": true, 13915 "cookies": [], 13916 "js": function () { 13917 "use strict"; 13918 tarteaucitron.fallback(['tacLinkedin'], ''); 13919 tarteaucitron.addScript('//platform.linkedin.com/in.js'); 13920 if (tarteaucitron.isAjax === true) { 13921 if (typeof IN !== "undefined") { 13922 IN.parse(); 13923 } 13924 } 13925 }, 13926 "fallback": function () { 13927 "use strict"; 13928 var id = 'linkedin'; 13929 tarteaucitron.fallback(['tacLinkedin'], tarteaucitron.engage(id)); 13930 } 13931}; 13932 13933// mautic 13934tarteaucitron.services.mautic = { 13935 "key": "mautic", 13936 "type": "analytic", 13937 "name": "Mautic", 13938 "uri": "https://www.mautic.org/privacy-policy/", 13939 "needConsent": true, 13940 "cookies": ['mtc_id', 'mtc_sid'], 13941 "js": function () { 13942 "use strict"; 13943 if (tarteaucitron.user.mauticurl === undefined) { 13944 return; 13945 } 13946 13947 window.MauticTrackingObject = 'mt'; 13948 window.mt = window.mt || function () { 13949 window.mt.q = window.mt.q || []; 13950 window.mt.q.push(arguments); 13951 }; 13952 13953 tarteaucitron.addScript(tarteaucitron.user.mauticurl, '', function () { 13954 mt('send', 'pageview'); 13955 }); 13956 } 13957}; 13958 13959// microsoftcampaignanalytics 13960tarteaucitron.services.microsoftcampaignanalytics = { 13961 "key": "microsoftcampaignanalytics", 13962 "type": "analytic", 13963 "name": "Microsoft Campaign Analytics", 13964 "uri": "https://privacy.microsoft.com/privacystatement/", 13965 "needConsent": true, 13966 "cookies": [], 13967 "js": function () { 13968 "use strict"; 13969 if (tarteaucitron.user.microsoftcampaignanalyticsUUID === undefined) { 13970 return; 13971 } 13972 13973 tarteaucitron.addScript('//flex.atdmt.com/mstag/site/' + tarteaucitron.user.microsoftcampaignanalyticsUUID + '/mstag.js', 'mstag_tops', function () { 13974 window.mstag = { loadTag: function () { }, time: (new Date()).getTime() }; 13975 window.mstag.loadTag("analytics", { dedup: "1", domainId: tarteaucitron.user.microsoftcampaignanalyticsdomainId, type: "1", actionid: tarteaucitron.user.microsoftcampaignanalyticsactionId }); 13976 }); 13977 } 13978}; 13979 13980// onesignal 13981tarteaucitron.services.onesignal = { 13982 "key": "onesignal", 13983 "type": "api", 13984 "name": "OneSignal", 13985 "uri": "https://onesignal.com/privacy_policy", 13986 "needConsent": true, 13987 "cookies": [], 13988 "js": function () { 13989 "use strict"; 13990 if (tarteaucitron.user.onesignalAppId === undefined) { 13991 return; 13992 } 13993 window.OneSignal = window.OneSignal || []; 13994 13995 window.OneSignal.push(function () { 13996 window.OneSignal.init({ 13997 appId: tarteaucitron.user.onesignalAppId, 13998 }); 13999 }); 14000 14001 tarteaucitron.addScript('https://cdn.onesignal.com/sdks/OneSignalSDK.js'); 14002 } 14003}; 14004 14005// pinterest 14006tarteaucitron.services.pinterest = { 14007 "key": "pinterest", 14008 "type": "social", 14009 "name": "Pinterest", 14010 "uri": "https://about.pinterest.com/privacy-policy", 14011 "needConsent": true, 14012 "cookies": [], 14013 "js": function () { 14014 "use strict"; 14015 tarteaucitron.fallback(['tacPinterest'], ''); 14016 tarteaucitron.addScript('//assets.pinterest.com/js/pinit.js'); 14017 }, 14018 "fallback": function () { 14019 "use strict"; 14020 var id = 'pinterest'; 14021 tarteaucitron.fallback(['tacPinterest'], tarteaucitron.engage(id)); 14022 } 14023}; 14024 14025// prelinker 14026tarteaucitron.services.prelinker = { 14027 "key": "prelinker", 14028 "type": "ads", 14029 "name": "Prelinker", 14030 "uri": "http://www.prelinker.com/index/index/cgu/", 14031 "needConsent": true, 14032 "cookies": ['_sp_id.32f5', '_sp_ses.32f5'], 14033 "js": function () { 14034 "use strict"; 14035 var uniqIds = [], 14036 i, 14037 uri; 14038 14039 tarteaucitron.fallback(['prelinker-canvas'], function (x) { 14040 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 14041 uniqIds.push(uniqId); 14042 return '<div id="' + uniqId + '" siteId="' + x.getAttribute('siteId') + '" bannerId="' + x.getAttribute('bannerId') + '" defaultLanguage="' + x.getAttribute('defaultLanguage') + '" tracker="' + x.getAttribute('tracker') + '"></div>'; 14043 }); 14044 14045 for (i = 0; i < uniqIds.length; i += 1) { 14046 uri = 'http://promo.easy-dating.org/banner/index?'; 14047 uri += 'site_id=' + document.getElementById(uniqIds[i]).getAttribute('siteId') + '&'; 14048 uri += 'banner_id=' + document.getElementById(uniqIds[i]).getAttribute('bannerId') + '&'; 14049 uri += 'default_language=' + document.getElementById(uniqIds[i]).getAttribute('defaultLanguage') + '&'; 14050 uri += 'tr4ck=' + document.getElementById(uniqIds[i]).getAttribute('trackrt'); 14051 14052 tarteaucitron.makeAsync.init(uri, uniqIds[i]); 14053 } 14054 }, 14055 "fallback": function () { 14056 "use strict"; 14057 var id = 'prelinker'; 14058 tarteaucitron.fallback(['prelinker-canvas'], tarteaucitron.engage(id)); 14059 } 14060}; 14061 14062// prezi 14063tarteaucitron.services.prezi = {
14064 "key": "prezi", 14065 "type": "video", 14066 "name": "Prezi", 14067 "uri": "https://prezi.com/privacy-policy/", 14068 "needConsent": true, 14069 "cookies": [], 14070 "js": function () { 14071 "use strict"; 14072 tarteaucitron.fallback(['prezi-canvas'], function (x) { 14073 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Prezi iframe'), 14074 id = x.getAttribute("data-id"), 14075 width = x.getAttribute("width"), 14076 height = x.getAttribute("height"), 14077 url = 'https://prezi.com/embed/' + id + '/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0'; 14078 14079 return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency allowfullscreen></iframe>'; 14080 }); 14081 }, 14082 "fallback": function () { 14083 "use strict"; 14084 var id = 'prezi'; 14085 tarteaucitron.fallback(['prezi-canvas'], function (elem) { 14086 elem.style.width = elem.getAttribute('width') + 'px'; 14087 elem.style.height = elem.getAttribute('height') + 'px'; 14088 return tarteaucitron.engage(id); 14089 }); 14090 } 14091}; 14092 14093// pubdirecte 14094tarteaucitron.services.pubdirecte = { 14095 "key": "pubdirecte", 14096 "type": "ads", 14097 "name": "Pubdirecte", 14098 "uri": "http://pubdirecte.com/contact.php", 14099 "needConsent": true, 14100 "cookies": [], 14101 "js": function () { 14102 "use strict"; 14103 var uniqIds = [], 14104 i, 14105 uri; 14106 14107 tarteaucitron.fallback(['pubdirecte-canvas'], function (x) { 14108 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 14109 uniqIds.push(uniqId); 14110 return '<div id="' + uniqId + '" pid="' + x.getAttribute('pid') + '" ref="' + x.getAttribute('ref') + '"></div>'; 14111 }); 14112 14113 for (i = 0; i < uniqIds.length; i += 1) { 14114 uri = '//www.pubdirecte.com/script/banniere.php?'; 14115 uri += 'id=' + document.getElementById(uniqIds[i]).getAttribute('pid') + '&'; 14116 uri += 'ref=' + document.getElementById(uniqIds[i]).getAttribute('ref'); 14117 14118 tarteaucitron.makeAsync.init(uri, uniqIds[i]); 14119 } 14120 }, 14121 "fallback": function () { 14122 "use strict"; 14123 var id = 'pubdirecte'; 14124 tarteaucitron.fallback(['pubdirecte-canvas'], tarteaucitron.engage(id)); 14125 } 14126}; 14127 14128// purechat 14129tarteaucitron.services.purechat = { 14130 "key": "purechat", 14131 "type": "support", 14132 "name": "PureChat", 14133 "uri": "https://www.purechat.com/privacy", 14134 "needConsent": true, 14135 "cookies": [], 14136 "js": function () { 14137 "use strict"; 14138 if (tarteaucitron.user.purechatId === undefined) { 14139 return; 14140 } 14141 14142 tarteaucitron.addScript('//app.purechat.com/VisitorWidget/WidgetScript', '', function () { 14143 try { 14144 window.w = new PCWidget({ c: tarteaucitron.user.purechatId, f: true }); 14145 } catch (e) { } 14146 }); 14147 } 14148}; 14149 14150// Intercom 14151tarteaucitron.services.intercomChat = { 14152 "key": "intercomChat", 14153 "type": "support", 14154 "name": "Intercom", 14155 "uri": "https://www.intercom.com/", 14156 "needConsent": true, 14157 "cookies": [ 14158 "intercom-id-" + tarteaucitron.user.intercomKey, 14159 "intercom-session-" + tarteaucitron.user.intercomKey, 14160 ], 14161 "readmoreLink": "https://www.intercom.com/legal/privacy", 14162 "js": function () { 14163 window.intercomSettings = { 14164 app_id: tarteaucitron.user.intercomKey, 14165 }; 14166 14167 var w = window; 14168 var ic = w.Intercom; 14169 if (typeof ic === "function") { 14170 ic("reattach_activator"); 14171 ic("update", w.intercomSettings); 14172 } else { 14173 var i = function () { 14174 i.c(arguments); 14175 }; 14176 i.q = []; 14177 i.c = function (args) { 14178 i.q.push(args); 14179 }; 14180 w.Intercom = i; 14181 tarteaucitron.addScript( 14182 "https://widget.intercom.io/widget/" + tarteaucitron.user.intercomKey, 14183 "", 14184 function () { 14185 // Execute callback if function `intercomChatEnable` 14186 // is defined 14187 if (typeof intercomChatEnable === 'function') { 14188 intercomChatEnable() 14189 } 14190 } 14191 ); 14192 } 14193 }, 14194 "fallback": function () { 14195 "use strict"; 14196 var id = "intercomChat"; 14197 tarteaucitron.fallback( 14198 ["intercom-chat"], 14199 function () { 14200 // Execute callback if function `intercomChatDisable` 14201 // is defined 14202 if (typeof intercomChatDisable === 'function') { 14203 intercomChatDisable() 14204 } 14205 return tarteaucitron.engage(id) 14206 } 14207 ); 14208 }, 14209}; 14210 14211// rumbletalk 14212tarteaucitron.services.rumbletalk = {
14213 "key": "rumbletalk", 14214 "type": "social", 14215 "name": "RumbleTalk", 14216 "needConsent": true, 14217 "cookies": ['AWSALB'], 14218 "js": function () { 14219 "use strict"; 14220 if (tarteaucitron.user.rumbletalkid === undefined) { 14221 return; 14222 } 14223 14224 tarteaucitron.addScript('https://rumbletalk.com/client/?' + tarteaucitron.user.rumbletalkid); 14225 14226 tarteaucitron.fallback(['rumbletalk'], function (x) { 14227 var width = tarteaucitron.getElemWidth(x), 14228 height = tarteaucitron.getElemHeight(x), 14229 id = x.getAttribute("data-id"); 14230 14231 return '<div style="height: ' + height + 'px; width: ' + width + 'px;"><div id="' + id + '"></div></div>'; 14232 }); 14233 }, 14234 "fallback": function () { 14235 "use strict"; 14236 var id = 'rumbletalk'; 14237 tarteaucitron.fallback(['rumbletalk'], function (elem) { 14238 elem.style.width = tarteaucitron.getElemWidth(elem) + 'px'; 14239 elem.style.height = tarteaucitron.getElemHeight(elem) + 'px'; 14240 14241 return tarteaucitron.engage(id); 14242 }); 14243 } 14244}; 14245 14246// shareaholic 14247tarteaucitron.services.shareaholic = { 14248 "key": "shareaholic", 14249 "type": "social", 14250 "name": "Shareaholic", 14251 "uri": "https://shareaholic.com/privacy/choices", 14252 "needConsent": true, 14253 "cookies": ['__utma', '__utmb', '__utmc', '__utmz', '__utmt_Shareaholic%20Pageviews'], 14254 "js": function () { 14255 "use strict"; 14256 if (tarteaucitron.user.shareaholicSiteId === undefined) { 14257 return; 14258 } 14259 14260 tarteaucitron.fallback(['shareaholic-canvas'], ''); 14261 tarteaucitron.addScript('//dsms0mj1bbhn4.cloudfront.net/assets/pub/shareaholic.js', '', function () { 14262 try { 14263 Shareaholic.init(tarteaucitron.user.shareaholicSiteId); 14264 } catch (e) { } 14265 }); 14266 }, 14267 "fallback": function () { 14268 "use strict"; 14269 var id = 'shareaholic'; 14270 tarteaucitron.fallback(['shareaholic-canvas'], tarteaucitron.engage(id)); 14271 } 14272}; 14273 14274// shareasale 14275tarteaucitron.services.shareasale = { 14276 "key": "shareasale", 14277 "type": "ads", 14278 "name": "ShareASale", 14279 "uri": "https://www.shareasale.com/PrivacyPolicy.pdf", 14280 "needConsent": true, 14281 "cookies": [], 14282 "js": function () { 14283 "use strict"; 14284 var uniqIds = [], 14285 i, 14286 uri; 14287 14288 tarteaucitron.fallback(['shareasale-canvas'], function (x) { 14289 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 14290 uniqIds.push(uniqId); 14291 return '<div id="' + uniqId + '" amount="' + x.getAttribute('amount') + '" tracking="' + x.getAttribute('tracking') + '" transtype="' + x.getAttribute('transtype') + '" persale="' + x.getAttribute('persale') + '" perlead="' + x.getAttribute('perlead') + '" perhit="' + x.getAttribute('perhit') + '" merchantID="' + x.getAttribute('merchantID') + '"></div>'; 14292 }); 14293 14294 for (i = 0; i < uniqIds.length; i += 1) { 14295 uri = 'https://shareasale.com/sale.cfm?'; 14296 uri += 'amount=' + document.getElementById(uniqIds[i]).getAttribute('amount') + '&'; 14297 uri += 'tracking=' + document.getElementById(uniqIds[i]).getAttribute('tracking') + '&'; 14298 uri += 'transtype=' + document.getElementById(uniqIds[i]).getAttribute('transtype') + '&'; 14299 uri += 'persale=' + document.getElementById(uniqIds[i]).getAttribute('persale') + '&'; 14300 uri += 'perlead=' + document.getElementById(uniqIds[i]).getAttribute('perlead') + '&'; 14301 uri += 'perhit=' + document.getElementById(uniqIds[i]).getAttribute('perhit') + '&'; 14302 uri += 'merchantID=' + document.getElementById(uniqIds[i]).getAttribute('merchantID'); 14303 14304 document.getElementById(uniqIds[i]).innerHTML = '<img src=\'' + uri + '\' width=\'1\' height=\'1\' />'; 14305 } 14306 }, 14307 "fallback": function () { 14308 "use strict"; 14309 var id = 'shareasale'; 14310 tarteaucitron.fallback(['shareasale-canvas'], tarteaucitron.engage(id)); 14311 } 14312}; 14313 14314// sharethis 14315tarteaucitron.services.sharethis = { 14316 "key": "sharethis", 14317 "type": "social", 14318 "name": "ShareThis", 14319 "uri": "http://www.sharethis.com/legal/privacy/", 14320 "needConsent": true, 14321 "cookies": ['__unam'], 14322 "js": function () { 14323 "use strict"; 14324 if (tarteaucitron.user.sharethisPublisher === undefined) { 14325 return; 14326 } 14327 var switchTo5x = true, 14328 uri = ('https:' === document.location.protocol ? 'https://ws' : 'http://w') + '.sharethis.com/button/buttons.js'; 14329
14330 tarteaucitron.fallback(['tacSharethis'], ''); 14331 tarteaucitron.addScript(uri, '', function () { 14332 stLight.options({ publisher: tarteaucitron.user.sharethisPublisher, doNotHash: false, doNotCopy: false, hashAddressBar: false }); 14333 }); 14334 14335 if (tarteaucitron.isAjax === true) { 14336 if (typeof stButtons !== "undefined") { 14337 stButtons.locateElements(); 14338 } 14339 } 14340 }, 14341 "fallback": function () { 14342 "use strict"; 14343 var id = 'sharethis'; 14344 tarteaucitron.fallback(['tacSharethis'], tarteaucitron.engage(id)); 14345 } 14346}; 14347 14348// slideshare 14349tarteaucitron.services.slideshare = { 14350 "key": "slideshare", 14351 "type": "video", 14352 "name": "SlideShare", 14353 "uri": "https://www.linkedin.com/legal/privacy-policy", 14354 "needConsent": true, 14355 "cookies": [], 14356 "js": function () { 14357 "use strict"; 14358 tarteaucitron.fallback(['slideshare-canvas'], function (x) { 14359 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Slideshare iframe'), 14360 id = x.getAttribute("data-id"), 14361 width = x.getAttribute("width"), 14362 height = x.getAttribute("height"), 14363 url = '//www.slideshare.net/slideshow/embed_code/' + id; 14364 14365 return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" scrolling="no" allowtransparency allowfullscreen></iframe>'; 14366 }); 14367 }, 14368 "fallback": function () { 14369 "use strict"; 14370 var id = 'slideshare'; 14371 tarteaucitron.fallback(['slideshare-canvas'], function (elem) { 14372 elem.style.width = elem.getAttribute('width') + 'px'; 14373 elem.style.height = elem.getAttribute('height') + 'px'; 14374 return tarteaucitron.engage(id); 14375 }); 14376 } 14377}; 14378 14379// soundcloud 14380tarteaucitron.services.soundcloud = { 14381 key: 'soundcloud', 14382 type: 'video', 14383 name: 'SoundCloud', 14384 needConsent: true, 14385 cookies: ['sc_anonymous_id', 'sclocale'], 14386 js: function () { 14387 "use strict"; 14388 tarteaucitron.fallback(['soundcloud_player'], function (x) { 14389 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Soundcloud iframe'), 14390 player_height = x.getAttribute('data-height'), 14391 frame_height = 'height="' + player_height + '" ', 14392 playable_id = x.getAttribute('data-playable-id'), 14393 playable_type = x.getAttribute('data-playable-type'), 14394 playable_url = x.getAttribute('data-playable-url'), 14395 color = x.getAttribute('data-color'), 14396 autoplay = x.getAttribute('data-auto-play'), 14397 hideRelated = x.getAttribute('data-hide-related'), 14398 showComments = x.getAttribute('data-show-comments'), 14399 showUser = x.getAttribute('data-show-user'), 14400 showReposts = x.getAttribute('data-show-reposts'), 14401 showTeaser = x.getAttribute('data-show-teaser'), 14402 visual = x.getAttribute('data-visual'), 14403 artwork = x.getAttribute('data-artwork'); 14404 14405 var allowAutoplay = autoplay === 'true' ? 'allow="autoplay"' : ''; 14406 14407 if (playable_id === undefined && playable_url === undefined) { 14408 return ""; 14409 } 14410 14411 // Allow to embed from API results (playable_type + playable_id) 14412 var qs = '?url=https%3A//api.soundcloud.com/' + playable_type + '/' + playable_id; 14413 // Or from raw URL from Soundcloud website 14414 if (playable_url && playable_url.length > 0) qs = '?url=' + escape(playable_url); 14415 14416 if (hideRelated && hideRelated.length > 0) qs += '&hide_related=' + hideRelated; 14417 if (color && color.length > 0) qs += '&color=' + color.replace('#', '%23'); 14418 if (autoplay && autoplay.length > 0) qs += '&auto_play=' + autoplay; 14419 if (showComments && showComments.length > 0) qs += '&show_comments=' + showComments; 14420 if (hideRelated && hideRelated.length > 0) qs += '&hide_related=' + hideRelated; 14421 if (showUser && showUser.length > 0) qs += '&show_user=' + showUser; 14422 if (showReposts && showReposts.length > 0) qs += '&show_reposts=' + showReposts; 14423 if (showTeaser && showTeaser.length > 0) qs += '&show_teaser=' + showTeaser; 14424 if (visual && visual.length > 0) qs += '&visual=' + visual; 14425 if (artwork && artwork.length >
14425 0) qs += '&show_artwork=' + artwork; 14426 14427 return '<iframe title="' + frame_title + '" width="100%" ' + frame_height + ' scrolling="no" ' + allowAutoplay + ' src="https://w.soundcloud.com/player/' + qs + '"></iframe>'; 14428 }); 14429 }, 14430 fallback: function () { 14431 "use strict"; 14432 tarteaucitron.fallback(['soundcloud_player'], function (elem) { 14433 elem.style.height = elem.getAttribute('data-height') + 'px'; 14434 return tarteaucitron.engage('soundcloud'); 14435 }); 14436 } 14437}; 14438 14439// spotify 14440tarteaucitron.services.spotify = { 14441 "key": "spotify", 14442 "type": "video", 14443 "name": "Spotify", 14444 "uri": "https://www.spotify.com/us/legal/privacy-policy/", 14445 "needConsent": true, 14446 "cookies": ['sp_landing', '_ga', 'sp_ab', 'sp_landingref', 'sp_t', 'sp_usid', 'OptanonConsent', 'sp_m', 'spot'], 14447 "js": function () { 14448 "use strict"; 14449 tarteaucitron.fallback(['spotify_player'], function (x) { 14450 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Spotify iframe'), 14451 spotify_id = x.getAttribute("spotifyID"), 14452 spotify_width = x.getAttribute("width"), 14453 frame_width = 'width=', 14454 spotify_height = x.getAttribute("height"), 14455 frame_height = 'height=', 14456 spotify_frame; 14457 14458 if (spotify_id === undefined) { 14459 return ""; 14460 } 14461 if (spotify_width !== undefined) { 14462 frame_width += '"' + spotify_width + '" '; 14463 } else { 14464 frame_width += '"" '; 14465 } 14466 if (spotify_height !== undefined) { 14467 frame_height += '"' + spotify_height + '" '; 14468 } else { 14469 frame_height += '"" '; 14470 } 14471 spotify_frame = '<iframe title="' + frame_title + '" src="//open.spotify.com/embed/' + spotify_id + '" ' + frame_width + frame_height + ' allowfullscreen></iframe>'; 14472 return spotify_frame; 14473 }); 14474 }, 14475 "fallback": function () { 14476 "use strict"; 14477 var id = 'spotify'; 14478 tarteaucitron.fallback(['spotify_player'], function (elem) { 14479 elem.style.width = elem.getAttribute('width') + 'px'; 14480 elem.style.height = elem.getAttribute('height') + 'px'; 14481 return tarteaucitron.engage(id); 14482 }); 14483 } 14484}; 14485 14486// statcounter 14487tarteaucitron.services.statcounter = { 14488 "key": "statcounter", 14489 "type": "analytic", 14490 "name": "StatCounter", 14491 "uri": "https://fr.statcounter.com/about/legal/#privacy", 14492 "needConsent": true, 14493 "cookies": ['sc_is_visitor_unique'], 14494 "js": function () { 14495 "use strict"; 14496 var uniqIds = [], 14497 i, 14498 uri = '//statcounter.com/counter/counter.js'; 14499 14500 tarteaucitron.fallback(['statcounter-canvas'], function (x) { 14501 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 14502 uniqIds.push(uniqId); 14503 return '<div id="' + uniqId + '"></div>'; 14504 }); 14505 14506 for (i = 0; i < uniqIds.length; i += 1) { 14507 tarteaucitron.makeAsync.init(uri, uniqIds[i]); 14508 } 14509 }, 14510 "fallback": function () { 14511 "use strict"; 14512 var id = 'statcounter'; 14513 tarteaucitron.fallback(['statcounter-canvas'], tarteaucitron.engage(id)); 14514 } 14515}; 14516 14517// timelinejs 14518tarteaucitron.services.timelinejs = { 14519 "key": "timelinejs", 14520 "type": "api", 14521 "name": "Timeline JS", 14522 "uri": "http://timeline.knightlab.com/#help", 14523 "needConsent": true, 14524 "cookies": [], 14525 "js": function () { 14526 "use strict"; 14527 tarteaucitron.fallback(['timelinejs-canvas'], function (x) { 14528 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Twitter iframe'), 14529 spreadsheet_id = x.getAttribute("spreadsheet_id"), 14530 width = x.getAttribute("width"), 14531 height = x.getAttribute("height"), 14532 lang = x.getAttribute("lang_2_letter"), 14533 font = x.getAttribute("font"), 14534 map = x.getAttribute("map"), 14535 start_at_end = x.getAttribute("start_at_end"), 14536 hash_bookmark = x.getAttribute("hash_bookmark"), 14537 start_at_slide = x.getAttribute("start_at_slide"), 14538 start_zoom = x.getAttribute("start_zoom"), 14539 url = '//cdn.knightlab.com/libs/timeline/latest/embed/index.html?source=' + spreadsheet_id + '&font=' + font + '&maptype=' + map + '&lang=' + lang + '&start_at_end=' + start_at_end + '&hash_bookmark=' + hash_bookmark + '&start_at_slide=' + start_at_slide + '&start_zoom_adjust=' + start_zoom + '&height=' + height; 14540 14541 return '<iframe title="' + frame_title + '" src="' + url + '" width="' + width + '" height="' + height + '" allowtransparency allowfullscreen></iframe>'; 14542 }); 14543 }, 14544 "fallback": function () { 14545 "use strict"; 14546 var id = 'timelinejs'; 14547 tarteaucitron.fallback(['timelinejs-canvas'], function (elem) { 14548 elem.style.width = elem.getAttribute('width') + 'px'; 14549 elem.style.height = elem.getAttribute('height') + 'px'; 14550 return tarteaucitron.engage(id); 14551 }); 14552 } 14553}; 14554 14555// tagcommander 14556tarteaucitron.services.tagcommander = {
vendor: 4,367 bytes, lines 14557-14692
14557 "key": "tagcommander", 14558 "type": "api", 14559 "name": "TagCommander", 14560 "uri": "https://www.commandersact.com/en/privacy/", 14561 "needConsent": true, 14562 "cookies": [], 14563 "js": function () { 14564 "use strict"; 14565 if (tarteaucitron.user.tagcommanderid === undefined) { 14566 return; 14567 } 14568 tarteaucitron.addScript('https://cdn.tagcommander.com/' + tarteaucitron.user.tagcommanderid + '.js'); 14569 } 14570}; 14571 14572// typekit 14573tarteaucitron.services.typekit = { 14574 "key": "typekit", 14575 "type": "api", 14576 "name": "Typekit (adobe)", 14577 "uri": "https://www.adobe.com/privacy.html", 14578 "needConsent": true, 14579 "cookies": [], 14580 "js": function () { 14581 "use strict"; 14582 if (tarteaucitron.user.typekitId === undefined) { 14583 return; 14584 } 14585 tarteaucitron.addScript('//use.typekit.net/' + tarteaucitron.user.typekitId + '.js', '', function () { 14586 try { 14587 Typekit.load(); 14588 } catch (e) { } 14589 }); 14590 } 14591}; 14592 14593// twenga 14594tarteaucitron.services.twenga = { 14595 "key": "twenga", 14596 "type": "ads", 14597 "name": "Twenga", 14598 "uri": "http://www.twenga.com/privacy.php", 14599 "needConsent": true, 14600 "cookies": [], 14601 "js": function () { 14602 "use strict"; 14603 14604 if (tarteaucitron.user.twengaId === undefined || tarteaucitron.user.twengaLocale === undefined) { 14605 return; 14606 } 14607 14608 tarteaucitron.addScript('//tracker.twenga.' + tarteaucitron.user.twengaLocale + '/st/tracker_' + tarteaucitron.user.twengaId + '.js'); 14609 } 14610}; 14611 14612// twitter 14613tarteaucitron.services.twitter = { 14614 "key": "twitter", 14615 "type": "social", 14616 "name": "Twitter", 14617 "uri": "https://support.twitter.com/articles/20170514", 14618 "needConsent": true, 14619 "cookies": [], 14620 "js": function () { 14621 "use strict"; 14622 tarteaucitron.fallback(['tacTwitter'], ''); 14623 tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs'); 14624 }, 14625 "fallback": function () { 14626 "use strict"; 14627 var id = 'twitter'; 14628 tarteaucitron.fallback(['tacTwitter'], tarteaucitron.engage(id)); 14629 } 14630}; 14631 14632// twitter embed 14633tarteaucitron.services.twitterembed = { 14634 "key": "twitterembed", 14635 "type": "social", 14636 "name": "Twitter (cards)", 14637 "uri": "https://support.twitter.com/articles/20170514", 14638 "needConsent": true, 14639 "cookies": [], 14640 "js": function () { 14641 "use strict"; 14642 var uniqIds = [], 14643 i, 14644 e, 14645 html; 14646 14647 tarteaucitron.fallback(['twitterembed-canvas'], function (x) { 14648 var uniqId = '_' + Math.random().toString(36).substr(2, 9); 14649 uniqIds.push(uniqId); 14650 html = '<div id="' + uniqId + '" '; 14651 html += 'tweetid="' + x.getAttribute('tweetid') + '" '; 14652 html += 'theme="' + x.getAttribute('theme') + '" '; 14653 html += 'cards="' + x.getAttribute('cards') + '" '; 14654 html += 'conversation="' + x.getAttribute('conversation') + '" '; 14655 html += 'data-width="' + x.getAttribute('data-width') + '" '; 14656 html += 'data-align="' + x.getAttribute('data-align') + '" '; 14657 html += '></div>'; 14658 return html; 14659 }); 14660 14661 tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs', function () { 14662 var i; 14663 for (i = 0; i < uniqIds.length; i += 1) { 14664 e = document.getElementById(uniqIds[i]); 14665 twttr.widgets.createTweet( 14666 e.getAttribute('tweetid'), 14667 e, 14668 { 14669 theme: e.getAttribute('theme'), 14670 cards: e.getAttribute('cards'), 14671 conversation: e.getAttribute('conversation'), 14672 lang: tarteaucitron.getLanguage(), 14673 dnt: true, 14674 width: e.getAttribute('data-width'), 14675 align: e.getAttribute('data-align') 14676 } 14677 ); 14678 } 14679 }); 14680 }, 14681 "fallback": function () { 14682 "use strict"; 14683 var id = 'twitterembed'; 14684 tarteaucitron.fallback(['twitterembed-canvas'], function (elem) { 14685 elem.style.width = elem.getAttribute('data-width') + 'px'; 14686 return tarteaucitron.engage(id); 14687 }); 14688 } 14689}; 14690 14691// twitter timeline 14692tarteaucitron.services.twittertimeline = {
14693 "key": "twittertimeline", 14694 "type": "social", 14695 "name": "Twitter (timelines)", 14696 "uri": "https://support.twitter.com/articles/20170514", 14697 "needConsent": true, 14698 "cookies": [], 14699 "js": function () { 14700 "use strict"; 14701 tarteaucitron.fallback(['tacTwitterTimelines'], ''); 14702 tarteaucitron.addScript('//platform.twitter.com/widgets.js', 'twitter-wjs'); 14703 }, 14704 "fallback": function () { 14705 "use strict"; 14706 var id = 'twittertimeline'; 14707 tarteaucitron.fallback(['tacTwitterTimelines'], tarteaucitron.engage(id)); 14708 } 14709}; 14710 14711// twitter universal website tag 14712tarteaucitron.services.twitteruwt = { 14713 "key": "twitteruwt", 14714 "type": "analytic", 14715 "name": "Twitter Universal Website Tag", 14716 "uri": "https://business.twitter.com/en/help/campaign-measurement-and-analytics/conversion-tracking-for-websites.html", 14717 "needConsent": true, 14718 "cookies": [], 14719 "js": function () { 14720 "use strict"; 14721 14722 window.twq = function () { 14723 window.twq.exe ? window.twq.exe.apply(window.twq, arguments) : window.twq.queue.push(arguments); 14724 } 14725 window.twq.version = '1.1'; 14726 window.twq.queue = []; 14727 14728 tarteaucitron.addScript('https://static.ads-twitter.com/uwt.js', '', function () { 14729 window.twq('init', tarteaucitron.user.twitteruwtId); 14730 window.twq('track', 'PageView'); 14731 }); 14732 } 14733}; 14734 14735// user voice 14736tarteaucitron.services.uservoice = { 14737 "key": "uservoice", 14738 "type": "support", 14739 "name": "UserVoice", 14740 "uri": "https://www.uservoice.com/privacy/", 14741 "needConsent": true, 14742 "cookies": [], 14743 "js": function () { 14744 "use strict"; 14745 if (tarteaucitron.user.userVoiceApi === undefined) { 14746 return; 14747 } 14748 tarteaucitron.addScript('//widget.uservoice.com/' + tarteaucitron.user.userVoiceApi + '.js'); 14749 } 14750}; 14751 14752// vimeo 14753tarteaucitron.services.vimeo = { 14754 "key": "vimeo", 14755 "type": "video", 14756 "name": "Vimeo", 14757 "uri": "https://vimeo.com/privacy", 14758 "needConsent": true, 14759 "cookies": ['__utmt_player', '__utma', '__utmb', '__utmc', '__utmv', 'vuid', '__utmz', 'player'], 14760 "js": function () { 14761 "use strict"; 14762 tarteaucitron.fallback(['vimeo_player'], function (x) { 14763 var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Vimeo iframe'), 14764 video_width = tarteaucitron.getElemAttr(x, "width"), 14765 frame_width = 'width=', 14766 video_height = tarteaucitron.getElemAttr(x, "height"), 14767 frame_height = 'height=', 14768 14769 video_id = tarteaucitron.getElemAttr(x, "videoID"), 14770 video_hash = tarteaucitron.getElemAttr(x, "data-hash") || '', 14771 video_allowfullscreen = tarteaucitron.getElemAttr(x, "data-allowfullscreen"), 14772 14773 video_qs = "", 14774 attrs = ["title", "byline", "portrait", "loop", "autoplay", "autopause", "background", "color", "controls", "maxheight", "maxwidth", "muted", "playsinline", "speed", "transparent"], 14775 params = attrs.filter(function (a) { 14776 return tarteaucitron.getElemAttr(x, a) !== null; 14777 }).map(function (a) { 14778 return a + "=" + tarteaucitron.getElemAttr(x, a); 14779 }), 14780 14781 video_frame; 14782 14783 if (video_id === undefined) { 14784 return ""; 14785 } 14786 14787 // query params 14788 if (video_hash.length > 0) { 14789 params.push("h=" + video_hash); 14790 } 14791 if (params.length > 0) { 14792 video_qs = "?" + params.join("&"); 14793 } 14794 14795 // attributes 14796 if (video_width !== undefined) { 14797 frame_width += '"' + video_width + '" '; 14798 } else { 14799 frame_width += '"" '; 14800 } 14801 if (video_height !== undefined) { 14802 frame_height += '"' + video_height + '" '; 14803 } else { 14804 frame_height += '"" '; 14805 } 14806 14807 //video_frame = '<iframe title="' + frame_title + '" src="//player.vimeo.com/video/' + video_id + video_qs + '" ' + frame_width + frame_height + (video_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 14808 video_frame = '<iframe title="' + frame_title + '" src="//playeo.europa-organisation.com/iframe/index/video/' + video_id + video_qs + '/from/GRCI/autoplay/non" ' + frame_width + frame_height + (video_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 14809 14810 return video_frame; 14811 }); 14812 }, 14813 "fallback": function () { 14814 "use strict"; 14815 var id = 'vimeo'; 14816 tarteaucitron.fallback(['vimeo_player'], function (elem) { 14817 elem.style.width = elem.getAttribute('width') + 'px'; 14818 elem.style.height = elem.getAttribute('height') + 'px'; 14819 return tarteaucitron.engage(id); 14820 }); 14821 } 14822}; 14823 14824// visualrevenue 14825tarteaucitron.services.visualrevenue = {
vendor: 15,233 bytes, lines 14826-15250
14826 "key": "visualrevenue", 14827 "type": "analytic", 14828 "name": "VisualRevenue", 14829 "uri": "http://www.outbrain.com/legal/privacy-713/", 14830 "needConsent": true, 14831 "cookies": ['__vrf', '__vrm', '__vrl', '__vry', '__vru', '__vrid', '__vrz'], 14832 "js": function () { 14833 "use strict"; 14834 if (tarteaucitron.user.visualrevenueId === undefined) { 14835 return; 14836 } 14837 window._vrq = window._vrq || []; 14838 window._vrq.push(['id', tarteaucitron.user.visualrevenueId]); 14839 window._vrq.push(['automate', true]); 14840 window._vrq.push(['track', function () { }]); 14841 tarteaucitron.addScript('http://a.visualrevenue.com/vrs.js'); 14842 } 14843}; 14844 14845// verizon dot tag 14846tarteaucitron.services.verizondottag = { 14847 "key": "verizondottag", 14848 "type": "analytic", 14849 "name": "Verizon Dot Tag", 14850 "uri": "https://developer.verizonmedia.com/native/guide/audience-management/dottags/", 14851 "needConsent": true, 14852 "cookies": [], 14853 "js": function () { 14854 "use strict"; 14855 14856 window.dotq = window.dotq || []; 14857 window.dotq.push({ 14858 'projectId': tarteaucitron.user.verizondottagProjectId, 14859 'properties': { 'pixelId': tarteaucitron.user.verizondottagPixelId } 14860 }); 14861 14862 tarteaucitron.addScript('https://s.yimg.com/wi/ytc.js', '', function () { 14863 //const items = window.dotq; 14864 window.dotq = []; 14865 window.dotq.push = function (item) { 14866 YAHOO.ywa.I13N.fireBeacon([item]) 14867 }; 14868 YAHOO.ywa.I13N.fireBeacon(items) 14869 }); 14870 } 14871}; 14872 14873// vshop 14874tarteaucitron.services.vshop = { 14875 "key": "vshop", 14876 "type": "ads", 14877 "name": "vShop", 14878 "uri": "http://vshop.fr/privacy-policy", 14879 "needConsent": true, 14880 "cookies": [], 14881 "js": function () { 14882 "use strict"; 14883 tarteaucitron.fallback(['vcashW'], ''); 14884 tarteaucitron.addScript('//vshop.fr/js/w.js'); 14885 }, 14886 "fallback": function () { 14887 "use strict"; 14888 var id = 'vshop'; 14889 tarteaucitron.fallback(['vcashW'], tarteaucitron.engage(id)); 14890 } 14891}; 14892 14893// wysistat 14894tarteaucitron.services.wysistat = { 14895 "key": "wysistat", 14896 "type": "analytic", 14897 "name": "Wysistat", 14898 "uri": "http://wysistat.net/contact/", 14899 "needConsent": true, 14900 "cookies": ['Wysistat'], 14901 "js": function () { 14902 "use strict"; 14903 if (tarteaucitron.user.wysistat === undefined) { 14904 return; 14905 } 14906 tarteaucitron.addScript('//www.wysistat.com/statistique.js', '', function () { 14907 window.stat(tarteaucitron.user.wysistat.cli, tarteaucitron.user.wysistat.frm, tarteaucitron.user.wysistat.prm, tarteaucitron.user.wysistat.ce, tarteaucitron.user.wysistat.page, tarteaucitron.user.wysistat.roi, tarteaucitron.user.wysistat.prof, tarteaucitron.user.wysistat.cpt); 14908 }); 14909 } 14910}; 14911 14912// xiti 14913tarteaucitron.services.xiti = { 14914 "key": "xiti", 14915 "type": "analytic", 14916 "name": "Xiti", 14917 "uri": "https://www.atinternet.com/rgpd-et-vie-privee/", 14918 "needConsent": true, 14919 "cookies": [], 14920 "js": function () { 14921 "use strict"; 14922 if (tarteaucitron.user.xitiId === undefined) { 14923 return; 14924 } 14925 var Xt_param = 's=' + tarteaucitron.user.xitiId + '&p=', 14926 Xt_r, 14927 Xt_h, 14928 Xt_i, 14929 Xt_s, 14930 div = document.createElement('div'); 14931 try { 14932 Xt_r = top.document.referrer; 14933 } catch (e) { 14934 Xt_r = document.referrer; 14935 } 14936 Xt_h = new Date(); 14937 Xt_i = '<img style="display:none" border="0" alt="" '; 14938 Xt_i += 'src="http://logv3.xiti.com/hit.xiti?' + Xt_param; 14939 Xt_i += '&hl=' + Xt_h.getHours() + 'x' + Xt_h.getMinutes() + 'x' + Xt_h.getSeconds(); 14940 if (parseFloat(navigator.appVersion) >= 4) { 14941 Xt_s = screen; 14942 Xt_i += '&r=' + Xt_s.width + 'x' + Xt_s.height + 'x' + Xt_s.pixelDepth + 'x' + Xt_s.colorDepth; 14943 } 14944 14945 div.innerHTML = Xt_i + '&ref=' + Xt_r.replace(/[<>"]/g, '').replace(/&/g, '$') + '" title="Internet Audience">'; 14946 document.getElementsByTagName('body')[0].appendChild(div.firstChild); 14947 14948 if (typeof tarteaucitron.user.xitiMore === 'function') { 14949 tarteaucitron.user.xitiMore(); 14950 } 14951 } 14952}; 14953 14954// AT Internet 14955tarteaucitron.services.atinternet = { 14956 "key": "atinternet", 14957 "type": "analytic", 14958 "name": "AT Internet (privacy by design)", 14959 "uri": "https://www.atinternet.com/rgpd-et-vie-privee/", 14960 "needConsent": true, 14961 "safeanalytic": false, 14962 "cookies": ['atidvisitor', 'atreman', 'atredir', 'atsession'], 14963 "js": function () { 14964 "use strict"; 14965 if (tarteaucitron.user.atLibUrl === undefined) { 14966 return; 14967 } 14968 14969 if (tarteaucitron.user.atinternetAlreadyLoaded !== undefined) { 14970 return; 14971 } 14972 14973 tarteaucitron.addScript(tarteaucitron.user.atLibUrl, '', function () { 14974 14975 window.tag = new ATInternet.Tracker.Tag(); 14976 14977 if (typeof window.tag.privacy !== 'undefined') { 14978 window.tag.privacy.setVisitorOptin(); 14979 } 14980 14981 if (typeof tarteaucitron.user.atMore === 'function') { 14982 tarteaucitron.user.atMore(); 14983 } 14984 14985 if (tarteaucitron.user.atinternetSendData !== false) { 14986 window.tag.page.send(); 14987 } 14988 }); 14989 }, 14990 "fallback": function () { 14991 "use strict"; 14992 if (tarteaucitron.user.atLibUrl === undefined) { 14993 return; 14994 } 14995 14996 if (tarteaucitron.user.atNoFallback === true) { 14997 return; 14998 } 14999 15000 tarteaucitron.user.atinternetAlreadyLoaded = true; 15001 15002 tarteaucitron.addScript(tarteaucitron.user.atLibUrl, '', function () { 15003 15004 window.tag = new ATInternet.Tracker.Tag(); 15005 15006 if (typeof window.tag.privacy !== 'undefined') { 15007 15008 var visitorMode = window.tag.privacy.getVisitorMode(); 15009 if (visitorMode !== null && visitorMode.name !== undefined && visitorMode.name == "optout") { 15010 window.tag.privacy.setVisitorOptout(); 15011 } else { 15012 window.tag.privacy.setVisitorMode('cnil', 'exempt'); 15013 } 15014 } 15015 15016 if (typeof tarteaucitron.user.atMore === 'function') { 15017 tarteaucitron.user.atMore(); 15018 } 15019 15020 if (tarteaucitron.user.atinternetSendData !== false) { 15021 window.tag.page.send(); 15022 } 15023 }); 15024 } 15025}; 15026 15027// AT Internet 15028tarteaucitron.services.atinternethightrack = { 15029 "key": "atinternethightrack", 15030 "type": "analytic", 15031 "name": "AT Internet", 15032 "uri": "https://www.atinternet.com/rgpd-et-vie-privee/", 15033 "needConsent": true, 15034 "cookies": ['atidvisitor', 'atreman', 'atredir', 'atsession'], 15035 "js": function () { 15036 "use strict"; 15037 if (tarteaucitron.user.atLibUrl === undefined) { 15038 return; 15039 } 15040 15041 tarteaucitron.addScript(tarteaucitron.user.atLibUrl, '', function () { 15042 15043 var tag = new ATInternet.Tracker.Tag(); 15044 15045 if (typeof tarteaucitron.user.atMore === 'function') { 15046 tarteaucitron.user.atMore(); 15047 } 15048 }) 15049 } 15050}; 15051 15052// youtube 15053tarteaucitron.services.youtube = { 15054 "key": "youtube", 15055 "type": "video", 15056 "name": "YouTube", 15057 "uri": "https://policies.google.com/privacy", 15058 "needConsent": true, 15059 "cookies": ['VISITOR_INFO1_LIVE', 'YSC', 'PREF', 'GEUP'], 15060 "js": function () { 15061 "use strict"; 15062 tarteaucitron.fallback(['youtube_player'], function (x) { 15063 var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Youtube iframe'), 15064 video_id = tarteaucitron.getElemAttr(x, "videoID"), 15065 srcdoc = tarteaucitron.getElemAttr(x, "srcdoc"), 15066 loading = tarteaucitron.getElemAttr(x, "loading"), 15067 video_width = tarteaucitron.getElemAttr(x, "width"), 15068 frame_width = 'width=', 15069 video_height = tarteaucitron.getElemAttr(x, "height"), 15070 frame_height = 'height=', 15071 video_frame, 15072 allowfullscreen = tarteaucitron.getElemAttr(x, "allowfullscreen"), 15073 attrs = ["theme", "rel", "controls", "showinfo", "autoplay", "mute", "start", "loop", "enablejsapi"], 15074 params = attrs.filter(function (a) { 15075 return tarteaucitron.getElemAttr(x, a) !== null; 15076 }).map(function (a) { 15077 return a + "=" + tarteaucitron.getElemAttr(x, a); 15078 }).join("&"); 15079 15080 if(tarteaucitron.getElemAttr(x, "loop") == 1) { 15081 params = params + "&playlist=" + video_id; 15082 } 15083 15084 if (video_id === undefined) { 15085 return ""; 15086 } 15087 if (video_width !== undefined) { 15088 frame_width += '"' + video_width + '" '; 15089 } else { 15090 frame_width += '"" '; 15091 } 15092 if (video_height !== undefined) { 15093 frame_height += '"' + video_height + '" '; 15094 } else { 15095 frame_height += '"" '; 15096 } 15097 15098 if (srcdoc !== undefined && srcdoc !== null && srcdoc !== "") { 15099 srcdoc = 'srcdoc="' + srcdoc + '" '; 15100 } else { 15101 srcdoc = ''; 15102 } 15103 15104 if (loading !== undefined && loading !== null && loading !== "") { 15105 loading = 'loading '; 15106 } else { 15107 loading = ''; 15108 } 15109 15110 video_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="//www.youtube-nocookie.com/embed/' + video_id + '?' + params + '"' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + ' ' + srcdoc + ' ' + loading + '></iframe>'; 15111 return video_frame; 15112 }); 15113 }, 15114 "fallback": function () { 15115 "use strict"; 15116 var id = 'youtube'; 15117 tarteaucitron.fallback(['youtube_player'], function (elem) { 15118 elem.style.width = elem.getAttribute('width') + 'px'; 15119 elem.style.height = elem.getAttribute('height') + 'px'; 15120 return tarteaucitron.engage(id); 15121 }); 15122 } 15123}; 15124 15125// youtube playlist 15126tarteaucitron.services.youtubeplaylist = { 15127 "key": "youtubeplaylist", 15128 "type": "video", 15129 "name": "YouTube (playlist)", 15130 "uri": "https://policies.google.com/privacy", 15131 "needConsent": true, 15132 "cookies": ['VISITOR_INFO1_LIVE', 'YSC', 'PREF', 'GEUP'], 15133 "js": function () { 15134 "use strict"; 15135 tarteaucitron.fallback(['youtube_playlist_player'], function (x) { 15136 var frame_title = tarteaucitron.fixSelfXSS(tarteaucitron.getElemAttr(x, "title") || 'Youtube iframe'), 15137 playlist_id = tarteaucitron.getElemAttr(x, "playlistID"), 15138 video_width = tarteaucitron.getElemAttr(x, "width"), 15139 frame_width = 'width=', 15140 video_height = tarteaucitron.getElemAttr(x, "height"), 15141 frame_height = 'height=', 15142 video_frame, 15143 allowfullscreen = tarteaucitron.getElemAttr(x, "allowfullscreen"), 15144 params = 'theme=' + tarteaucitron.getElemAttr(x, "theme") + '&rel=' + tarteaucitron.getElemAttr(x, "rel") + '&controls=' + tarteaucitron.getElemAttr(x, "controls") + '&showinfo=' + tarteaucitron.getElemAttr(x, "showinfo") + '&autoplay=' + tarteaucitron.getElemAttr(x, "autoplay") + '&mute=' + tarteaucitron.getElemAttr(x, "mute"); 15145 15146 if (playlist_id === undefined) { 15147 return ""; 15148 } 15149 if (video_width !== undefined) { 15150 frame_width += '"' + video_width + '" '; 15151 } else { 15152 frame_width += '"" '; 15153 } 15154 if (video_height !== undefined) { 15155 frame_height += '"' + video_height + '" '; 15156 } else { 15157 frame_height += '"" '; 15158 } 15159 video_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="//www.youtube-nocookie.com/embed/videoseries?list=' + playlist_id + '&' + params + '"' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 15160 return video_frame; 15161 }); 15162 }, 15163 "fallback": function () { 15164 "use strict"; 15165 var id = 'youtubeplaylist'; 15166 tarteaucitron.fallback(['youtube_playlist_player'], function (elem) { 15167 elem.style.width = elem.getAttribute('width') + 'px'; 15168 elem.style.height = elem.getAttribute('height') + 'px'; 15169 return tarteaucitron.engage(id); 15170 }); 15171 } 15172}; 15173 15174// zopim 15175tarteaucitron.services.zopim = { 15176 "key": "zopim", 15177 "type": "support", 15178 "name": "Zopim", 15179 "uri": "https://www.zopim.com/privacy", 15180 "needConsent": true, 15181 "cookies": ['__zlcid', '__zprivacy'], 15182 "js": function () { 15183 "use strict"; 15184 if (tarteaucitron.user.zopimID === undefined) { 15185 return; 15186 } 15187 tarteaucitron.addScript('//v2.zopim.com/?' + tarteaucitron.user.zopimID); 15188 } 15189}; 15190 15191// kameleoon 15192tarteaucitron.services.kameleoon = { 15193 "key": "kameleoon", 15194 "type": "analytic", 15195 "name": "Kameleoon", 15196 "uri": "https://www.kameleoon.com/fr/compliance/rgpd", 15197 "needConsent": true, 15198 "cookies": [], 15199 "js": function () { 15200 "use strict"; 15201 if (tarteaucitron.user.kameleoon !== undefined) { 15202 tarteaucitron.addScript("https://" + tarteaucitron.user.kameleoon + ".kameleoon.eu/kameleoon.js"); 15203 } 15204 } 15205}; 15206 15207// linkedin insight 15208tarteaucitron.services.linkedininsighttag = { 15209 "key": "linkedininsighttag", 15210 "type": "ads", 15211 "name": "Linkedin Insight", 15212 "uri": "https://www.linkedin.com/legal/cookie_policy", 15213 "needConsent": true, 15214 "cookies": [], 15215 "js": function () { 15216 "use strict"; 15217 if (tarteaucitron.user.linkedininsighttag !== undefined) { 15218 window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || []; 15219 window._linkedin_data_partner_ids.push(tarteaucitron.user.linkedininsighttag); 15220 } 15221 15222 tarteaucitron.addScript('https://snap.licdn.com/li.lms-analytics/insight.min.js'); 15223 } 15224}; 15225 15226// xiti smartTag 15227tarteaucitron.services.xiti_smarttag = { 15228 "key": "xiti_smarttag", 15229 "type": "analytic", 15230 "name": "Xiti (SmartTag)", 15231 "uri": "https://www.atinternet.com/rgpd-et-vie-privee/", 15232 "needConsent": true, 15233 "cookies": ["atidvisitor", "atreman", "atredir", "atsession", "attvtreman", "attvtsession"], 15234 "js": function () { 15235 "use strict"; 15236 if (tarteaucitron.user.xiti_smarttagLocalPath !== undefined) { 15237 tarteaucitron.addScript(tarteaucitron.user.xiti_smarttagLocalPath, 'smarttag', null, null, "onload", "addTracker();"); 15238 } else { 15239 var xitiSmarttagId = tarteaucitron.user.xiti_smarttagSiteId; 15240 if (xitiSmarttagId === undefined) { 15241 return; 15242 } 15243 15244 tarteaucitron.addScript('//tag.aticdn.net/' + xitiSmarttagId + '/smarttag.js', 'smarttag', null, null, "onload", "addTracker();"); 15245 } 15246 } 15247}; 15248 15249// facebook pixel 15250tarteaucitron.services.facebookpixel = {
15251 "key": "facebookpixel", 15252 "type": "ads", 15253 "name": "Facebook Pixel", 15254 "uri": "https://www.facebook.com/policy.php", 15255 "needConsent": true, 15256 "cookies": ['datr', 'fr', 'reg_ext_ref', 'reg_fb_gate', 'reg_fb_ref', 'sb', 'wd', 'x-src', '_fbp'], 15257 "js": function () { 15258 "use strict"; 15259 var n; 15260 if (window.fbq) return; 15261 n = window.fbq = function () { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) }; 15262 if (!window._fbq) window._fbq = n; 15263 n.push = n; 15264 n.loaded = !0; 15265 n.version = '2.0'; 15266 n.queue = []; 15267 tarteaucitron.addScript('https://connect.facebook.net/en_US/fbevents.js'); 15268 fbq('init', tarteaucitron.user.facebookpixelId); 15269 fbq('track', 'PageView'); 15270 15271 if (typeof tarteaucitron.user.facebookpixelMore === 'function') { 15272 tarteaucitron.user.facebookpixelMore(); 15273 } 15274 } 15275}; 15276 15277//Issuu 15278tarteaucitron.services.issuu = { 15279 "key": "issuu", 15280 "type": "other", 15281 "name": "Issuu", 15282 "uri": "https://issuu.com/legal/privacy", 15283 "needConsent": true, 15284 "cookies": ['__qca', 'iutk', 'mc'], 15285 "js": function () { 15286 "use strict"; 15287 tarteaucitron.fallback(['issuu_player'], function (x) { 15288 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Issuu iframe'), 15289 issuu_id = x.getAttribute("issuuID"), 15290 issuu_width = x.getAttribute("width"), 15291 frame_width = 'width=', 15292 issuu_height = x.getAttribute("height"), 15293 frame_height = 'height=', 15294 issuu_frame, 15295 issuu_embed; 15296 15297 if (issuu_id === undefined) { 15298 return ""; 15299 } 15300 if (issuu_width !== undefined) { 15301 frame_width += '"' + issuu_width + '" '; 15302 } else { 15303 frame_width += '"" '; 15304 } 15305 if (issuu_height !== undefined) { 15306 frame_height += '"' + issuu_height + '" '; 15307 } else { 15308 frame_height += '"" '; 15309 } 15310 15311 15312 if (issuu_id.match(/\d+\/\d+/)) { issuu_embed = '#' + issuu_id; } else if (issuu_id.match(/d=(.*)&u=(.*)/)) { issuu_embed = '?' + issuu_id; } 15313 15314 15315 issuu_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="//e.issuu.com/embed.html' + issuu_embed + '"></iframe>'; 15316 15317 return issuu_frame; 15318 }); 15319 }, 15320 "fallback": function () { 15321 "use strict"; 15322 var id = 'issuu'; 15323 tarteaucitron.fallback(['issuu_player'], function (elem) { 15324 elem.style.width = elem.getAttribute('width') + 'px'; 15325 elem.style.height = elem.getAttribute('height') + 'px'; 15326 return tarteaucitron.engage(id); 15327 }); 15328 } 15329}; 15330 15331// webmecanik 15332tarteaucitron.services.webmecanik = { 15333 "key": "webmecanik", 15334 "type": "analytic", 15335 "name": "Webmecanik", 15336 "uri": "https://webmecanik.com/tos", 15337 "needConsent": true, 15338 "cookies": ['mtc_id', 'mtc_sid'], 15339 "js": function () { 15340 "use strict"; 15341 if (tarteaucitron.user.webmecanikurl === undefined) { 15342 return; 15343 } 15344 15345 window.MauticTrackingObject = 'mt'; 15346 window.mt = window.mt || function () { 15347 window.mt.q = window.mt.q || []; 15348 window.mt.q.push(arguments); 15349 }; 15350 15351 tarteaucitron.addScript(tarteaucitron.user.webmecanikurl, '', function () { 15352 mt('send', 'pageview'); 15353 }); 15354 } 15355}; 15356 15357// google analytics multiple 15358tarteaucitron.services.multiplegtag = { 15359 "key": "multiplegtag", 15360 "type": "analytic", 15361 "name": "Google Analytics (gtag.js)", 15362 "uri": "https://support.google.com/analytics/answer/6004245", 15363 "needConsent": true, 15364 "cookies": (function () { 15365 15366 var cookies = ['_ga', '_gat', '_gid', '__utma', '__utmb', '__utmc', '__utmt', '__utmz', '_gcl_au']; 15367 15368 if (tarteaucitron.user.multiplegtagUa !== undefined) { 15369 tarteaucitron.user.multiplegtagUa.forEach(function (ua) { 15370 cookies.push('_gat_gtag_' + ua.replace(/-/g, '_')); 15371 cookies.push('_ga_' + ua.replace(/G-/g, '')); 15372 }); 15373 } 15374 15375 return cookies; 15376 })(), 15377 "js": function () { 15378 "use strict"; 15379 window.dataLayer = window.dataLayer || []; 15380 15381 if (tarteaucitron.user.multiplegtagUa !== undefined) {
vendor: 14,025 bytes, lines 15382-15743
15382 tarteaucitron.user.multiplegtagUa.forEach(function (ua) { 15383 tarteaucitron.addScript('https://www.googletagmanager.com/gtag/js?id=' + ua, '', function () { 15384 window.gtag = function gtag() { dataLayer.push(arguments); } 15385 gtag('js', new Date()); 15386 var additional_config_info = (timeExpire !== undefined) ? {'anonymize_ip': true, 'cookie_expires': timeExpire / 1000} : {'anonymize_ip': true}; 15387 gtag('config', ua, additional_config_info); 15388 }); 15389 }); 15390 } 15391 } 15392}; 15393 15394// Koban 15395tarteaucitron.services.koban = { 15396 "key": "koban", 15397 "type": "analytic", 15398 "name": "Koban", 15399 "uri": "https://koban.cloud/tos", 15400 "needConsent": true, 15401 "cookies": ['kbntrk'], 15402 "js": function () { 15403 "use strict"; 15404 if (tarteaucitron.user.kobanurl === undefined) { 15405 return; 15406 } 15407 if (tarteaucitron.user.kobanapi === undefined) { 15408 return; 15409 } 15410 window.KobanObject = 'kb'; 15411 window.kb = window.kb || function () { 15412 window.kb.q = window.kb.q || []; 15413 window.kb.q.push(arguments); 15414 }; 15415 window.kb.l = new Date(); 15416 kb('reg', tarteaucitron.user.kobanapi); 15417 tarteaucitron.addScript(tarteaucitron.user.kobanurl, '', function () { 15418 }); 15419 } 15420}; 15421 15422// matomo 15423 15424/* 15425 1. Set the following variable before the initialization : 15426 15427 tarteaucitron.user.matomoId = YOUR_SITE_ID_FROM_MATOMO; 15428 tarteaucitron.user.matomoHost = "YOUR_MATOMO_URL"; //eg: https://stat.mydomain.com/ 15429 15430 2. Push the service : 15431 15432 (tarteaucitron.job = tarteaucitron.job || []).push('matomo'); // (or 'matomocloud' for cloud version) 15433 15434 3. HTML 15435 You don't need to add any html code, if the service is authorized, the javascript is added. otherwise no. 15436 */ 15437tarteaucitron.services.matomo = { 15438 "key": "matomo", 15439 "type": "analytic", 15440 "name": "Matomo (privacy by design)", 15441 "uri": "https://matomo.org/faq/general/faq_146/", 15442 "needConsent": false, 15443 "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'piwik_ignore', '_pk_uid'], 15444 "js": function () { 15445 "use strict"; 15446 if (tarteaucitron.user.matomoId === undefined) { 15447 return; 15448 } 15449 15450 window._paq = window._paq || []; 15451 window._paq.push(["setSiteId", tarteaucitron.user.matomoId]); 15452 window._paq.push(["setTrackerUrl", tarteaucitron.user.matomoHost + "piwik.php"]); 15453 window._paq.push(["setDoNotTrack", 1]); 15454 window._paq.push(["trackPageView"]); 15455 window._paq.push(["setIgnoreClasses", ["no-tracking", "colorbox"]]); 15456 window._paq.push(["enableLinkTracking"]); 15457 window._paq.push([function () { 15458 var self = this; 15459 function getOriginalVisitorCookieTimeout() { 15460 var now = new Date(), 15461 nowTs = Math.round(now.getTime() / 1000), 15462 visitorInfo = self.getVisitorInfo(); 15463 var createTs = parseInt(visitorInfo[2]); 15464 var cookieTimeout = 33696000; // 13 mois en secondes 15465 var originalTimeout = createTs + cookieTimeout - nowTs; 15466 return originalTimeout; 15467 } 15468 this.setVisitorCookieTimeout(getOriginalVisitorCookieTimeout()); 15469 }]); 15470 15471 tarteaucitron.addScript(tarteaucitron.user.matomoHost + 'piwik.js', '', '', true, 'defer', true); 15472 15473 // waiting for piwik to be ready to check first party cookies 15474 var interval = setInterval(function () { 15475 if (typeof Piwik === 'undefined') return 15476 15477 clearInterval(interval) 15478 15479 // make piwik/matomo cookie accessible by getting tracker 15480 Piwik.getTracker(); 15481 15482 // looping throught cookies 15483 var theCookies = document.cookie.split(';'); 15484 for (var i = 1; i <= theCookies.length; i++) { 15485 var cookie = theCookies[i - 1].split('='); 15486 var cookieName = cookie[0].trim(); 15487 15488 // if cookie starts like a piwik one, register it 15489 if (cookieName.indexOf('_pk_') === 0) { 15490 tarteaucitron.services.matomo.cookies.push(cookieName); 15491 } 15492 } 15493 }, 100) 15494 } 15495}; 15496 15497 15498tarteaucitron.services.matomohightrack = { 15499 "key": "matomohightrack", 15500 "type": "analytic", 15501 "name": "Matomo", 15502 "uri": "https://matomo.org/faq/general/faq_146/", 15503 "needConsent": false, 15504 "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'piwik_ignore', '_pk_uid'], 15505 "js": function () { 15506 "use strict"; 15507 if (tarteaucitron.user.matomoId === undefined) { 15508 return; 15509 } 15510 15511 window._paq = window._paq || []; 15512 window._paq.push(["setSiteId", tarteaucitron.user.matomoId]); 15513 window._paq.push(["setTrackerUrl", tarteaucitron.user.matomoHost + "piwik.php"]); 15514 window._paq.push(["trackPageView"]); 15515 window._paq.push(["setIgnoreClasses", ["no-tracking", "colorbox"]]); 15516 window._paq.push(["enableLinkTracking"]); 15517 window._paq.push([function () { 15518 var self = this; 15519 }]); 15520 15521 tarteaucitron.addScript(tarteaucitron.user.matomoHost + 'piwik.js', '', '', true, 'defer', true); 15522 15523 // waiting for piwik to be ready to check first party cookies 15524 var interval = setInterval(function () { 15525 if (typeof Piwik === 'undefined') return 15526 15527 clearInterval(interval) 15528 Piwik.getTracker(); 15529 15530 var theCookies = document.cookie.split(';'); 15531 for (var i = 1; i <= theCookies.length; i++) { 15532 var cookie = theCookies[i - 1].split('='); 15533 var cookieName = cookie[0].trim(); 15534 15535 if (cookieName.indexOf('_pk_') === 0) { 15536 tarteaucitron.services.matomo.cookies.push(cookieName); 15537 } 15538 } 15539 }, 100) 15540 } 15541}; 15542 15543 15544tarteaucitron.services.matomocloud = { 15545 "key": "matomocloud", 15546 "type": "analytic", 15547 "name": "Matomo Cloud (privacy by design)", 15548 "uri": "https://matomo.org/faq/general/faq_146/", 15549 "needConsent": false, 15550 "cookies": ['_pk_ref', '_pk_cvar', '_pk_id', '_pk_ses', '_pk_hsr', 'mtm_consent', 'matomo_ignore', 'matomo_sessid'], 15551 "js": function () { 15552 "use strict"; 15553 if (tarteaucitron.user.matomoId === undefined) { 15554 return; 15555 } 15556 15557 window._paq = window._paq || []; 15558 window._paq.push(["setSiteId", tarteaucitron.user.matomoId]); 15559 window._paq.push(["setTrackerUrl", tarteaucitron.user.matomoHost + "matomo.php"]); 15560 window._paq.push(["setDoNotTrack", 1]); 15561 window._paq.push(["trackPageView"]); 15562 window._paq.push(["setIgnoreClasses", ["no-tracking", "colorbox"]]); 15563 window._paq.push(["enableLinkTracking"]); 15564 window._paq.push([function () { 15565 var self = this; 15566 function getOriginalVisitorCookieTimeout() { 15567 var now = new Date(), 15568 nowTs = Math.round(now.getTime() / 1000), 15569 visitorInfo = self.getVisitorInfo(); 15570 var createTs = parseInt(visitorInfo[2]); 15571 var cookieTimeout = 33696000; // 13 mois en secondes 15572 var originalTimeout = createTs + cookieTimeout - nowTs; 15573 return originalTimeout; 15574 } 15575 this.setVisitorCookieTimeout(getOriginalVisitorCookieTimeout()); 15576 }]); 15577 15578 if (tarteaucitron.user.matomoCustomJSPath === undefined) { 15579 tarteaucitron.addScript('https://cdn.matomo.cloud/matomo.js', '', '', true, 'defer', true); 15580 } else { 15581 tarteaucitron.addScript(tarteaucitron.user.matomoCustomJSPath, '', '', true, 'defer', true); 15582 } 15583 15584 // waiting for Matomo to be ready to check first party cookies 15585 var interval = setInterval(function () { 15586 if (typeof Matomo === 'undefined') return 15587 15588 clearInterval(interval) 15589 15590 // make Matomo cookie accessible by getting tracker 15591 Matomo.getTracker(); 15592 15593 // looping through cookies 15594 var theCookies = document.cookie.split(';'); 15595 for (var i = 1; i <= theCookies.length; i++) { 15596 var cookie = theCookies[i - 1].split('='); 15597 var cookieName = cookie[0].trim(); 15598 15599 // if cookie starts like a matomo one, register it 15600 if (cookieName.indexOf('_pk_') === 0) { 15601 tarteaucitron.services.matomo.cookies.push(cookieName); 15602 } 15603 } 15604 }, 100) 15605 } 15606}; 15607 15608// matomotm 15609tarteaucitron.services.matomotm = { 15610 "key": "matomotm", 15611 "type": "api", 15612 "name": "Matomo Tag Manager", 15613 "uri": "https://matomo.org/privacy/", 15614 "needConsent": true, 15615 "cookies": [], 15616 "js": function () { 15617 "use strict"; 15618 if (tarteaucitron.user.matomotmUrl === undefined) { 15619 return; 15620 } 15621 15622 var _mtm = window._mtm = window._mtm || []; 15623 _mtm.push({'mtm.startTime': (new Date().getTime()), 'event': 'mtm.Start'}); 15624 15625 tarteaucitron.addScript(tarteaucitron.user.matomotmUrl); 15626 } 15627}; 15628 15629 15630// Hotjar 15631/* 15632 1. Set the following variable before the initialization : 15633 tarteaucitron.user.hotjarId = YOUR_WEBSITE_ID; 15634 tarteaucitron.user.HotjarSv = XXXX; // Can be found in your website tracking code as "hjvs=XXXX" 15635 2. Push the service : 15636 (tarteaucitron.job = tarteaucitron.job || []).push('hotjar'); 15637 3. HTML 15638 You don't need to add any html code, if the service is autorized, the javascript is added. otherwise no. 15639 */ 15640tarteaucitron.services.hotjar = { 15641 "key": "hotjar", 15642 "type": "analytic", 15643 "name": "Hotjar", 15644 "uri": "https://help.hotjar.com/hc/en-us/categories/115001323967-About-Hotjar", 15645 "needConsent": true, 15646 "cookies": ["hjClosedSurveyInvites", "_hjDonePolls", "_hjMinimizedPolls", "_hjDoneTestersWidgets", "_hjMinimizedTestersWidgets", "_hjDoneSurveys", "_hjIncludedInSample", "_hjShownFeedbackMessage", "_hjAbsoluteSessionInProgress", "_hjIncludeInPageviewSample", "_hjid"], 15647 "js": function () { 15648 "use strict"; 15649 if (tarteaucitron.user.hotjarId === undefined || tarteaucitron.user.HotjarSv === undefined) { 15650 return; 15651 } 15652 window.hj = window.hj || function () { 15653 (window.hj.q = window.hj.q || []).push(arguments) 15654 }; 15655 window._hjSettings = { 15656 hjid: tarteaucitron.user.hotjarId, 15657 hjsv: tarteaucitron.user.HotjarSv 15658 }; 15659 var uri = 'https://static.hotjar.com/c/hotjar-'; 15660 var extension = '.js?sv='; 15661 tarteaucitron.addScript(uri + window._hjSettings.hjid + extension + window._hjSettings.hjsv); 15662 } 15663}; 15664 15665// bing ads universal event tracking 15666tarteaucitron.services.bingads = { 15667 'key': 'bingads', 15668 'type': 'ads', 15669 'name': 'Bing Ads Universal Event Tracking', 15670 'uri': 'https://advertise.bingads.microsoft.com/en-us/resources/policies/personalized-ads', 15671 'needConsent': true, 15672 'cookies': ['_uetmsclkid', '_uetvid', '_uetsid'], 15673 'js': function () { 15674 'use strict'; 15675 //var u = tarteaucitron.user.bingadsTag || 'uetq'; 15676 window.uetq = window.uetq || []; 15677 15678 tarteaucitron.addScript('https://bat.bing.com/bat.js', '', function () { 15679 var bingadsCreate = { ti: tarteaucitron.user.bingadsID }; 15680 15681 if ('bingadsStoreCookies' in tarteaucitron.user) { 15682 bingadsCreate['storeConvTrackCookies'] = tarteaucitron.user.bingadsStoreCookies; 15683 } 15684 15685 bingadsCreate.q = window.uetq; 15686 window.uetq = new UET(bingadsCreate); 15687 window.uetq.push('pageLoad'); 15688 15689 if (typeof tarteaucitron.user.bingadsMore === 'function') { 15690 tarteaucitron.user.bingadsMore(); 15691 } 15692 }); 15693 } 15694}; 15695 15696//Matterport 15697tarteaucitron.services.matterport = { 15698 "key": "matterport", 15699 "type": "other", 15700 "name": "Matterport", 15701 "uri": "https://matterport.com/es/legal/privacy-policy/", 15702 "needConsent": true, 15703 "cookies": ['__cfduid', 'ajs_anonymous_id', 'ajs_group_id', 'ajs_user_id'], 15704 "js": function () { 15705 "use strict"; 15706 tarteaucitron.fallback(['matterport'], function (x) { 15707 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Matterport iframe'), 15708 matterport_id = x.getAttribute("matterportID"), 15709 matterport_width = x.getAttribute("width"), 15710 frame_width = 'width=', 15711 matterport_height = x.getAttribute("height"), 15712 frame_height = 'height=', 15713 matterport_parameters = x.getAttribute("parameters"), 15714 matterport_allowfullscreen = x.getAttribute('allowfullscreen'), 15715 matterport_frame; 15716 15717 if (matterport_id === undefined) { 15718 return ""; 15719 } 15720 if (matterport_width !== undefined) { 15721 frame_width += '"' + matterport_width + '" '; 15722 } else { 15723 frame_width += '"" '; 15724 } 15725 if (matterport_height !== undefined) { 15726 frame_height += '"' + matterport_height + '" '; 15727 } else { 15728 frame_height += '"" '; 15729 } 15730 if (matterport_parameters === undefined) { 15731 return ""; 15732 } 15733 15734 matterport_frame = '<iframe title="' + frame_title + '" type="text/html" ' + frame_width + frame_height + ' src="https://my.matterport.com/show/?m=' + matterport_id + '&utm_source=hit-content' + matterport_parameters + '"' + (matterport_allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 15735 return matterport_frame; 15736 }); 15737 }, 15738 "fallback": function () { 15739 "use strict"; 15740 var id = 'matterport'; 15741 tarteaucitron.fallback(['matterport'], function (elem) { 15742 elem.style.width = elem.getAttribute('width') + 'px'; 15743 elem.style.height = elem.getAttribute('height') + 'px'
vendor: 4,453 bytes, lines 15743-15889
15743; 15744 return tarteaucitron.engage(id); 15745 }); 15746 } 15747}; 15748 15749// Adform 15750tarteaucitron.services.adform = { 15751 "key": "adform", 15752 "type": "ads", 15753 "name": "Adform", 15754 "uri": "https://site.adform.com/privacy-center/overview/", 15755 "needConsent": true, 15756 "cookies": [], 15757 "js": function () { 15758 "use strict"; 15759 15760 if (tarteaucitron.user.adformpm === undefined || tarteaucitron.user.adformpagename === undefined) { 15761 return; 15762 } 15763 15764 window._adftrack = { 15765 pm: tarteaucitron.user.adformpm, 15766 divider: encodeURIComponent('|'), 15767 pagename: encodeURIComponent(tarteaucitron.user.adformpagename) 15768 }; 15769 15770 tarteaucitron.addScript("https://track.adform.net/serving/scripts/trackpoint/async/"); 15771 } 15772}; 15773 15774// Active Campaign 15775tarteaucitron.services.activecampaign = { 15776 "key": "activecampaign", 15777 "type": "ads", 15778 "name": "Active Campaign", 15779 "uri": "https://www.activecampaign.com/privacy-policy/", 15780 "needConsent": true, 15781 "cookies": [], 15782 "js": function () { 15783 "use strict"; 15784 if (tarteaucitron.user.actid === undefined) { 15785 return; 15786 } 15787 15788 window.trackcmp_email = ''; 15789 15790 tarteaucitron.addScript('https://trackcmp.net/visit?actid=' + tarteaucitron.user.actid + '&e=' + encodeURIComponent(trackcmp_email) + '&r=' + encodeURIComponent(document.referrer) + '&u=' + encodeURIComponent(window.location.href)); 15791 } 15792}; 15793 15794// tawk.to 15795tarteaucitron.services.tawkto = { 15796 "key": "tawkto", 15797 "type": "support", 15798 "name": "Tawk.to chat", 15799 "uri": "https://www.tawk.to/data-protection/", 15800 "needConsent": true, 15801 "cookies": [], 15802 "js": function () { 15803 "use strict"; 15804 if (tarteaucitron.user.tawktoId === undefined) { 15805 return; 15806 } 15807 15808 tarteaucitron.user.tawktoWidgetId = tarteaucitron.user.tawktoWidgetId || 'default'; 15809 15810 window.Tawk_API = window.Tawk_API || {}; 15811 window.Tawk_LoadStart = new Date(); 15812 15813 tarteaucitron.addScript('https://embed.tawk.to/' + tarteaucitron.user.tawktoId + '/' + tarteaucitron.user.tawktoWidgetId); 15814 } 15815 15816}; 15817 15818// getquanty 15819tarteaucitron.services.getquanty = { 15820 "key": "getquanty", 15821 "type": "analytic", 15822 "name": "GetQuanty", 15823 "uri": "https://www.getquanty.com/mentions-legales/", 15824 "needConsent": true, 15825 "cookies": ['_first_pageview', 'eqy_sessionid', 'eqy_siteid', 'cluid', 'eqy_company', 'cluid', 'gq_utm', '_jsuid'], 15826 "js": function () { 15827 "use strict"; 15828 if (tarteaucitron.user.getguanty === undefined) { 15829 return; 15830 } 15831 15832 if (tarteaucitron.user.getquantyAlreadyLoaded !== undefined) { 15833 return; 15834 } 15835 15836 tarteaucitron.addScript('https://get.smart-data-systems.com/gq?site_id=' + tarteaucitron.user.getguanty + '&consent=1'); 15837 }, 15838 "fallback": function () { 15839 "use strict"; 15840 if (tarteaucitron.user.getguanty === undefined) { 15841 return; 15842 } 15843 15844 tarteaucitron.user.getquantyAlreadyLoaded = true; 15845 15846 tarteaucitron.addScript('https://get.smart-data-systems.com/gq?site_id=' + tarteaucitron.user.getguanty + '¬rack=1'); 15847 } 15848}; 15849 15850// emolytics 15851tarteaucitron.services.emolytics = { 15852 "key": "emolytics", 15853 "type": "analytic", 15854 "name": "Emolytics", 15855 "uri": "https://www.emolytics.com/main/privacy-policy.php", 15856 "needConsent": true, 15857 "cookies": ['__hssc', '__hssrc', '__hstc', '_ga', '_gid', 'hubspotutk', 'lang', 'incap_ses_', 'nlbi_', 'visid_incap_'], 15858 "js": function () { 15859 "use strict"; 15860 if (tarteaucitron.user.emolyticsID === undefined) { 15861 return; 15862 } 15863 var scriptEmolytics = document.createElement('script'); 15864 scriptEmolytics.text = 'var getsmily_id="' + tarteaucitron.user.emolyticsID + '";'; 15865 document.getElementsByTagName('body')[0].appendChild(scriptEmolytics); 15866 tarteaucitron.addScript('https://cdn.emolytics.com/script/emolytics-widget.js') 15867 } 15868}; 15869 15870// youtubeapi 15871tarteaucitron.services.youtubeapi = { 15872 "key": "youtubeapi", 15873 "type": "video", 15874 "name": "Youtube (Js API)", 15875 "uri": "https://policies.google.com/privacy", 15876 "needConsent": true, 15877 "cookies": [], 15878 "js": function () { 15879 "use strict"; 15880 tarteaucitron.addScript('https://www.youtube.com/player_api'); 15881 } 15882}; 15883 15884// Facil'ITI 15885tarteaucitron.services.faciliti = { 15886 "key": "faciliti", 15887 "type": "other", 15888 "name": "Facil'ITI", 15889 "uri": "https://w
vendor: 5,956 bytes, lines 15889-16042
15889s.facil-iti.com/mentions-legales.html", 15890 "needConsent": true, 15891 "cookies": ['FACIL_ITI_LS'], 15892 "js": function () { 15893 "use strict"; 15894 if (tarteaucitron.user.facilitiID === undefined) { 15895 return; 15896 } 15897 15898 (function (w, d, s, f) { 15899 w[f] = w[f] || { conf: function () { (w[f].data = w[f].data || []).push(arguments); } }; 15900 var l = d.createElement(s), e = d.getElementsByTagName(s)[0]; 15901 l.async = 1; l.src = 'https://ws.facil-iti.com/tag/faciliti-tag.min.js'; e.parentNode.insertBefore(l, e); 15902 }(window, document, 'script', 'FACIL_ITI')); 15903 FACIL_ITI.conf('userId', tarteaucitron.user.facilitiID); 15904 } 15905}; 15906 15907// userlike 15908tarteaucitron.services.userlike = { 15909 "key": "userlike", 15910 "type": "support", 15911 "name": "Userlike", 15912 "uri": "https://www.userlike.com/en/terms#privacy-policy", 15913 "needConsent": true, 15914 "cookies": ['uslk_s', 'uslk_e'], 15915 "js": function () { 15916 "use strict"; 15917 if (tarteaucitron.user.userlikeKey === undefined) { 15918 return; 15919 } 15920 tarteaucitron.addScript('//userlike-cdn-widgets.s3-eu-west-1.amazonaws.com/' + tarteaucitron.user.userlikeKey); 15921 } 15922}; 15923 15924// adobeanalytics 15925tarteaucitron.services.adobeanalytics = { 15926 "key": "adobeanalytics", 15927 "type": "analytic", 15928 "name": "Adobe Analytics", 15929 "uri": "https://www.adobe.com/privacy/policy.html", 15930 "needConsent": true, 15931 "cookies": ['s_ecid', 's_cc', 's_sq', 's_vi', 's_fid'], 15932 "js": function () { 15933 "use strict"; 15934 if (tarteaucitron.user.adobeanalyticskey === undefined) { 15935 return; 15936 } 15937 tarteaucitron.addScript('//assets.adobedtm.com/launch-' + tarteaucitron.user.adobeanalyticskey + '.min.js'); 15938 } 15939}; 15940 15941// woopra customer journey analytics 15942tarteaucitron.services.woopra = { 15943 'key': 'woopra', 15944 'type': 'analytic', 15945 'name': 'Woopra Customer Journey Analytics', 15946 'uri': 'https://www.woopra.com/privacy', 15947 'needConsent': true, 15948 'cookies': ['wooTracker', 'intercom-session-erbfalba', 'intercom-id-erbfalba'], 15949 'js': function () { 15950 'use strict'; 15951 //var w = tarteaucitron.user.woopraDomain; 15952 //window[w] = window[w] || []; 15953 15954 (function () { 15955 var t, i, e, n = window, o = document, a = arguments, s = "script", r = ["config", "track", "identify", "visit", "push", "call", "trackForm", "trackClick"], c = function () { var t, i = this; for (i._e = [], t = 0; r.length > t; t++)(function (t) { i[t] = function () { return i._e.push([t].concat(Array.prototype.slice.call(arguments, 0))), i } })(r[t]) }; for (n._w = n._w || {}, t = 0; a.length > t; t++)n._w[a[t]] = n[a[t]] = n[a[t]] || new c; i = o.createElement(s), i.async = 1, i.src = "//static.woopra.com/js/w.js", e = o.getElementsByTagName(s)[0], e.parentNode.insertBefore(i, e) 15956 })("woopra"); 15957 15958 woopra.config({ 15959 domain: tarteaucitron.user.woopraDomain 15960 }); 15961 woopra.track(); 15962 } 15963}; 15964 15965// ausha 15966tarteaucitron.services.ausha = { 15967 key: "ausha", 15968 type: "video", 15969 name: "Ausha", 15970 uri: "https://www.ausha.co/protection-personal-data/", 15971 needConsent: true, 15972 cookies: [], 15973 js: function () { 15974 "use strict"; 15975 tarteaucitron.fallback(['ausha_player'], function (x) { 15976 var player_height = x.getAttribute('data-height'), 15977 podcast_id = x.getAttribute('data-podcast-id'), 15978 player_id = x.getAttribute('data-player-id'), 15979 playlist = x.getAttribute('data-playlist'), 15980 useshowid = x.getAttribute('data-useshowid'), 15981 color = x.getAttribute('data-color'); 15982 15983 if (podcast_id === undefined) { 15984 return ""; 15985 } 15986 15987 var src = 'https://player.ausha.co/index.html?podcastId=' + podcast_id + '&v=3'; 15988 15989 if (useshowid == "1") { 15990 src = 'https://player.ausha.co/index.html?showId=' + podcast_id + '&v=3'; 15991 } 15992 15993 if (playlist && playlist.length > 0) src += '&playlist=' + playlist; 15994 if (color && color.length > 0) src += '&color=' + color.replace('#', '%23'); 15995 if (player_id && player_id.length > 0) src += '&playerId=' + player_id; 15996 15997 return '<iframe id="' + player_id + '" loading="lazy" width="100%" height="' + player_height + '" scrolling="no" frameborder="no" src="' + src + '"></iframe>'; 15998 }); 15999 16000 tarteaucitron.addScript('//player.ausha.co/ausha-player.js', 'ausha-player'); 16001 }, 16002 fallback: function () { 16003 "use strict"; 16004 tarteaucitron.fallback(['ausha_player'], function (elem) { 16005 elem.style.height = elem.getAttribute('data-height') + 'px'; 16006 return tarteaucitron.engage('ausha'); 16007 }); 16008 } 16009}; 16010 16011// visiblee 16012tarteaucitron.services.visiblee = { 16013 key: "visiblee", 16014 type: "analytic", 16015 name: "Visiblee", 16016 uri: "http://confidentiality.visiblee.io/fr/confidentialite", 16017 needConsent: true, 16018 cookies: ["visitor_v2", tarteaucitron.user.visibleedomain, "check", "campaign_ref_" + tarteaucitron.user.visibleedomain, "reload_" + tarteaucitron.user.visibleedomain], 16019 js: function () { 16020 "use strict"; 16021 16022 if (tarteaucitron.user.visibleeclientid === undefined) { 16023 return; 16024 } 16025 tarteaucitron.addScript('//www.link-page.info/tracking_' + tarteaucitron.user.visibleeclientid + '.js', 'visiblee'); 16026 } 16027}; 16028 16029// bandcamp 16030tarteaucitron.services.bandcamp = { 16031 key: "bandcamp", 16032 type: "video", 16033 name: "Bandcamp", 16034 uri: "https://bandcamp.com", 16035 readmoreLink: "https://bandcamp.com/privacy", 16036 needConsent: true, 16037 cookies: ['client_id', 'BACKENDID', '_comm_playlist'], 16038 js: function () { 16039 "use strict"; 16040 tarteaucitron.fallback(['bandcamp_player'], function (x) { 16041 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Bandcamp iframe'), 16042 album_id = x.getAttribute("albumID"),
16043 bandcamp_width = x.getAttribute("width"), 16044 frame_width = 'width=', 16045 bandcamp_height = x.getAttribute("height"), 16046 frame_height = 'height=', 16047 attrs = ["size", "bgcol", "linkcol", "artwork", "minimal", "tracklist", "package", "transparent"], 16048 params = attrs.filter(function (a) { 16049 return x.getAttribute(a) !== null; 16050 }).map(function (a) { 16051 if (a && a.length > 0) return a + "=" + x.getAttribute(a); 16052 }).join("/"); 16053 16054 if (album_id === null) { 16055 return ""; 16056 } 16057 16058 if (bandcamp_width !== null || bandcamp_width !== "") { 16059 frame_width += '"' + bandcamp_width + '" '; 16060 } else { 16061 frame_width += '"" '; 16062 } 16063 if (bandcamp_height !== null || bandcamp_height !== "") { 16064 frame_height += '"' + bandcamp_height + '" '; 16065 } else { 16066 frame_height += '"" '; 16067 } 16068 16069 var src = 'https://bandcamp.com/EmbeddedPlayer/album=' + album_id + '/' + params; 16070 16071 return '<iframe title="' + frame_title + '"' + frame_width + frame_height + 'src="' + src + '" frameborder="0" allowfullscreen seamless></iframe>'; 16072 }); 16073 }, 16074 fallback: function () { 16075 "use strict"; 16076 tarteaucitron.fallback(['bandcamp_player'], function (elem) { 16077 elem.style.width = elem.getAttribute('width'); 16078 elem.style.height = elem.getAttribute('height'); 16079 return tarteaucitron.engage('bandcamp'); 16080 }); 16081 } 16082}; 16083 16084// Discord Widget 16085tarteaucitron.services.discord = { 16086 "key": "discord", 16087 "type": "social", 16088 "name": "Discord (Server Widget)", 16089 "needConsent": true, 16090 "cookies": ["__cfruid", "__dcfduid", "_ga", "_gcl_au", "OptanonConsent", "locale", "_gid"], 16091 "uri": "https://discord.com/privacy", 16092 "js": function () { 16093 "use strict"; 16094 tarteaucitron.fallback(['discord_widget'], function (x) { 16095 var id = x.getAttribute("guildID"), 16096 width = x.getAttribute("width"), 16097 height = x.getAttribute("height") 16098 var widgetURL = "https://discord.com/widget?id=" + id; 16099 return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"" + widgetURL + "\"></iframe>"; 16100 }); 16101 }, 16102 "fallback": function () { 16103 "use strict"; 16104 var id = 'discord'; 16105 tarteaucitron.fallback(['discord_widget'], function (elem) { 16106 elem.style.width = elem.getAttribute('width') + 'px'; 16107 elem.style.height = elem.getAttribute('height') + 'px'; 16108 return tarteaucitron.engage(id); 16109 }); 16110 } 16111}; 16112 16113// Google Maps 16114tarteaucitron.services.maps_noapi = { 16115 "key": "maps_noapi", 16116 "type": "other", 16117 "name": "Google Maps", 16118 "needConsent": true, 16119 "cookies": ["NID", "OGPC", "1P_JAR", "CONSENT"], 16120 "uri": "https://policies.google.com/privacy", 16121 "js": function () { 16122 "use strict"; 16123 tarteaucitron.fallback(['googlemaps_embed'], function (x) { 16124 var id = x.getAttribute("id"), 16125 width = x.getAttribute("width"), 16126 height = x.getAttribute("height") 16127 var widgetURL = "https://google.com/maps/embed?pb=" + id; 16128 return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"" + widgetURL + "\" style=\"border:0;\" allowfullscreen=\"\" loading=\"lazy\"></iframe>"; 16129 }); 16130 }, 16131 "fallback": function () { 16132 "use strict"; 16133 var id = 'maps_noapi'; 16134 tarteaucitron.fallback(['googlemaps_embed'], function (elem) { 16135 elem.style.width = elem.getAttribute('width') + 'px'; 16136 elem.style.height = elem.getAttribute('height') + 'px'; 16137 return tarteaucitron.engage(id); 16138 }); 16139 } 16140}; 16141 16142// hCaptcha 16143tarteaucitron.services.hcaptcha = { 16144 "key": "hcaptcha", 16145 "type": "other", 16146 "name": "hCaptcha", 16147 "needConsent": true, 16148 "cookies": [], 16149 "uri": "https://www.hcaptcha.com/privacy", 16150 "js": function () { 16151 "use strict"; 16152 tarteaucitron.fallback(["h-captcha"], ''); 16153 tarteaucitron.addScript("https://hcaptcha.com/1/api.js", "hcaptcha") 16154 }, 16155 "fallback": function () { 16156 "use strict"; 16157 var id = "hcaptcha"; 16158 tarteaucitron.fallback(["h-captcha"], tarteaucitron.engage(id)); 16159 } 16160}; 16161 16162// France Culture 16163tarteaucitron.services.fculture = {
16164 "key": "fculture", 16165 "type": "video", 16166 "name": "France Culture", 16167 "needConsent": true, 16168 "cookies": ["_gid", "didomi_token", "outbrain_cid_fetch", "xtvrn", "xtant", "YSC", "ABTasty", "xtan", "ABTastySession", "xtidc", "_ga", "VISITOR_INFO1_LIVE", "euconsent-v2", "v1st", "dmvk", "ts", "VISITOR_INFO1_LIVE", "YSC"], 16169 "uri": "https://www.radiofrance.com/politique-d-utilisation-des-cookies-sur-les-sites-internet-du-groupe-radio-france", 16170 "js": function () { 16171 "use strict"; 16172 tarteaucitron.fallback(['fculture_embed'], function (x) { 16173 var id = x.getAttribute('id'), 16174 width = x.getAttribute('width'), 16175 height = x.getAttribute('height'); 16176 return "<iframe src=\"https://www.franceculture.fr/player/export-reecouter?content=" + id + "\" height=\"" + height + "\" width=\"" + width + "\"></iframe>" 16177 }); 16178 }, 16179 "fallback": function () { 16180 "use strict"; 16181 var id = "fculture"; 16182 tarteaucitron.fallback(["fculture_embed"], tarteaucitron.engage(id)); 16183 } 16184}; 16185 16186// Acast 16187tarteaucitron.services.acast = { 16188 "key": "acast", 16189 "type": "video", 16190 "name": "Acast", 16191 "needConsent": true, 16192 "cookies": ["intercom-id-ayi0335i", "intercom-session-ayi0335i"], 16193 "uri": "https://www.acast.com/en/privacy", 16194 "js": function () { 16195 "use strict"; 16196 tarteaucitron.fallback(['acast_embed'], function (x) { 16197 var id = x.getAttribute('id1'), 16198 id2 = x.getAttribute('id2'), 16199 width = x.getAttribute('width'), 16200 height = x.getAttribute('height'), 16201 seek = x.getAttribute('seek'); 16202 var widgetURL = "https://embed.acast.com/" + id + "/" + id2 + "?seek=" + seek; 16203 return "<iframe title=\"Embed Player\" width=\"" + width + "\" height=\"" + height + "\" src=\"" + widgetURL + "\" scrolling=\"no\" frameBorder=\"0\" style=\"border: none; overflow: hidden;\"></iframe>"; 16204 }); 16205 }, 16206 "fallback": function () { 16207 "use strict"; 16208 var id = "acast"; 16209 tarteaucitron.fallback(["acast_embed"], tarteaucitron.engage(id)); 16210 } 16211}; 16212 16213// Mixcloud 16214tarteaucitron.services.mixcloud = { 16215 "key": "mixcloud", 16216 "type": "video", 16217 "name": "Mixcloud", 16218 "needConsent": true, 16219 "cookies": ["UID", "_gat", "__stripe_mid", "_gid", "_ga", "c", "csrftoken", "__stripe_sid", "mx_t"], 16220 "uri": "https://www.mixcloud.com/privacy/", 16221 "js": function () { 16222 "use strict"; 16223 tarteaucitron.fallback(['mixcloud_embed'], function (x) { 16224 var id = x.getAttribute('id'), 16225 hidecover = x.getAttribute('hidecover'), 16226 mini = x.getAttribute('mini'), 16227 light = x.getAttribute('light'), 16228 width = x.getAttribute('width'), 16229 height = x.getAttribute('height'); 16230 return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://www.mixcloud.com/widget/iframe/?hide_cover=" + hidecover + "&mini=" + mini + "&light=" + light + "&feed=" + id + "\" frameborder=\"0\" ></iframe>"; 16231 }); 16232 }, 16233 "fallback": function () { 16234 "use strict"; 16235 var id = "mixcloud"; 16236 tarteaucitron.fallback(["mixcloud_embed"], tarteaucitron.engage(id)); 16237 } 16238}; 16239 16240// Google Agenda 16241tarteaucitron.services.gagenda = { 16242 "key": "gagenda", 16243 "type": "other", 16244 "name": "Google Agenda", 16245 "needConsent": true, 16246 "cookies": ["CONSENT", "NID"], 16247 "uri": "https://policies.google.com/privacy", 16248 "js": function () { 16249 "use strict"; 16250 tarteaucitron.fallback(['gagenda_embed'], function (x) { 16251 var calendar_data = x.getAttribute('data'), 16252 width = x.getAttribute('width'), 16253 height = x.getAttribute('height'); 16254 return "<iframe loarding=\"lazy\" width=\"" + width + "\" height=\"" + height + "\" src=\"https://www.google.com/calendar/embed?" + calendar_data + "\" frameborder=\"0\" scrolling=\"no\" style=\"border-width:0\"></iframe>"; 16255 }); 16256 }, 16257 "fallback": function () { 16258 "use strict"; 16259 var id = "gagenda"; 16260 tarteaucitron.fallback(["gagenda_embed"], tarteaucitron.engage(id)); 16261 } 16262}; 16263 16264// Google Docs 16265tarteaucitron.services.gdocs = {
vendor: 4,303 bytes, lines 16266-16384
16266 "key": "gdocs", 16267 "type": "other", 16268 "name": "Google Docs", 16269 "needConsent": true, 16270 "cookies": ["CONSENT", "NID"], 16271 "uri": "https://policies.google.com/privacy", 16272 "js": function () { 16273 "use strict"; 16274 tarteaucitron.fallback(['gdocs_embed'], function (x) { 16275 var id = x.getAttribute('id'), 16276 width = x.getAttribute('width'), 16277 height = x.getAttribute('height'); 16278 return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/document/d/e/" + id + "/pub?embedded=true\"></iframe>"; 16279 }); 16280 }, 16281 "fallback": function () { 16282 "use strict"; 16283 var id = "gdocs"; 16284 tarteaucitron.fallback(["gdocs_embed"], tarteaucitron.engage(id)); 16285 } 16286}; 16287 16288// Google Sheets 16289tarteaucitron.services.gsheets = { 16290 "key": "gsheets", 16291 "type": "other", 16292 "name": "Google Sheets", 16293 "needConsent": true, 16294 "cookies": ["CONSENT", "NID"], 16295 "uri": "https://policies.google.com/privacy", 16296 "js": function () { 16297 "use strict"; 16298 tarteaucitron.fallback(['gsheets_embed'], function (x) { 16299 var id = x.getAttribute('id'), 16300 width = x.getAttribute('width'), 16301 height = x.getAttribute('height'), 16302 headers = x.getAttribute('headers'); 16303 return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/spreadsheets/d/e/" + id + "/pubhtml?widget=true&headers=" + headers + "\"></iframe>"; 16304 }); 16305 }, 16306 "fallback": function () { 16307 "use strict"; 16308 var id = "gsheets"; 16309 tarteaucitron.fallback(["gsheets_embed"], tarteaucitron.engage(id)); 16310 } 16311}; 16312 16313// Google Slides 16314tarteaucitron.services.gslides = { 16315 "key": "gslides", 16316 "type": "other", 16317 "name": "Google Slides", 16318 "needConsent": true, 16319 "cookies": ["CONSENT", "NID"], 16320 "uri": "https://policies.google.com/privacy", 16321 "js": function () { 16322 "use strict"; 16323 tarteaucitron.fallback(['gslides_embed'], function (x) { 16324 var id = x.getAttribute('id'), 16325 width = x.getAttribute('width'), 16326 height = x.getAttribute('height'), 16327 autostart = x.getAttribute('autostart'), 16328 loop = x.getAttribute('loop'), 16329 delay = x.getAttribute('delay'); 16330 return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/presentation/d/e/" + id + "/embed?start=" + autostart + "&loop=" + loop + "&delayms=" + delay + "\" frameborder=\"0\" allowfullscreen=\"true\" mozallowfullscreen=\"true\" webkitallowfullscreen=\"true\"></iframe>"; 16331 }); 16332 }, 16333 "fallback": function () { 16334 "use strict"; 16335 var id = "gslides"; 16336 tarteaucitron.fallback(["gslides_embed"], tarteaucitron.engage(id)); 16337 } 16338}; 16339 16340// Google Forms 16341tarteaucitron.services.gforms = { 16342 "key": "gforms", 16343 "type": "other", 16344 "name": "Google Forms", 16345 "needConsent": true, 16346 "cookies": ["CONSENT", "NID"], 16347 "uri": "https://policies.google.com/privacy", 16348 "js": function () { 16349 "use strict"; 16350 tarteaucitron.fallback(['gforms_embed'], function (x) { 16351 var id = x.getAttribute('id'), 16352 width = x.getAttribute('width'), 16353 height = x.getAttribute('height'); 16354 return "<iframe width=\"" + width + "\" height=\"" + height + "\" src=\"https://docs.google.com/forms/d/e/" + id + "/viewform?embedded=true\" frameborder=\"0\" marginheight=\"0\" marginwidth=\"0\"></iframe>"; 16355 }); 16356 }, 16357 "fallback": function () { 16358 "use strict"; 16359 var id = "gforms"; 16360 tarteaucitron.fallback(['gforms_embed'], tarteaucitron.engage(id)); 16361 } 16362}; 16363 16364// Google Optimize 16365tarteaucitron.services.goptimize = { 16366 "key": "goptimize", 16367 "type": "other", 16368 "name": "Google Optimize", 16369 "needConsent": true, 16370 "cookies": ["CONSENT", "NID"], 16371 "uri": "https://policies.google.com/privacy", 16372 "js": function () { 16373 "use strict"; 16374 16375 if (tarteaucitron.user.goptimize === undefined) { 16376 return; 16377 } 16378 16379 tarteaucitron.addScript('https://www.googleoptimize.com/optimize.js?id=' + tarteaucitron.user.goptimize); 16380 } 16381}; 16382 16383// Marketo munchkin 16384tarteaucitron.services.marketomunchkin = {
16385 "key": "marketomunchkin", 16386 "type": "api", 16387 "name": "Marketo munchkin", 16388 "uri": "https://documents.marketo.com/legal/cookies", 16389 "needConsent": true, 16390 "cookies": ['OptAnon', '_mkto_trk'], 16391 "js": function () { 16392 "use strict"; 16393 if (tarteaucitron.user.marketomunchkinkey === undefined) { 16394 return; 16395 } 16396 var didInit = false; 16397 function initMunchkin() { 16398 if (didInit === false) { 16399 didInit = true; 16400 Munchkin.init(tarteaucitron.user.marketomunchkinkey); 16401 } 16402 } 16403 var s = document.createElement('script'); 16404 s.type = 'text/javascript'; 16405 s.async = true; 16406 s.src = '//munchkin.marketo.net/munchkin.js'; 16407 s.onreadystatechange = function () { 16408 if (this.readyState == 'complete' || this.readyState == 'loaded') { 16409 initMunchkin(); 16410 } 16411 }; 16412 s.onload = initMunchkin; 16413 document.getElementsByTagName('head')[0].appendChild(s); 16414 } 16415}; 16416 16417// outbrain 16418tarteaucitron.services.outbrain = { 16419 "key": "outbrain", 16420 "type": "ads", 16421 "name": "Outbrain", 16422 "uri": "https://www.outbrain.com/fr/advertisers/guidelines/", 16423 "needConsent": true, 16424 "cookies": [], 16425 "js": function () { 16426 "use strict"; 16427 16428 tarteaucitron.addScript('https://widgets.outbrain.com/outbrain.js'); 16429 } 16430}; 16431 16432// affilae 16433tarteaucitron.services.affilae = { 16434 "key": "affilae", 16435 "type": "ads", 16436 "name": "Affilae", 16437 "uri": "https://affilae.com/en/privacy-cookie-policy/", 16438 "needConsent": true, 16439 "cookies": [], 16440 "js": function () { 16441 "use strict"; 16442 16443 if (tarteaucitron.user.affilae === undefined) { 16444 return; 16445 } 16446 16447 window._ae = { "pid": tarteaucitron.user.affilae }; 16448 16449 tarteaucitron.addScript('https://static.affilae.com/ae-v3.5.js'); 16450 } 16451}; 16452 16453// Canal-U.tv 16454tarteaucitron.services.canalu = { 16455 "key": "canalu", 16456 "type": "video", 16457 "name": "Canal-U.tv", 16458 "uri": "https://www.canal-u.tv/conditions-generales-utilisations", 16459 "needConsent": true, 16460 "cookies": [], 16461 "js": function () { 16462 "use strict"; 16463 tarteaucitron.fallback(['canalu_player'], function (x) { 16464 var video_title = tarteaucitron.fixSelfXSS(x.getAttribute("videoTitle")), 16465 frame_url = 'https://www.canal-u.tv/embed/' + video_title; 16466 16467 return '<div style="position:relative;padding-bottom:56.25%;padding-top:10px;height:0;overflow:hidden;">' + 16468 '<iframe src="' + frame_url + '?width=100%&height=100%" ' + 16469 'style="position:absolute;top:0;left:0;width:100%;height: 100%;" ' + 16470 'frameborder="0" ' + 16471 'allowfullscreen ' + 16472 'scrolling="no">' + 16473 '</iframe>' + 16474 '</div>'; 16475 }); 16476 }, 16477 "fallback": function () { 16478 "use strict"; 16479 tarteaucitron.fallback(['canalu_player'], function (elem) { 16480 return tarteaucitron.engage('canalu'); 16481 }); 16482 } 16483}; 16484 16485// WebTV Normandie Université 16486tarteaucitron.services.webtvnu = { 16487 "key": "webtvnu", 16488 "type": "video", 16489 "name": "WebTV Normandie Université", 16490 "uri": "https://docs.google.com/document/d/1tpVclj4QBoAq1meSZgYrpNECwp7dbmb_IhICY3sTl9c/edit", 16491 "needConsent": true, 16492 "cookies": [], 16493 "js": function () { 16494 "use strict"; 16495 tarteaucitron.fallback(['webtvnu_player'], function (x) { 16496 var frame_url = 'https://webtv.normandie-univ.fr/permalink/' + x.getAttribute("videoID") + '/iframe/', 16497 width = x.getAttribute("width"), 16498 height = x.getAttribute("height"); 16499 16500 return '<iframe width="' + width + '" height="' + height + '" src="' + frame_url + '" allowfullscreen="allowfullscreen" allow="autoplay"></iframe>'; 16501 }); 16502 }, 16503 "fallback": function () { 16504 "use strict"; 16505 tarteaucitron.fallback(['webtvnu_player'], function (elem) { 16506 return tarteaucitron.engage('webtvnu'); 16507 }); 16508 } 16509}; 16510 16511// studizz 16512tarteaucitron.services.studizz = {
16513 "key": "studizz", 16514 "type": "other", 16515 "name": "Studizz Chatbot", 16516 "uri": "https://group.studizz.fr/", 16517 "needConsent": true, 16518 "cookies": [], 16519 "js": function () { 16520 "use strict"; 16521 16522 if (tarteaucitron.user.studizzToken === undefined) { 16523 return; 16524 } 16525 16526 tarteaucitron.addScript('https://webchat.studizz.fr/webchat.js?token=' + tarteaucitron.user.studizzToken); 16527 } 16528}; 16529 16530// meteofrance 16531tarteaucitron.services.meteofrance = { 16532 "key": "meteofrance", 16533 "type": "api", 16534 "name": "Météo France", 16535 "uri": "https://meteofrance.com/politique-de-confidentialite", 16536 "needConsent": true, 16537 "cookies": [], 16538 "js": function () { 16539 "use strict"; 16540 tarteaucitron.fallback(['tac_meteofrance'], function (x) { 16541 var frame_title = tarteaucitron.fixSelfXSS(x.getAttribute("title") || 'Météo France iframe'), 16542 width = x.getAttribute("width"), 16543 height = x.getAttribute("height"), 16544 insee = x.getAttribute("data-insee"), 16545 allowfullscreen = x.getAttribute("allowfullscreen"); 16546 16547 return '<iframe title="' + frame_title + '" src="https://meteofrance.com/widget/prevision/' + insee + '" width="' + width + '" height="' + height + '" scrolling="auto" allowtransparency ' + (allowfullscreen == '0' ? '' : ' webkitallowfullscreen mozallowfullscreen allowfullscreen') + '></iframe>'; 16548 }); 16549 }, 16550 "fallback": function () { 16551 "use strict"; 16552 var id = 'meteofrance'; 16553 tarteaucitron.fallback(['tac_meteofrance'], function (elem) { 16554 elem.style.width = elem.getAttribute('width') + 'px'; 16555 elem.style.height = elem.getAttribute('height') + 'px'; 16556 return tarteaucitron.engage(id); 16557 }); 16558 } 16559}; 16560 16561// m6meteo 16562tarteaucitron.services.m6meteo = { 16563 "key": "m6meteo", 16564 "type": "api", 16565 "name": "M6 Météo", 16566 "uri": "https://gdpr.m6tech.net/charte-confidentialite-m6-web-meteocity.pdf", 16567 "needConsent": true, 16568 "cookies": [], 16569 "js": function () { 16570 "use strict"; 16571 tarteaucitron.fallback(['tac_m6meteo'], function (x) { 16572 var id = x.getAttribute("data-id"); 16573 16574 tarteaucitron.addScript('https://www.meteocity.com/widget/js/'+id); 16575 16576 return '<div id="cont_'+id+'"><div id="spa_'+id+'"><a id="a_'+id+'" href="#"></a> ©<a target="_top" href="https://www.meteocity.com">M6météo</a></div></div>'; 16577 }); 16578 }, 16579 "fallback": function () { 16580 "use strict"; 16581 var id = 'm6meteo'; 16582 tarteaucitron.fallback(['tac_m6meteo'], function (elem) { 16583 16584 return tarteaucitron.engage(id); 16585 }); 16586 } 16587}; 16588 16589// mtcaptcha 16590tarteaucitron.services.mtcaptcha = { 16591 "key": "mtcaptcha", 16592 "type": "api", 16593 "name": "MTcaptcha", 16594 "uri": "https://www.mtcaptcha.com", 16595 "readmoreLink": "https://www.mtcaptcha.com/faq-cookie-declaration", 16596 "needConsent": true, 16597 "cookies": ['mtv1Pulse','mtv1ConfSum','mtv1Pong'], 16598 16599 "js": function () { 16600 16601 window.mtcaptchaConfig = { 16602 "sitekey": tarteaucitron.user.mtcaptchaSitekey 16603 }; 16604 16605 tarteaucitron.addScript('https://service.mtcaptcha.com/mtcv1/client/mtcaptcha.min.js'); 16606 tarteaucitron.addScript('https://service2.mtcaptcha.com/mtcv1/client/mtcaptcha2.min.js'); 16607 } 16608}; 16609 16610// Internet Archive / https://archive.org 16611tarteaucitron.services.archive = { 16612 "key": "archive", 16613 "type": "video", 16614 "name": "Internet Archive", 16615 "uri": "https://archive.org/about/terms.php", 16616 "needConsent": true, 16617 "cookies": ['abtest-identifier','donation-identifier'], 16618 "js": function () { 16619 "use strict"; 16620 tarteaucitron.fallback(['archive_player'], function (x) { 16621 var video_id = tarteaucitron.getElemAttr(x, "data-videoID"), 16622 video_width = tarteaucitron.getElemAttr(x, "data-width"), 16623 frame_width = 'width=', 16624 video_height = tarteaucitron.getElemAttr(x, "data-height"), 16625 frame_height = 'height=', 16626 video_frame; 16627 16628 if (video_id === undefined) { 16629 return ""; 16630 } 16631 if (video_width !== undefined) { 16632 frame_width += '"' + video_width + '" '; 16633 } else { 16634 frame_width += '"" '; 16635 } 16636 if (video_height !== undefined) { 16637 frame_height += '"' + video_height + '" '; 16638 } else { 16639 frame_height += '"" '; 16640 } 16641 video_frame = '<iframe src="https://archive.org/embed/' + video_id + '" ' + frame_width + frame_height + ' frameborder="0" webkitallowfullscreen="true" mozallowfullscreen="true" allowfullscreen></iframe>'; 16642 return video_frame; 16643 }); 16644 }, 16645 "fallback": function () { 16646 "use strict"; 16647 var id = 'archive'; 16648 tarteaucitron.fallback(['archive_player'], function (elem) { 16649 elem.style.width = elem.getAttribute('data-width') + 'px'; 16650 elem.style.height = elem.getAttribute('data-height') + 'px'; 16651 return tarteaucitron.engage(id); 16652 }); 16653 } 16654}; 16655 16656// Gallica 16657tarteaucitron.services.gallica = {
vendor: 4,160 bytes, lines 16658-16792
16658 "key": "gallica", 16659 "type": "other", 16660 "name": "Gallica", 16661 "uri": "https://gallica.bnf.fr/edit/und/conditions-dutilisation-des-contenus-de-gallica", 16662 "needConsent": true, 16663 "cookies": ['dtCookie', 'dtLatC', 'dtPC', 'dtSa', 'rxVisitor', 'rxvt', 'xtvrn'], 16664 "js": function () { 16665 "use strict"; 16666 tarteaucitron.fallback(['gallica_player'], function (x) { 16667 var src = tarteaucitron.getElemAttr(x, "data-src"), 16668 style = tarteaucitron.getElemAttr(x, "data-style"), 16669 frame; 16670 if (src === undefined) { 16671 return ""; 16672 } 16673 frame = '<iframe style="'+ style + '" src="' + src + '"></iframe>'; 16674 return frame; 16675 }); 16676 }, 16677 "fallback": function () { 16678 "use strict"; 16679 var id = 'gallica'; 16680 tarteaucitron.fallback(['gallica_player'], function (elem) { 16681 elem.style = elem.getAttribute('data-style'); 16682 return tarteaucitron.engage(id); 16683 }); 16684 } 16685}; 16686 16687// crisp 16688tarteaucitron.services.crisp = { 16689 "key": "crisp", 16690 "type": "other", 16691 "name": "Crisp Chat", 16692 "uri": "https://help.crisp.chat/en/article/crisp-chatbox-cookie-ip-policy-1147xor/", 16693 "needConsent": false, 16694 "cookies": ['crisp-client', '__cfduid'], 16695 "js": function () { 16696 "use strict"; 16697 16698 if (tarteaucitron.user.crispID === undefined) { 16699 return; 16700 } 16701 16702 window.$crisp = []; 16703 window.CRISP_WEBSITE_ID = tarteaucitron.user.crispID; 16704 16705 tarteaucitron.addScript('https://client.crisp.chat/l.js'); 16706 } 16707}; 16708 16709// microanalytics 16710tarteaucitron.services.microanalytics = { 16711 "key": "microanalytics", 16712 "type": "analytic", 16713 "name": "MicroAnalytic", 16714 "uri": "https://microanalytics.io/page/privacy", 16715 "needConsent": false, 16716 "cookies": [], 16717 "js": function () { 16718 "use strict"; 16719 16720 if (tarteaucitron.user.microanalyticsID === undefined) { 16721 return; 16722 } 16723 16724 tarteaucitron.addScript('https://microanalytics.io/js/script.js', tarteaucitron.user.microanalyticsID, undefined, true, "data-host", "https://microanalytics.io"); 16725 } 16726}; 16727 16728// facebookcustomerchat 16729tarteaucitron.services.facebookcustomerchat = { 16730 "key": "facebookcustomerchat", 16731 "type": "social", 16732 "name": "Facebook (Customer Chat)", 16733 "uri": "https://www.facebook.com/policies/cookies/", 16734 "needConsent": true, 16735 "cookies": ['act','c_user','datr','dpr','presence','sb','wd','xs','/tr'], 16736 "js": function () { 16737 "use strict"; 16738 16739 if (tarteaucitron.user.facebookChatID === undefined) { 16740 return; 16741 } 16742 16743 tarteaucitron.fallback(['fb-customerchat'], ''); 16744 window.fbAsyncInit=function(){FB.init({appId:tarteaucitron.user.facebookChatID,autoLogAppEvents:!0,xfbml:!0,version:"v3.0"})}; 16745 tarteaucitron.addScript('https://connect.facebook.net/' + tarteaucitron.getLocale() + '/sdk/xfbml.customerchat.js', 'facebook-jssdk'); 16746 }, 16747 "fallback": function () { 16748 "use strict"; 16749 var id = 'facebookcustomerchat'; 16750 tarteaucitron.fallback(['fb-customerchat'], tarteaucitron.engage(id)); 16751 } 16752}; 16753 16754// weborama 16755tarteaucitron.services.weborama = { 16756 "key": "weborama", 16757 "type": "analytic", 16758 "name": "Weborama", 16759 "uri": "https://weborama.com/faq-cnil-avril-2021/", 16760 "needConsent": true, 16761 "cookies": [], 16762 "js": function () { 16763 "use strict"; 16764 tarteaucitron.addScript('https://cstatic.weborama.fr/js/advertiserv2/adperf_conversion.js'); 16765 } 16766}; 16767 16768// tiktok 16769tarteaucitron.services.tiktok = { 16770 "key": "tiktok", 16771 "type": "analytic", 16772 "name": "Tiktok", 16773 "uri": "https://www.tiktok.com/legal/tiktok-website-cookies-policy", 16774 "needConsent": true, 16775 "cookies": [], 16776 "js": function () { 16777 "use strict"; 16778 16779 if (tarteaucitron.user.tiktokId === undefined) { 16780 return; 16781 } 16782 16783 tarteaucitron.addScript('https://analytics.tiktok.com/i18n/pixel/sdk.js?sdkid=' + tarteaucitron.user.tiktokId); 16784 16785 if (typeof tarteaucitron.user.tiktokMore === 'function') { 16786 tarteaucitron.user.tiktokMore(); 16787 } 16788 } 16789}; 16790 16791// Klaviyo 16792tarteaucitron.services.klaviyo = {
16793 "key": "klaviyo", 16794 "type": "ads", 16795 "name": "Klaviyo", 16796 "uri": "https://help.klaviyo.com/hc/en-us/articles/360034666712-About-Cookies-in-Klaviyo", 16797 "needConsent": true, 16798 "cookies": ['__kla_id'], 16799 "js": function () { 16800 "use strict"; 16801 if (tarteaucitron.user.klaviyoCompanyId === undefined) { 16802 return; 16803 } 16804 tarteaucitron.addScript('//static.klaviyo.com/onsite/js/klaviyo.js?company_id=' + tarteaucitron.user.klaviyoCompanyId); 16805 } 16806}; 16807; 16808tarteaucitron.lang={middleBarHead:"â ðª",adblock:"Hello! This site is transparent and lets you choose the 3rd party services you want to allow.",adblock_call:"Please disable your adblocker to start customizing.",reload:"Refresh the page",alertBigScroll:"By continuing to scroll,",alertBigClick:"If you continue to browse this website,",alertBig:"you are allowing all third-party services",alertBigPrivacy:"This site uses cookies and gives you control over what you want to activate",alertSmall:"Manage services",personalize:"Personalize",acceptAll:"OK, accept all",close:"Close",privacyUrl:"Privacy policy",all:"Preference for all services",info:"Protecting your privacy",disclaimer:"By allowing these third party services, you accept their cookies and the use of tracking technologies necessary for their proper functioning.",allow:"Allow",deny:"Deny",noCookie:"This service does not use cookie.",useCookie:"This service can install",useCookieCurrent:"This service has installed",useNoCookie:"This service has not installed any cookie.",more:"Read more",source:"View the official website",credit:"Cookies manager by tarteaucitron.js",noServices:"This website does not use any cookie requiring your consent.",toggleInfoBox:"Show/hide informations about cookie storage",title:"Cookies management panel",cookieDetail:"Cookie detail for",ourSite:"on our site",modalWindow:"(modal window)",newWindow:"(new window)",allowAll:"Allow all cookies",denyAll:"Deny all cookies",icon:"Cookies",fallback:"is disabled.",allowed:"allowed",disallowed:"disallowed",ads:{title:"Advertising network",details:"Ad networks can generate revenue by selling advertising space on the site."},analytic:{title:"Audience measurement",details:"The audience measurement services used to generate useful statistics attendance to improve the site."},social:{title:"Social networks",details:"Social networks can improve the usability of the site and help to promote it via the shares."},video:{title:"Videos",details:"Video sharing services help to add rich media on the site and increase its visibility."},comment:{title:"Comments",details:"Comments managers facilitate the filing of comments and fight against spam."},support:{title:"Support",details:"Support services allow you to get in touch with the site team and help to improve it."},api:{title:"APIs",details:"APIs are used to load scripts: geolocation, search engines, translations, ..."},other:{title:"Other",details:"Services to display web content."},mandatoryTitle:"Mandatory cookies",mandatoryText:"This site uses cookies necessary for its proper functioning which cannot be deactivated."};; 16809/** 16810 * @file 16811 * Init tarteaucitron.js script. 16812 */ 16813 16814(function (Drupal, drupalSettings, tarteaucitron) { 16815 /** 16816 * Init tarteaucitron.js script. 16817 * 16818 * @type {Drupal~behavior} 16819 * 16820 * @prop {Drupal~behaviorAttach} attach 16821 * Attaches the script. 16822 */ 16823 Drupal.behaviors.tacjs = { 16824 attach: function attach() { 16825 if (window.alreadyLaunch) return; 16826 16827 // Set base URL for TacJS Log 16828 tarteaucitron.baseUrl = drupalSettings.path.baseUrl; 16829 16830 // Add custom texts to tarteaucitron. 16831 tarteaucitronCustomText = drupalSettings.tacjs.texts; 16832 16833 // Add users identification to tarteaucitron. 16834 // Undefined user causes javascript errors #3326860 #3323411. 16835 tarteaucitron.user = drupalSettings.tacjs.user || {}; 16836 16837 // Set expiration time in day(s) 16838 if (drupalSettings.tacjs.expire) { 16839 window.tarteaucitronExpireInDay = true; 16840 window.tarteaucitronForceExpire = drupalSettings.tacjs.expire; 16841 } 16842 16843 // Workaround for #3120915: convert multiplegtagUa into a Array 16844 // See https://www.drupal.org/project/tacjs/issues/3120915 16845 if (tarteaucitron.user.multiplegtagUa) { 16846 tarteaucitron.user.multiplegtagUa = 16847 tarteaucitron.user.multiplegtagUa.split(", "); 16848 } 16849 16850 // Workaround for #3204238: convert googleFonts into a Array 16851 // See https://www.drupal.org/project/tacjs/issues/3204238 16852 if (tarteaucitron.user.googleFonts) { 16853 tarteaucitron.user.googleFonts = 16854 tarteaucitron.user.googleFonts.split(", "); 16855 } 16856 16857 // Add enabled services to tarteaucitron services. 16858 Object.keys(drupalSettings.tacjs.services) 16859 .filter(function (service) { 16860 // Filter enabled services. 16861 return drupalSettings.tacjs.services[service].status; 16862 }) 16863 .forEach(function (service) { 16864 var s = drupalSettings.tacjs.services[service], 16865 lang = drupalSettings.path.currentLanguage, 16866 slanguages = s.languages, 16867 needConsent = s.needConsent, 16868 languages = []; 16869
16870 // Check service 16871 if (!tarteaucitron.services[service]) return; 16872 16873 // Check service languages 16874 if (slanguages) { 16875 Object.keys(slanguages) 16876 .filter(function (language) { 16877 return slanguages[language]; 16878 }) 16879 .forEach(function (language) { 16880 languages.push(language); 16881 }); 16882 } 16883 16884 // Check languages 16885 if (languages.length !== 0 && !languages.includes(lang)) return; 16886 16887 // Set consent 16888 if (needConsent !== undefined) { 16889 tarteaucitron.services[service].needConsent = needConsent; 16890 } 16891 16892 (tarteaucitron.job = tarteaucitron.job || []).push(service); 16893 }); 16894 16895 // Initiate tarteaucitron 16896 tarteaucitron.init(drupalSettings.tacjs.dialog); 16897 16898 // Window onload event sometimes occurs before tacjs init is called. 16899 if (document.readyState === 'complete') { 16900 // Ressources fully loaded, load event already fired, force call. 16901 tarteaucitron.initEvents.loadEvent(!window.addEventListener); 16902 } 16903 }, 16904 }; 16905})(Drupal, drupalSettings, tarteaucitron); 16906; 16907/** 16908 * @file 16909 * Bootstrap Popovers. 16910 */ 16911 16912var Drupal = Drupal || {}; 16913 16914(function ($, Drupal, Bootstrap) { 16915 "use strict"; 16916 16917 var $document = $(document); 16918 16919 /** 16920 * Extend the Bootstrap Popover plugin constructor class. 16921 */ 16922 Bootstrap.extendPlugin('popover', function (settings) { 16923 return { 16924 DEFAULTS: { 16925 animation: !!settings.popover_animation, 16926 autoClose: !!settings.popover_auto_close, 16927 enabled: settings.popover_enabled, 16928 html: !!settings.popover_html, 16929 placement: settings.popover_placement, 16930 selector: settings.popover_selector, 16931 trigger: settings.popover_trigger, 16932 title: settings.popover_title, 16933 content: settings.popover_content, 16934 delay: parseInt(settings.popover_delay, 10), 16935 container: settings.popover_container 16936 } 16937 }; 16938 }); 16939 16940 /** 16941 * Bootstrap Popovers. 16942 * 16943 * @todo This should really be properly delegated if selector option is set. 16944 */ 16945 Drupal.behaviors.bootstrapPopovers = { 16946 $activePopover: null, 16947 attach: function (context) { 16948 // Immediately return if popovers are not available. 16949 if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) { 16950 return; 16951 } 16952 16953 var _this = this; 16954 16955 $document 16956 .on('show.bs.popover', '[data-toggle=popover]', function () { 16957 var $trigger = $(this); 16958 var popover = $trigger.data('bs.popover'); 16959 16960 // Only keep track of clicked triggers that we're manually handling. 16961 if (popover.options.originalTrigger === 'click') { 16962 if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($trigger)) { 16963 _this.$activePopover.popover('hide'); 16964 } 16965 _this.$activePopover = $trigger; 16966 } 16967 }) 16968 // Unfortunately, :focusable is only made available when using jQuery 16969 // UI. While this would be the most semantic pseudo selector to use 16970 // here, jQuery UI may not always be loaded. Instead, just use :visible 16971 // here as this just needs some sort of selector here. This activates 16972 // delegate binding to elements in jQuery so it can work it's bubbling 16973 // focus magic since elements don't really propagate their focus events. 16974 // @see https://www.drupal.org/project/bootstrap/issues/3013236 16975 .on('focus.bs.popover', ':visible', function (e) { 16976 var $target = $(e.target); 16977 if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($target) && !$target.closest('.popover.in')[0]) { 16978 _this.$activePopover.popover('hide'); 16979 _this.$activePopover = null; 16980 } 16981 }) 16982 .on('click.bs.popover', function (e) { 16983 var $target = $(e.target); 16984 if (_this.$activePopover && _this.getOption('autoClose') && !$target.is('[data-toggle=popover]') && !$target.closest('.popover.in')[0]) { 16985 _this.$activePopover.popover('hide'); 16986 _this.$activePopover = null; 16987 } 16988 }) 16989 .on('keyup.bs.popover', function (e) { 16990 if (_this.$activePopover && _this.getOption('autoClose') && e.which === 27) { 16991 _this.$activePopover.popover('hide'); 16992 _this.$activePopover = null; 16993 } 16994 }) 16995 ; 16996 16997 var elements = $(context).find('[data-toggle=popover]').toArray(); 16998 for (var i = 0; i < elements.length; i++) { 16999 var $element = $(elements[i]); 17000 var options = $.extend({}, $.fn.popover.Constructor.DEFAULTS, $element.data()); 17001 17002 // Store the original trigger. 17003 options.originalTrigger = options.trigger; 17004 17005 // If the trigger is "click", then we'll handle it manually here. 17006 if (options.trigger === 'click') { 17007 options.trigger = 'manual'; 17008 } 17009 17010 // Retrieve content from a target element. 17011 var target = options.target || $element.is('a[href^="#"]') && $element.attr('href'); 17012 var $target = $document.find(target).clone(); 17013 if (!options.content && $target[0]) { 17014 $target.removeClass('visually-hidden hidden').removeAttr('aria-hidden'); 17015 options.content = $target.wrap('<div/>').parent()[options.html ? 'html' : 'text']() || ''; 17016 } 17017 17018 // Initialize the popover. 17019 $element.popover(options); 17020 17021 // Handle clicks manually. 17022 if (options.originalTrigger === 'click') { 17023 // To ensure the element is bound multiple times, remove any 17024 // previously set event handler before adding another one. 17025 $element 17026 .off('click.drupal.bootstrap.popover') 17027 .on('click.drupal.bootstrap.popover', function (e) { 17028 $(this).popover('toggle'); 17029 e.preventDefault(); 17030 e.stopPropagation(); 17031 }) 17032 ; 17033 } 17034 } 17035 }, 17036 detach: function (context) { 17037 // Immediately return if popovers are not available. 17038 if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) { 17039 return; 17040 } 17041 17042 // Destroy all popovers. 17043 $(context).find('[data-toggle="popover"]') 17044 .off('click.drupal.bootstrap.popover') 17045 .popover('destroy') 17046 ; 17047 }, 17048 getOption: function(name, defaultValue, element) { 17049 var $element = element ? $(element) : this.$activePopover; 17050 var options = $.extend(true, {}, $.fn.popover.Constructor.DEFAULTS, ($element && $element.data('bs.popover') || {}).options); 17051 if (options[name] !== void 0) { 17052 return options[name]; 17053 } 17054 return defaultValue !== void 0 ? defaultValue : void 0; 17055 } 17056 }; 17057 17058})(window.jQuery, window.Drupal, window.Drupal.bootstrap); 17059; 17060/** 17061 * @file 17062 * Bootstrap Tooltips. 17063 */ 17064 17065var Drupal = Drupal || {}; 17066 17067(function ($, Drupal, Bootstrap) { 17068 "use strict"; 17069 17070 /** 17071 * Extend the Bootstrap Tooltip plugin constructor class. 17072 */ 17073 Bootstrap.extendPlugin('tooltip', function (settings) { 17074 return { 17075 DEFAULTS: { 17076 animation: !!settings.tooltip_animation, 17077 enabled: settings.tooltip_enabled, 17078 html: !!settings.tooltip_html, 17079 placement: settings.tooltip_placement, 17080 selector: settings.tooltip_selector, 17081 trigger: settings.tooltip_trigger, 17082 delay: parseInt(settings.tooltip_delay, 10), 17083 container: settings.tooltip_container 17084 } 17085 }; 17086 }); 17087 17088 /** 17089 * Bootstrap Tooltips. 17090 * 17091 * @todo This should really be properly delegated if selector option is set. 17092 */ 17093 Drupal.behaviors.bootstrapTooltips = { 17094 attach: function (context) { 17095 // Immediately return if tooltips are not available. 17096 if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) { 17097 return; 17098 } 17099 17100 var elements = $(context).find('[data-toggle="tooltip"]').toArray(); 17101 for (var i = 0; i < elements.length; i++) { 17102 var $element = $(elements[i]); 17103 var options = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, $element.data()); 17104 $element.tooltip(options); 17105 } 17106 }, 17107 detach: function (context) { 17108 // Immediately return if tooltips are not available. 17109 if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) { 17110 return; 17111 } 17112 17113 // Destroy all tooltips. 17114 $(context).find('[data-toggle="tooltip"]').tooltip('destroy'); 17115 } 17116 }; 17117 17118})(window.jQuery, window.Drupal, window.Drupal.bootstrap); 17119;
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.