1AppRegistry.registerBundle({applicationId:'limepark.webapp-overlay-button|2.1.1',bundle: {"en":{},"sv":{}}}); 2AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/module/client/focus-trap',module:function(define){'use strict';function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 3function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 4function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 5function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } 6function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 7define(function (require) { 8 /* eslint-disable curly, no-useless-return */ 9 var tabbable = require("/module/client/tabbable"); 10 var activeFocusDelay; 11 var activeFocusTraps = function () { 12 var trapQueue = []; 13 return { 14 activateTrap: function activateTrap(trap) { 15 if (trapQueue.length > 0) { 16 var activeTrap = trapQueue[trapQueue.length - 1]; 17 if (activeTrap !== trap) { 18 activeTrap.pause(); 19 } 20 } 21 var trapIndex = trapQueue.indexOf(trap); 22 if (trapIndex === -1) { 23 trapQueue.push(trap); 24 } else { 25 // move this existing trap to the front of the queue 26 trapQueue.splice(trapIndex, 1); 27 trapQueue.push(trap); 28 } 29 }, 30 deactivateTrap: function deactivateTrap(trap) { 31 var trapIndex = trapQueue.indexOf(trap); 32 if (trapIndex !== -1) { 33 trapQueue.splice(trapIndex, 1); 34 } 35 if (trapQueue.length > 0) { 36 trapQueue[trapQueue.length - 1].unpause(); 37 } 38 } 39 }; 40 }(); 41 function focusTrap(element, userOptions) { 42 var doc = document; 43 var container = typeof element === 'string' ? doc.querySelector(element) : element; 44 var config = _objectSpread({ 45 returnFocusOnDeactivate: true, 46 escapeDeactivates: true 47 }, userOptions); 48 var state = { 49 firstTabbableNode: null, 50 lastTabbableNode: null, 51 nodeFocusedBeforeActivation: null, 52 mostRecentlyFocusedNode: null, 53 active: false, 54 paused: false 55 }; 56 var trap = { 57 activate: activate, 58 deactivate: deactivate, 59 pause: pause, 60 unpause: unpause 61 }; 62 return trap; 63 function activate(activateOptions) { 64 if (state.active) return; 65 updateTabbableNodes(); 66 state.active = true; 67 state.paused = false; 68 state.nodeFocusedBeforeActivation = activateOptions.activeElement || doc.activeElement; 69 var onActivate = activateOptions && activateOptions.onActivate ? activateOptions.onActivate : config.onActivate; 70 if (onActivate) { 71 onActivate(); 72 } 73 addListeners(); 74 return trap; 75 } 76 function deactivate(deactivateOptions) { 77 if (!state.active) return; 78 clearTimeout(activeFocusDelay); 79 removeListeners(); 80 state.active = false;
vendor: 4,535 bytes, lines 81-209
81 state.paused = false; 82 activeFocusTraps.deactivateTrap(trap); 83 var onDeactivate = deactivateOptions && deactivateOptions.onDeactivate !== undefined ? deactivateOptions.onDeactivate : config.onDeactivate; 84 if (onDeactivate) { 85 onDeactivate(); 86 } 87 var returnFocus = deactivateOptions && deactivateOptions.returnFocus !== undefined ? deactivateOptions.returnFocus : config.returnFocusOnDeactivate; 88 if (returnFocus) { 89 delay(function () { 90 tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)); 91 }); 92 } 93 return trap; 94 } 95 function pause() { 96 if (state.paused || !state.active) return; 97 state.paused = true; 98 removeListeners(); 99 } 100 function unpause() { 101 if (!state.paused || !state.active) return; 102 state.paused = false; 103 updateTabbableNodes(); 104 addListeners(); 105 } 106 function addListeners() { 107 if (!state.active) return; 108 109 // There can be only one listening focus trap at a time 110 activeFocusTraps.activateTrap(trap); 111 112 // Delay ensures that the focused element doesn't capture the event 113 // that caused the focus trap activation. 114 activeFocusDelay = delay(function () { 115 tryFocus(getInitialFocusNode()); 116 }); 117 doc.addEventListener('focusin', checkFocusIn, true); 118 doc.addEventListener('mousedown', checkPointerDown, { 119 capture: true, 120 passive: false 121 }); 122 doc.addEventListener('touchstart', checkPointerDown, { 123 capture: true, 124 passive: false 125 }); 126 doc.addEventListener('click', checkClick, { 127 capture: true, 128 passive: false 129 }); 130 doc.addEventListener('keydown', checkKey, { 131 capture: true, 132 passive: false 133 }); 134 return trap; 135 } 136 function removeListeners() { 137 if (!state.active) return; 138 doc.removeEventListener('focusin', checkFocusIn, true); 139 doc.removeEventListener('mousedown', checkPointerDown, true); 140 doc.removeEventListener('touchstart', checkPointerDown, true); 141 doc.removeEventListener('click', checkClick, true); 142 doc.removeEventListener('keydown', checkKey, true); 143 return trap; 144 } 145 function getNodeForOption(optionName) { 146 var optionValue = config[optionName]; 147 var node = optionValue; 148 if (!optionValue) { 149 return null; 150 } 151 if (typeof optionValue === 'string') { 152 node = doc.querySelector(optionValue); 153 if (!node) { 154 throw new Error('`' + optionName + '` refers to no known node'); 155 } 156 } 157 if (typeof optionValue === 'function') { 158 node = optionValue(); 159 if (!node) { 160 throw new Error('`' + optionName + '` did not return a node'); 161 } 162 } 163 return node; 164 } 165 function getInitialFocusNode() { 166 var node; 167 if (getNodeForOption('initialFocus') !== null) { 168 node = getNodeForOption('initialFocus'); 169 } else if (container.contains(doc.activeElement)) { 170 node = doc.activeElement; 171 } else { 172 node = state.firstTabbableNode || getNodeForOption('fallbackFocus'); 173 } 174 if (!node) { 175 throw new Error('Your focus-trap needs to have at least one focusable element'); 176 } 177 return node; 178 } 179 function getReturnFocusNode(previousActiveElement) { 180 var node = getNodeForOption('setReturnFocus'); 181 return node ? node : previousActiveElement; 182 } 183 184 // This needs to be done on mousedown and touchstart instead of click 185 // so that it precedes the focus event. 186 function checkPointerDown(e) { 187 if (container.contains(e.target)) return; 188 if (config.clickOutsideDeactivates) { 189 deactivate({ 190 returnFocus: !tabbable.isFocusable(e.target) 191 }); 192 return; 193 } 194 // This is needed for mobile devices. 195 // (If we'll only let `click` events through, 196 // then on mobile they will be blocked anyways if `touchstart` is blocked.) 197 if (config.allowOutsideClick && (typeof config.allowOutsideClick === 'boolean' ? config.allowOutsideClick : config.allowOutsideClick(e))) { 198 return; 199 } 200 e.preventDefault(); 201 } 202 203 // In case focus escapes the trap for some strange reason, pull it back in. 204 function checkFocusIn(e) { 205 // In Firefox when you Tab out of an iframe the Document is briefly focused. 206 if (container.contains(e.target) || e.target instanceof Document) { 207 return; 208 } 209 e.stopImmediatePropagation();
210 tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode()); 211 } 212 function checkKey(e) { 213 if (config.escapeDeactivates !== false && isEscapeEvent(e)) { 214 e.preventDefault(); 215 deactivate(); 216 return; 217 } 218 if (isTabEvent(e)) { 219 checkTab(e); 220 return; 221 } 222 } 223 224 // Hijack Tab events on the first and last focusable nodes of the trap, 225 // in order to prevent focus from escaping. If it escapes for even a 226 // moment it can end up scrolling the page and causing confusion so we 227 // kind of need to capture the action at the keydown phase. 228 function checkTab(e) { 229 updateTabbableNodes(); 230 if (e.shiftKey && e.target === state.firstTabbableNode) { 231 e.preventDefault(); 232 tryFocus(state.lastTabbableNode); 233 return; 234 } 235 if (!e.shiftKey && e.target === state.lastTabbableNode) { 236 e.preventDefault(); 237 tryFocus(state.firstTabbableNode); 238 return; 239 } 240 } 241 function checkClick(e) { 242 if (config.clickOutsideDeactivates) return; 243 if (container.contains(e.target)) return; 244 if (config.allowOutsideClick && (typeof config.allowOutsideClick === 'boolean' ? config.allowOutsideClick : config.allowOutsideClick(e))) { 245 return; 246 } 247 e.preventDefault(); 248 e.stopImmediatePropagation(); 249 } 250 function updateTabbableNodes() { 251 var tabbableNodes = tabbable.tabbable(container); 252 state.firstTabbableNode = tabbableNodes[0] || getInitialFocusNode(); 253 state.lastTabbableNode = tabbableNodes[tabbableNodes.length - 1] || getInitialFocusNode(); 254 } 255 function tryFocus(node) { 256 if (node === doc.activeElement) return; 257 if (!node || !node.focus) { 258 tryFocus(getInitialFocusNode()); 259 return; 260 } 261 node.focus({ 262 preventScroll: !!config.preventScroll 263 }); 264 state.mostRecentlyFocusedNode = node; 265 if (isSelectableInput(node)) { 266 node.select(); 267 } 268 } 269 } 270 function isSelectableInput(node) { 271 return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function'; 272 } 273 function isEscapeEvent(e) { 274 return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27; 275 } 276 function isTabEvent(e) { 277 return e.key === 'Tab' || e.keyCode === 9; 278 } 279 function delay(fn) { 280 return setTimeout(fn, 0); 281 } 282 return { 283 create: focusTrap 284 }; 285});}}); 286AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/module/common/domid-util',module:function(define){'use strict';function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 287function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 288function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 289function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } 290function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 291define(function (require) {
292 var isClient = typeof window !== 'undefined'; 293 var __req__ = require; 294 var escapeIdentifier = function escapeIdentifier(prefix, identifier) { 295 return prefix + identifier.replace('.', '_'); 296 }; 297 var portletId = function () { 298 if (isClient) { 299 return require('router').portletId; 300 } else { 301 return __req__('PortletContextUtil').getCurrentPortlet().getIdentifier(); 302 } 303 }(); 304 var portletDomId = escapeIdentifier('svid', portletId); 305 var properties = {}; 306 var addProperty = function addProperty(name, value) { 307 var type = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'ID'; 308 properties[name] = value; 309 properties[name + 'Selector'] = type === 'ID' ? '#' + value : '.' + value; 310 }; 311 addProperty('pageHidden', "lp-overlay-page--hidden-".concat(portletDomId), 'CLASS'); 312 addProperty('page', "lp-overlay-page-".concat(portletDomId), 'CLASS'); 313 addProperty('containerVisible', "".concat(portletDomId, "-container--visible"), 'CLASS'); 314 addProperty('button', portletDomId); 315 addProperty('container', portletDomId + '-container'); 316 addProperty('backdrop', portletDomId + '-backdrop'); 317 return _objectSpread({}, properties); 318});}}); 319AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/module/client/@limepark/event-api_3.0.2/EventApi',module:function(define){'use strict';define(function(require) { 320 var exports = {}; 321 var module = { 322 exports: exports 323 }; 324 325 var _class; 326function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 327function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } } 328function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 329function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 330function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } 331function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 332var DEFAULT_EVENT_PREFIX = 'lp-client-event'; 333var TARGET_ALL = 'LP_CLIENT_EVENT_TARGET_ALL'; 334 335/** 336 * @class EventApi 337 */ 338module.exports = (_class = /*#__PURE__*/function () { 339 /** 340 * Constructor 341 * 342 * @param {Object} opts An object with options 343 * @param {String} [opts.appIdentifier=''] The current app identifier from the manifest. 344 * @param {String} [opts.portletId=''] The current portlet's identifier. 345 */ 346 function EventApi() { 347 var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 348 _classCallCheck(this, EventApi); 349 this.appIdentifier = (opts === null || opts === void 0 ? void 0 : opts.appIdentifier) || ''; 350 this.portletIdentifier = (opts === null || opts === void 0 ? void 0 : opts.portletId) || ''; 351 this.eventPrefix = DEFAULT_EVENT_PREFIX; 352 } 353 354 /** 355 * Internal method for building an array with identifiers for this instance. 356 * 357 * @param {String[]} identifiers 358 * @private 359 * @returns String[] 360 */ 361 _createClass(EventApi, [{ 362 key: "prepareIdentifiers", 363 value: function prepareIdentifiers(identifiers) { 364 identifiers = Array.isArray(identifiers) ? identifiers : [identifiers]; 365 identifiers.push(TARGET_ALL); 366 if (this.appIdentifier && identifiers.indexOf(this.appIdentifier) === -1) { 367 identifiers.push(this.appIdentifier); 368 } 369 if (this.portletIdentifier && identifiers.indexOf(this.portletIdentifier) === -1) { 370 identifiers.push(this.portletIdentifier); 371 } 372 return identifiers.filter(function (ident) { 373 return String(ident || '').trim(); 374 }); 375 } 376 377 /** 378 * Namespaces an event with a prefix. 379 * 380 * @param {string} key Event name to be namespaced. 381 * @returns {string} Namespaced event. 382 */ 383 }, { 384 key: "createEventName", 385 value: function createEventName(key) { 386 return "".concat(this.eventPrefix, ":").concat(key); 387 } 388 389 /** 390 * Registers events on the document and returns a function for deregistering the same events. 391 * 392 * @param {Object} events An object with events where the keys are the event names. 393 * @param {string[]} identifiers An array of identifiers for the app where the events are registered. 394 * @returns {Function} 395 */ 396 }, { 397 key: "registerEvents", 398 value: function registerEvents() { 399 var _this = this; 400 var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 401 var identifiers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 402 identifiers = this.prepareIdentifiers(identifiers); 403 var listeners = []; 404 var _loop = function _loop(key) { 405 var eventName = _this.createEventName(key); 406 var listener = function listener(e) { 407 if (e.detail.identifier && identifiers.includes(e.detail.identifier)) { 408 events[key].call(null, e.detail.args, { 409 sender: e.detail.sender, 410 fromSelf: e.detail.sender && e.detail.sender === _this.portletIdentifier 411 }); 412 } 413 }; 414 document.addEventListener(eventName, listener); 415 listeners.push({ 416 eventName: eventName, 417 listener: listener 418 }); 419 }; 420 for (var _i = 0, _Object$keys = Object.keys(events); _i < _Object$keys.length; _i++) { 421 var key = _Object$keys[_i]; 422 _loop(key); 423 } 424 return function () {
425 listeners.forEach(function (_ref) { 426 var eventName = _ref.eventName, 427 listener = _ref.listener; 428 return document.removeEventListener(eventName, listener); 429 }); 430 }; 431 } 432 433 /** 434 * Trigger an event 435 * 436 * @param {String} identifier An identifier for the event apis to talk to. 437 * @param {String} name The name of the event to be triggered. 438 * @param {Object} args The arguments which the registered event will get. 439 */ 440 }, { 441 key: "triggerEvent", 442 value: function triggerEvent(identifier, name) { 443 var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 444 document.dispatchEvent(new CustomEvent(this.createEventName(name), { 445 detail: { 446 identifier: identifier, 447 args: args, 448 sender: this.portletIdentifier 449 } 450 })); 451 } 452 }]); 453 return EventApi; 454}(), _defineProperty(_class, "TARGET_ALL", TARGET_ALL), _class);; 455 456 return module.exports; 457 });}}); 458AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/module/client/@limepark/event-api_3.0.2/cjs',module:function(define){'use strict';define(function (require) { 459 var app = require('app'); 460 var EventApi = require("/module/client/@limepark/event-api_3.0.2/EventApi"); 461 462 // Default instance. 463 var api = new EventApi({ 464 appIdentifier: app.webAppId, 465 portletId: app.portletId 466 }); 467 468 /** 469 * 470 * @param {string} identifier Identifier for the app to be triggered. 471 * @param {string} name Name of the event. 472 * @param {Object} args Arguments which should be passed to the event. 473 * @returns {Void} 474 */ 475 function triggerEvent(identifier, name) { 476 var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 477 return api.triggerEvent(identifier, name, args); 478 } 479 480 /** 481 * Creates events which can be used to communicate with the app. 482 * 483 * @param {Object} events An object with events where the keys are the event names. 484 * @param {string[]} identifiers An array of identifiers for the app where the events are registered. 485 * @returns {Function} Returns a function for deregistering the created events. Useful when registering in React.useEffect(). 486 * @example 487 * // CJS example for old webapps. 488 * define((require) => { 489 * const eventApi = require('@limepark/event-api/cjs'); 490 * 491 * // ... 492 * 493 * return Component.extend({ 494 * onAttached() { 495 * this._removeEventsCallback = eventApi.createEventApi({ 496 * setName ({ name }) { 497 * // ... 498 * } 499 * }); 500 * } 501 * }); 502 * }); 503 */ 504 function createEventApi() { 505 var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 506 var identifiers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; 507 return api.registerEvents(events, identifiers); 508 } 509 return { 510 EventApi: EventApi, 511 triggerEvent: triggerEvent, 512 createEventApi: createEventApi 513 }; 514});}}); 515AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/template/main',module:function(define){define(function(require){var _=require('underscore');return function(obj){ 516var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');}; 517with(obj||{}){ 518__p+='<button class="lp-overlay-button '+ 519((__t=(buttonClasses))==null?'':_.escape(__t))+ 520'">'+ 521((__t=(buttonText))==null?'':__t)+ 522'</button>'; 523} 524return __p; 525};});}}); 526AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/template/overlay',module:function(define){define(function(require){var _=require('underscore');return function(obj){ 527var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');}; 528with(obj||{}){ 529__p+='<div aria-label="'+ 530((__t=(dialogLabel))==null?'':_.escape(__t))+ 531'" class="lp-overlay__container '+ 532((__t=(containerClasses))==null?'':_.escape(__t))+ 533'" role="dialog" aria-hidden="true">\n <div class="lp-overlay__inner">\n <div class="lp-overlay__header">\n '; 534 if (titleText || titleText !== '') { 535__p+='\n <h2 class="lp-overlay__title">'+ 536((__t=(titleText))==null?'':__t)+ 537'</h2>\n '; 538 } 539__p+='\n <button class="lp-overlay__close-button" data-action-close-overlay>'+ 540((__t=(closeButtonText))==null?'':__t)+ 541'</button>\n </div>\n <div class="lp-overlay__content"></div>\n </div>\n</div>'; 542} 543return __p; 544};});}}); 545AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/module/client/tabbable',module:function(define){'use strict';define(function (require) { 546 /** 547 * Source: https://github.com/focus-trap/tabbable 548 */ 549 var candidateSelectors = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable="false"])', 'details>summary']; 550 var candidateSelector = /* #__PURE__ */candidateSelectors.join(','); 551 var matches = typeof Element === 'undefined' ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; 552 function tabbable(el, options) { 553 options = options || {}; 554 var regularTabbables = []; 555 var orderedTabbables = []; 556 var candidates = el.querySelectorAll(candidateSelector); 557 if (options.includeContainer) { 558 if (matches.call(el, candidateSelector)) { 559 candidates = Array.prototype.slice.apply(candidates); 560 candidates.unshift(el); 561 } 562 } 563 var candidate; 564 var candidateTabindex; 565 for (var i = 0; i < candidates.length; i++) { 566 candidate = candidates[i]; 567 if (!isNodeMatchingSelectorTabbable(candidate)) { 568 continue; 569 } 570 candidateTabindex = getTabindex(candidate); 571 if (candidateTabindex === 0) { 572 regularTabbables.push(candidate); 573 } else { 574 orderedTabbables.push({ 575 documentOrder: i, 576 tabIndex: candidateTabindex, 577 node: candidate 578 }); 579 } 580 } 581 var tabbableNodes = orderedTabbables.sort(sortOrderedTabbables).map(function (a) { 582 return a.node; 583 }).concat(regularTabbables); 584 return tabbableNodes; 585 } 586 function isNodeMatchingSelectorTabbable(node) { 587 if (!isNodeMatchingSelectorFocusable(node) || isNonTabbableRadio(node) || getTabindex(node) < 0) { 588 return false;
589 } 590 return true; 591 } 592 function isTabbable(node) { 593 if (!node) { 594 throw new Error('No node provided'); 595 } 596 if (matches.call(node, candidateSelector) === false) { 597 return false; 598 } 599 return isNodeMatchingSelectorTabbable(node); 600 } 601 function isNodeMatchingSelectorFocusable(node) { 602 if (node.disabled || isHiddenInput(node) || isHidden(node)) { 603 return false; 604 } 605 return true; 606 } 607 var focusableCandidateSelector = candidateSelectors.concat('iframe').join(','); 608 function isFocusable(node) { 609 if (!node) { 610 throw new Error('No node provided'); 611 } 612 if (matches.call(node, focusableCandidateSelector) === false) { 613 return false; 614 } 615 return isNodeMatchingSelectorFocusable(node); 616 } 617 function getTabindex(node) { 618 var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10); 619 if (!isNaN(tabindexAttr)) { 620 return tabindexAttr; 621 } 622 623 // Browsers do not return `tabIndex` correctly for contentEditable nodes; 624 // so if they don't have a tabindex attribute specifically set, assume it's 0. 625 if (isContentEditable(node)) { 626 return 0; 627 } 628 629 // in Chrome, <audio controls/> and <video controls/> elements get a default 630 // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM, 631 // yet they are still part of the regular tab order; in FF, they get a default 632 // `tabIndex` of 0; since Chrome still puts those elements in the regular tab 633 // order, consider their tab index to be 0 634 if ((node.nodeName === 'AUDIO' || node.nodeName === 'VIDEO') && node.getAttribute('tabindex') === null) { 635 return 0; 636 } 637 return node.tabIndex; 638 } 639 function sortOrderedTabbables(a, b) { 640 return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex; 641 } 642 function isContentEditable(node) { 643 return node.contentEditable === 'true'; 644 } 645 function isInput(node) { 646 return node.tagName === 'INPUT'; 647 } 648 function isHiddenInput(node) { 649 return isInput(node) && node.type === 'hidden'; 650 } 651 function isRadio(node) { 652 return isInput(node) && node.type === 'radio'; 653 } 654 function isNonTabbableRadio(node) { 655 return isRadio(node) && !isTabbableRadio(node); 656 } 657 function getCheckedRadio(nodes, form) { 658 for (var i = 0; i < nodes.length; i++) { 659 if (nodes[i].checked && nodes[i].form === form) { 660 return nodes[i]; 661 } 662 } 663 } 664 function isTabbableRadio(node) { 665 if (!node.name) { 666 return true; 667 } 668 var radioScope = node.form || node.ownerDocument; 669 var radioSet = radioScope.querySelectorAll('input[type="radio"][name="' + node.name + '"]'); 670 var checked = getCheckedRadio(radioSet, node.form); 671 return !checked || checked === node; 672 } 673 function isHidden(node) { 674 // offsetParent being null will allow detecting cases where an element is invisible or inside an invisible element, 675 // as long as the element does not use position: fixed. For them, their visibility has to be checked directly as well. 676 return node.offsetParent === null || getComputedStyle(node).visibility === 'hidden'; 677 } 678 return { 679 tabbable: tabbable, 680 isTabbable: isTabbable, 681 isFocusable: isFocusable 682 }; 683});}}); 684AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/module/common/@limepark/wdu-log_1.0.2/index',module:function(define){'use strict';/** 685 * Logger for use with the webapp dev utils `log` command. 686 * 687 * @module common/wdu-log 688 * @example 689 * const WDULog = require('!limepark:common/wdu-log'); 690 * const log = WDULog.getLogger(__filename); 691 * 692 * function doSomeWork(data) { 693 * log.debug('Trying to calculate data from', data); 694 * var result = calculateData(data); 695 * if (!data) { 696 * log.warn('Unable to calculate result from specified data.'); 697 * return null; 698 * } 699 * 700 * log.debug('Generated result', result); 701 * 702 * // 703 * //... 704 * } 705 */ 706/* globals require, module */ 707(function (root, factory) { 708 if (typeof define === 'function') { 709 // AMD. Register as an anonymous module. 710 define(factory); 711 } else if (typeof module === 'object' && module.exports) { 712 // Node. Does not work with strict CommonJS, but 713 // only CommonJS-like environments that support module.exports, 714 // like Node. 715 module.exports = factory(require); 716 } else { 717 // Browser globals (root is window) 718 root.wduLog = factory(); 719 } 720})(typeof self !== 'undefined' ? self : this, function (require) { 721 var _dereq_ = require; 722 var isBrowser = typeof window !== 'undefined'; 723 var logUtil = isBrowser ? console : _dereq_('LogUtil'); 724 if (isBrowser) { 725 logUtil.debug = logUtil.log; 726 } 727 var buildLogMessage = function buildLogMessage(logTag, message) { 728 var data = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; 729 var messages = ["WDU[M#".concat("limepark.webapp-overlay-button", "/").concat(logTag, "]: ").concat(message)]; 730 if (data) { 731 messages.push("WDU[D#".concat("limepark.webapp-overlay-button", "/").concat(logTag, "]: ").concat(JSON.stringify(data))); 732 } 733 return messages; 734 }; 735 736 /** 737 * Creates a new Logger with a logTag 738 * 739 * @param {string} logTag The log tag 740 * @module server/wdu-log/Logger 741 */ 742 var Logger = function Logger(logTag) { 743 this.LOG_TAG = logTag; 744 }; 745 746 /** 747 * Logs an info message 748 * 749 * @param {String} message The message 750 * @param {Mixed}
750 data Extra data for the message, will be stringified 751 * @memberof module:server/wdu-log/Logger 752 */ 753 Logger.prototype.info = function Logger$$info(message) { 754 var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 755 buildLogMessage(this.LOG_TAG, message, data).forEach(function (m) { 756 return logUtil.info(m); 757 }); 758 }; 759 760 /** 761 * Logs a debug message 762 * 763 * @param {String} message The message 764 * @param {Mixed} data Extra data for the message, will be stringified 765 * @memberof module:server/wdu-log/Logger 766 */ 767 Logger.prototype.debug = function Logger$$debug(message) { 768 var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 769 buildLogMessage(this.LOG_TAG, message, data).forEach(function (m) { 770 return logUtil.debug(m); 771 }); 772 }; 773 774 /** 775 * Logs a warn message 776 * 777 * @param {String} message The message 778 * @param {Mixed} data Extra data for the message, will be stringified 779 * @memberof module:server/wdu-log/Logger 780 */ 781 Logger.prototype.warn = function Logger$$warn(message) { 782 var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 783 buildLogMessage(this.LOG_TAG, message, data).forEach(function (m) { 784 return logUtil.warn(m); 785 }); 786 }; 787 788 /** 789 * Logs an error message 790 * 791 * @param {String} message The message 792 * @param {Mixed} data Extra data for the message, will be stringified 793 * @memberof module:server/wdu-log/Logger 794 */ 795 Logger.prototype.error = function Logger$$error(message) { 796 var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; 797 buildLogMessage(this.LOG_TAG, message, data).forEach(function (m) { 798 return logUtil.error(m); 799 }); 800 }; 801 Logger.prototype._debugReportError = function Logger$$_debugReportError(e, filename, fnName, line, col) { 802 try { 803 buildLogMessage(this.LOG_TAG, "An error occured in ".concat(filename, " (").concat(fnName, ":").concat(line, ":").concat(col, ") at ").concat(e.lineNumber, ": ").concat(e.message), e.stack).forEach(function (m) { 804 return logUtil.error(m); 805 }); 806 } catch (ex) { 807 logUtil.error('Error in wdu-log: ' + ex); 808 } 809 }; 810 811 /** 812 * Creates a logger with a specific LogTag 813 * 814 * @param {String} logTag The logTag, typically filename or another unique tag. 815 * @memberof module:server/wdu-log 816 * @returns {module:server/wdu-log/Logger} The logger 817 */ 818 var getLogger = function getLogger(logTag) { 819 return new Logger(logTag); 820 }; 821 return { 822 getLogger: getLogger 823 }; 824});}}); 825AppRegistry.registerModule({applicationId:'limepark.webapp-overlay-button|2.1.1',path:'/main',module:function(define){'use strict';function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 826function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 827function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 828function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } 829function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 830define(function (require) { 831 "use strict"; 832 833 var eventApi = require("/module/client/@limepark/event-api_3.0.2/cjs"); 834 var Component = require("Component"); 835 var template = require("/template/main"); 836 var $ = require("jquery"); 837 var overlayTemplate = require("/template/overlay"); 838 var FocusTrap = require("/module/client/focus-trap"); 839 var events = require("events"); 840 var tabbable = require("/module/client/tabbable"); 841 var domId = require("/module/common/domid-util"); 842 var CUSTOM_END_EVENT = "overlayButton:tranimationend"; 843 var CUSTOM_EVENTS_NAMESPACE = "lp-overlay-button"; 844 var KEYBOARD_TYPES = ["search", "date", "datetime-local", "email", "number", "password", "range", "tel", "text", "time", "url"]; 845 var isOnline = function isOnline() { 846 return $("html").hasClass("sv-edit-mode"); 847 }; 848 return Component.extend({ 849 template: template, 850 className: "lp-overlay-button__wrapper", 851 attributes: function attributes() { 852 var attributes = {}; 853 if (this.state.ariaRole) { 854 attributes.role = this.state.ariaRole; 855 } 856 if (this.state.ariaLabel) { 857 attributes["aria-label"] = this.state.ariaLabel; 858 } 859 return attributes; 860 }, 861 events: { 862 dom: { 863 "click button": "handleButtonClick" 864 } 865 }, 866 _triggerCustomEvent: function _triggerCustomEvent(eventName) { 867 this.$el.trigger("".concat(eventName, ".").concat(CUSTOM_EVENTS_NAMESPACE), [this.$el, this._$container]); 868 events.trigger("".concat(CUSTOM_EVENTS_NAMESPACE, ":").concat(eventName), [this.$el, this._$container]); 869 }, 870 _hasMovedContent: false, 871 onAttached: function onAttached() { 872 this._ensureContainer();
873 this._$pageContainer = $("body > div.sv-layout").eq(0).addClass("lp-overlay-page"); 874 this._$pageContainer.attr("aria-hidden", "false"); 875 this._pageContainerHiddenClass = domId.pageHidden; 876 this._$button = this.$("button").attr("aria-controls", this._containerId).attr("aria-expanded", "false"); 877 var inst = this; 878 this._removeEventsCallback = eventApi.createEventApi({ 879 close: function close(_ref) { 880 var _ref$trapOptions = _ref.trapOptions, 881 trapOptions = _ref$trapOptions === void 0 ? {} : _ref$trapOptions; 882 inst._hideContainer({ 883 trapOptions: trapOptions 884 }); 885 }, 886 show: function show(_ref2) { 887 var _ref2$firstFocusNode = _ref2.firstFocusNode, 888 firstFocusNode = _ref2$firstFocusNode === void 0 ? null : _ref2$firstFocusNode; 889 inst._showContainer(firstFocusNode); 890 } 891 }); 892 this._setupAnchorLinkHijacker(); 893 this._ensureBackdrop(); 894 this._setupBreakpointListener(); 895 this._setupReducedMotionListener(); 896 this._setupResizeListener(); 897 }, 898 onDestroy: function onDestroy() { 899 if (this._removeEventsCallback) { 900 this._removeEventsCallback(); 901 this._removeEventsCallback = null; 902 } 903 }, 904 _setupResizeListener: function _setupResizeListener() { 905 var _this = this; 906 $(window).on("resize", function () { 907 _this._$container.height($(window).innerHeight()); 908 }).trigger("resize"); 909 }, 910 _setupAnchorLinkHijacker: function _setupAnchorLinkHijacker() { 911 var _this2 = this; 912 $("body").on("click", 'a[href^="#"]', function (e) { 913 if (!_this2._hasMovedContent) { 914 return; 915 } 916 var $target = $(e.target); 917 var targetId = $target.attr("href"); 918 if (!targetId) { 919 return; 920 } 921 var $anchorTargetElement = null; 922 try { 923 $anchorTargetElement = _this2._$container.find(targetId); 924 } catch (ex) { 925 // not handeled. 926 } 927 if (!$anchorTargetElement || $anchorTargetElement.length === 0) { 928 return; 929 } 930 e.preventDefault(); 931 _this2._showContainer($anchorTargetElement.get(0)); 932 return false; 933 }); 934 }, 935 _ensureBackdrop: function _ensureBackdrop() { 936 this._$backdrop = $("#" + domId.backdrop); 937 if (!this._$backdrop.length) { 938 this._$backdrop = $('<div class="lp-overlay__backdrop" />').hide().attr("id", domId.backdrop); 939 $("body").append(this._$backdrop); 940 } 941 }, 942 _setupReducedMotionListener: function _setupReducedMotionListener() { 943 var _this3 = this; 944 var mql = window.matchMedia("(prefers-reduced-motion: reduce)"); 945 var onMqlChange = function onMqlChange() { 946 if (mql.matches) { 947 _this3._animationDuration = 1; 948 } else { 949 _this3._animationDuration = _this3.state.animationDuration; 950 } 951 }; 952 mql.addListener(onMqlChange); 953 onMqlChange(); 954 }, 955 _setupBreakpointListener: function _setupBreakpointListener() { 956 var _this4 = this; 957 var mqlButton = window.matchMedia(this.state.breakpoints); 958 var onMqlButtonChange = function onMqlButtonChange() { 959 if (mqlButton.matches) { 960 _this4._ensureContent(); 961 if (!isOnline()) { 962 _this4.$el.parent().show(); 963 } 964 } else { 965 if (!isOnline()) { 966 _this4.$el.parent().hide(); 967 } 968 _this4._hideContainer(); 969 _this4._returnContent(); 970 } 971 }; 972 mqlButton.addListener(onMqlButtonChange); 973 onMqlButtonChange(); 974 this.state.elements.reduce(function (elementList, element) { 975 var globalContext = _this4; 976 var $elements = $(element); 977 $elements.each(function () { 978 var mql = window.matchMedia(element.mediaQuery); 979 var onMqlElementChange = function onMqlElementChange() { 980 globalContext._ensureContent(); 981 }; 982 mql.addListener(onMqlElementChange); 983 }); 984 return elementList; 985 }, []); 986 }, 987 _ensureContent: function _ensureContent() { 988 this._returnContent(); 989 this._hasMovedContent = true; 990 var $content = this._$container.find(".lp-overlay__content");
991 this.state.elements.forEach(function (element) { 992 var $elements = $(element.selector); 993 $elements.each(function () { 994 var $elem = $(this); 995 if (window.matchMedia(element.mediaQuery).matches) { 996 var $locationHolder = document.createComment("".concat(element.selector)); 997 $elem.before($locationHolder); 998 $elem.data("orig-location", $locationHolder); 999 $content.append($elem); 1000 } 1001 }); 1002 }); 1003 this._triggerCustomEvent("content-moved"); 1004 }, 1005 _returnContent: function _returnContent() { 1006 if (!this._hasMovedContent) { 1007 return; 1008 } 1009 this._hasMovedContent = false; 1010 var $content = this._$container.find(".lp-overlay__content"); 1011 $content.children().each(function () { 1012 var $elem = $(this); 1013 var $locationHolder = $elem.data("orig-location"); 1014 $elem.insertAfter($locationHolder); 1015 $elem.data("orig-location", null); 1016 $locationHolder.remove(); 1017 }); 1018 this._triggerCustomEvent("content-restored"); 1019 }, 1020 _createContainer: function _createContainer() { 1021 var _this5 = this; 1022 var $container = $(overlayTemplate(_objectSpread({}, this.state))).appendTo("body").hide(); 1023 $container.on("click", "[data-action-close-overlay]", function () { 1024 _this5._hideContainer(); 1025 }); 1026 this._$inner = $container.find(".lp-overlay__inner"); 1027 this._$inner.on("transitionend animationend", function (e) { 1028 if (e.target === _this5._$inner.get(0)) { 1029 _this5._$inner.trigger(CUSTOM_END_EVENT); 1030 } 1031 }); 1032 this._containerId = domId.container; 1033 this._containerVisibleClass = domId.containerVisible; 1034 $container.attr("aria-hidden", "true"); 1035 $container.attr("id", this._containerId); 1036 this._focusTrap = FocusTrap.create($container.get(0), { 1037 onDeactivate: function onDeactivate() { 1038 _this5._hideContainer(); 1039 }, 1040 initialFocus: function initialFocus() { 1041 if (_this5._hasInputFocusHack) { 1042 setTimeout(function () { 1043 _this5._inputFocusHackElement.remove(); 1044 }, 20); 1045 } 1046 var focusableNodes = tabbable.tabbable($container.get(0)); 1047 if (focusableNodes.length === 1) { 1048 return focusableNodes[0]; 1049 } 1050 return focusableNodes[1]; 1051 }, 1052 clickOutsideDeactivates: true 1053 }); 1054 return $container; 1055 }, 1056 _addAdvancedInClasses: function _addAdvancedInClasses($container) { 1057 if (!this.state.useAdvancedAnimation) { 1058 return $container; 1059 } 1060 var animationClasses = "animate__animated animate__" + this.state.animationIn; 1061 var $inner = $container.find(".lp-overlay__inner"); 1062 $inner.addClass(animationClasses).one(CUSTOM_END_EVENT, function () { 1063 $inner.removeClass(animationClasses); 1064 }); 1065 return $container; 1066 }, 1067 _addAdvancedOutClasses: function _addAdvancedOutClasses($container) { 1068 if (!this.state.useAdvancedAnimation) { 1069 return $container; 1070 } 1071 var animationClasses = "animate__animated animate__" + this.state.animationOut; 1072 var $inner = $container.find(".lp-overlay__inner"); 1073 $inner.addClass(animationClasses).one(CUSTOM_END_EVENT, function () { 1074 $inner.removeClass(animationClasses); 1075 }); 1076 return $container; 1077 }, 1078 _isKeyboardableInput: function _isKeyboardableInput(elem) { 1079 if (!elem) { 1080 return false; 1081 } 1082 var $elem = $(elem); 1083 if ($elem.prop("tagName") !== "INPUT") { 1084 return false; 1085 } 1086 var type = $elem.attr("type") || "text"; 1087 return KEYBOARD_TYPES.indexOf(type) > -1; 1088 }, 1089 _createInputHackElement: function _createInputHackElement() { 1090 var $fakeInput = $("<input type='text' />").css({ 1091 position: "absolute", 1092 width: "200px", 1093 // zoom properly (iOS) 1094 height: 0, 1095 // hide cursor (font-size: 0 will zoom to quarks level) (iOS) 1096 opacity: 0 // make input transparent :] 1097 }); 1098 1099 $fakeInput.appendTo(this._$container).focus(); 1100 return $fakeInput; 1101 }, 1102 _isVisible: false, 1103 _animating: false, 1104 _hasInputFocusHack: false, 1105 _inputFocusHackElement: null, 1106 _showContainer: function _showContainer() { 1107 var _tabbable$tabbable, 1108 _this6 = this; 1109 var firstFocusNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; 1110 if (this._isVisible || this._animating) { 1111 return; 1112 } 1113 var scrollbarWidthPx = window.innerWidth - document.body.clientWidth; 1114 this._animating = true; 1115 $("body").addClass("lp-overlay-body--noscroll"); 1116 $("html").addClass("lp-overlay-html--noscroll").css("margin-right", scrollbarWidthPx); 1117 this._addAdvancedInClasses(this._$container.addClass("lp-overlay__container--visible").show().addClass(this._containerVisibleClass).css("top", $(window).scrollTop()));
1118 this._$pageContainer.addClass("lp-overlay-page--hidden").addClass(domId.page).addClass(this._pageContainerHiddenClass); 1119 if (this.state.usePageTransform) { 1120 if (this.state.animationIn === "slideInDown") { 1121 this._$pageContainer.css("transform", "translateY(" + this._$inner.outerHeight() * this.state.pageTransformPercent + "px)"); 1122 } else if (this.state.animationIn === "slideInUp") { 1123 this._$pageContainer.css("transform", "translateY(-" + this._$inner.outerHeight() * this.state.pageTransformPercent + "px)"); 1124 } else if (this.state.animationIn === "slideInLeft") { 1125 this._$pageContainer.css("transform", "translateX(" + this._$inner.outerWidth() * this.state.pageTransformPercent + "px)"); 1126 } else if (this.state.animationIn === "slideInRight") { 1127 this._$pageContainer.css("transform", "translateX(-" + this._$inner.outerWidth() * this.state.pageTransformPercent + "px)"); 1128 } 1129 } 1130 this._$backdrop.css("height", $(document).height()).fadeIn(this._animationDuration); 1131 this._isVisible = true; 1132 var activeElement = null; 1133 if (this._isKeyboardableInput((_tabbable$tabbable = tabbable.tabbable(this._$container.get(0))) === null || _tabbable$tabbable === void 0 ? void 0 : _tabbable$tabbable[1])) { 1134 if (!firstFocusNode) { 1135 activeElement = document.activeElement; 1136 } 1137 this._hasInputFocusHack = true; 1138 this._inputFocusHackElement = this._createInputHackElement(); 1139 } 1140 this._$inner.one(CUSTOM_END_EVENT, function () { 1141 _this6._$pageContainer.attr("aria-hidden", "true"); 1142 _this6._$container.attr("aria-hidden", "false"); 1143 _this6._$container.attr("aria-modal", "true"); 1144 _this6._$button.attr("aria-expanded", "true"); 1145 _this6._focusTrap.activate({ 1146 initialFocus: firstFocusNode, 1147 activeElement: activeElement 1148 }); 1149 _this6._animating = false; 1150 _this6._triggerCustomEvent("opened"); 1151 }); 1152 this._triggerCustomEvent("open"); 1153 }, 1154 _hideContainer: function _hideContainer() { 1155 var _this7 = this; 1156 var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 1157 if (!this._isVisible || this._animating) { 1158 return; 1159 } 1160 this._animating = true; 1161 this._addAdvancedOutClasses(this._$container.removeClass("lp-overlay__container--visible").removeClass(this._containerVisibleClass)); 1162 this._$inner.one(CUSTOM_END_EVENT, function () { 1163 _this7._$container.hide(); 1164 $("body").removeClass("lp-overlay-body--noscroll"); 1165 $("html").removeClass("lp-overlay-html--noscroll").css("margin-right", 0); 1166 _this7._$pageContainer.removeClass(domId.page); 1167 _this7._$pageContainer.attr("aria-hidden", "false"); 1168 _this7._$container.attr("aria-hidden", "true"); 1169 _this7._$container.removeAttr("aria-modal"); 1170 _this7._$button.attr("aria-expanded", "false"); 1171 _this7._focusTrap.deactivate((opts === null || opts === void 0 ? void 0 : opts.trapOptions) || {}); 1172 _this7._animating = false; 1173 _this7._triggerCustomEvent("closed"); 1174 }); 1175 this._$pageContainer.removeClass("lp-overlay-page--hidden").css("transform", "none").removeClass(this._pageContainerHiddenClass); 1176 this._$backdrop.fadeOut(this._animationDuration); 1177 this._isVisible = false; 1178 this._triggerCustomEvent("close"); 1179 }, 1180 _toggleContainer: function _toggleContainer() { 1181 if (!this._isVisible) { 1182 this._showContainer(); 1183 } else { 1184 this._hideContainer(); 1185 } 1186 }, 1187 _ensureContainer: function _ensureContainer() { 1188 if (!this._$container) { 1189 this._$container = this._createContainer(); 1190 } 1191 return this._$container; 1192 }, 1193 handleButtonClick: function handleButtonClick() { 1194 this._ensureContainer(); 1195 this._ensureContent(); 1196 this._toggleContainer(); 1197 }, 1198 filterState: function filterState(state) { 1199 return _objectSpread({}, state); 1200 } 1201 }); 1202});}});
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.