phcthemes_web_theme_pack 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f30ed038f41d77327242c9fe8364299f89fbfca9cb3d83f16e6c80ba0281ec61
4
- data.tar.gz: 149212c66556011bd73bda0c2530c7e5b50d08c9d1c8cf836415e87175f99108
3
+ metadata.gz: 3618a71dcbb7080e35b8fe2542434f15e5f433db06630505def67568cb9a7501
4
+ data.tar.gz: '08e29e11eb88b6b37fd72e235ab990a56f1367c9605d8f3cb03a06e6d7aec069'
5
5
  SHA512:
6
- metadata.gz: 26a8e2acb57b484892aebaa844dd51809c594d8854283754708a2bfccaefa2c3005159010760e23665200861265617efd396fb6c95bbbc2f2cd1a06874bf2689
7
- data.tar.gz: 3a4af33afb8b3a3cc7f72ca49c192272bf33a2d09ba9acaac26a640108f58a7554768f073e9b5302d78e4d6a9ce4b68750661d44a05d6ab85ad2876706cc9d93
6
+ metadata.gz: f2dd9d1a1d47c41c45789b4445a16f964ab70765aa7a0a93e79b019517f3d78a322d89a3e4b0b216fc67676711cfcd0ff70c421da81fb0b904bae318d62209ba
7
+ data.tar.gz: 8565a96c9cb72582a4f821d41e393779a4e1efc9f4884849b4d3fb75ddc1737a3e1110be906d9663ad0700f50cc72af98c01b48792801c3644e3fe1c8a55c1d5
@@ -0,0 +1,978 @@
1
+ /*!
2
+ * clipboard.js v2.0.4
3
+ * https://zenorocha.github.io/clipboard.js
4
+ *
5
+ * Licensed MIT © Zeno Rocha
6
+ */
7
+ (function webpackUniversalModuleDefinition(root, factory) {
8
+ if(typeof exports === 'object' && typeof module === 'object')
9
+ module.exports = factory();
10
+ else if(typeof define === 'function' && define.amd)
11
+ define([], factory);
12
+ else if(typeof exports === 'object')
13
+ exports["ClipboardJS"] = factory();
14
+ else
15
+ root["ClipboardJS"] = factory();
16
+ })(this, function() {
17
+ return /******/ (function(modules) { // webpackBootstrap
18
+ /******/ // The module cache
19
+ /******/ var installedModules = {};
20
+ /******/
21
+ /******/ // The require function
22
+ /******/ function __webpack_require__(moduleId) {
23
+ /******/
24
+ /******/ // Check if module is in cache
25
+ /******/ if(installedModules[moduleId]) {
26
+ /******/ return installedModules[moduleId].exports;
27
+ /******/ }
28
+ /******/ // Create a new module (and put it into the cache)
29
+ /******/ var module = installedModules[moduleId] = {
30
+ /******/ i: moduleId,
31
+ /******/ l: false,
32
+ /******/ exports: {}
33
+ /******/ };
34
+ /******/
35
+ /******/ // Execute the module function
36
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
37
+ /******/
38
+ /******/ // Flag the module as loaded
39
+ /******/ module.l = true;
40
+ /******/
41
+ /******/ // Return the exports of the module
42
+ /******/ return module.exports;
43
+ /******/ }
44
+ /******/
45
+ /******/
46
+ /******/ // expose the modules object (__webpack_modules__)
47
+ /******/ __webpack_require__.m = modules;
48
+ /******/
49
+ /******/ // expose the module cache
50
+ /******/ __webpack_require__.c = installedModules;
51
+ /******/
52
+ /******/ // define getter function for harmony exports
53
+ /******/ __webpack_require__.d = function(exports, name, getter) {
54
+ /******/ if(!__webpack_require__.o(exports, name)) {
55
+ /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
56
+ /******/ }
57
+ /******/ };
58
+ /******/
59
+ /******/ // define __esModule on exports
60
+ /******/ __webpack_require__.r = function(exports) {
61
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
62
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
63
+ /******/ }
64
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
65
+ /******/ };
66
+ /******/
67
+ /******/ // create a fake namespace object
68
+ /******/ // mode & 1: value is a module id, require it
69
+ /******/ // mode & 2: merge all properties of value into the ns
70
+ /******/ // mode & 4: return value when already ns object
71
+ /******/ // mode & 8|1: behave like require
72
+ /******/ __webpack_require__.t = function(value, mode) {
73
+ /******/ if(mode & 1) value = __webpack_require__(value);
74
+ /******/ if(mode & 8) return value;
75
+ /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
76
+ /******/ var ns = Object.create(null);
77
+ /******/ __webpack_require__.r(ns);
78
+ /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
79
+ /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
80
+ /******/ return ns;
81
+ /******/ };
82
+ /******/
83
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
84
+ /******/ __webpack_require__.n = function(module) {
85
+ /******/ var getter = module && module.__esModule ?
86
+ /******/ function getDefault() { return module['default']; } :
87
+ /******/ function getModuleExports() { return module; };
88
+ /******/ __webpack_require__.d(getter, 'a', getter);
89
+ /******/ return getter;
90
+ /******/ };
91
+ /******/
92
+ /******/ // Object.prototype.hasOwnProperty.call
93
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
94
+ /******/
95
+ /******/ // __webpack_public_path__
96
+ /******/ __webpack_require__.p = "";
97
+ /******/
98
+ /******/
99
+ /******/ // Load entry module and return exports
100
+ /******/ return __webpack_require__(__webpack_require__.s = 0);
101
+ /******/ })
102
+ /************************************************************************/
103
+ /******/ ([
104
+ /* 0 */
105
+ /***/ (function(module, exports, __webpack_require__) {
106
+
107
+ "use strict";
108
+
109
+
110
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
111
+
112
+ var _createClass = function () { function 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
113
+
114
+ var _clipboardAction = __webpack_require__(1);
115
+
116
+ var _clipboardAction2 = _interopRequireDefault(_clipboardAction);
117
+
118
+ var _tinyEmitter = __webpack_require__(3);
119
+
120
+ var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);
121
+
122
+ var _goodListener = __webpack_require__(4);
123
+
124
+ var _goodListener2 = _interopRequireDefault(_goodListener);
125
+
126
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
127
+
128
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
129
+
130
+ function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
131
+
132
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
133
+
134
+ /**
135
+ * Base class which takes one or more elements, adds event listeners to them,
136
+ * and instantiates a new `ClipboardAction` on each click.
137
+ */
138
+ var Clipboard = function (_Emitter) {
139
+ _inherits(Clipboard, _Emitter);
140
+
141
+ /**
142
+ * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
143
+ * @param {Object} options
144
+ */
145
+ function Clipboard(trigger, options) {
146
+ _classCallCheck(this, Clipboard);
147
+
148
+ var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));
149
+
150
+ _this.resolveOptions(options);
151
+ _this.listenClick(trigger);
152
+ return _this;
153
+ }
154
+
155
+ /**
156
+ * Defines if attributes would be resolved using internal setter functions
157
+ * or custom functions that were passed in the constructor.
158
+ * @param {Object} options
159
+ */
160
+
161
+
162
+ _createClass(Clipboard, [{
163
+ key: 'resolveOptions',
164
+ value: function resolveOptions() {
165
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
166
+
167
+ this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
168
+ this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
169
+ this.text = typeof options.text === 'function' ? options.text : this.defaultText;
170
+ this.container = _typeof(options.container) === 'object' ? options.container : document.body;
171
+ }
172
+
173
+ /**
174
+ * Adds a click event listener to the passed trigger.
175
+ * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
176
+ */
177
+
178
+ }, {
179
+ key: 'listenClick',
180
+ value: function listenClick(trigger) {
181
+ var _this2 = this;
182
+
183
+ this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {
184
+ return _this2.onClick(e);
185
+ });
186
+ }
187
+
188
+ /**
189
+ * Defines a new `ClipboardAction` on each click event.
190
+ * @param {Event} e
191
+ */
192
+
193
+ }, {
194
+ key: 'onClick',
195
+ value: function onClick(e) {
196
+ var trigger = e.delegateTarget || e.currentTarget;
197
+
198
+ if (this.clipboardAction) {
199
+ this.clipboardAction = null;
200
+ }
201
+
202
+ this.clipboardAction = new _clipboardAction2.default({
203
+ action: this.action(trigger),
204
+ target: this.target(trigger),
205
+ text: this.text(trigger),
206
+ container: this.container,
207
+ trigger: trigger,
208
+ emitter: this
209
+ });
210
+ }
211
+
212
+ /**
213
+ * Default `action` lookup function.
214
+ * @param {Element} trigger
215
+ */
216
+
217
+ }, {
218
+ key: 'defaultAction',
219
+ value: function defaultAction(trigger) {
220
+ return getAttributeValue('action', trigger);
221
+ }
222
+
223
+ /**
224
+ * Default `target` lookup function.
225
+ * @param {Element} trigger
226
+ */
227
+
228
+ }, {
229
+ key: 'defaultTarget',
230
+ value: function defaultTarget(trigger) {
231
+ var selector = getAttributeValue('target', trigger);
232
+
233
+ if (selector) {
234
+ return document.querySelector(selector);
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Returns the support of the given action, or all actions if no action is
240
+ * given.
241
+ * @param {String} [action]
242
+ */
243
+
244
+ }, {
245
+ key: 'defaultText',
246
+
247
+
248
+ /**
249
+ * Default `text` lookup function.
250
+ * @param {Element} trigger
251
+ */
252
+ value: function defaultText(trigger) {
253
+ return getAttributeValue('text', trigger);
254
+ }
255
+
256
+ /**
257
+ * Destroy lifecycle.
258
+ */
259
+
260
+ }, {
261
+ key: 'destroy',
262
+ value: function destroy() {
263
+ this.listener.destroy();
264
+
265
+ if (this.clipboardAction) {
266
+ this.clipboardAction.destroy();
267
+ this.clipboardAction = null;
268
+ }
269
+ }
270
+ }], [{
271
+ key: 'isSupported',
272
+ value: function isSupported() {
273
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];
274
+
275
+ var actions = typeof action === 'string' ? [action] : action;
276
+ var support = !!document.queryCommandSupported;
277
+
278
+ actions.forEach(function (action) {
279
+ support = support && !!document.queryCommandSupported(action);
280
+ });
281
+
282
+ return support;
283
+ }
284
+ }]);
285
+
286
+ return Clipboard;
287
+ }(_tinyEmitter2.default);
288
+
289
+ /**
290
+ * Helper function to retrieve attribute value.
291
+ * @param {String} suffix
292
+ * @param {Element} element
293
+ */
294
+
295
+
296
+ function getAttributeValue(suffix, element) {
297
+ var attribute = 'data-clipboard-' + suffix;
298
+
299
+ if (!element.hasAttribute(attribute)) {
300
+ return;
301
+ }
302
+
303
+ return element.getAttribute(attribute);
304
+ }
305
+
306
+ module.exports = Clipboard;
307
+
308
+ /***/ }),
309
+ /* 1 */
310
+ /***/ (function(module, exports, __webpack_require__) {
311
+
312
+ "use strict";
313
+
314
+
315
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
316
+
317
+ var _createClass = function () { function 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
318
+
319
+ var _select = __webpack_require__(2);
320
+
321
+ var _select2 = _interopRequireDefault(_select);
322
+
323
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
324
+
325
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
326
+
327
+ /**
328
+ * Inner class which performs selection from either `text` or `target`
329
+ * properties and then executes copy or cut operations.
330
+ */
331
+ var ClipboardAction = function () {
332
+ /**
333
+ * @param {Object} options
334
+ */
335
+ function ClipboardAction(options) {
336
+ _classCallCheck(this, ClipboardAction);
337
+
338
+ this.resolveOptions(options);
339
+ this.initSelection();
340
+ }
341
+
342
+ /**
343
+ * Defines base properties passed from constructor.
344
+ * @param {Object} options
345
+ */
346
+
347
+
348
+ _createClass(ClipboardAction, [{
349
+ key: 'resolveOptions',
350
+ value: function resolveOptions() {
351
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
352
+
353
+ this.action = options.action;
354
+ this.container = options.container;
355
+ this.emitter = options.emitter;
356
+ this.target = options.target;
357
+ this.text = options.text;
358
+ this.trigger = options.trigger;
359
+
360
+ this.selectedText = '';
361
+ }
362
+
363
+ /**
364
+ * Decides which selection strategy is going to be applied based
365
+ * on the existence of `text` and `target` properties.
366
+ */
367
+
368
+ }, {
369
+ key: 'initSelection',
370
+ value: function initSelection() {
371
+ if (this.text) {
372
+ this.selectFake();
373
+ } else if (this.target) {
374
+ this.selectTarget();
375
+ }
376
+ }
377
+
378
+ /**
379
+ * Creates a fake textarea element, sets its value from `text` property,
380
+ * and makes a selection on it.
381
+ */
382
+
383
+ }, {
384
+ key: 'selectFake',
385
+ value: function selectFake() {
386
+ var _this = this;
387
+
388
+ var isRTL = document.documentElement.getAttribute('dir') == 'rtl';
389
+
390
+ this.removeFake();
391
+
392
+ this.fakeHandlerCallback = function () {
393
+ return _this.removeFake();
394
+ };
395
+ this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;
396
+
397
+ this.fakeElem = document.createElement('textarea');
398
+ // Prevent zooming on iOS
399
+ this.fakeElem.style.fontSize = '12pt';
400
+ // Reset box model
401
+ this.fakeElem.style.border = '0';
402
+ this.fakeElem.style.padding = '0';
403
+ this.fakeElem.style.margin = '0';
404
+ // Move element out of screen horizontally
405
+ this.fakeElem.style.position = 'absolute';
406
+ this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';
407
+ // Move element to the same position vertically
408
+ var yPosition = window.pageYOffset || document.documentElement.scrollTop;
409
+ this.fakeElem.style.top = yPosition + 'px';
410
+
411
+ this.fakeElem.setAttribute('readonly', '');
412
+ this.fakeElem.value = this.text;
413
+
414
+ this.container.appendChild(this.fakeElem);
415
+
416
+ this.selectedText = (0, _select2.default)(this.fakeElem);
417
+ this.copyText();
418
+ }
419
+
420
+ /**
421
+ * Only removes the fake element after another click event, that way
422
+ * a user can hit `Ctrl+C` to copy because selection still exists.
423
+ */
424
+
425
+ }, {
426
+ key: 'removeFake',
427
+ value: function removeFake() {
428
+ if (this.fakeHandler) {
429
+ this.container.removeEventListener('click', this.fakeHandlerCallback);
430
+ this.fakeHandler = null;
431
+ this.fakeHandlerCallback = null;
432
+ }
433
+
434
+ if (this.fakeElem) {
435
+ this.container.removeChild(this.fakeElem);
436
+ this.fakeElem = null;
437
+ }
438
+ }
439
+
440
+ /**
441
+ * Selects the content from element passed on `target` property.
442
+ */
443
+
444
+ }, {
445
+ key: 'selectTarget',
446
+ value: function selectTarget() {
447
+ this.selectedText = (0, _select2.default)(this.target);
448
+ this.copyText();
449
+ }
450
+
451
+ /**
452
+ * Executes the copy operation based on the current selection.
453
+ */
454
+
455
+ }, {
456
+ key: 'copyText',
457
+ value: function copyText() {
458
+ var succeeded = void 0;
459
+
460
+ try {
461
+ succeeded = document.execCommand(this.action);
462
+ } catch (err) {
463
+ succeeded = false;
464
+ }
465
+
466
+ this.handleResult(succeeded);
467
+ }
468
+
469
+ /**
470
+ * Fires an event based on the copy operation result.
471
+ * @param {Boolean} succeeded
472
+ */
473
+
474
+ }, {
475
+ key: 'handleResult',
476
+ value: function handleResult(succeeded) {
477
+ this.emitter.emit(succeeded ? 'success' : 'error', {
478
+ action: this.action,
479
+ text: this.selectedText,
480
+ trigger: this.trigger,
481
+ clearSelection: this.clearSelection.bind(this)
482
+ });
483
+ }
484
+
485
+ /**
486
+ * Moves focus away from `target` and back to the trigger, removes current selection.
487
+ */
488
+
489
+ }, {
490
+ key: 'clearSelection',
491
+ value: function clearSelection() {
492
+ if (this.trigger) {
493
+ this.trigger.focus();
494
+ }
495
+
496
+ window.getSelection().removeAllRanges();
497
+ }
498
+
499
+ /**
500
+ * Sets the `action` to be performed which can be either 'copy' or 'cut'.
501
+ * @param {String} action
502
+ */
503
+
504
+ }, {
505
+ key: 'destroy',
506
+
507
+
508
+ /**
509
+ * Destroy lifecycle.
510
+ */
511
+ value: function destroy() {
512
+ this.removeFake();
513
+ }
514
+ }, {
515
+ key: 'action',
516
+ set: function set() {
517
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';
518
+
519
+ this._action = action;
520
+
521
+ if (this._action !== 'copy' && this._action !== 'cut') {
522
+ throw new Error('Invalid "action" value, use either "copy" or "cut"');
523
+ }
524
+ }
525
+
526
+ /**
527
+ * Gets the `action` property.
528
+ * @return {String}
529
+ */
530
+ ,
531
+ get: function get() {
532
+ return this._action;
533
+ }
534
+
535
+ /**
536
+ * Sets the `target` property using an element
537
+ * that will be have its content copied.
538
+ * @param {Element} target
539
+ */
540
+
541
+ }, {
542
+ key: 'target',
543
+ set: function set(target) {
544
+ if (target !== undefined) {
545
+ if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {
546
+ if (this.action === 'copy' && target.hasAttribute('disabled')) {
547
+ throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
548
+ }
549
+
550
+ if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
551
+ throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
552
+ }
553
+
554
+ this._target = target;
555
+ } else {
556
+ throw new Error('Invalid "target" value, use a valid Element');
557
+ }
558
+ }
559
+ }
560
+
561
+ /**
562
+ * Gets the `target` property.
563
+ * @return {String|HTMLElement}
564
+ */
565
+ ,
566
+ get: function get() {
567
+ return this._target;
568
+ }
569
+ }]);
570
+
571
+ return ClipboardAction;
572
+ }();
573
+
574
+ module.exports = ClipboardAction;
575
+
576
+ /***/ }),
577
+ /* 2 */
578
+ /***/ (function(module, exports) {
579
+
580
+ function select(element) {
581
+ var selectedText;
582
+
583
+ if (element.nodeName === 'SELECT') {
584
+ element.focus();
585
+
586
+ selectedText = element.value;
587
+ }
588
+ else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
589
+ var isReadOnly = element.hasAttribute('readonly');
590
+
591
+ if (!isReadOnly) {
592
+ element.setAttribute('readonly', '');
593
+ }
594
+
595
+ element.select();
596
+ element.setSelectionRange(0, element.value.length);
597
+
598
+ if (!isReadOnly) {
599
+ element.removeAttribute('readonly');
600
+ }
601
+
602
+ selectedText = element.value;
603
+ }
604
+ else {
605
+ if (element.hasAttribute('contenteditable')) {
606
+ element.focus();
607
+ }
608
+
609
+ var selection = window.getSelection();
610
+ var range = document.createRange();
611
+
612
+ range.selectNodeContents(element);
613
+ selection.removeAllRanges();
614
+ selection.addRange(range);
615
+
616
+ selectedText = selection.toString();
617
+ }
618
+
619
+ return selectedText;
620
+ }
621
+
622
+ module.exports = select;
623
+
624
+
625
+ /***/ }),
626
+ /* 3 */
627
+ /***/ (function(module, exports) {
628
+
629
+ function E () {
630
+ // Keep this empty so it's easier to inherit from
631
+ // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
632
+ }
633
+
634
+ E.prototype = {
635
+ on: function (name, callback, ctx) {
636
+ var e = this.e || (this.e = {});
637
+
638
+ (e[name] || (e[name] = [])).push({
639
+ fn: callback,
640
+ ctx: ctx
641
+ });
642
+
643
+ return this;
644
+ },
645
+
646
+ once: function (name, callback, ctx) {
647
+ var self = this;
648
+ function listener () {
649
+ self.off(name, listener);
650
+ callback.apply(ctx, arguments);
651
+ };
652
+
653
+ listener._ = callback
654
+ return this.on(name, listener, ctx);
655
+ },
656
+
657
+ emit: function (name) {
658
+ var data = [].slice.call(arguments, 1);
659
+ var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
660
+ var i = 0;
661
+ var len = evtArr.length;
662
+
663
+ for (i; i < len; i++) {
664
+ evtArr[i].fn.apply(evtArr[i].ctx, data);
665
+ }
666
+
667
+ return this;
668
+ },
669
+
670
+ off: function (name, callback) {
671
+ var e = this.e || (this.e = {});
672
+ var evts = e[name];
673
+ var liveEvents = [];
674
+
675
+ if (evts && callback) {
676
+ for (var i = 0, len = evts.length; i < len; i++) {
677
+ if (evts[i].fn !== callback && evts[i].fn._ !== callback)
678
+ liveEvents.push(evts[i]);
679
+ }
680
+ }
681
+
682
+ // Remove event from queue to prevent memory leak
683
+ // Suggested by https://github.com/lazd
684
+ // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
685
+
686
+ (liveEvents.length)
687
+ ? e[name] = liveEvents
688
+ : delete e[name];
689
+
690
+ return this;
691
+ }
692
+ };
693
+
694
+ module.exports = E;
695
+
696
+
697
+ /***/ }),
698
+ /* 4 */
699
+ /***/ (function(module, exports, __webpack_require__) {
700
+
701
+ var is = __webpack_require__(5);
702
+ var delegate = __webpack_require__(6);
703
+
704
+ /**
705
+ * Validates all params and calls the right
706
+ * listener function based on its target type.
707
+ *
708
+ * @param {String|HTMLElement|HTMLCollection|NodeList} target
709
+ * @param {String} type
710
+ * @param {Function} callback
711
+ * @return {Object}
712
+ */
713
+ function listen(target, type, callback) {
714
+ if (!target && !type && !callback) {
715
+ throw new Error('Missing required arguments');
716
+ }
717
+
718
+ if (!is.string(type)) {
719
+ throw new TypeError('Second argument must be a String');
720
+ }
721
+
722
+ if (!is.fn(callback)) {
723
+ throw new TypeError('Third argument must be a Function');
724
+ }
725
+
726
+ if (is.node(target)) {
727
+ return listenNode(target, type, callback);
728
+ }
729
+ else if (is.nodeList(target)) {
730
+ return listenNodeList(target, type, callback);
731
+ }
732
+ else if (is.string(target)) {
733
+ return listenSelector(target, type, callback);
734
+ }
735
+ else {
736
+ throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
737
+ }
738
+ }
739
+
740
+ /**
741
+ * Adds an event listener to a HTML element
742
+ * and returns a remove listener function.
743
+ *
744
+ * @param {HTMLElement} node
745
+ * @param {String} type
746
+ * @param {Function} callback
747
+ * @return {Object}
748
+ */
749
+ function listenNode(node, type, callback) {
750
+ node.addEventListener(type, callback);
751
+
752
+ return {
753
+ destroy: function() {
754
+ node.removeEventListener(type, callback);
755
+ }
756
+ }
757
+ }
758
+
759
+ /**
760
+ * Add an event listener to a list of HTML elements
761
+ * and returns a remove listener function.
762
+ *
763
+ * @param {NodeList|HTMLCollection} nodeList
764
+ * @param {String} type
765
+ * @param {Function} callback
766
+ * @return {Object}
767
+ */
768
+ function listenNodeList(nodeList, type, callback) {
769
+ Array.prototype.forEach.call(nodeList, function(node) {
770
+ node.addEventListener(type, callback);
771
+ });
772
+
773
+ return {
774
+ destroy: function() {
775
+ Array.prototype.forEach.call(nodeList, function(node) {
776
+ node.removeEventListener(type, callback);
777
+ });
778
+ }
779
+ }
780
+ }
781
+
782
+ /**
783
+ * Add an event listener to a selector
784
+ * and returns a remove listener function.
785
+ *
786
+ * @param {String} selector
787
+ * @param {String} type
788
+ * @param {Function} callback
789
+ * @return {Object}
790
+ */
791
+ function listenSelector(selector, type, callback) {
792
+ return delegate(document.body, selector, type, callback);
793
+ }
794
+
795
+ module.exports = listen;
796
+
797
+
798
+ /***/ }),
799
+ /* 5 */
800
+ /***/ (function(module, exports) {
801
+
802
+ /**
803
+ * Check if argument is a HTML element.
804
+ *
805
+ * @param {Object} value
806
+ * @return {Boolean}
807
+ */
808
+ exports.node = function(value) {
809
+ return value !== undefined
810
+ && value instanceof HTMLElement
811
+ && value.nodeType === 1;
812
+ };
813
+
814
+ /**
815
+ * Check if argument is a list of HTML elements.
816
+ *
817
+ * @param {Object} value
818
+ * @return {Boolean}
819
+ */
820
+ exports.nodeList = function(value) {
821
+ var type = Object.prototype.toString.call(value);
822
+
823
+ return value !== undefined
824
+ && (type === '[object NodeList]' || type === '[object HTMLCollection]')
825
+ && ('length' in value)
826
+ && (value.length === 0 || exports.node(value[0]));
827
+ };
828
+
829
+ /**
830
+ * Check if argument is a string.
831
+ *
832
+ * @param {Object} value
833
+ * @return {Boolean}
834
+ */
835
+ exports.string = function(value) {
836
+ return typeof value === 'string'
837
+ || value instanceof String;
838
+ };
839
+
840
+ /**
841
+ * Check if argument is a function.
842
+ *
843
+ * @param {Object} value
844
+ * @return {Boolean}
845
+ */
846
+ exports.fn = function(value) {
847
+ var type = Object.prototype.toString.call(value);
848
+
849
+ return type === '[object Function]';
850
+ };
851
+
852
+
853
+ /***/ }),
854
+ /* 6 */
855
+ /***/ (function(module, exports, __webpack_require__) {
856
+
857
+ var closest = __webpack_require__(7);
858
+
859
+ /**
860
+ * Delegates event to a selector.
861
+ *
862
+ * @param {Element} element
863
+ * @param {String} selector
864
+ * @param {String} type
865
+ * @param {Function} callback
866
+ * @param {Boolean} useCapture
867
+ * @return {Object}
868
+ */
869
+ function _delegate(element, selector, type, callback, useCapture) {
870
+ var listenerFn = listener.apply(this, arguments);
871
+
872
+ element.addEventListener(type, listenerFn, useCapture);
873
+
874
+ return {
875
+ destroy: function() {
876
+ element.removeEventListener(type, listenerFn, useCapture);
877
+ }
878
+ }
879
+ }
880
+
881
+ /**
882
+ * Delegates event to a selector.
883
+ *
884
+ * @param {Element|String|Array} [elements]
885
+ * @param {String} selector
886
+ * @param {String} type
887
+ * @param {Function} callback
888
+ * @param {Boolean} useCapture
889
+ * @return {Object}
890
+ */
891
+ function delegate(elements, selector, type, callback, useCapture) {
892
+ // Handle the regular Element usage
893
+ if (typeof elements.addEventListener === 'function') {
894
+ return _delegate.apply(null, arguments);
895
+ }
896
+
897
+ // Handle Element-less usage, it defaults to global delegation
898
+ if (typeof type === 'function') {
899
+ // Use `document` as the first parameter, then apply arguments
900
+ // This is a short way to .unshift `arguments` without running into deoptimizations
901
+ return _delegate.bind(null, document).apply(null, arguments);
902
+ }
903
+
904
+ // Handle Selector-based usage
905
+ if (typeof elements === 'string') {
906
+ elements = document.querySelectorAll(elements);
907
+ }
908
+
909
+ // Handle Array-like based usage
910
+ return Array.prototype.map.call(elements, function (element) {
911
+ return _delegate(element, selector, type, callback, useCapture);
912
+ });
913
+ }
914
+
915
+ /**
916
+ * Finds closest match and invokes callback.
917
+ *
918
+ * @param {Element} element
919
+ * @param {String} selector
920
+ * @param {String} type
921
+ * @param {Function} callback
922
+ * @return {Function}
923
+ */
924
+ function listener(element, selector, type, callback) {
925
+ return function(e) {
926
+ e.delegateTarget = closest(e.target, selector);
927
+
928
+ if (e.delegateTarget) {
929
+ callback.call(element, e);
930
+ }
931
+ }
932
+ }
933
+
934
+ module.exports = delegate;
935
+
936
+
937
+ /***/ }),
938
+ /* 7 */
939
+ /***/ (function(module, exports) {
940
+
941
+ var DOCUMENT_NODE_TYPE = 9;
942
+
943
+ /**
944
+ * A polyfill for Element.matches()
945
+ */
946
+ if (typeof Element !== 'undefined' && !Element.prototype.matches) {
947
+ var proto = Element.prototype;
948
+
949
+ proto.matches = proto.matchesSelector ||
950
+ proto.mozMatchesSelector ||
951
+ proto.msMatchesSelector ||
952
+ proto.oMatchesSelector ||
953
+ proto.webkitMatchesSelector;
954
+ }
955
+
956
+ /**
957
+ * Finds the closest parent that matches a selector.
958
+ *
959
+ * @param {Element} element
960
+ * @param {String} selector
961
+ * @return {Function}
962
+ */
963
+ function closest (element, selector) {
964
+ while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {
965
+ if (typeof element.matches === 'function' &&
966
+ element.matches(selector)) {
967
+ return element;
968
+ }
969
+ element = element.parentNode;
970
+ }
971
+ }
972
+
973
+ module.exports = closest;
974
+
975
+
976
+ /***/ })
977
+ /******/ ]);
978
+ });