PageSourceSearch

https://www.iabuk.com/themes/custom/iab/node_modules/catchify-core/dist/accordion.js?tk9vdr

js iabuk.com collected 2026-09-24 08:25:54 UTC 8,776 bytes, 261 lines download raw bytes

1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
2"use strict";
3
4var _ = require("../..");
5
6var ATTR = {
7  ACCORDION: 'data-accordion',
8  TRIGGER: 'data-accordion-trigger'
9};
10var SELECTOR = {
11  ACCORDION: "[".concat(ATTR.ACCORDION, "]"),
12  TRIGGER: "[".concat(ATTR.TRIGGER, "]")
13};
14var CLASS = {
15  MOBILE_ONLY: 'accordion--mobile-only',
16  IS_OPEN: 'is-open'
17};
18var KEYS = {
19  KEY_ENTER: 13,
20  KEY_SPACE: 32
21};
22document.addEventListener('DOMContentLoaded', function () {
23  _.breakpoint.init();
24
25  var isMobile = function isMobile() {
26    return ['xs', 'sm'].indexOf(_.breakpoint.get()) > -1;
27  };
28
29  var $trigger = document.querySelectorAll(SELECTOR.TRIGGER);
30
31  var toggleDrawer = function toggleDrawer($element) {
32    $element.classList.toggle(CLASS.IS_OPEN);
33
34    if ($element.classList.contains(CLASS.IS_OPEN)) {
35      $element.querySelectorAll('.accordion__content [tabindex="-1"]').forEach(function (el) {
36        el.setAttribute('tabindex', '0');
37      });
38    } else {
39      $element.querySelectorAll('.accordion__content [tabindex="0"]').forEach(function (el) {
40        el.setAttribute('tabindex', '-1');
41      });
42    }
43  };
44
45  var handleButtonKeypress = function handleButtonKeypress(e) {
46    var $element = e.target.closest(SELECTOR.ACCORDION);
47
48    switch (e.which) {
49      case KEYS.KEY_SPACE:
50      case KEYS.KEY_ENTER:
51        {
52          if ($element.classList.contains(CLASS.MOBILE_ONLY)) {
53            if (isMobile()) {
54              e.stopPropagation();
55              e.preventDefault();
56              toggleDrawer($element);
57            }
58          } else {
59            e.stopPropagation();
60            e.preventDefault();
61            toggleDrawer($element);
62          }
63
64          break;
65        }
66    } //end switch
67
68
69    return true;
70  };
71
72  var handleButtonClick = function handleButtonClick(e) {
73    var $element = e.target.closest(SELECTOR.ACCORDION);
74    $element.querySelector(SELECTOR.TRIGGER).blur();
75
76    if ($element.classList.contains(CLASS.MOBILE_ONLY)) {
77      if (isMobile()) {
78        e.stopPropagation();
79        e.preventDefault();
80        toggleDrawer($element);
81      }
82    } else {
83      e.stopPropagation();
84      e.preventDefault();
85      toggleDrawer($element);
86    }
87  };
88
89  $trigger.forEach(function (el) {
90    if (!isMobile()) {
91      var $element = el.closest(SELECTOR.ACCORDION);
92
93      if ($element.classList.contains(CLASS.MOBILE_ONLY)) {
94        el.setAttribute('tabindex', '-1');
95        $element.querySelectorAll('.accordion__content [tabindex="-1"]').forEach(function (el) {
96          el.setAttribute('tabindex', '0');
97        });
98      }
99    }
100
101    el.addEventListener('click', handleButtonClick);
102    el.addEventListener('keypress', handleButtonKeypress);
103  });
104});
105
106},{"../..":2}],2:[function(require,module,exports){
107"use strict";
108
109Object.defineProperty(exports, "__esModule", {
110  value: true
111});
112exports["default"] = exports.breakpoint = void 0;
113
114var _breakpoint = _interopRequireDefault(require("./lib/breakpoint"));
115
116function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
117
118// Named exports here
119var breakpoint = _breakpoint["default"]; // Entire default export here
120
121exports.breakpoint = breakpoint;
122var _default = {
123  breakpoint: breakpoint
124};
125exports["default"] = _default;
126
127},{"./lib/breakpoint":3}],3:[function(require,module,exports){
128"use strict";
129
130Object.defineProperty(exports, "__esModule", {
131  value: true
132});
133exports["default"] = void 0;
134
135function 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; }
136
137function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {};
137 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; }
138
139function _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; }
140
141/**
142 * Helper module for querying the current break point.
143 *
144 * Rather than returning a width, or indeed relying on one, we use visibility
145 * helper classes to tie into how the breakpoints are calculated with media queries.
146 *
147 * This is important as it ensures consistency when adding JS functionality at
148 * a certain breakpoint
149 */
150
151/**
152 * These are the default used to setup this helper module
153 * @type {Object}
154 */
155var defaultOptions = {
156  // Template must be encapsulated HTML
157  template: 'span',
158  // CSS properties appled to each element
159  styles: "position: absolute; left: 0; bottom: 0; width: 1px; height: 1px;",
160  // Combines with sizes to create (prefix + size)
161  classPrefix: 'visible-',
162  // The different sizes to create elements for
163  // Should map to breakpoints
164  breakpoints: ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'],
165  // The breakpoint attribute used to query visible element flag
166  dataAttrSelector: 'data-catchify-breakpoint',
167  // An event to fire when the breakpoint initialises
168  breakpointInitEvent: 'breakpointInit',
169  // An event to fire when the breakpoint changes
170  breakpointChangeEvent: 'breakpointChange'
171};
172var breakpoint = {
173  /**
174   * Sets up the breakpoint helper, implementing flag elements into the DOM
175   * @param  {Object}   options
176   */
177  init: function init() {
178    var _this = this;
179
180    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
181    var changeTimeoutId;
182    var lastCalculatedSize; // Combine user given options with defaults
183
184    this.options = _objectSpread(_objectSpread({}, defaultOptions), options); // For every given breakpoints create a helper flag element
185
186    this.options.breakpoints.forEach(function (size) {
187      var $element = document.createElement(_this.options.template); // Setup element properties
188
189      $element.setAttribute('style', _this.options.styles);
190      $element.setAttribute('class', _this.options.classPrefix + size);
191      $element.setAttribute(_this.options.dataAttrSelector, size); // Add element to body
192
193      document.querySelector('body').appendChild($element);
194    }); // Trigger init event
195
196    var event = new CustomEvent(this.options.breakpointInitEvent, {
197      detail: {
198        breakpoint: this.get()
199      },
200      bubbles: true
201    });
202    document.dispatchEvent(event); // Watch for resizes
203
204    window.addEventListener('resize', function () {
205      clearTimeout(changeTimeoutId);
206      changeTimeoutId = setTimeout(function () {
207        if (lastCalculatedSize !== _this.get()) {
208          lastCalculatedSize = _this.get();
209
210          var _event = new CustomEvent(_this.options.breakpointChangeEvent, {
211            detail: {
212              breakpoint: lastCalculatedSize
213            },
214            bubbles: true
215          });
216
217          document.dispatchEvent(_event);
218        }
219      }, _this.options.resizeTimeout);
220    });
221  },
222
223  /**
224   * Returns the current breakpoint in range of options.breakpoints
225   * @return {String}
226   */
227  get: function get() {
228    var _this2 = this;
229
230    var $element = document.querySelectorAll("[".concat(this.options.dataAttrSelector, "]"));
231    var breakpoint = '';
232    $element.forEach(function (element) {
233      if (element.offsetWidth > 0 && element.offsetHeight > 0) {
234        breakpoint = element.getAttribute(_this2.options.dataAttrSelector);
235      }
236    });
237    return breakpoint;
238  },
239
240  /**
241   * Checks if the breakpoint is the same as that given
242   * @param  {String}  size
243   * @return {Boolean}
244   */
245  is: function is(size) {
246    return this.get() === size;
247  },
248
249  /**
250   * Checks if the breakpoint is not the same as that given
251   * @param  {String}  size
252   * @return {Boolean}
253   */
254  not: function not(size) {
255    return !this.is(size);
256  }
257};
258var _default = breakpoint;
259exports["default"] = _default;
260
261},{}]},{},[1]);

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.