mirror of
https://github.com/zenorocha/clipboard.js.git
synced 2023-08-10 21:12:48 +03:00
Release v2.0.0
This commit is contained in:
parent
9086f3ed64
commit
43beb07bac
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "clipboard",
|
"name": "clipboard",
|
||||||
"version": "1.7.1",
|
"version": "2.0.0",
|
||||||
"description": "Modern copy to clipboard. No Flash. Just 2kb",
|
"description": "Modern copy to clipboard. No Flash. Just 3kb",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"main": "dist/clipboard.js",
|
"main": "dist/clipboard.js",
|
||||||
"ignore": [
|
"ignore": [
|
||||||
|
853
dist/clipboard.js
vendored
853
dist/clipboard.js
vendored
@ -1,355 +1,97 @@
|
|||||||
/*!
|
/*!
|
||||||
* clipboard.js v1.7.1
|
* clipboard.js v2.0.0
|
||||||
* https://zenorocha.github.io/clipboard.js
|
* https://zenorocha.github.io/clipboard.js
|
||||||
*
|
*
|
||||||
* Licensed MIT © Zeno Rocha
|
* Licensed MIT © Zeno Rocha
|
||||||
*/
|
*/
|
||||||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
(function webpackUniversalModuleDefinition(root, factory) {
|
||||||
var DOCUMENT_NODE_TYPE = 9;
|
if(typeof exports === 'object' && typeof module === 'object')
|
||||||
|
module.exports = factory();
|
||||||
|
else if(typeof define === 'function' && define.amd)
|
||||||
|
define([], factory);
|
||||||
|
else if(typeof exports === 'object')
|
||||||
|
exports["ClipboardJS"] = factory();
|
||||||
|
else
|
||||||
|
root["ClipboardJS"] = factory();
|
||||||
|
})(this, function() {
|
||||||
|
return /******/ (function(modules) { // webpackBootstrap
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var installedModules = {};
|
||||||
|
/******/
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
/******/
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ if(installedModules[moduleId]) {
|
||||||
|
/******/ return installedModules[moduleId].exports;
|
||||||
|
/******/ }
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = installedModules[moduleId] = {
|
||||||
|
/******/ i: moduleId,
|
||||||
|
/******/ l: false,
|
||||||
|
/******/ exports: {}
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ // Flag the module as loaded
|
||||||
|
/******/ module.l = true;
|
||||||
|
/******/
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/******/
|
||||||
|
/******/ // expose the modules object (__webpack_modules__)
|
||||||
|
/******/ __webpack_require__.m = modules;
|
||||||
|
/******/
|
||||||
|
/******/ // expose the module cache
|
||||||
|
/******/ __webpack_require__.c = installedModules;
|
||||||
|
/******/
|
||||||
|
/******/ // identity function for calling harmony imports with the correct context
|
||||||
|
/******/ __webpack_require__.i = function(value) { return value; };
|
||||||
|
/******/
|
||||||
|
/******/ // define getter function for harmony exports
|
||||||
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||||||
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
||||||
|
/******/ Object.defineProperty(exports, name, {
|
||||||
|
/******/ configurable: false,
|
||||||
|
/******/ enumerable: true,
|
||||||
|
/******/ get: getter
|
||||||
|
/******/ });
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||||
|
/******/ __webpack_require__.n = function(module) {
|
||||||
|
/******/ var getter = module && module.__esModule ?
|
||||||
|
/******/ function getDefault() { return module['default']; } :
|
||||||
|
/******/ function getModuleExports() { return module; };
|
||||||
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
||||||
|
/******/ return getter;
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Object.prototype.hasOwnProperty.call
|
||||||
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||||||
|
/******/
|
||||||
|
/******/ // __webpack_public_path__
|
||||||
|
/******/ __webpack_require__.p = "";
|
||||||
|
/******/
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ return __webpack_require__(__webpack_require__.s = 3);
|
||||||
|
/******/ })
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ ([
|
||||||
|
/* 0 */
|
||||||
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
/**
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||||||
* A polyfill for Element.matches()
|
if (true) {
|
||||||
*/
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(7)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||||||
if (typeof Element !== 'undefined' && !Element.prototype.matches) {
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||||||
var proto = Element.prototype;
|
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||||||
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||||||
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;
|
|
||||||
|
|
||||||
},{}],2:[function(require,module,exports){
|
|
||||||
var closest = require('./closest');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
},{"./closest":1}],3:[function(require,module,exports){
|
|
||||||
/**
|
|
||||||
* 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]';
|
|
||||||
};
|
|
||||||
|
|
||||||
},{}],4:[function(require,module,exports){
|
|
||||||
var is = require('./is');
|
|
||||||
var delegate = require('delegate');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
|
|
||||||
},{"./is":3,"delegate":2}],5:[function(require,module,exports){
|
|
||||||
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;
|
|
||||||
|
|
||||||
},{}],6:[function(require,module,exports){
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
},{}],7:[function(require,module,exports){
|
|
||||||
(function (global, factory) {
|
|
||||||
if (typeof define === "function" && define.amd) {
|
|
||||||
define(['module', 'select'], factory);
|
|
||||||
} else if (typeof exports !== "undefined") {
|
} else if (typeof exports !== "undefined") {
|
||||||
factory(module, require('select'));
|
factory(module, require('select'));
|
||||||
} else {
|
} else {
|
||||||
@ -577,10 +319,189 @@ module.exports = E;
|
|||||||
module.exports = ClipboardAction;
|
module.exports = ClipboardAction;
|
||||||
});
|
});
|
||||||
|
|
||||||
},{"select":5}],8:[function(require,module,exports){
|
/***/ }),
|
||||||
(function (global, factory) {
|
/* 1 */
|
||||||
if (typeof define === "function" && define.amd) {
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);
|
|
||||||
|
var is = __webpack_require__(6);
|
||||||
|
var delegate = __webpack_require__(5);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
/* 2 */
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
/* 3 */
|
||||||
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
|
||||||
|
if (true) {
|
||||||
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, __webpack_require__(0), __webpack_require__(2), __webpack_require__(1)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
|
||||||
|
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
|
||||||
|
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
|
||||||
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
||||||
} else if (typeof exports !== "undefined") {
|
} else if (typeof exports !== "undefined") {
|
||||||
factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));
|
factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));
|
||||||
} else {
|
} else {
|
||||||
@ -786,5 +707,233 @@ module.exports = E;
|
|||||||
module.exports = Clipboard;
|
module.exports = Clipboard;
|
||||||
});
|
});
|
||||||
|
|
||||||
},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)
|
/***/ }),
|
||||||
|
/* 4 */
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
var DOCUMENT_NODE_TYPE = 9;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
/* 5 */
|
||||||
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
var closest = __webpack_require__(4);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
/* 6 */
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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]';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
/* 7 */
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
/******/ ]);
|
||||||
});
|
});
|
6
dist/clipboard.min.js
vendored
6
dist/clipboard.min.js
vendored
File diff suppressed because one or more lines are too long
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
Package.describe({
|
Package.describe({
|
||||||
name: "zenorocha:clipboard",
|
name: "zenorocha:clipboard",
|
||||||
summary: "Modern copy to clipboard. No Flash. Just 2kb.",
|
summary: "Modern copy to clipboard. No Flash. Just 3kb.",
|
||||||
version: "1.7.1",
|
version: "2.0.0",
|
||||||
git: "https://github.com/zenorocha/clipboard.js"
|
git: "https://github.com/zenorocha/clipboard.js"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "clipboard",
|
"name": "clipboard",
|
||||||
"version": "1.7.1",
|
"version": "2.0.0",
|
||||||
"description": "Modern copy to clipboard. No Flash. Just 2kb",
|
"description": "Modern copy to clipboard. No Flash. Just 2kb",
|
||||||
"repository": "zenorocha/clipboard.js",
|
"repository": "zenorocha/clipboard.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user