Update clipboard.js

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2017-03-29 00:26:05 +02:00
parent 2c682ad34d
commit e8d068af1e
No known key found for this signature in database
GPG Key ID: F941078878347C0C
2 changed files with 249 additions and 213 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "clipboard", "name": "clipboard",
"version": "1.5.12", "version": "1.6.1",
"description": "Modern copy to clipboard. No Flash. Just 2kb", "description": "Modern copy to clipboard. No Flash. Just 2kb",
"license": "MIT", "license": "MIT",
"main": "dist/clipboard.js", "main": "dist/clipboard.js",
@ -20,11 +20,11 @@
"cut" "cut"
], ],
"homepage": "https://github.com/zenorocha/clipboard.js", "homepage": "https://github.com/zenorocha/clipboard.js",
"_release": "1.5.12", "_release": "1.6.1",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.5.12", "tag": "v1.6.1",
"commit": "eb7418b51bb3c963893d83954c5cfa4de3f7f527" "commit": "f59d4e6b4db55b0f462eeb96fb74db3469e0765d"
}, },
"_source": "https://github.com/zenorocha/clipboard.js.git", "_source": "https://github.com/zenorocha/clipboard.js.git",
"_target": "^1.5.12", "_target": "^1.5.12",

View File

@ -1,23 +1,43 @@
/*! /*!
* clipboard.js v1.5.12 * clipboard.js v1.6.1
* 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(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){
var matches = require('matches-selector') var DOCUMENT_NODE_TYPE = 9;
module.exports = function (element, selector, checkYoSelf) { /**
var parent = checkYoSelf ? element : element.parentNode * A polyfill for Element.matches()
*/
if (typeof Element !== 'undefined' && !Element.prototype.matches) {
var proto = Element.prototype;
while (parent && parent !== document) { proto.matches = proto.matchesSelector ||
if (matches(parent, selector)) return parent; proto.mozMatchesSelector ||
parent = parent.parentNode proto.msMatchesSelector ||
} proto.oMatchesSelector ||
proto.webkitMatchesSelector;
} }
},{"matches-selector":5}],2:[function(require,module,exports){ /**
var closest = require('closest'); * 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 (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. * Delegates event to a selector.
@ -52,7 +72,7 @@ function delegate(element, selector, type, callback, useCapture) {
*/ */
function listener(element, selector, type, callback) { function listener(element, selector, type, callback) {
return function(e) { return function(e) {
e.delegateTarget = closest(e.target, selector, true); e.delegateTarget = closest(e.target, selector);
if (e.delegateTarget) { if (e.delegateTarget) {
callback.call(element, e); callback.call(element, e);
@ -62,7 +82,7 @@ function listener(element, selector, type, callback) {
module.exports = delegate; module.exports = delegate;
},{"closest":1}],3:[function(require,module,exports){ },{"./closest":1}],3:[function(require,module,exports){
/** /**
* Check if argument is a HTML element. * Check if argument is a HTML element.
* *
@ -211,54 +231,28 @@ function listenSelector(selector, type, callback) {
module.exports = listen; module.exports = listen;
},{"./is":3,"delegate":2}],5:[function(require,module,exports){ },{"./is":3,"delegate":2}],5:[function(require,module,exports){
/**
* Element prototype.
*/
var proto = Element.prototype;
/**
* Vendor function.
*/
var vendor = proto.matchesSelector
|| proto.webkitMatchesSelector
|| proto.mozMatchesSelector
|| proto.msMatchesSelector
|| proto.oMatchesSelector;
/**
* Expose `match()`.
*/
module.exports = match;
/**
* Match `el` to `selector`.
*
* @param {Element} el
* @param {String} selector
* @return {Boolean}
* @api public
*/
function match(el, selector) {
if (vendor) return vendor.call(el, selector);
var nodes = el.parentNode.querySelectorAll(selector);
for (var i = 0; i < nodes.length; ++i) {
if (nodes[i] == el) return true;
}
return false;
}
},{}],6:[function(require,module,exports){
function select(element) { function select(element) {
var selectedText; var selectedText;
if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') { if (element.nodeName === 'SELECT') {
element.focus(); 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); element.setSelectionRange(0, element.value.length);
if (!isReadOnly) {
element.removeAttribute('readonly');
}
selectedText = element.value; selectedText = element.value;
} }
else { else {
@ -281,14 +275,14 @@ function select(element) {
module.exports = select; module.exports = select;
},{}],7:[function(require,module,exports){ },{}],6:[function(require,module,exports){
function E () { function E () {
// Keep this empty so it's easier to inherit from // Keep this empty so it's easier to inherit from
// (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
} }
E.prototype = { E.prototype = {
on: function (name, callback, ctx) { on: function (name, callback, ctx) {
var e = this.e || (this.e = {}); var e = this.e || (this.e = {});
(e[name] || (e[name] = [])).push({ (e[name] || (e[name] = [])).push({
@ -349,7 +343,7 @@ E.prototype = {
module.exports = E; module.exports = E;
},{}],8:[function(require,module,exports){ },{}],7:[function(require,module,exports){
(function (global, factory) { (function (global, factory) {
if (typeof define === "function" && define.amd) { if (typeof define === "function" && define.amd) {
define(['module', 'select'], factory); define(['module', 'select'], factory);
@ -376,7 +370,7 @@ module.exports = E;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj; return typeof obj;
} : function (obj) { } : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}; };
function _classCallCheck(instance, Constructor) { function _classCallCheck(instance, Constructor) {
@ -407,7 +401,6 @@ module.exports = E;
/** /**
* @param {Object} options * @param {Object} options
*/ */
function ClipboardAction(options) { function ClipboardAction(options) {
_classCallCheck(this, ClipboardAction); _classCallCheck(this, ClipboardAction);
@ -421,122 +414,125 @@ module.exports = E;
*/ */
ClipboardAction.prototype.resolveOptions = function resolveOptions() { _createClass(ClipboardAction, [{
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; key: 'resolveOptions',
value: function resolveOptions() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
this.action = options.action; this.action = options.action;
this.emitter = options.emitter; this.emitter = options.emitter;
this.target = options.target; this.target = options.target;
this.text = options.text; this.text = options.text;
this.trigger = options.trigger; this.trigger = options.trigger;
this.selectedText = ''; this.selectedText = '';
};
ClipboardAction.prototype.initSelection = function initSelection() {
if (this.text) {
this.selectFake();
} else if (this.target) {
this.selectTarget();
} }
}; }, {
key: 'initSelection',
ClipboardAction.prototype.selectFake = function selectFake() { value: function initSelection() {
var _this = this; if (this.text) {
this.selectFake();
var isRTL = document.documentElement.getAttribute('dir') == 'rtl'; } else if (this.target) {
this.selectTarget();
this.removeFake(); }
this.fakeHandlerCallback = function () {
return _this.removeFake();
};
this.fakeHandler = document.body.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
this.fakeElem.style.top = (window.pageYOffset || document.documentElement.scrollTop) + 'px';
this.fakeElem.setAttribute('readonly', '');
this.fakeElem.value = this.text;
document.body.appendChild(this.fakeElem);
this.selectedText = (0, _select2.default)(this.fakeElem);
this.copyText();
};
ClipboardAction.prototype.removeFake = function removeFake() {
if (this.fakeHandler) {
document.body.removeEventListener('click', this.fakeHandlerCallback);
this.fakeHandler = null;
this.fakeHandlerCallback = null;
} }
}, {
key: 'selectFake',
value: function selectFake() {
var _this = this;
if (this.fakeElem) { var isRTL = document.documentElement.getAttribute('dir') == 'rtl';
document.body.removeChild(this.fakeElem);
this.fakeElem = null; this.removeFake();
this.fakeHandlerCallback = function () {
return _this.removeFake();
};
this.fakeHandler = document.body.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;
document.body.appendChild(this.fakeElem);
this.selectedText = (0, _select2.default)(this.fakeElem);
this.copyText();
} }
}; }, {
key: 'removeFake',
value: function removeFake() {
if (this.fakeHandler) {
document.body.removeEventListener('click', this.fakeHandlerCallback);
this.fakeHandler = null;
this.fakeHandlerCallback = null;
}
ClipboardAction.prototype.selectTarget = function selectTarget() { if (this.fakeElem) {
this.selectedText = (0, _select2.default)(this.target); document.body.removeChild(this.fakeElem);
this.copyText(); this.fakeElem = null;
}; }
ClipboardAction.prototype.copyText = function copyText() {
var succeeded = undefined;
try {
succeeded = document.execCommand(this.action);
} catch (err) {
succeeded = false;
} }
}, {
key: 'selectTarget',
value: function selectTarget() {
this.selectedText = (0, _select2.default)(this.target);
this.copyText();
}
}, {
key: 'copyText',
value: function copyText() {
var succeeded = void 0;
this.handleResult(succeeded); try {
}; succeeded = document.execCommand(this.action);
} catch (err) {
succeeded = false;
}
ClipboardAction.prototype.handleResult = function handleResult(succeeded) { this.handleResult(succeeded);
if (succeeded) { }
this.emitter.emit('success', { }, {
key: 'handleResult',
value: function handleResult(succeeded) {
this.emitter.emit(succeeded ? 'success' : 'error', {
action: this.action, action: this.action,
text: this.selectedText, text: this.selectedText,
trigger: this.trigger, trigger: this.trigger,
clearSelection: this.clearSelection.bind(this) clearSelection: this.clearSelection.bind(this)
}); });
} else {
this.emitter.emit('error', {
action: this.action,
trigger: this.trigger,
clearSelection: this.clearSelection.bind(this)
});
} }
}; }, {
key: 'clearSelection',
value: function clearSelection() {
if (this.target) {
this.target.blur();
}
ClipboardAction.prototype.clearSelection = function clearSelection() { window.getSelection().removeAllRanges();
if (this.target) {
this.target.blur();
} }
}, {
window.getSelection().removeAllRanges(); key: 'destroy',
}; value: function destroy() {
this.removeFake();
ClipboardAction.prototype.destroy = function destroy() { }
this.removeFake(); }, {
};
_createClass(ClipboardAction, [{
key: 'action', key: 'action',
set: function set() { set: function set() {
var action = arguments.length <= 0 || arguments[0] === undefined ? 'copy' : arguments[0]; var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';
this._action = action; this._action = action;
@ -577,7 +573,7 @@ module.exports = E;
module.exports = ClipboardAction; module.exports = ClipboardAction;
}); });
},{"select":6}],9:[function(require,module,exports){ },{"select":5}],8:[function(require,module,exports){
(function (global, factory) { (function (global, factory) {
if (typeof define === "function" && define.amd) { if (typeof define === "function" && define.amd) {
define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory); define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);
@ -611,6 +607,24 @@ module.exports = E;
} }
} }
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;
};
}();
function _possibleConstructorReturn(self, call) { function _possibleConstructorReturn(self, call) {
if (!self) { if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@ -642,11 +656,10 @@ module.exports = E;
* @param {String|HTMLElement|HTMLCollection|NodeList} trigger * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
* @param {Object} options * @param {Object} options
*/ */
function Clipboard(trigger, options) { function Clipboard(trigger, options) {
_classCallCheck(this, Clipboard); _classCallCheck(this, Clipboard);
var _this = _possibleConstructorReturn(this, _Emitter.call(this)); var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));
_this.resolveOptions(options); _this.resolveOptions(options);
_this.listenClick(trigger); _this.listenClick(trigger);
@ -660,62 +673,85 @@ module.exports = E;
*/ */
Clipboard.prototype.resolveOptions = function resolveOptions() { _createClass(Clipboard, [{
var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; 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.action = typeof options.action === 'function' ? options.action : this.defaultAction;
this.target = typeof options.target === 'function' ? options.target : this.defaultTarget; this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
this.text = typeof options.text === 'function' ? options.text : this.defaultText; this.text = typeof options.text === 'function' ? options.text : this.defaultText;
};
Clipboard.prototype.listenClick = function listenClick(trigger) {
var _this2 = this;
this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {
return _this2.onClick(e);
});
};
Clipboard.prototype.onClick = function onClick(e) {
var trigger = e.delegateTarget || e.currentTarget;
if (this.clipboardAction) {
this.clipboardAction = null;
} }
}, {
key: 'listenClick',
value: function listenClick(trigger) {
var _this2 = this;
this.clipboardAction = new _clipboardAction2.default({ this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {
action: this.action(trigger), return _this2.onClick(e);
target: this.target(trigger), });
text: this.text(trigger),
trigger: trigger,
emitter: this
});
};
Clipboard.prototype.defaultAction = function defaultAction(trigger) {
return getAttributeValue('action', trigger);
};
Clipboard.prototype.defaultTarget = function defaultTarget(trigger) {
var selector = getAttributeValue('target', trigger);
if (selector) {
return document.querySelector(selector);
} }
}; }, {
key: 'onClick',
value: function onClick(e) {
var trigger = e.delegateTarget || e.currentTarget;
Clipboard.prototype.defaultText = function defaultText(trigger) { if (this.clipboardAction) {
return getAttributeValue('text', trigger); this.clipboardAction = null;
}; }
Clipboard.prototype.destroy = function destroy() { this.clipboardAction = new _clipboardAction2.default({
this.listener.destroy(); action: this.action(trigger),
target: this.target(trigger),
if (this.clipboardAction) { text: this.text(trigger),
this.clipboardAction.destroy(); trigger: trigger,
this.clipboardAction = null; emitter: this
});
} }
}; }, {
key: 'defaultAction',
value: function defaultAction(trigger) {
return getAttributeValue('action', trigger);
}
}, {
key: 'defaultTarget',
value: function defaultTarget(trigger) {
var selector = getAttributeValue('target', trigger);
if (selector) {
return document.querySelector(selector);
}
}
}, {
key: 'defaultText',
value: function defaultText(trigger) {
return getAttributeValue('text', trigger);
}
}, {
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; return Clipboard;
}(_tinyEmitter2.default); }(_tinyEmitter2.default);
@ -738,5 +774,5 @@ module.exports = E;
module.exports = Clipboard; module.exports = Clipboard;
}); });
},{"./clipboard-action":8,"good-listener":4,"tiny-emitter":7}]},{},[9])(9) },{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)
}); });