1/** 2* DO NOT EDIT THIS FILE. 3* See the following change record for more information, 4* https://www.drupal.org/node/2815083 5* @preserve 6**/ 7(function ($, Drupal, _ref) { 8 var isTabbable = _ref.isTabbable; 9 $.extend($.expr[':'], { 10 tabbable: function tabbable(element) { 11 Drupal.deprecationError({ 12 message: 'The :tabbable selector is deprecated in Drupal 9.2.0 and will be removed in Drupal 11.0.0. Use the core/tabbable library instead. See https://www.drupal.org/node/3183730' 13 }); 14 if (element.tagName === 'SUMMARY' || element.tagName === 'DETAILS') { 15 var tabIndex = element.getAttribute('tabIndex'); 16 if (tabIndex === null || tabIndex < 0) { 17 return false; 18 } 19 } 20 return isTabbable(element); 21 } 22 }); 23})(jQuery, Drupal, window.tabbable);; 24/** 25* DO NOT EDIT THIS FILE. 26* See the following change record for more information, 27* https://www.drupal.org/node/2815083 28* @preserve 29**/ 30(function ($) { 31 var cachedScrollbarWidth = null; 32 var max = Math.max, 33 abs = Math.abs; 34 var regexHorizontal = /left|center|right/; 35 var regexVertical = /top|center|bottom/; 36 var regexOffset = /[+-]\d+(\.[\d]+)?%?/; 37 var regexPosition = /^\w+/; 38 var regexPercent = /%$/; 39 var _position = $.fn.position; 40 function getOffsets(offsets, width, height) { 41 return [parseFloat(offsets[0]) * (regexPercent.test(offsets[0]) ? width / 100 : 1), parseFloat(offsets[1]) * (regexPercent.test(offsets[1]) ? height / 100 : 1)]; 42 } 43 function parseCss(element, property) { 44 return parseInt($.css(element, property), 10) || 0; 45 } 46 function getDimensions(elem) { 47 var raw = elem[0]; 48 if (raw.nodeType === 9) { 49 return { 50 width: elem.width(), 51 height: elem.height(), 52 offset: { 53 top: 0, 54 left: 0 55 } 56 }; 57 } 58 if ($.isWindow(raw)) { 59 return { 60 width: elem.width(), 61 height: elem.height(), 62 offset: { 63 top: elem.scrollTop(), 64 left: elem.scrollLeft() 65 } 66 }; 67 } 68 if (raw.preventDefault) { 69 return { 70 width: 0, 71 height: 0, 72 offset: { 73 top: raw.pageY, 74 left: raw.pageX 75 } 76 }; 77 } 78 return { 79 width: elem.outerWidth(), 80 height: elem.outerHeight(), 81 offset: elem.offset() 82 }; 83 } 84 var collisions = { 85 fit: { 86 left: function left(position, data) { 87 var within = data.within; 88 var withinOffset = within.isWindow ? within.scrollLeft : within.offset.left; 89 var outerWidth = within.width; 90 var collisionPosLeft = position.left - data.collisionPosition.marginLeft; 91 var overLeft = withinOffset - collisionPosLeft; 92 var overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset; 93 var newOverRight; 94 if (data.collisionWidth > outerWidth) { 95 if (overLeft > 0 && overRight <= 0) { 96 newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset; 97 position.left += overLeft - newOverRight; 98 } else if (overRight > 0 && overLeft <= 0) { 99 position.left = withinOffset; 100 } else if (overLeft > overRight) { 101 position.left = withinOffset + outerWidth - data.collisionWidth; 102 } else { 103 position.left = withinOffset; 104 } 105 } else if (overLeft > 0) { 106 position.left += overLeft; 107 } else if (overRight > 0) { 108 position.left -= overRight; 109 } else { 110 position.left = max(position.left - collisionPosLeft, position.left); 111 } 112 },
113 top: function top(position, data) { 114 var within = data.within; 115 var withinOffset = within.isWindow ? within.scrollTop : within.offset.top; 116 var outerHeight = data.within.height; 117 var collisionPosTop = position.top - data.collisionPosition.marginTop; 118 var overTop = withinOffset - collisionPosTop; 119 var overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset; 120 var newOverBottom; 121 if (data.collisionHeight > outerHeight) { 122 if (overTop > 0 && overBottom <= 0) { 123 newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset; 124 position.top += overTop - newOverBottom; 125 } else if (overBottom > 0 && overTop <= 0) { 126 position.top = withinOffset; 127 } else if (overTop > overBottom) { 128 position.top = withinOffset + outerHeight - data.collisionHeight; 129 } else { 130 position.top = withinOffset; 131 } 132 } else if (overTop > 0) { 133 position.top += overTop; 134 } else if (overBottom > 0) { 135 position.top -= overBottom; 136 } else { 137 position.top = max(position.top - collisionPosTop, position.top); 138 } 139 } 140 }, 141 flip: { 142 left: function left(position, data) { 143 var within = data.within; 144 var withinOffset = within.offset.left + within.scrollLeft; 145 var outerWidth = within.width; 146 var offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left; 147 var collisionPosLeft = position.left - data.collisionPosition.marginLeft; 148 var overLeft = collisionPosLeft - offsetLeft; 149 var overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft; 150 var myOffset = data.my[0] === 'left' ? -data.elemWidth : data.my[0] === 'right' ? data.elemWidth : 0; 151 var atOffset = data.at[0] === 'left' ? data.targetWidth : data.at[0] === 'right' ? -data.targetWidth : 0; 152 var offset = -2 * data.offset[0]; 153 var newOverRight; 154 var newOverLeft; 155 if (overLeft < 0) { 156 newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset; 157 if (newOverRight < 0 || newOverRight < abs(overLeft)) { 158 position.left += myOffset + atOffset + offset; 159 } 160 } else if (overRight > 0) { 161 newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft; 162 if (newOverLeft > 0 || abs(newOverLeft) < overRight) { 163 position.left += myOffset + atOffset + offset; 164 } 165 } 166 },
167 top: function top(position, data) { 168 var within = data.within; 169 var withinOffset = within.offset.top + within.scrollTop; 170 var outerHeight = within.height; 171 var offsetTop = within.isWindow ? within.scrollTop : within.offset.top; 172 var collisionPosTop = position.top - data.collisionPosition.marginTop; 173 var overTop = collisionPosTop - offsetTop; 174 var overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop; 175 var top = data.my[1] === 'top'; 176 var myOffset = top ? -data.elemHeight : data.my[1] === 'bottom' ? data.elemHeight : 0; 177 var atOffset = data.at[1] === 'top' ? data.targetHeight : data.at[1] === 'bottom' ? -data.targetHeight : 0; 178 var offset = -2 * data.offset[1]; 179 var newOverTop; 180 var newOverBottom; 181 if (overTop < 0) { 182 newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset; 183 if (newOverBottom < 0 || newOverBottom < abs(overTop)) { 184 position.top += myOffset + atOffset + offset; 185 } 186 } else if (overBottom > 0) { 187 newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop; 188 if (newOverTop > 0 || abs(newOverTop) < overBottom) { 189 position.top += myOffset + atOffset + offset; 190 } 191 } 192 } 193 }, 194 flipfit: { 195 left: function left() { 196 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 197 args[_key] = arguments[_key]; 198 } 199 collisions.flip.left.apply(this, args); 200 collisions.fit.left.apply(this, args); 201 },
202 top: function top() { 203 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 204 args[_key2] = arguments[_key2]; 205 } 206 collisions.flip.top.apply(this, args); 207 collisions.fit.top.apply(this, args); 208 } 209 } 210 }; 211 $.position = { 212 scrollbarWidth: function scrollbarWidth() { 213 if (cachedScrollbarWidth !== undefined) { 214 return cachedScrollbarWidth; 215 } 216 var div = $('<div ' + "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" + "<div style='height:100px;width:auto;'></div></div>"); 217 var innerDiv = div.children()[0]; 218 $('body').append(div); 219 var w1 = innerDiv.offsetWidth; 220 div.css('overflow', 'scroll'); 221 var w2 = innerDiv.offsetWidth; 222 if (w1 === w2) { 223 w2 = div[0].clientWidth; 224 } 225 div.remove(); 226 cachedScrollbarWidth = w1 - w2; 227 return cachedScrollbarWidth; 228 }, 229 getScrollInfo: function getScrollInfo(within) { 230 var overflowX = within.isWindow || within.isDocument ? '' : within.element.css('overflow-x'); 231 var overflowY = within.isWindow || within.isDocument ? '' : within.element.css('overflow-y'); 232 var hasOverflowX = overflowX === 'scroll' || overflowX === 'auto' && within.width < within.element[0].scrollWidth; 233 var hasOverflowY = overflowY === 'scroll' || overflowY === 'auto' && within.height < within.element[0].scrollHeight; 234 return { 235 width: hasOverflowY ? $.position.scrollbarWidth() : 0, 236 height: hasOverflowX ? $.position.scrollbarWidth() : 0 237 }; 238 }, 239 getWithinInfo: function getWithinInfo(element) { 240 var withinElement = $(element || window); 241 var isWindow = $.isWindow(withinElement[0]); 242 var isDocument = !!withinElement[0] && withinElement[0].nodeType === 9; 243 var hasOffset = !isWindow && !isDocument; 244 return { 245 element: withinElement, 246 isWindow: isWindow, 247 isDocument: isDocument, 248 offset: hasOffset ? $(element).offset() : { 249 left: 0, 250 top: 0 251 }, 252 scrollLeft: withinElement.scrollLeft(), 253 scrollTop: withinElement.scrollTop(), 254 width: withinElement.outerWidth(), 255 height: withinElement.outerHeight() 256 }; 257 } 258 }; 259 $.fn.position = function (options) { 260 if (!options || !options.of) { 261 return _position.apply(this, arguments); 262 } 263 options = $.extend({}, options); 264 var within = $.position.getWithinInfo(options.within); 265 var scrollInfo = $.position.getScrollInfo(within); 266 var collision = (options.collision || 'flip').split(' '); 267 var offsets = {}; 268 var target = typeof options.of === 'string' ? $(document).find(options.of) : $(options.of); 269 var dimensions = getDimensions(target); 270 var targetWidth = dimensions.width; 271 var targetHeight = dimensions.height; 272 var targetOffset = dimensions.offset; 273 if (target[0].preventDefault) { 274 options.at = 'left top'; 275 } 276 var basePosition = $.extend({}, targetOffset); 277 $.each(['my', 'at'], function () { 278 var pos = (options[this] || '').split(' '); 279 if (pos.length === 1) { 280 pos = regexHorizontal.test(pos[0]) ? pos.concat(['center']) : regexVertical.test(pos[0]) ? ['center'].concat(pos) : ['center', 'center']; 281 } 282 pos[0] = regexHorizontal.test(pos[0]) ? pos[0] : 'center'; 283 pos[1] = regexVertical.test(pos[1]) ? pos[1] : 'center'; 284 var horizontalOffset = regexOffset.exec(pos[0]); 285 var verticalOffset = regexOffset.exec(pos[1]); 286 offsets[this] = [horizontalOffset ? horizontalOffset[0] : 0, verticalOffset ? verticalOffset[0] : 0]; 287 options[this] = [regexPosition.exec(pos[0])[0], regexPosition.exec(pos[1])[0]]; 288 }); 289 if (collision.length === 1) { 290 collision[1] = collision[0]; 291 } 292 if (options.at[0] === 'right') { 293 basePosition.left += targetWidth; 294 } else if (options.at[0] === 'center') { 295 basePosition.left += targetWidth / 2; 296 } 297 if (options.at[1] === 'bottom') { 298 basePosition.top += targetHeight; 299 } else if (options.at[1] === 'center') { 300 basePosition.top += targetHeight / 2; 301 } 302 var atOffset = getOffsets(offsets.at, targetWidth, targetHeight); 303 basePosition.left += atOffset[0]; 304 basePosition.top += atOffset[1]; 305 return this.each(function () { 306 var using; 307 var elem = $(this); 308 var elemWidth = elem.outerWidth(); 309 var elemHeight = elem.outerHeight(); 310 var marginLeft = parseCss(this, 'marginLeft'); 311 var marginTop = parseCss(this, 'marginTop'); 312 var collisionWidth = elemWidth + marginLeft + parseCss(this, 'marginRight') + scrollInfo.width; 313 var collisionHeight = elemHeight + marginTop + parseCss(this, 'marginBottom') + scrollInfo.height; 314 var position = $.extend({}, basePosition); 315 var myOffset = getOffsets(offsets.my, elem.outerWidth(), elem.outerHeight()); 316 if (options.my[0] === 'right') { 317 position.left -= elemWidth; 318 } else if (options.my[0] === 'center') { 319 position.left -= elemWidth / 2; 320 } 321 if (options.my[1] === 'bottom') { 322 position.top -= elemHeight; 323 } else if (options.my[1] === 'center') { 324 position.top -= elemHeight / 2; 325 } 326 position.left += myOffset[0]; 327 position.top += myOffset[1]; 328 var collisionPosition = { 329 marginLeft: marginLeft, 330 marginTop: marginTop 331 }; 332 $.each(['left', 'top'], function (i, dir) { 333 if (collisions[collision[i]]) { 334 collisions[collision[i]][dir](position, { 335 targetWidth: targetWidth, 336 targetHeight: targetHeight, 337 elemWidth: elemWidth, 338 elemHeight: elemHeight, 339 collisionPosition: collisionPosition, 340 collisionWidth: collisionWidth, 341 collisionHeight: collisionHeight, 342 offset: [atOffset[0] + myOffset[0], atOffset[1] + myOffset[1]], 343 my: options.my, 344 at: options.at, 345 within: within, 346 elem: elem 347 }); 348 } 349 }); 350 if (options.using) { 351 using = function using(props) { 352 var left = targetOffset.left - position.left; 353 var right = left + targetWidth - elemWidth; 354 var top = targetOffset.top - position.top; 355 var bottom = top + targetHeight - elemHeight; 356 var feedback = { 357 target: { 358 element: target, 359 left: targetOffset.left, 360 top: targetOffset.top, 361 width: targetWidth, 362 height: targetHeight 363 }, 364 element: { 365 element: elem, 366 left: position.left, 367 top: position.top, 368 width: elemWidth, 369 height: elemHeight 370 }, 371 horizontal: right < 0 ? 'left' : left > 0 ? 'right' : 'center', 372 vertical: bottom < 0 ? 'top' : top > 0 ? 'bottom' : 'middle' 373 }; 374 if (targetWidth < elemWidth && abs(left + right) < targetWidth) { 375 feedback.horizontal = 'center'; 376 } 377 if (targetHeight < elemHeight && abs(top + bottom) < targetHeight) { 378 feedback.vertical = 'middle'; 379 } 380 if (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) { 381 feedback.important = 'horizontal'; 382 } else { 383 feedback.important = 'vertical'; 384 } 385 options.using.call(this, props, feedback); 386 }; 387 } 388 elem.offset($.extend(position, { 389 using: using 390 })); 391 }); 392 }; 393 if (!$.hasOwnProperty('ui')) { 394 $.ui = {}; 395 } 396 $.ui.position = collisions; 397})(jQuery);; 398/** 399* DO NOT EDIT THIS FILE. 400* See the following change record for more information, 401* https://www.drupal.org/node/2815083 402* @preserve 403**/ 404(function ($, Drupal) { 405 Drupal.theme.progressBar = function (id) { 406 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>'; 407 }; 408 Drupal.ProgressBar = function (id, updateCallback, method, errorCallback) { 409 this.id = id; 410 this.method = method || 'GET'; 411 this.updateCallback = updateCallback; 412 this.errorCallback = errorCallback;
413 this.element = $(Drupal.theme('progressBar', id)); 414 }; 415 $.extend(Drupal.ProgressBar.prototype, { 416 setProgress: function setProgress(percentage, message, label) { 417 if (percentage >= 0 && percentage <= 100) { 418 $(this.element).find('div.progress__bar').css('width', "".concat(percentage, "%")); 419 $(this.element).find('div.progress__percentage').html("".concat(percentage, "%")); 420 } 421 $('div.progress__description', this.element).html(message); 422 $('div.progress__label', this.element).html(label); 423 if (this.updateCallback) { 424 this.updateCallback(percentage, message, this); 425 } 426 }, 427 startMonitoring: function startMonitoring(uri, delay) { 428 this.delay = delay; 429 this.uri = uri; 430 this.sendPing(); 431 }, 432 stopMonitoring: function stopMonitoring() { 433 clearTimeout(this.timer); 434 this.uri = null; 435 }, 436 sendPing: function sendPing() { 437 if (this.timer) { 438 clearTimeout(this.timer); 439 } 440 if (this.uri) { 441 var pb = this; 442 var uri = this.uri; 443 if (uri.indexOf('?') === -1) { 444 uri += '?'; 445 } else { 446 uri += '&'; 447 } 448 uri += '_format=json'; 449 $.ajax({ 450 type: this.method, 451 url: uri, 452 data: '', 453 dataType: 'json', 454 success: function success(progress) { 455 if (progress.status === 0) { 456 pb.displayError(progress.data); 457 return; 458 } 459 pb.setProgress(progress.percentage, progress.message, progress.label); 460 pb.timer = setTimeout(function () { 461 pb.sendPing(); 462 }, pb.delay); 463 }, 464 error: function error(xmlhttp) { 465 var e = new Drupal.AjaxError(xmlhttp, pb.uri); 466 pb.displayError("<pre>".concat(e.message, "</pre>")); 467 } 468 }); 469 } 470 }, 471 displayError: function displayError(string) { 472 var error = $('<div class="messages messages--error"></div>').html(string); 473 $(this.element).before(error).hide(); 474 if (this.errorCallback) { 475 this.errorCallback(this); 476 } 477 } 478 }); 479})(jQuery, Drupal);; 480loadjs=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;
480for(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}();; 481/** 482* DO NOT EDIT THIS FILE. 483* See the following change record for more information, 484* https://www.drupal.org/node/2815083 485* @preserve 486**/ 487(function (Drupal) { 488 Drupal.behaviors.responsiveImageAJAX = { 489 attach: function attach() { 490 if (window.picturefill) { 491 window.picturefill(); 492 } 493 } 494 }; 495})(Drupal);; 496/** 497* DO NOT EDIT THIS FILE. 498* See the following change record for more information, 499* https://www.drupal.org/node/2815083 500* @preserve 501**/ 502function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } 503function _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."); } 504function _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); } 505function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } 506function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } 507function _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; } 508(function ($, window, Drupal, drupalSettings, loadjs, _ref) { 509 var isFocusable = _ref.isFocusable, 510 tabbable = _ref.tabbable; 511 Drupal.behaviors.AJAX = { 512 attach: function attach(context, settings) { 513 function loadAjaxBehavior(base) { 514 var elementSettings = settings.ajax[base]; 515 if (typeof elementSettings.selector === 'undefined') { 516 elementSettings.selector = "#".concat(base); 517 } 518 once('drupal-ajax', $(elementSettings.selector)).forEach(function (el) { 519 elementSettings.element = el; 520 elementSettings.base = base; 521 Drupal.ajax(elementSettings); 522 }); 523 } 524 Object.keys(settings.ajax || {}).forEach(function (base) { 525 return loadAjaxBehavior(base); 526 }); 527 Drupal.ajax.bindAjaxLinks(document.body); 528 once('ajax', '.use-ajax-submit').forEach(function (el) { 529 var elementSettings = {}; 530 elementSettings.url = $(el.form).attr('action'); 531 elementSettings.setClick = true; 532 elementSettings.event = 'click'; 533 elementSettings.progress = { 534 type: 'throbber' 535 }; 536 elementSettings.base = el.id; 537 elementSettings.element = el; 538 Drupal.ajax(elementSettings); 539 }); 540 }, 541 detach: function detach(context, settings, trigger) { 542 if (trigger === 'unload') { 543 Drupal.ajax.expired().forEach(function (instance) { 544 Drupal.ajax.instances[instance.instanceIndex] = null; 545 }); 546 } 547 } 548 }; 549 Drupal.AjaxError = function (xmlhttp, uri, customMessage) { 550 var statusCode; 551 var statusText; 552 var responseText; 553 if (xmlhttp.status) { 554 statusCode = "\n".concat(Drupal.t('An AJAX HTTP error occurred.'), "\n").concat(Drupal.t('HTTP Result Code: !status', { 555 '!status': xmlhttp.status 556 })); 557 } else { 558 statusCode = "\n".concat(Drupal.t('An AJAX HTTP request terminated abnormally.')); 559 } 560 statusCode += "\n".concat(Drupal.t('Debugging information follows.')); 561 var pathText = "\n".concat(Drupal.t('Path: !uri', { 562 '!uri': uri 563 })); 564 statusText = ''; 565 try { 566 statusText = "\n".concat(Drupal.t('StatusText: !statusText', { 567 '!statusText': xmlhttp.statusText.trim() 568 })); 569 } catch (e) {} 570 responseText = ''; 571 try { 572 responseText = "\n".concat(Drupal.t('ResponseText: !responseText', { 573 '!responseText': xmlhttp.responseText.trim() 574 })); 575 } catch (e) {} 576 responseText = responseText.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, ''); 577 responseText = responseText.replace(/[\n]+\s+/g, '\n'); 578 var readyStateText = xmlhttp.status === 0 ? "\n".concat(Drupal.t('ReadyState: !readyState', { 579 '!readyState': xmlhttp.readyState 580 })) : ''; 581 customMessage = customMessage ? "\n".concat(Drupal.t('CustomMessage: !customMessage', { 582 '!customMessage': customMessage 583 })) : ''; 584 this.message = statusCode + pathText + statusText + customMessage + responseText + readyStateText; 585 this.name = 'AjaxError'; 586 }; 587 Drupal.AjaxError.prototype = new Error(); 588 Drupal.AjaxError.prototype.constructor = Drupal.AjaxError; 589 Drupal.ajax = function (settings) { 590 if (arguments.length !== 1) { 591 throw new Error('Drupal.ajax() function must be called with one configuration object only'); 592 } 593 var base = settings.base || false; 594 var element = settings.element || false; 595 delete settings.base; 596 delete settings.element; 597 if (!settings.progress && !element) { 598 settings.progress = false;
599 } 600 var ajax = new Drupal.Ajax(base, element, settings); 601 ajax.instanceIndex = Drupal.ajax.instances.length; 602 Drupal.ajax.instances.push(ajax); 603 return ajax; 604 }; 605 Drupal.ajax.instances = []; 606 Drupal.ajax.expired = function () { 607 return Drupal.ajax.instances.filter(function (instance) { 608 return instance && instance.element !== false && !document.body.contains(instance.element); 609 }); 610 }; 611 Drupal.ajax.bindAjaxLinks = function (element) { 612 once('ajax', '.use-ajax', element).forEach(function (ajaxLink) { 613 var $linkElement = $(ajaxLink); 614 var elementSettings = { 615 progress: { 616 type: 'throbber' 617 }, 618 dialogType: $linkElement.data('dialog-type'), 619 dialog: $linkElement.data('dialog-options'), 620 dialogRenderer: $linkElement.data('dialog-renderer'), 621 base: $linkElement.attr('id'), 622 element: ajaxLink 623 }; 624 var href = $linkElement.attr('href'); 625 if (href) { 626 elementSettings.url = href; 627 elementSettings.event = 'click'; 628 } 629 Drupal.ajax(elementSettings); 630 }); 631 }; 632 Drupal.Ajax = function (base, element, elementSettings) { 633 var defaults = { 634 event: element ? 'mousedown' : null, 635 keypress: true, 636 selector: base ? "#".concat(base) : null, 637 effect: 'none', 638 speed: 'none', 639 method: 'replaceWith', 640 progress: { 641 type: 'throbber', 642 message: Drupal.t('Please wait...') 643 }, 644 submit: { 645 js: true 646 } 647 }; 648 $.extend(this, defaults, elementSettings); 649 this.commands = new Drupal.AjaxCommands(); 650 this.instanceIndex = false; 651 if (this.wrapper) { 652 this.wrapper = "#".concat(this.wrapper); 653 } 654 this.element = element; 655 this.element_settings = elementSettings; 656 this.elementSettings = elementSettings; 657 if (this.element && this.element.form) { 658 this.$form = $(this.element.form); 659 } 660 if (!this.url) { 661 var $element = $(this.element); 662 if ($element.is('a')) { 663 this.url = $element.attr('href'); 664 } else if (this.element && element.form) { 665 this.url = this.$form.attr('action'); 666 } 667 } 668 var originalUrl = this.url; 669 this.url = this.url.replace(/\/nojs(\/|$|\?|#)/, '/ajax$1'); 670 if (drupalSettings.ajaxTrustedUrl[originalUrl]) { 671 drupalSettings.ajaxTrustedUrl[this.url] = true; 672 } 673 var ajax = this; 674 ajax.options = { 675 url: ajax.url, 676 data: ajax.submit, 677 isInProgress: function isInProgress() { 678 return ajax.ajaxing; 679 }, 680 beforeSerialize: function beforeSerialize(elementSettings, options) { 681 return ajax.beforeSerialize(elementSettings, options); 682 }, 683 beforeSubmit: function beforeSubmit(formValues, elementSettings, options) { 684 ajax.ajaxing = true; 685 return ajax.beforeSubmit(formValues, elementSettings, options); 686 }, 687 beforeSend: function beforeSend(xmlhttprequest, options) { 688 ajax.ajaxing = true; 689 return ajax.beforeSend(xmlhttprequest, options); 690 }, 691 success: function success(response, status, xmlhttprequest) { 692 var _this = this; 693 if (typeof response === 'string') { 694 response = $.parseJSON(response); 695 } 696 if (response !== null && !drupalSettings.ajaxTrustedUrl[ajax.url]) { 697 if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') { 698 var customMessage = Drupal.t('The response failed verification so will not be processed.'); 699 return ajax.error(xmlhttprequest, ajax.url, customMessage); 700 } 701 } 702 return Promise.resolve(ajax.success(response, status)).then(function () { 703 ajax.ajaxing = false; 704 $(document).trigger('ajaxSuccess', [xmlhttprequest, _this]); 705 $(document).trigger('ajaxComplete', [xmlhttprequest, _this]); 706 if (--$.active === 0) { 707 $(document).trigger('ajaxStop'); 708 } 709 }); 710 }, 711 error: function error(xmlhttprequest, status, _error) { 712 ajax.ajaxing = false; 713 }, 714 complete: function complete(xmlhttprequest, status) { 715 if (status === 'error' || status === 'parsererror') { 716 return ajax.error(xmlhttprequest, ajax.url); 717 } 718 }, 719 dataType: 'json', 720 jsonp: false, 721 type: 'POST' 722 }; 723 if (elementSettings.dialog) { 724 ajax.options.data.dialogOptions = elementSettings.dialog; 725 } 726 if (ajax.options.url.indexOf('?') === -1) { 727 ajax.options.url += '?'; 728 } else { 729 ajax.options.url += '&'; 730 } 731 var wrapper = "drupal_".concat(elementSettings.dialogType || 'ajax'); 732 if (elementSettings.dialogRenderer) { 733 wrapper += ".".concat(elementSettings.dialogRenderer); 734 } 735 ajax.options.url += "".concat(Drupal.ajax.WRAPPER_FORMAT, "=").concat(wrapper); 736 $(ajax.element).on(elementSettings.event, function (event) { 737 if (!drupalSettings.ajaxTrustedUrl[ajax.url] && !Drupal.url.isLocal(ajax.url)) { 738 throw new Error(Drupal.t('The callback URL is not local and n
738ot trusted: !url', { 739 '!url': ajax.url 740 })); 741 } 742 return ajax.eventResponse(this, event); 743 }); 744 if (elementSettings.keypress) { 745 $(ajax.element).on('keypress', function (event) { 746 return ajax.keypressResponse(this, event); 747 }); 748 } 749 if (elementSettings.prevent) { 750 $(ajax.element).on(elementSettings.prevent, false); 751 } 752 }; 753 Drupal.ajax.WRAPPER_FORMAT = '_wrapper_format'; 754 Drupal.Ajax.AJAX_REQUEST_PARAMETER = '_drupal_ajax'; 755 Drupal.Ajax.prototype.execute = function () { 756 if (this.ajaxing) { 757 return; 758 } 759 try { 760 this.beforeSerialize(this.element, this.options); 761 return $.ajax(this.options); 762 } catch (e) { 763 this.ajaxing = false; 764 window.alert("An error occurred while attempting to process ".concat(this.options.url, ": ").concat(e.message)); 765 return $.Deferred().reject(); 766 } 767 }; 768 Drupal.Ajax.prototype.keypressResponse = function (element, event) { 769 var ajax = this; 770 if (event.which === 13 || event.which === 32 && element.type !== 'text' && element.type !== 'textarea' && element.type !== 'tel' && element.type !== 'number') { 771 event.preventDefault(); 772 event.stopPropagation(); 773 $(element).trigger(ajax.elementSettings.event); 774 } 775 }; 776 Drupal.Ajax.prototype.eventResponse = function (element, event) { 777 event.preventDefault(); 778 event.stopPropagation(); 779 var ajax = this; 780 if (ajax.ajaxing) { 781 return; 782 } 783 try { 784 if (ajax.$form) { 785 if (ajax.setClick) { 786 element.form.clk = element; 787 } 788 ajax.$form.ajaxSubmit(ajax.options); 789 } else { 790 ajax.beforeSerialize(ajax.element, ajax.options); 791 $.ajax(ajax.options); 792 } 793 } catch (e) { 794 ajax.ajaxing = false; 795 window.alert("An error occurred while attempting to process ".concat(ajax.options.url, ": ").concat(e.message)); 796 } 797 }; 798 Drupal.Ajax.prototype.beforeSerialize = function (element, options) { 799 if (this.$form && document.body.contains(this.$form.get(0))) { 800 var settings = this.settings || drupalSettings; 801 Drupal.detachBehaviors(this.$form.get(0), settings, 'serialize'); 802 } 803 options.data[Drupal.Ajax.AJAX_REQUEST_PARAMETER] = 1; 804 var pageState = drupalSettings.ajaxPageState; 805 options.data['ajax_page_state[theme]'] = pageState.theme; 806 options.data['ajax_page_state[theme_token]'] = pageState.theme_token; 807 options.data['ajax_page_state[libraries]'] = pageState.libraries; 808 }; 809 Drupal.Ajax.prototype.beforeSubmit = function (formValues, element, options) {}; 810 Drupal.Ajax.prototype.beforeSend = function (xmlhttprequest, options) { 811 if (this.$form) { 812 options.extraData = options.extraData || {}; 813 options.extraData.ajax_iframe_upload = '1'; 814 var v = $.fieldValue(this.element); 815 if (v !== null) { 816 options.extraData[this.element.name] = v; 817 } 818 } 819 $(this.element).prop('disabled', true); 820 if (!this.progress || !this.progress.type) { 821 return; 822 } 823 var progressIndicatorMethod = "setProgressIndicator".concat(this.progress.type.slice(0, 1).toUpperCase()).concat(this.progress.type.slice(1).toLowerCase()); 824 if (progressIndicatorMethod in this && typeof this[progressIndicatorMethod] === 'function') { 825 this[progressIndicatorMethod].call(this); 826 } 827 }; 828 Drupal.theme.ajaxProgressThrobber = function (message) { 829 var messageMarkup = typeof message === 'string' ? Drupal.theme('ajaxProgressMessage', message) : ''; 830 var throbber = '<div class="throbber"> </div>'; 831 return "<div class=\"ajax-progress ajax-progress-throbber\">".concat(throbber).concat(messageMarkup, "</div>"); 832 }; 833 Drupal.theme.ajaxProgressIndicatorFullscreen = function () { 834 return '<div class="ajax-progress ajax-progress-fullscreen"> </div>'; 835 }; 836 Drupal.theme.ajaxProgressMessage = function (message) { 837 return "<div class=\"message\">".concat(message, "</div>"); 838 }; 839 Drupal.theme.ajaxProgressBar = function ($element) { 840 return $('<div class="ajax-progress ajax-progress-bar"></div>').append($element); 841 }; 842 Drupal.Ajax.prototype.setProgressIndicatorBar = function () { 843 var progressBar = new Drupal.ProgressBar("ajax-progress-".concat(this.element.i
843d), $.noop, this.progress.method, $.noop); 844 if (this.progress.message) { 845 progressBar.setProgress(-1, this.progress.message); 846 } 847 if (this.progress.url) { 848 progressBar.startMonitoring(this.progress.url, this.progress.interval || 1500); 849 } 850 this.progress.element = $(Drupal.theme('ajaxProgressBar', progressBar.element)); 851 this.progress.object = progressBar; 852 $(this.element).after(this.progress.element); 853 }; 854 Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () { 855 this.progress.element = $(Drupal.theme('ajaxProgressThrobber', this.progress.message)); 856 $(this.element).after(this.progress.element); 857 }; 858 Drupal.Ajax.prototype.setProgressIndicatorFullscreen = function () { 859 this.progress.element = $(Drupal.theme('ajaxProgressIndicatorFullscreen')); 860 $('body').append(this.progress.element); 861 }; 862 Drupal.Ajax.prototype.commandExecutionQueue = function (response, status) { 863 var _this2 = this; 864 var ajaxCommands = this.commands; 865 return Object.keys(response || {}).reduce(function (executionQueue, key) { 866 return executionQueue.then(function () { 867 var command = response[key].command; 868 if (command && ajaxCommands[command]) { 869 return ajaxCommands[command](_this2, response[key], status); 870 } 871 }); 872 }, Promise.resolve()); 873 }; 874 Drupal.Ajax.prototype.success = function (response, status) { 875 var _this3 = this; 876 if (this.progress.element) { 877 $(this.progress.element).remove(); 878 } 879 if (this.progress.object) { 880 this.progress.object.stopMonitoring(); 881 } 882 $(this.element).prop('disabled', false); 883 var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray(); 884 var focusChanged = Object.keys(response || {}).some(function (key) { 885 var _response$key = response[key], 886 command = _response$key.command, 887 method = _response$key.method; 888 return command === 'focusFirst' || command === 'invoke' && method === 'focus'; 889 }); 890 return this.commandExecutionQueue(response, status).then(function () { 891 if (!focusChanged && _this3.element && !$(_this3.element).data('disable-refocus')) { 892 var target = false;
893 for (var n = elementParents.length - 1; !target && n >= 0; n--) { 894 target = document.querySelector("[data-drupal-selector=\"".concat(elementParents[n].getAttribute('data-drupal-selector'), "\"]")); 895 } 896 if (target) { 897 $(target).trigger('focus'); 898 } 899 } 900 if (_this3.$form && document.body.contains(_this3.$form.get(0))) { 901 var settings = _this3.settings || drupalSettings; 902 Drupal.attachBehaviors(_this3.$form.get(0), settings); 903 } 904 _this3.settings = null; 905 }).catch(function (error) { 906 return console.error(Drupal.t('An error occurred during the execution of the Ajax response: !error', { 907 '!error': error 908 })); 909 }); 910 }; 911 Drupal.Ajax.prototype.getEffect = function (response) { 912 var type = response.effect || this.effect; 913 var speed = response.speed || this.speed; 914 var effect = {}; 915 if (type === 'none') { 916 effect.showEffect = 'show'; 917 effect.hideEffect = 'hide'; 918 effect.showSpeed = ''; 919 } else if (type === 'fade') { 920 effect.showEffect = 'fadeIn'; 921 effect.hideEffect = 'fadeOut'; 922 effect.showSpeed = speed; 923 } else { 924 effect.showEffect = "".concat(type, "Toggle"); 925 effect.hideEffect = "".concat(type, "Toggle"); 926 effect.showSpeed = speed; 927 } 928 return effect; 929 }; 930 Drupal.Ajax.prototype.error = function (xmlhttprequest, uri, customMessage) { 931 if (this.progress.element) { 932 $(this.progress.element).remove(); 933 } 934 if (this.progress.object) { 935 this.progress.object.stopMonitoring(); 936 } 937 $(this.wrapper).show(); 938 $(this.element).prop('disabled', false); 939 if (this.$form && document.body.contains(this.$form.get(0))) { 940 var settings = this.settings || drupalSettings; 941 Drupal.attachBehaviors(this.$form.get(0), settings); 942 } 943 throw new Drupal.AjaxError(xmlhttprequest, uri, customMessage); 944 }; 945 Drupal.theme.ajaxWrapperNewContent = function ($newContent, ajax, response) { 946 return (response.effect || ajax.effect) !== 'none' && $newContent.filter(function (i) { 947 return !($newContent[i].nodeName === '#comment' || $newContent[i].nodeName === '#text' && /^(\s|\n|\r)*$/.test($newContent[i].textContent)); 948 }).length > 1 ? Drupal.theme('ajaxWrapperMultipleRootElements', $newContent) : $newContent; 949 }; 950 Drupal.theme.ajaxWrapperMultipleRootElements = function ($elements) { 951 return $('<div></div>').append($elements); 952 }; 953 Drupal.AjaxCommands = function () {}; 954 Drupal.AjaxCommands.prototype = { 955 insert: function insert(ajax, response) { 956 var $wrapper = response.selector ? $(response.selector) : $(ajax.wrapper); 957 var method = response.method || ajax.method; 958 var effect = ajax.getEffect(response); 959 var settings = response.settings || ajax.settings || drupalSettings; 960 var $newContent = $($.parseHTML(response.data, document, true)); 961 $newContent = Drupal.theme('ajaxWrapperNewContent', $newContent, ajax, response); 962 switch (method) { 963 case 'html': 964 case 'replaceWith': 965 case 'replaceAll': 966 case 'empty': 967 case 'remove': 968 Drupal.detachBehaviors($wrapper.get(0), settings); 969 break; 970 default: 971 break; 972 } 973 $wrapper[method]($newContent); 974 if (effect.showEffect !== 'show') { 975 $newContent.hide(); 976 } 977 var $ajaxNewContent = $newContent.find('.ajax-new-content'); 978 if ($ajaxNewContent.length) { 979 $ajaxNewContent.hide(); 980 $newContent.show(); 981 $ajaxNewContent[effect.showEffect](effect.showSpeed); 982 } else if (effect.showEffect !== 'show') { 983 $newContent[effect.showEffect](effect.showSpeed); 984 } 985 if ($newContent.parents('html').length) { 986 $newContent.each(function (index, element) { 987 if (element.nodeType === Node.ELEMENT_NODE) { 988 Drupal.attachBehaviors(element, settings); 989 } 990 }); 991 } 992 }, 993 remove: function remove(ajax, response, status) { 994 var settings = response.settings || ajax.settings || drupalSettings; 995 $(response.selector).each(function () { 996 Drupal.detachBehaviors(this, settings); 997 }).remove(); 998 }, 999 changed: function changed(ajax, response, status) { 1000 var $element = $(response.selector); 1001 if (!$element.hasClass('ajax-changed')) { 1002 $element.addClass('ajax-changed'); 1003 if (response.asterisk) { 1004 $element.find(response.asterisk).append(" <abbr class=\"ajax-changed\" title=\"".concat(Drupal.t('Changed'), "\">*</abbr> ")); 1005 } 1006 } 1007 }, 1008 alert: function alert(ajax, response, status) { 1009 window.alert(response.text); 1010 }, 1011 announce: function announce(ajax, response) { 1012 if (response.priority) { 1013 Drupal.announce(response.text, response.priority); 1014 } else { 1015 Drupal.announce(response.text); 1016 } 1017 }, 1018 redirect: function redirect(ajax, response, status) { 1019 window.location = response.url; 1020 }, 1021 css: function css(ajax, response, status) { 1022 $(response.selector).css(response.argument); 1023 }, 1024 settings: function settings(ajax, response, status) { 1025 var ajaxSettings = drupalSettings.ajax; 1026 if (ajaxSettings) {
1027 Drupal.ajax.expired().forEach(function (instance) { 1028 if (instance.selector) { 1029 var selector = instance.selector.replace('#', ''); 1030 if (selector in ajaxSettings) { 1031 delete ajaxSettings[selector]; 1032 } 1033 } 1034 }); 1035 } 1036 if (response.merge) { 1037 $.extend(true, drupalSettings, response.settings); 1038 } else { 1039 ajax.settings = response.settings; 1040 } 1041 }, 1042 data: function data(ajax, response, status) { 1043 $(response.selector).data(response.name, response.value); 1044 }, 1045 focusFirst: function focusFirst(ajax, response, status) { 1046 var focusChanged = false; 1047 var container = document.querySelector(response.selector); 1048 if (container) { 1049 var tabbableElements = tabbable(container); 1050 if (tabbableElements.length) { 1051 tabbableElements[0].focus(); 1052 focusChanged = true; 1053 } else if (isFocusable(container)) { 1054 container.focus(); 1055 focusChanged = true; 1056 } 1057 } 1058 if (ajax.hasOwnProperty('element') && !focusChanged) { 1059 ajax.element.focus(); 1060 } 1061 }, 1062 invoke: function invoke(ajax, response, status) { 1063 var $element = $(response.selector); 1064 $element[response.method].apply($element, _toConsumableArray(response.args)); 1065 }, 1066 restripe: function restripe(ajax, response, status) { 1067 $(response.selector).find('> tbody > tr:visible, > tr:visible').removeClass('odd even').filter(':even').addClass('odd').end().filter(':odd').addClass('even'); 1068 }, 1069 update_build_id: function update_build_id(ajax, response, status) { 1070 document.querySelectorAll("input[name=\"form_build_id\"][value=\"".concat(response.old, "\"]")).forEach(function (item) { 1071 item.value = response.new; 1072 }); 1073 }, 1074 add_css: function add_css(ajax, response, status) { 1075 $('head').prepend(response.data); 1076 }, 1077 message: function message(ajax, response) { 1078 var messages = new Drupal.Message(document.querySelector(response.messageWrapperQuerySelector)); 1079 if (response.clearPrevious) { 1080 messages.clear(); 1081 } 1082 messages.add(response.message, response.messageOptions); 1083 }, 1084 add_js: function add_js(ajax, response, status) { 1085 var parentEl = document.querySelector(response.selector || 'body'); 1086 var settings = ajax.settings || drupalSettings; 1087 var allUniqueBundleIds = response.data.map(function (script) { 1088 var uniqueBundleId = script.src + ajax.instanceIndex; 1089 loadjs(script.src, uniqueBundleId, { 1090 async: false, 1091 before: function before(path, scriptEl) { 1092 Object.keys(script).forEach(function (attributeKey) { 1093 scriptEl.setAttribute(attributeKey, script[attributeKey]); 1094 }); 1095 parentEl.appendChild(scriptEl); 1096 return false; 1097 } 1098 }); 1099 return uniqueBundleId; 1100 }); 1101 return new Promise(function (resolve, reject) { 1102 loadjs.ready(allUniqueBundleIds, { 1103 success: function success() { 1104 Drupal.attachBehaviors(parentEl, settings); 1105 resolve(); 1106 }, 1107 error: function error(depsNotFound) { 1108 var message = Drupal.t("The following files could not be loaded: @dependencies", { 1109 '@dependencies': depsNotFound.join(', ') 1110 }); 1111 reject(message); 1112 } 1113 }); 1114 }); 1115 } 1116 }; 1117 var stopEvent = function stopEvent(xhr, settings) { 1118 return xhr.getResponseHeader('X-Drupal-Ajax-Token') === '1' && settings.isInProgress && settings.isInProgress(); 1119 }; 1120 $.extend(true, $.event.special, { 1121 ajaxSuccess: { 1122 trigger: function trigger(event, xhr, settings) { 1123 if (stopEvent(xhr, settings)) { 1124 return false; 1125 } 1126 } 1127 }, 1128 ajaxComplete: { 1129 trigger: function trigger(event, xhr, settings) { 1130 if (stopEvent(xhr, settings)) { 1131 $.active++; 1132 return false; 1133 } 1134 } 1135 } 1136 }); 1137})(jQuery, window, Drupal, drupalSettings, loadjs, window.tabbable);; 1138/** 1139* DO NOT EDIT THIS FILE. 1140* See the following change record for more information, 1141* https://www.drupal.org/node/2815083 1142* @preserve 1143**/ 1144(function (Drupal) { 1145 Drupal.theme.ajaxProgressBar = function ($element) { 1146 return $element.addClass('ajax-progress ajax-progress-bar'); 1147 }; 1148})(Drupal);; 1149!function(e,i,o,l){"use strict";var a=void 0,n=void 0,t="ultimenu",s="is-"+t,r=s+"-canvas",c=r+"--active",u=r+"--hiding",d=s+"-expanded",f=s+"-item-expanded",m=s+"-active",v="data-ultiajax-hit",h="hidden",C="is-flyout-expanded",y=t+"__link",g="."+t+"__ajax",p="data-ultiajax-trigger",b=r+"-off",S=r+"-on",$=r+"-backdrop",q="[data-"+t+"-button]",k=l.body;e.ultimenu={documentWidth:0,$backdrop:null,$hamburger:null,$offCanvas:null,context:function(e){return(e="length"in(e=e||document)?e[0]:e)instanceof HTMLDocument?e:document},once:function(e){var t,s=!1;return function(){return s||(s=!0,t=e.apply(this,arguments),e=null),t}},isBlazy:"dBlazy"in window,forEach:function(e,t,s){return this.isBlazy?window.dBlazy.forEac
1149h(e,t,s):e.forEach(t)},closest:function(e,t){return this.isBlazy?window.dBlazy.closest(e,t):e.closest(t)},addRemoveClass:function(t,e,s){var a=s.split(" ");e&&(e.length?this.forEach(e,function(e){e.classList[t].apply(e.classList,a)}):e.classList&&e.classList[t].apply(e.classList,a))},addClass:function(e,t){this.addRemoveClass("add",e,t)},removeClass:function(e,t){this.addRemoveClass("remove",e,t)},toggleClass:function(e,t){e&&e.classList.toggle(t)},slideToggle:function(e,t){e&&this[0===e.clientHeight?"addClass":"removeClass"](e,t)},doResizeMain:function(){function e(){t.removeClass(k,d+" "+c),t.closeFlyout()}var t=this,s=o.innerWidth||l.body.clientWidth;t.isHidden(l.querySelector(q))?e():t.addClass(k,c),s===t.documentWidth&&(t.isHidden(l.querySelector(q))?e():s!==t.documentWidth&&(t.addClass(k,d),t.isHidden(l.querySelector(q))||t.addClass(k,c)),t.documentWidth=s)},executeAjax:function(e){function t(){e.removeAttribute(p)}var s=this,a=s.closest(e,"li"),i=a.querySelector(g);i?(i.hasAttribute(v)||(i.click(),i.setAttribute(v,1),s.addClass(i,h)),o.clearTimeout(n),n=o.setTimeout(function(){(i=a.querySelector(g))?(s.removeClass(i,h),i.click()):t()},1500)):t()},triggerAjax:function(e){e.stopPropagation();e=e.target.classList.contains("caret")?this.closest(e.target,"."+y):e.target;e.hasAttribute(p)&&this.executeAjax(e)},triggerClickHamburger:function(e){e.preventDefault(),this.$hamburger&&this.$hamburger.click()},doClickHamburger:function(e){var t=this;e.preventDefault(),e.stopPropagation();var s=e.target,e=k.classList.contains(d);t[e?"removeClass":"addClass"](k,d),t[e?"removeClass":"addClass"](s,"is-ultimenu-button-active"),t.closeFlyout(),e||(o.clearTimeout(a),t.addClass(k,u),a=o.setTimeout(function(){t.removeClass(k,u)},400)),t.$backdrop&&o.scroll({top:t.$backdrop.offsetTop,behavior:"smooth"})},closeFlyout:function(){var e=l.querySelectorAll("."+m),t=l.querySelectorAll("."+f),s=l.querySelectorAll("."+C);this.removeClass(e,m),this.removeClass(t,f),this.removeClass(s,C)},isHidden:function(e){var t=!!e&&o.getComputedStyle(e);return e&&("none"===t.display||"invisible"===t.visibility)},doClickCaret:function(e){var t=this;e.preventDefault(),e.stopPropagation();var s=e.target,a=t.closest(s,"."+y),i=t.closest(a,"li"),e=a.nextElementSibling;t.isHidden(t.$hamburger)&&t.closeFlyout(),e&&e.classList.contains("ultimenu__flyout")&&(t[(s=0===e.clientHeight)?"addClass":"removeClass"](i,f),t[s?"addClass":"removeClass"](a,m),t.slideToggle(e,C))},onResize:function(e,t){return o.onresize=function(){o.clearTimeout(t),t=o.setTimeout(e,200)},e},prepare:function(){var e,t=this,s=i.ultimenu||{},a='[data-ultimenu-button="#ultimenu-main"]';k=l.body,t.$offCanvas=l.querySelector("."+b),t.$hamburger=l.querySelector(q),t.$backdrop=l.querySelector("."+$),s&&s.canvasOff&&s.canvasOn&&(null===t.$offCanvas&&(t.$offCanvas=l.querySelector(s.canvasOff),t.addClass(t.$offCanvas,b)),null===l.querySelector("."+S)&&(s=l.querySelectorAll(s.canvasOn),t.addClass(s,S))),null!==l.querySelector("body > "+a)||(e=l.querySelector(a))&&l.body.appendChild(e),null===t.$backdrop&&t.$offCanvas&&(a=t.$offCanvas.parentNode,(e=l.createElement("div")).className=$,a.insertBefore(e,a.firstElementChild||null),t.$backdrop=l.querySelector("."+$))}}}(Drupal,drupalSettings,this,this.document); 1150;
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.