PageSourceSearch

https://interreg-oks.eu/webapp-resource/4.2049846e17fb182d9d91c5e/…/1647263605581/webapp-assets.js

js interreg-oks.eu collected 2026-10-03 17:41:19 UTC 46,757 bytes, 1,388 lines download raw bytes

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

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.