mirror of
https://github.com/zenorocha/clipboard.js.git
synced 2023-08-10 21:12:48 +03:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43beb07bac | ||
|
|
9086f3ed64 | ||
|
|
750cf124d7 | ||
|
|
d25dcac817 | ||
|
|
f7e2f58c96 | ||
|
|
2d5b2df811 |
6
.banner
6
.banner
@@ -1,6 +0,0 @@
|
|||||||
/*!
|
|
||||||
* clipboard.js v<%= pkg.version %>
|
|
||||||
* https://zenorocha.github.io/clipboard.js
|
|
||||||
*
|
|
||||||
* Licensed MIT © Zeno Rocha
|
|
||||||
*/
|
|
||||||
@@ -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": [
|
||||||
|
|||||||
25
composer.json
Normal file
25
composer.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"name": "zenorocha/clipboardjs",
|
||||||
|
"description": "Modern copy to clipboard. No Flash. Just 3kb gzipped https://clipboardjs.com",
|
||||||
|
"type": "component",
|
||||||
|
"homepage": "https://clipboardjs.com/",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Zeno Rocha",
|
||||||
|
"url": "http://zenorocha.com/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"robloach/component-installer": "*"
|
||||||
|
},
|
||||||
|
"extra": {
|
||||||
|
"component": {
|
||||||
|
"scripts": [
|
||||||
|
"dist/clipboard.js"
|
||||||
|
],
|
||||||
|
"files": [
|
||||||
|
"dist/clipboard.min.js"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
<!-- 3. Instantiate clipboard by passing a HTML element -->
|
<!-- 3. Instantiate clipboard by passing a HTML element -->
|
||||||
<script>
|
<script>
|
||||||
var btn = document.getElementById('btn');
|
var btn = document.getElementById('btn');
|
||||||
var clipboard = new Clipboard(btn);
|
var clipboard = new ClipboardJS(btn);
|
||||||
|
|
||||||
clipboard.on('success', function(e) {
|
clipboard.on('success', function(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<!-- 3. Instantiate clipboard by passing a list of HTML elements -->
|
<!-- 3. Instantiate clipboard by passing a list of HTML elements -->
|
||||||
<script>
|
<script>
|
||||||
var btns = document.querySelectorAll('button');
|
var btns = document.querySelectorAll('button');
|
||||||
var clipboard = new Clipboard(btns);
|
var clipboard = new ClipboardJS(btns);
|
||||||
|
|
||||||
clipboard.on('success', function(e) {
|
clipboard.on('success', function(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<!-- 3. Instantiate clipboard by passing a string selector -->
|
<!-- 3. Instantiate clipboard by passing a string selector -->
|
||||||
<script>
|
<script>
|
||||||
var clipboard = new Clipboard('.btn');
|
var clipboard = new ClipboardJS('.btn');
|
||||||
|
|
||||||
clipboard.on('success', function(e) {
|
clipboard.on('success', function(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!-- 3. Instantiate clipboard -->
|
<!-- 3. Instantiate clipboard -->
|
||||||
<script>
|
<script>
|
||||||
var clipboard = new Clipboard('.btn', {
|
var clipboard = new ClipboardJS('.btn', {
|
||||||
target: function() {
|
target: function() {
|
||||||
return document.querySelector('div');
|
return document.querySelector('div');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
<!-- 3. Instantiate clipboard -->
|
<!-- 3. Instantiate clipboard -->
|
||||||
<script>
|
<script>
|
||||||
var clipboard = new Clipboard('.btn', {
|
var clipboard = new ClipboardJS('.btn', {
|
||||||
text: function() {
|
text: function() {
|
||||||
return 'to be or not to be';
|
return 'to be or not to be';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!-- 3. Instantiate clipboard -->
|
<!-- 3. Instantiate clipboard -->
|
||||||
<script>
|
<script>
|
||||||
var clipboard = new Clipboard('.btn');
|
var clipboard = new ClipboardJS('.btn');
|
||||||
|
|
||||||
clipboard.on('success', function(e) {
|
clipboard.on('success', function(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!-- 3. Instantiate clipboard -->
|
<!-- 3. Instantiate clipboard -->
|
||||||
<script>
|
<script>
|
||||||
var clipboard = new Clipboard('.btn');
|
var clipboard = new ClipboardJS('.btn');
|
||||||
|
|
||||||
clipboard.on('success', function(e) {
|
clipboard.on('success', function(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
<!-- 3. Instantiate clipboard -->
|
<!-- 3. Instantiate clipboard -->
|
||||||
<script>
|
<script>
|
||||||
var clipboard = new Clipboard('.btn');
|
var clipboard = new ClipboardJS('.btn');
|
||||||
|
|
||||||
clipboard.on('success', function(e) {
|
clipboard.on('success', function(e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
|||||||
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
@@ -1,8 +1,10 @@
|
|||||||
module.exports = function(karma) {
|
var webpackConfig = require('./webpack.config.js');
|
||||||
karma.set({
|
|
||||||
plugins: ['karma-browserify', 'karma-chai', 'karma-sinon', 'karma-mocha', 'karma-phantomjs-launcher'],
|
|
||||||
|
|
||||||
frameworks: ['browserify', 'chai', 'sinon', 'mocha'],
|
module.exports = function (karma) {
|
||||||
|
karma.set({
|
||||||
|
plugins: ['karma-webpack', 'karma-chai', 'karma-sinon', 'karma-mocha', 'karma-phantomjs-launcher'],
|
||||||
|
|
||||||
|
frameworks: ['chai', 'sinon', 'mocha'],
|
||||||
|
|
||||||
files: [
|
files: [
|
||||||
'src/**/*.js',
|
'src/**/*.js',
|
||||||
@@ -10,18 +12,20 @@ module.exports = function(karma) {
|
|||||||
'./node_modules/phantomjs-polyfill/bind-polyfill.js'
|
'./node_modules/phantomjs-polyfill/bind-polyfill.js'
|
||||||
],
|
],
|
||||||
|
|
||||||
exclude: ['test/module-systems.js'],
|
|
||||||
|
|
||||||
preprocessors: {
|
preprocessors: {
|
||||||
'src/**/*.js' : ['browserify'],
|
'src/**/*.js': ['webpack'],
|
||||||
'test/**/*.js': ['browserify']
|
'test/**/*.js': ['webpack']
|
||||||
},
|
},
|
||||||
|
|
||||||
browserify: {
|
webpack: {
|
||||||
debug: true,
|
module: webpackConfig.module,
|
||||||
transform: ['babelify']
|
plugins: webpackConfig.plugins
|
||||||
|
},
|
||||||
|
|
||||||
|
webpackMiddleware: {
|
||||||
|
stats: 'errors-only'
|
||||||
},
|
},
|
||||||
|
|
||||||
browsers: ['PhantomJS']
|
browsers: ['PhantomJS']
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|||||||
@@ -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"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
48
package.json
48
package.json
@@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"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",
|
||||||
"main": "lib/clipboard.js",
|
"main": "dist/clipboard.js",
|
||||||
|
"module": "src/clipboard.js",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"clipboard",
|
"clipboard",
|
||||||
"copy",
|
"copy",
|
||||||
@@ -16,33 +17,30 @@
|
|||||||
"tiny-emitter": "^2.0.0"
|
"tiny-emitter": "^2.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-cli": "^6.24.1",
|
"babel-cli": "^6.5.1",
|
||||||
"babel-core": "^6.24.1",
|
"babel-core": "^6.5.2",
|
||||||
"babel-plugin-transform-es2015-modules-umd": "^6.24.1",
|
"babel-loader": "^6.2.10",
|
||||||
"babel-preset-es2015": "^6.24.1",
|
"babel-plugin-transform-es2015-modules-umd": "^6.5.0",
|
||||||
"babelify": "^7.3.0",
|
"babel-preset-es2015": "^6.5.0",
|
||||||
"bannerify": "Vekat/bannerify#feature-option",
|
"chai": "^3.4.1",
|
||||||
"browserify": "^14.3.0",
|
"cross-env": "^3.1.4",
|
||||||
"chai": "^3.5.0",
|
"karma": "^1.3.0",
|
||||||
"install": "^0.9.6",
|
|
||||||
"karma": "^1.6.0",
|
|
||||||
"karma-browserify": "^5.1.1",
|
|
||||||
"karma-chai": "^0.1.0",
|
"karma-chai": "^0.1.0",
|
||||||
"karma-mocha": "^1.3.0",
|
"karma-mocha": "^1.2.0",
|
||||||
"karma-phantomjs-launcher": "^1.0.4",
|
"karma-phantomjs-launcher": "^1.0.0",
|
||||||
"karma-sinon": "^1.0.5",
|
"karma-sinon": "^1.0.4",
|
||||||
"mocha": "^3.3.0",
|
"karma-webpack": "^2.0.2",
|
||||||
"phantomjs-prebuilt": "^2.1.14",
|
"mocha": "^3.1.2",
|
||||||
"sinon": "^2.2.0",
|
"phantomjs-prebuilt": "^2.1.4",
|
||||||
"uglify-js": "^2.8.22",
|
"sinon": "^1.17.2",
|
||||||
"watchify": "^3.9.0"
|
"webpack": "^2.2.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "npm run build-debug && npm run build-min",
|
"build": "npm run build-debug && npm run build-min",
|
||||||
"build-debug": "browserify src/clipboard.js -s Clipboard -t [babelify] -p [bannerify --file .banner ] -o dist/clipboard.js",
|
"build-debug": "webpack",
|
||||||
"build-min": "uglifyjs dist/clipboard.js --comments '/!/' -m screw_ie8=true -c screw_ie8=true,unused=false -o dist/clipboard.min.js",
|
"build-min": "cross-env NODE_ENV=production webpack --optimize-minimize",
|
||||||
"build-watch": "watchify src/clipboard.js -s Clipboard -t [babelify] -o dist/clipboard.js -v",
|
"build-watch": "webpack --watch",
|
||||||
"test": "karma start --single-run",
|
"test": "karma start --single-run",
|
||||||
"prepublish": "babel src --out-dir lib"
|
"prepublish": "npm run build"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
41
webpack.config.js
Normal file
41
webpack.config.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
const pkg = require('./package.json');
|
||||||
|
const path = require('path');
|
||||||
|
const webpack = require('webpack');
|
||||||
|
|
||||||
|
const production = process.env.NODE_ENV === 'production' || false;
|
||||||
|
|
||||||
|
const banner = `clipboard.js v${pkg.version}
|
||||||
|
https://zenorocha.github.io/clipboard.js
|
||||||
|
|
||||||
|
Licensed MIT © Zeno Rocha`;
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
entry: './src/clipboard.js',
|
||||||
|
output: {
|
||||||
|
filename: production ? 'clipboard.min.js' : 'clipboard.js',
|
||||||
|
path: path.resolve(__dirname, 'dist'),
|
||||||
|
library: 'ClipboardJS',
|
||||||
|
libraryTarget: 'umd'
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
plugins: production ? [
|
||||||
|
new webpack.optimize.UglifyJsPlugin({
|
||||||
|
beautify: false,
|
||||||
|
mangle: {
|
||||||
|
screw_ie8: true,
|
||||||
|
keep_fnames: true
|
||||||
|
},
|
||||||
|
compress: {
|
||||||
|
screw_ie8: true
|
||||||
|
},
|
||||||
|
comments: false
|
||||||
|
}),
|
||||||
|
new webpack.BannerPlugin({banner})
|
||||||
|
] : [
|
||||||
|
new webpack.BannerPlugin({banner})
|
||||||
|
]
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user