clipboard
Advanced tools
Comparing version 2.0.2 to 2.0.3
/*! | ||
* clipboard.js v2.0.2 | ||
* clipboard.js v2.0.3 | ||
* https://zenorocha.github.io/clipboard.js | ||
@@ -100,98 +100,880 @@ * | ||
/******/ // Load entry module and return exports | ||
/******/ return __webpack_require__(__webpack_require__.s = "./src/clipboard.js"); | ||
/******/ return __webpack_require__(__webpack_require__.s = 0); | ||
/******/ }) | ||
/************************************************************************/ | ||
/******/ ({ | ||
/******/ ([ | ||
/* 0 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
/***/ "./node_modules/delegate/src/closest.js": | ||
/*!**********************************************!*\ | ||
!*** ./node_modules/delegate/src/closest.js ***! | ||
\**********************************************/ | ||
/*! no static exports found */ | ||
/***/ (function(module, exports) { | ||
"use strict"; | ||
eval("var DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n//# sourceURL=webpack://ClipboardJS/./node_modules/delegate/src/closest.js?"); | ||
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; }; | ||
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; }; }(); | ||
var _clipboardAction = __webpack_require__(1); | ||
var _clipboardAction2 = _interopRequireDefault(_clipboardAction); | ||
var _tinyEmitter = __webpack_require__(3); | ||
var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter); | ||
var _goodListener = __webpack_require__(4); | ||
var _goodListener2 = _interopRequireDefault(_goodListener); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
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; } | ||
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; } | ||
/** | ||
* Base class which takes one or more elements, adds event listeners to them, | ||
* and instantiates a new `ClipboardAction` on each click. | ||
*/ | ||
var Clipboard = function (_Emitter) { | ||
_inherits(Clipboard, _Emitter); | ||
/** | ||
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger | ||
* @param {Object} options | ||
*/ | ||
function Clipboard(trigger, options) { | ||
_classCallCheck(this, Clipboard); | ||
var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this)); | ||
_this.resolveOptions(options); | ||
_this.listenClick(trigger); | ||
return _this; | ||
} | ||
/** | ||
* Defines if attributes would be resolved using internal setter functions | ||
* or custom functions that were passed in the constructor. | ||
* @param {Object} options | ||
*/ | ||
_createClass(Clipboard, [{ | ||
key: 'resolveOptions', | ||
value: function resolveOptions() { | ||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
this.action = typeof options.action === 'function' ? options.action : this.defaultAction; | ||
this.target = typeof options.target === 'function' ? options.target : this.defaultTarget; | ||
this.text = typeof options.text === 'function' ? options.text : this.defaultText; | ||
this.container = _typeof(options.container) === 'object' ? options.container : document.body; | ||
} | ||
/** | ||
* Adds a click event listener to the passed trigger. | ||
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger | ||
*/ | ||
}, { | ||
key: 'listenClick', | ||
value: function listenClick(trigger) { | ||
var _this2 = this; | ||
this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) { | ||
return _this2.onClick(e); | ||
}); | ||
} | ||
/** | ||
* Defines a new `ClipboardAction` on each click event. | ||
* @param {Event} e | ||
*/ | ||
}, { | ||
key: 'onClick', | ||
value: function onClick(e) { | ||
var trigger = e.delegateTarget || e.currentTarget; | ||
if (this.clipboardAction) { | ||
this.clipboardAction = null; | ||
} | ||
this.clipboardAction = new _clipboardAction2.default({ | ||
action: this.action(trigger), | ||
target: this.target(trigger), | ||
text: this.text(trigger), | ||
container: this.container, | ||
trigger: trigger, | ||
emitter: this | ||
}); | ||
} | ||
/** | ||
* Default `action` lookup function. | ||
* @param {Element} trigger | ||
*/ | ||
}, { | ||
key: 'defaultAction', | ||
value: function defaultAction(trigger) { | ||
return getAttributeValue('action', trigger); | ||
} | ||
/** | ||
* Default `target` lookup function. | ||
* @param {Element} trigger | ||
*/ | ||
}, { | ||
key: 'defaultTarget', | ||
value: function defaultTarget(trigger) { | ||
var selector = getAttributeValue('target', trigger); | ||
if (selector) { | ||
return document.querySelector(selector); | ||
} | ||
} | ||
/** | ||
* Returns the support of the given action, or all actions if no action is | ||
* given. | ||
* @param {String} [action] | ||
*/ | ||
}, { | ||
key: 'defaultText', | ||
/** | ||
* Default `text` lookup function. | ||
* @param {Element} trigger | ||
*/ | ||
value: function defaultText(trigger) { | ||
return getAttributeValue('text', trigger); | ||
} | ||
/** | ||
* Destroy lifecycle. | ||
*/ | ||
}, { | ||
key: 'destroy', | ||
value: function destroy() { | ||
this.listener.destroy(); | ||
if (this.clipboardAction) { | ||
this.clipboardAction.destroy(); | ||
this.clipboardAction = null; | ||
} | ||
} | ||
}], [{ | ||
key: 'isSupported', | ||
value: function isSupported() { | ||
var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut']; | ||
var actions = typeof action === 'string' ? [action] : action; | ||
var support = !!document.queryCommandSupported; | ||
actions.forEach(function (action) { | ||
support = support && !!document.queryCommandSupported(action); | ||
}); | ||
return support; | ||
} | ||
}]); | ||
return Clipboard; | ||
}(_tinyEmitter2.default); | ||
/** | ||
* Helper function to retrieve attribute value. | ||
* @param {String} suffix | ||
* @param {Element} element | ||
*/ | ||
function getAttributeValue(suffix, element) { | ||
var attribute = 'data-clipboard-' + suffix; | ||
if (!element.hasAttribute(attribute)) { | ||
return; | ||
} | ||
return element.getAttribute(attribute); | ||
} | ||
module.exports = Clipboard; | ||
/***/ }), | ||
/***/ "./node_modules/delegate/src/delegate.js": | ||
/*!***********************************************!*\ | ||
!*** ./node_modules/delegate/src/delegate.js ***! | ||
\***********************************************/ | ||
/*! no static exports found */ | ||
/* 1 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
eval("var closest = __webpack_require__(/*! ./closest */ \"./node_modules/delegate/src/closest.js\");\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n//# sourceURL=webpack://ClipboardJS/./node_modules/delegate/src/delegate.js?"); | ||
"use strict"; | ||
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; }; | ||
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; }; }(); | ||
var _select = __webpack_require__(2); | ||
var _select2 = _interopRequireDefault(_select); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
/** | ||
* Inner class which performs selection from either `text` or `target` | ||
* properties and then executes copy or cut operations. | ||
*/ | ||
var ClipboardAction = function () { | ||
/** | ||
* @param {Object} options | ||
*/ | ||
function ClipboardAction(options) { | ||
_classCallCheck(this, ClipboardAction); | ||
this.resolveOptions(options); | ||
this.initSelection(); | ||
} | ||
/** | ||
* Defines base properties passed from constructor. | ||
* @param {Object} options | ||
*/ | ||
_createClass(ClipboardAction, [{ | ||
key: 'resolveOptions', | ||
value: function resolveOptions() { | ||
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; | ||
this.action = options.action; | ||
this.container = options.container; | ||
this.emitter = options.emitter; | ||
this.target = options.target; | ||
this.text = options.text; | ||
this.trigger = options.trigger; | ||
this.selectedText = ''; | ||
} | ||
/** | ||
* Decides which selection strategy is going to be applied based | ||
* on the existence of `text` and `target` properties. | ||
*/ | ||
}, { | ||
key: 'initSelection', | ||
value: function initSelection() { | ||
if (this.text) { | ||
this.selectFake(); | ||
} else if (this.target) { | ||
this.selectTarget(); | ||
} | ||
} | ||
/** | ||
* Creates a fake textarea element, sets its value from `text` property, | ||
* and makes a selection on it. | ||
*/ | ||
}, { | ||
key: 'selectFake', | ||
value: function selectFake() { | ||
var _this = this; | ||
var isRTL = document.documentElement.getAttribute('dir') == 'rtl'; | ||
this.removeFake(); | ||
this.fakeHandlerCallback = function () { | ||
return _this.removeFake(); | ||
}; | ||
this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true; | ||
this.fakeElem = document.createElement('textarea'); | ||
// Prevent zooming on iOS | ||
this.fakeElem.style.fontSize = '12pt'; | ||
// Reset box model | ||
this.fakeElem.style.border = '0'; | ||
this.fakeElem.style.padding = '0'; | ||
this.fakeElem.style.margin = '0'; | ||
// Move element out of screen horizontally | ||
this.fakeElem.style.position = 'absolute'; | ||
this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px'; | ||
// Move element to the same position vertically | ||
var yPosition = window.pageYOffset || document.documentElement.scrollTop; | ||
this.fakeElem.style.top = yPosition + 'px'; | ||
this.fakeElem.setAttribute('readonly', ''); | ||
this.fakeElem.value = this.text; | ||
this.container.appendChild(this.fakeElem); | ||
this.selectedText = (0, _select2.default)(this.fakeElem); | ||
this.copyText(); | ||
} | ||
/** | ||
* Only removes the fake element after another click event, that way | ||
* a user can hit `Ctrl+C` to copy because selection still exists. | ||
*/ | ||
}, { | ||
key: 'removeFake', | ||
value: function removeFake() { | ||
if (this.fakeHandler) { | ||
this.container.removeEventListener('click', this.fakeHandlerCallback); | ||
this.fakeHandler = null; | ||
this.fakeHandlerCallback = null; | ||
} | ||
if (this.fakeElem) { | ||
this.container.removeChild(this.fakeElem); | ||
this.fakeElem = null; | ||
} | ||
} | ||
/** | ||
* Selects the content from element passed on `target` property. | ||
*/ | ||
}, { | ||
key: 'selectTarget', | ||
value: function selectTarget() { | ||
this.selectedText = (0, _select2.default)(this.target); | ||
this.copyText(); | ||
} | ||
/** | ||
* Executes the copy operation based on the current selection. | ||
*/ | ||
}, { | ||
key: 'copyText', | ||
value: function copyText() { | ||
var succeeded = void 0; | ||
try { | ||
succeeded = document.execCommand(this.action); | ||
} catch (err) { | ||
succeeded = false; | ||
} | ||
this.handleResult(succeeded); | ||
} | ||
/** | ||
* Fires an event based on the copy operation result. | ||
* @param {Boolean} succeeded | ||
*/ | ||
}, { | ||
key: 'handleResult', | ||
value: function handleResult(succeeded) { | ||
this.emitter.emit(succeeded ? 'success' : 'error', { | ||
action: this.action, | ||
text: this.selectedText, | ||
trigger: this.trigger, | ||
clearSelection: this.clearSelection.bind(this) | ||
}); | ||
} | ||
/** | ||
* Moves focus away from `target` and back to the trigger, removes current selection. | ||
*/ | ||
}, { | ||
key: 'clearSelection', | ||
value: function clearSelection() { | ||
if (this.trigger) { | ||
this.trigger.focus(); | ||
} | ||
window.getSelection().removeAllRanges(); | ||
} | ||
/** | ||
* Sets the `action` to be performed which can be either 'copy' or 'cut'. | ||
* @param {String} action | ||
*/ | ||
}, { | ||
key: 'destroy', | ||
/** | ||
* Destroy lifecycle. | ||
*/ | ||
value: function destroy() { | ||
this.removeFake(); | ||
} | ||
}, { | ||
key: 'action', | ||
set: function set() { | ||
var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy'; | ||
this._action = action; | ||
if (this._action !== 'copy' && this._action !== 'cut') { | ||
throw new Error('Invalid "action" value, use either "copy" or "cut"'); | ||
} | ||
} | ||
/** | ||
* Gets the `action` property. | ||
* @return {String} | ||
*/ | ||
, | ||
get: function get() { | ||
return this._action; | ||
} | ||
/** | ||
* Sets the `target` property using an element | ||
* that will be have its content copied. | ||
* @param {Element} target | ||
*/ | ||
}, { | ||
key: 'target', | ||
set: function set(target) { | ||
if (target !== undefined) { | ||
if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) { | ||
if (this.action === 'copy' && target.hasAttribute('disabled')) { | ||
throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); | ||
} | ||
if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) { | ||
throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); | ||
} | ||
this._target = target; | ||
} else { | ||
throw new Error('Invalid "target" value, use a valid Element'); | ||
} | ||
} | ||
} | ||
/** | ||
* Gets the `target` property. | ||
* @return {String|HTMLElement} | ||
*/ | ||
, | ||
get: function get() { | ||
return this._target; | ||
} | ||
}]); | ||
return ClipboardAction; | ||
}(); | ||
module.exports = ClipboardAction; | ||
/***/ }), | ||
/***/ "./node_modules/good-listener/src/is.js": | ||
/*!**********************************************!*\ | ||
!*** ./node_modules/good-listener/src/is.js ***! | ||
\**********************************************/ | ||
/*! no static exports found */ | ||
/* 2 */ | ||
/***/ (function(module, exports) { | ||
eval("/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n//# sourceURL=webpack://ClipboardJS/./node_modules/good-listener/src/is.js?"); | ||
function select(element) { | ||
var selectedText; | ||
if (element.nodeName === 'SELECT') { | ||
element.focus(); | ||
selectedText = element.value; | ||
} | ||
else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') { | ||
var isReadOnly = element.hasAttribute('readonly'); | ||
if (!isReadOnly) { | ||
element.setAttribute('readonly', ''); | ||
} | ||
element.select(); | ||
element.setSelectionRange(0, element.value.length); | ||
if (!isReadOnly) { | ||
element.removeAttribute('readonly'); | ||
} | ||
selectedText = element.value; | ||
} | ||
else { | ||
if (element.hasAttribute('contenteditable')) { | ||
element.focus(); | ||
} | ||
var selection = window.getSelection(); | ||
var range = document.createRange(); | ||
range.selectNodeContents(element); | ||
selection.removeAllRanges(); | ||
selection.addRange(range); | ||
selectedText = selection.toString(); | ||
} | ||
return selectedText; | ||
} | ||
module.exports = select; | ||
/***/ }), | ||
/* 3 */ | ||
/***/ (function(module, exports) { | ||
/***/ "./node_modules/good-listener/src/listen.js": | ||
/*!**************************************************!*\ | ||
!*** ./node_modules/good-listener/src/listen.js ***! | ||
\**************************************************/ | ||
/*! no static exports found */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
function E () { | ||
// Keep this empty so it's easier to inherit from | ||
// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) | ||
} | ||
eval("var is = __webpack_require__(/*! ./is */ \"./node_modules/good-listener/src/is.js\");\nvar delegate = __webpack_require__(/*! delegate */ \"./node_modules/delegate/src/delegate.js\");\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n//# sourceURL=webpack://ClipboardJS/./node_modules/good-listener/src/listen.js?"); | ||
E.prototype = { | ||
on: function (name, callback, ctx) { | ||
var e = this.e || (this.e = {}); | ||
(e[name] || (e[name] = [])).push({ | ||
fn: callback, | ||
ctx: ctx | ||
}); | ||
return this; | ||
}, | ||
once: function (name, callback, ctx) { | ||
var self = this; | ||
function listener () { | ||
self.off(name, listener); | ||
callback.apply(ctx, arguments); | ||
}; | ||
listener._ = callback | ||
return this.on(name, listener, ctx); | ||
}, | ||
emit: function (name) { | ||
var data = [].slice.call(arguments, 1); | ||
var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); | ||
var i = 0; | ||
var len = evtArr.length; | ||
for (i; i < len; i++) { | ||
evtArr[i].fn.apply(evtArr[i].ctx, data); | ||
} | ||
return this; | ||
}, | ||
off: function (name, callback) { | ||
var e = this.e || (this.e = {}); | ||
var evts = e[name]; | ||
var liveEvents = []; | ||
if (evts && callback) { | ||
for (var i = 0, len = evts.length; i < len; i++) { | ||
if (evts[i].fn !== callback && evts[i].fn._ !== callback) | ||
liveEvents.push(evts[i]); | ||
} | ||
} | ||
// Remove event from queue to prevent memory leak | ||
// Suggested by https://github.com/lazd | ||
// Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 | ||
(liveEvents.length) | ||
? e[name] = liveEvents | ||
: delete e[name]; | ||
return this; | ||
} | ||
}; | ||
module.exports = E; | ||
/***/ }), | ||
/* 4 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
/***/ "./node_modules/select/src/select.js": | ||
/*!*******************************************!*\ | ||
!*** ./node_modules/select/src/select.js ***! | ||
\*******************************************/ | ||
/*! no static exports found */ | ||
/***/ (function(module, exports) { | ||
var is = __webpack_require__(5); | ||
var delegate = __webpack_require__(6); | ||
eval("function select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n//# sourceURL=webpack://ClipboardJS/./node_modules/select/src/select.js?"); | ||
/** | ||
* Validates all params and calls the right | ||
* listener function based on its target type. | ||
* | ||
* @param {String|HTMLElement|HTMLCollection|NodeList} target | ||
* @param {String} type | ||
* @param {Function} callback | ||
* @return {Object} | ||
*/ | ||
function listen(target, type, callback) { | ||
if (!target && !type && !callback) { | ||
throw new Error('Missing required arguments'); | ||
} | ||
if (!is.string(type)) { | ||
throw new TypeError('Second argument must be a String'); | ||
} | ||
if (!is.fn(callback)) { | ||
throw new TypeError('Third argument must be a Function'); | ||
} | ||
if (is.node(target)) { | ||
return listenNode(target, type, callback); | ||
} | ||
else if (is.nodeList(target)) { | ||
return listenNodeList(target, type, callback); | ||
} | ||
else if (is.string(target)) { | ||
return listenSelector(target, type, callback); | ||
} | ||
else { | ||
throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList'); | ||
} | ||
} | ||
/** | ||
* Adds an event listener to a HTML element | ||
* and returns a remove listener function. | ||
* | ||
* @param {HTMLElement} node | ||
* @param {String} type | ||
* @param {Function} callback | ||
* @return {Object} | ||
*/ | ||
function listenNode(node, type, callback) { | ||
node.addEventListener(type, callback); | ||
return { | ||
destroy: function() { | ||
node.removeEventListener(type, callback); | ||
} | ||
} | ||
} | ||
/** | ||
* Add an event listener to a list of HTML elements | ||
* and returns a remove listener function. | ||
* | ||
* @param {NodeList|HTMLCollection} nodeList | ||
* @param {String} type | ||
* @param {Function} callback | ||
* @return {Object} | ||
*/ | ||
function listenNodeList(nodeList, type, callback) { | ||
Array.prototype.forEach.call(nodeList, function(node) { | ||
node.addEventListener(type, callback); | ||
}); | ||
return { | ||
destroy: function() { | ||
Array.prototype.forEach.call(nodeList, function(node) { | ||
node.removeEventListener(type, callback); | ||
}); | ||
} | ||
} | ||
} | ||
/** | ||
* Add an event listener to a selector | ||
* and returns a remove listener function. | ||
* | ||
* @param {String} selector | ||
* @param {String} type | ||
* @param {Function} callback | ||
* @return {Object} | ||
*/ | ||
function listenSelector(selector, type, callback) { | ||
return delegate(document.body, selector, type, callback); | ||
} | ||
module.exports = listen; | ||
/***/ }), | ||
/***/ "./node_modules/tiny-emitter/index.js": | ||
/*!********************************************!*\ | ||
!*** ./node_modules/tiny-emitter/index.js ***! | ||
\********************************************/ | ||
/*! no static exports found */ | ||
/* 5 */ | ||
/***/ (function(module, exports) { | ||
eval("function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\n\n\n//# sourceURL=webpack://ClipboardJS/./node_modules/tiny-emitter/index.js?"); | ||
/** | ||
* Check if argument is a HTML element. | ||
* | ||
* @param {Object} value | ||
* @return {Boolean} | ||
*/ | ||
exports.node = function(value) { | ||
return value !== undefined | ||
&& value instanceof HTMLElement | ||
&& value.nodeType === 1; | ||
}; | ||
/** | ||
* Check if argument is a list of HTML elements. | ||
* | ||
* @param {Object} value | ||
* @return {Boolean} | ||
*/ | ||
exports.nodeList = function(value) { | ||
var type = Object.prototype.toString.call(value); | ||
return value !== undefined | ||
&& (type === '[object NodeList]' || type === '[object HTMLCollection]') | ||
&& ('length' in value) | ||
&& (value.length === 0 || exports.node(value[0])); | ||
}; | ||
/** | ||
* Check if argument is a string. | ||
* | ||
* @param {Object} value | ||
* @return {Boolean} | ||
*/ | ||
exports.string = function(value) { | ||
return typeof value === 'string' | ||
|| value instanceof String; | ||
}; | ||
/** | ||
* Check if argument is a function. | ||
* | ||
* @param {Object} value | ||
* @return {Boolean} | ||
*/ | ||
exports.fn = function(value) { | ||
var type = Object.prototype.toString.call(value); | ||
return type === '[object Function]'; | ||
}; | ||
/***/ }), | ||
/***/ "./src/clipboard-action.js": | ||
/*!*********************************!*\ | ||
!*** ./src/clipboard-action.js ***! | ||
\*********************************/ | ||
/*! no static exports found */ | ||
/* 6 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
eval("\n\nvar _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; };\n\nvar _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; }; }();\n\nvar _select = __webpack_require__(/*! select */ \"./node_modules/select/src/select.js\");\n\nvar _select2 = _interopRequireDefault(_select);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Inner class which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n */\nvar ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n\n /**\n * Decides which selection strategy is going to be applied based\n * on the existence of `text` and `target` properties.\n */\n\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n\n /**\n * Creates a fake textarea element, sets its value from `text` property,\n * and makes a selection on it.\n */\n\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = (0, _select2.default)(this.fakeElem);\n this.copyText();\n }\n\n /**\n * Only removes the fake element after another click event, that way\n * a user can hit `Ctrl+C` to copy because selection still exists.\n */\n\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n\n /**\n * Selects the content from element passed on `target` property.\n */\n\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = (0, _select2.default)(this.target);\n this.copyText();\n }\n\n /**\n * Executes the copy operation based on the current selection.\n */\n\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n\n /**\n * Fires an event based on the copy operation result.\n * @param {Boolean} succeeded\n */\n\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n\n /**\n * Moves focus away from `target` and back to the trigger, removes current selection.\n */\n\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n\n window.getSelection().removeAllRanges();\n }\n\n /**\n * Sets the `action` to be performed which can be either 'copy' or 'cut'.\n * @param {String} action\n */\n\n }, {\n key: 'destroy',\n\n\n /**\n * Destroy lifecycle.\n */\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n }\n\n /**\n * Gets the `action` property.\n * @return {String}\n */\n ,\n get: function get() {\n return this._action;\n }\n\n /**\n * Sets the `target` property using an element\n * that will be have its content copied.\n * @param {Element} target\n */\n\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n }\n\n /**\n * Gets the `target` property.\n * @return {String|HTMLElement}\n */\n ,\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n}();\n\nmodule.exports = ClipboardAction;\n\n//# sourceURL=webpack://ClipboardJS/./src/clipboard-action.js?"); | ||
var closest = __webpack_require__(7); | ||
/** | ||
* Delegates event to a selector. | ||
* | ||
* @param {Element} element | ||
* @param {String} selector | ||
* @param {String} type | ||
* @param {Function} callback | ||
* @param {Boolean} useCapture | ||
* @return {Object} | ||
*/ | ||
function _delegate(element, selector, type, callback, useCapture) { | ||
var listenerFn = listener.apply(this, arguments); | ||
element.addEventListener(type, listenerFn, useCapture); | ||
return { | ||
destroy: function() { | ||
element.removeEventListener(type, listenerFn, useCapture); | ||
} | ||
} | ||
} | ||
/** | ||
* Delegates event to a selector. | ||
* | ||
* @param {Element|String|Array} [elements] | ||
* @param {String} selector | ||
* @param {String} type | ||
* @param {Function} callback | ||
* @param {Boolean} useCapture | ||
* @return {Object} | ||
*/ | ||
function delegate(elements, selector, type, callback, useCapture) { | ||
// Handle the regular Element usage | ||
if (typeof elements.addEventListener === 'function') { | ||
return _delegate.apply(null, arguments); | ||
} | ||
// Handle Element-less usage, it defaults to global delegation | ||
if (typeof type === 'function') { | ||
// Use `document` as the first parameter, then apply arguments | ||
// This is a short way to .unshift `arguments` without running into deoptimizations | ||
return _delegate.bind(null, document).apply(null, arguments); | ||
} | ||
// Handle Selector-based usage | ||
if (typeof elements === 'string') { | ||
elements = document.querySelectorAll(elements); | ||
} | ||
// Handle Array-like based usage | ||
return Array.prototype.map.call(elements, function (element) { | ||
return _delegate(element, selector, type, callback, useCapture); | ||
}); | ||
} | ||
/** | ||
* Finds closest match and invokes callback. | ||
* | ||
* @param {Element} element | ||
* @param {String} selector | ||
* @param {String} type | ||
* @param {Function} callback | ||
* @return {Function} | ||
*/ | ||
function listener(element, selector, type, callback) { | ||
return function(e) { | ||
e.delegateTarget = closest(e.target, selector); | ||
if (e.delegateTarget) { | ||
callback.call(element, e); | ||
} | ||
} | ||
} | ||
module.exports = delegate; | ||
/***/ }), | ||
/* 7 */ | ||
/***/ (function(module, exports) { | ||
/***/ "./src/clipboard.js": | ||
/*!**************************!*\ | ||
!*** ./src/clipboard.js ***! | ||
\**************************/ | ||
/*! no static exports found */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
var DOCUMENT_NODE_TYPE = 9; | ||
"use strict"; | ||
eval("\n\nvar _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; };\n\nvar _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; }; }();\n\nvar _clipboardAction = __webpack_require__(/*! ./clipboard-action */ \"./src/clipboard-action.js\");\n\nvar _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\nvar _tinyEmitter = __webpack_require__(/*! tiny-emitter */ \"./node_modules/tiny-emitter/index.js\");\n\nvar _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\nvar _goodListener = __webpack_require__(/*! good-listener */ \"./node_modules/good-listener/src/listen.js\");\n\nvar _goodListener2 = _interopRequireDefault(_goodListener);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _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; }\n\nfunction _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; }\n\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\nvar Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n _classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n _createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = _typeof(options.container) === 'object' ? options.container : document.body;\n }\n\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new _clipboardAction2.default({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: 'defaultText',\n\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n}(_tinyEmitter2.default);\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\n\nfunction getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n\nmodule.exports = Clipboard;\n\n//# sourceURL=webpack://ClipboardJS/./src/clipboard.js?"); | ||
/** | ||
* A polyfill for Element.matches() | ||
*/ | ||
if (typeof Element !== 'undefined' && !Element.prototype.matches) { | ||
var proto = Element.prototype; | ||
proto.matches = proto.matchesSelector || | ||
proto.mozMatchesSelector || | ||
proto.msMatchesSelector || | ||
proto.oMatchesSelector || | ||
proto.webkitMatchesSelector; | ||
} | ||
/** | ||
* Finds the closest parent that matches a selector. | ||
* | ||
* @param {Element} element | ||
* @param {String} selector | ||
* @return {Function} | ||
*/ | ||
function closest (element, selector) { | ||
while (element && element.nodeType !== DOCUMENT_NODE_TYPE) { | ||
if (typeof element.matches === 'function' && | ||
element.matches(selector)) { | ||
return element; | ||
} | ||
element = element.parentNode; | ||
} | ||
} | ||
module.exports = closest; | ||
/***/ }) | ||
/******/ }); | ||
/******/ ]); | ||
}); |
@@ -1,1 +0,7 @@ | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(window,function(){return function(t){var e={};function n(o){if(e[o])return e[o].exports;var r=e[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,o){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:o})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(o,r,function(e){return t[e]}.bind(null,r));return o},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(e,n,o){return n&&t(e.prototype,n),o&&t(e,o),e}}(),i=u(n(1)),a=u(n(3)),c=u(n(4));function u(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function e(t,n){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var o=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return o.resolveOptions(n),o.listenClick(t),o}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,a.default),r(e,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===o(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,c.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new i.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),e}();function s(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=l},function(t,e,n){"use strict";var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r=function(){function t(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(e,n,o){return n&&t(e.prototype,n),o&&t(e,o),e}}(),i=function(t){return t&&t.__esModule?t:{default:t}}(n(2));var a=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.resolveOptions(e),this.initSelection()}return r(t,[{key:"resolveOptions",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":o(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),t}();t.exports=a},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,a=o.length;i<a;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=n},function(t,e,n){var o=n(5),r=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!o.string(e))throw new TypeError("Second argument must be a String");if(!o.fn(n))throw new TypeError("Third argument must be a Function");if(o.node(t))return function(t,e,n){return t.addEventListener(e,n),{destroy:function(){t.removeEventListener(e,n)}}}(t,e,n);if(o.nodeList(t))return function(t,e,n){return Array.prototype.forEach.call(t,function(t){t.addEventListener(e,n)}),{destroy:function(){Array.prototype.forEach.call(t,function(t){t.removeEventListener(e,n)})}}}(t,e,n);if(o.string(t))return function(t,e,n){return r(document.body,t,e,n)}(t,e,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},function(t,e){e.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},e.nodeList=function(t){var n=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in t&&(0===t.length||e.node(t[0]))},e.string=function(t){return"string"==typeof t||t instanceof String},e.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var o=n(7);function r(t,e,n,r,i){var a=function(t,e,n,r){return function(n){n.delegateTarget=o(n.target,e),n.delegateTarget&&r.call(t,n)}}.apply(this,arguments);return t.addEventListener(n,a,i),{destroy:function(){t.removeEventListener(n,a,i)}}}t.exports=function(t,e,n,o,i){return"function"==typeof t.addEventListener?r.apply(null,arguments):"function"==typeof n?r.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return r(t,e,n,o,i)}))}},function(t,e){var n=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var o=Element.prototype;o.matches=o.matchesSelector||o.mozMatchesSelector||o.msMatchesSelector||o.oMatchesSelector||o.webkitMatchesSelector}t.exports=function(t,e){for(;t&&t.nodeType!==n;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])}); | ||
/*! | ||
* clipboard.js v2.0.3 | ||
* https://zenorocha.github.io/clipboard.js | ||
* | ||
* Licensed MIT © Zeno Rocha | ||
*/ | ||
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(window,function(){return function(n){var o={};function r(t){if(o[t])return o[t].exports;var e=o[t]={i:t,l:!1,exports:{}};return n[t].call(e.exports,e,e.exports,r),e.l=!0,e.exports}return r.m=n,r.c=o,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=0)}([function(t,e,n){"use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=o(n(1)),c=o(n(3)),u=o(n(4));function o(t){return t&&t.__esModule?t:{default:t}}var l=function(t){function o(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,o);var n=function(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,(o.__proto__||Object.getPrototypeOf(o)).call(this));return n.resolveOptions(e),n.listenClick(t),n}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(o,c.default),i(o,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText,this.container="object"===r(t.container)?t.container:document.body}},{key:"listenClick",value:function(t){var e=this;this.listener=(0,u.default)(t,"click",function(t){return e.onClick(t)})}},{key:"onClick",value:function(t){var e=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new a.default({action:this.action(e),target:this.target(e),text:this.text(e),container:this.container,trigger:e,emitter:this})}},{key:"defaultAction",value:function(t){return s("action",t)}},{key:"defaultTarget",value:function(t){var e=s("target",t);if(e)return document.querySelector(e)}},{key:"defaultText",value:function(t){return s("text",t)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:["copy","cut"],e="string"==typeof t?[t]:t,n=!!document.queryCommandSupported;return e.forEach(function(t){n=n&&!!document.queryCommandSupported(t)}),n}}]),o}();function s(t,e){var n="data-clipboard-"+t;if(e.hasAttribute(n))return e.getAttribute(n)}t.exports=l},function(t,e,n){"use strict";var o,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function o(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(t,e,n){return e&&o(t.prototype,e),n&&o(t,n),t}}(),a=n(2),c=(o=a)&&o.__esModule?o:{default:o};var u=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.resolveOptions(t),this.initSelection()}return i(e,[{key:"resolveOptions",value:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.container=t.container,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var t=this,e="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[e?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,c.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,c.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(t){if(void 0!==t){if(!t||"object"!==(void 0===t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function(){return this._target}}]),e}();t.exports=u},function(t,e){t.exports=function(t){var e;if("SELECT"===t.nodeName)t.focus(),e=t.value;else if("INPUT"===t.nodeName||"TEXTAREA"===t.nodeName){var n=t.hasAttribute("readonly");n||t.setAttribute("readonly",""),t.select(),t.setSelectionRange(0,t.value.length),n||t.removeAttribute("readonly"),e=t.value}else{t.hasAttribute("contenteditable")&&t.focus();var o=window.getSelection(),r=document.createRange();r.selectNodeContents(t),o.removeAllRanges(),o.addRange(r),e=o.toString()}return e}},function(t,e){function n(){}n.prototype={on:function(t,e,n){var o=this.e||(this.e={});return(o[t]||(o[t]=[])).push({fn:e,ctx:n}),this},once:function(t,e,n){var o=this;function r(){o.off(t,r),e.apply(n,arguments)}return r._=e,this.on(t,r,n)},emit:function(t){for(var e=[].slice.call(arguments,1),n=((this.e||(this.e={}))[t]||[]).slice(),o=0,r=n.length;o<r;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,a=o.length;i<a;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},t.exports=n},function(t,e,n){var d=n(5),h=n(6);t.exports=function(t,e,n){if(!t&&!e&&!n)throw new Error("Missing required arguments");if(!d.string(e))throw new TypeError("Second argument must be a String");if(!d.fn(n))throw new TypeError("Third argument must be a Function");if(d.node(t))return s=e,f=n,(l=t).addEventListener(s,f),{destroy:function(){l.removeEventListener(s,f)}};if(d.nodeList(t))return a=t,c=e,u=n,Array.prototype.forEach.call(a,function(t){t.addEventListener(c,u)}),{destroy:function(){Array.prototype.forEach.call(a,function(t){t.removeEventListener(c,u)})}};if(d.string(t))return o=t,r=e,i=n,h(document.body,o,r,i);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList");var o,r,i,a,c,u,l,s,f}},function(t,n){n.node=function(t){return void 0!==t&&t instanceof HTMLElement&&1===t.nodeType},n.nodeList=function(t){var e=Object.prototype.toString.call(t);return void 0!==t&&("[object NodeList]"===e||"[object HTMLCollection]"===e)&&"length"in t&&(0===t.length||n.node(t[0]))},n.string=function(t){return"string"==typeof t||t instanceof String},n.fn=function(t){return"[object Function]"===Object.prototype.toString.call(t)}},function(t,e,n){var a=n(7);function i(t,e,n,o,r){var i=function(e,n,t,o){return function(t){t.delegateTarget=a(t.target,n),t.delegateTarget&&o.call(e,t)}}.apply(this,arguments);return t.addEventListener(n,i,r),{destroy:function(){t.removeEventListener(n,i,r)}}}t.exports=function(t,e,n,o,r){return"function"==typeof t.addEventListener?i.apply(null,arguments):"function"==typeof n?i.bind(null,document).apply(null,arguments):("string"==typeof t&&(t=document.querySelectorAll(t)),Array.prototype.map.call(t,function(t){return i(t,e,n,o,r)}))}},function(t,e){if("undefined"!=typeof Element&&!Element.prototype.matches){var n=Element.prototype;n.matches=n.matchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector||n.webkitMatchesSelector}t.exports=function(t,e){for(;t&&9!==t.nodeType;){if("function"==typeof t.matches&&t.matches(e))return t;t=t.parentNode}}}])}); |
@@ -6,3 +6,3 @@ // Package metadata for Meteor.js. | ||
summary: "Modern copy to clipboard. No Flash. Just 3kb.", | ||
version: "2.0.2", | ||
version: "2.0.3", | ||
git: "https://github.com/zenorocha/clipboard.js" | ||
@@ -9,0 +9,0 @@ }); |
{ | ||
"name": "clipboard", | ||
"version": "2.0.2", | ||
"version": "2.0.3", | ||
"description": "Modern copy to clipboard. No Flash. Just 2kb", | ||
@@ -8,3 +8,2 @@ "repository": "zenorocha/clipboard.js", | ||
"main": "dist/clipboard.js", | ||
"module": "dist/clipboard.js", | ||
"keywords": [ | ||
@@ -25,5 +24,5 @@ "clipboard", | ||
"babel-preset-env": "^1.6.1", | ||
"chai": "^3.4.1", | ||
"cross-env": "^3.1.4", | ||
"karma": "^1.3.0", | ||
"chai": "^4.2.0", | ||
"cross-env": "^5.2.0", | ||
"karma": "^3.1.1", | ||
"karma-chai": "^0.1.0", | ||
@@ -33,7 +32,7 @@ "karma-mocha": "^1.2.0", | ||
"karma-sinon": "^1.0.4", | ||
"karma-webpack": "^2.0.2", | ||
"mocha": "^3.1.2", | ||
"karma-webpack": "^3.0.5", | ||
"mocha": "^5.2.0", | ||
"phantomjs-prebuilt": "^2.1.4", | ||
"sinon": "^1.17.2", | ||
"uglifyjs-webpack-plugin": "^1.2.4", | ||
"sinon": "^7.1.1", | ||
"uglifyjs-webpack-plugin": "^2.0.1", | ||
"webpack": "^4.5.0", | ||
@@ -44,4 +43,4 @@ "webpack-cli": "^3.1.2" | ||
"build": "npm run build-debug && npm run build-min", | ||
"build-debug": "webpack --mode=development", | ||
"build-min": "cross-env NODE_ENV=production webpack --mode=production", | ||
"build-debug": "webpack", | ||
"build-min": "cross-env NODE_ENV=production webpack", | ||
"build-watch": "webpack --watch", | ||
@@ -48,0 +47,0 @@ "test": "karma start --single-run", |
@@ -15,2 +15,3 @@ const pkg = require('./package.json'); | ||
entry: './src/clipboard.js', | ||
mode: 'production', | ||
output: { | ||
@@ -28,2 +29,3 @@ filename: production ? 'clipboard.min.js' : 'clipboard.js', | ||
optimization: { | ||
minimize: production, | ||
minimizer: [ | ||
@@ -37,3 +39,3 @@ new UglifyJSPlugin({ | ||
beautify: false, | ||
comments: false | ||
comments: (node, {value, type}) => type == 'comment2' && value.startsWith('!') | ||
} | ||
@@ -40,0 +42,0 @@ } |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
82598
26
1520
2