Compare commits

...

36 Commits
2.0 ... v2.0.5

Author SHA1 Message Date
Zeno Rocha
289389322e 2.0.5 2020-03-03 18:20:40 -08:00
LeuisKen
894a3bef4a chore: make babel not transform es modules. 2020-03-03 18:09:24 -08:00
LeuisKen
780d390856 chore: fix es6 export issue. 2020-03-03 18:09:24 -08:00
LeuisKen
5de8be447f fix: change export from commonjs to es module for import from src usage. 2020-03-03 18:09:24 -08:00
Zeno Rocha
132fcd16b1 Add Stale Bot 2020-02-29 12:18:50 -08:00
Zeno Rocha
e7f0ff0392 Fix composer deprecated package #659 2020-02-29 10:03:07 -08:00
domecardillo
393dbe34e0 replaced invalid property url with homepage in composer.json authors array 2020-02-29 09:55:42 -08:00
Zeno Rocha
d3fc3c1e7b Regenerate package-lock and dist files after PhantomJS removal 2020-02-29 09:55:14 -08:00
ossdev
83824fa248 ClipboardJS: Removed PhantomJS Dependency
Added karma-chrome-launcher dependency

Signed-off-by: ossdev <ossdev@puresoftware.com>
2020-02-29 09:53:41 -08:00
ryanmcdonough
ce79f170aa Create LICENSE 2019-12-27 20:56:56 -03:00
Christian Oliff
4c3a086866 HTTPS relevant links 2019-12-27 20:56:29 -03:00
Bjorn Hansen
20f64d82d0 Update broken link to Primer Tooltops doc 2019-04-18 14:23:49 -07:00
Christian Oliff
85981026d1 update URL in banner 2019-03-05 11:03:02 -08:00
Rouven Weßling
6802a86f60 Set babel-preset-env into UglifyJS compatability mode 2018-11-14 20:16:46 -08:00
Rouven Weßling
3522504d34 Remove the unused dev dependency babel-cli 2018-11-14 20:16:46 -08:00
Zeno Rocha
d17eca050e 2.0.4 2018-11-12 20:42:07 -08:00
kovenliao
5381600a26 fix webpack umd build (#599) 2018-11-12 20:35:19 -08:00
Zeno Rocha
5be63e28dd 2.0.3 2018-11-11 18:56:51 -08:00
Rouven Weßling
adc669df06 Always run webpack in production mode. (#595)
Otherwise horribly inefficent code that evals(!) strings of code is generated.
2018-11-11 18:53:43 -08:00
Rouven Weßling
b57e6d019f Don't claim to support ESM 2018-11-11 18:51:00 -08:00
Rouven Weßling
3d005b547e Maintain banner in minified file 2018-11-11 18:49:23 -08:00
Zeno Rocha
cf9e8fd7ce Updates devDependencies 2018-11-11 09:58:44 -08:00
Zeno Rocha
f1d99de5d3 Removes .npmignore file 2018-11-11 09:48:15 -08:00
Zeno Rocha
fdb66d3f16 2.0.2 2018-11-11 09:14:19 -08:00
Zeno Rocha
e0f82241d0 Removes bundle analyzer 2018-11-11 09:10:37 -08:00
Zeno Rocha
4d4c25c505 Updates Webpack CLI 2018-11-11 08:20:47 -08:00
Samuel Oloruntoba
5ef3f1a817 Migrates to Webpack 4 2018-11-11 08:17:25 -08:00
Zeno Rocha
3382ea3d14 2.0.1 2018-04-29 16:41:13 -07:00
Paweł Lesiecki
0fcf8c9460 Update package.json (#532)
Correct module path
2018-04-29 16:14:20 -07:00
Zeno Rocha
e1d571b3f3 Updates docs to use ClipboardJS 2.0 2018-03-01 09:07:10 -08:00
Zeno Rocha
43beb07bac Release v2.0.0 2018-02-28 21:56:32 -08:00
Zeno Rocha
9086f3ed64 Updates demos to use new constructor 2018-02-28 21:46:48 -08:00
Zeno Rocha
750cf124d7 Changes global variable from "Clipboard" to "ClipboardJS"
This was introduced in order to prevent a name conflict with the new `window.Clipboard` native function

For more info check:
* https://w3c.github.io/clipboard-apis/
* ac319a7ed3
2018-02-28 21:45:59 -08:00
Zeno Rocha
d25dcac817 Migrates banner from Browserify to Webpack #372 2018-02-28 20:32:25 -08:00
Fernando Herrero
f7e2f58c96 Create composer.json for instalation with composer (#467)
* Create composer.json for instalation with composer

The installation is much simpler with Composer and https://github.com/RobLoach/component-installer

After merged you can test it:
```
composer config repositories.zenorocha-clipboardjs vcs "https://github.com/zenorocha/clipboard.js/"
composer require zenorocha-clipboardjs:dev-master
```
Before merged you can test using my git fork.

Composer creates a "components" folder that contains the "clipboardjs" whith all files spec in "files" of composer.json.
You can then register the "package" at https://packagist.org In this way the installation would be simpler:
`composer require zenorocha-clipboardjs:dev-master`

* Remove icon
2018-02-28 17:05:21 -08:00
Guillaume Vincent
2d5b2df811 Migrate from Browserify to Webpack (#372)
* Migrate from Browserify to Webpack

close https://github.com/zenorocha/clipboard.js/issues/371

 Author:    Guillaume Vincent <guillaume@oslab.fr>

* remove browserify and associated modules and update tests
2018-02-28 17:03:39 -08:00
26 changed files with 7951 additions and 713 deletions

View File

@@ -1,4 +1,13 @@
{
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-umd"]
"presets": [
[
"env",
{
"targets": {
"uglify": true
},
"modules": false
}
]
]
}

View File

@@ -1,6 +0,0 @@
/*!
* clipboard.js v<%= pkg.version %>
* https://zenorocha.github.io/clipboard.js
*
* Licensed MIT © Zeno Rocha
*/

21
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

2
.gitignore vendored
View File

@@ -2,3 +2,5 @@ lib
npm-debug.log
bower_components
node_modules
yarn-error.log
yarn.lock

View File

@@ -1,7 +0,0 @@
/.*/
/demo/
/test/
/.*
/bower.json
/karma.conf.js
/src

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) Zeno Rocha
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,7 +1,7 @@
{
"name": "clipboard",
"version": "1.7.1",
"description": "Modern copy to clipboard. No Flash. Just 2kb",
"version": "2.0.5",
"description": "Modern copy to clipboard. No Flash. Just 3kb",
"license": "MIT",
"main": "dist/clipboard.js",
"ignore": [

25
composer.json Normal file
View 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",
"homepage": "http://zenorocha.com/"
}
],
"require": {
"oomphinc/composer-installers-extender": "*"
},
"extra": {
"component": {
"scripts": [
"dist/clipboard.js"
],
"files": [
"dist/clipboard.min.js"
]
}
}
}

View File

@@ -17,7 +17,7 @@
<!-- 3. Instantiate clipboard by passing a HTML element -->
<script>
var btn = document.getElementById('btn');
var clipboard = new Clipboard(btn);
var clipboard = new ClipboardJS(btn);
clipboard.on('success', function(e) {
console.log(e);

View File

@@ -17,7 +17,7 @@
<!-- 3. Instantiate clipboard by passing a list of HTML elements -->
<script>
var btns = document.querySelectorAll('button');
var clipboard = new Clipboard(btns);
var clipboard = new ClipboardJS(btns);
clipboard.on('success', function(e) {
console.log(e);

View File

@@ -16,7 +16,7 @@
<!-- 3. Instantiate clipboard by passing a string selector -->
<script>
var clipboard = new Clipboard('.btn');
var clipboard = new ClipboardJS('.btn');
clipboard.on('success', function(e) {
console.log(e);

View File

@@ -15,7 +15,7 @@
<!-- 3. Instantiate clipboard -->
<script>
var clipboard = new Clipboard('.btn', {
var clipboard = new ClipboardJS('.btn', {
target: function() {
return document.querySelector('div');
}

View File

@@ -14,7 +14,7 @@
<!-- 3. Instantiate clipboard -->
<script>
var clipboard = new Clipboard('.btn', {
var clipboard = new ClipboardJS('.btn', {
text: function() {
return 'to be or not to be';
}

View File

@@ -15,7 +15,7 @@
<!-- 3. Instantiate clipboard -->
<script>
var clipboard = new Clipboard('.btn');
var clipboard = new ClipboardJS('.btn');
clipboard.on('success', function(e) {
console.log(e);

View File

@@ -15,7 +15,7 @@
<!-- 3. Instantiate clipboard -->
<script>
var clipboard = new Clipboard('.btn');
var clipboard = new ClipboardJS('.btn');
clipboard.on('success', function(e) {
console.log(e);

View File

@@ -15,7 +15,7 @@
<!-- 3. Instantiate clipboard -->
<script>
var clipboard = new Clipboard('.btn');
var clipboard = new ClipboardJS('.btn');
clipboard.on('success', function(e) {
console.log(e);

1437
dist/clipboard.js vendored

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -1,27 +1,30 @@
module.exports = function(karma) {
karma.set({
plugins: ['karma-browserify', 'karma-chai', 'karma-sinon', 'karma-mocha', 'karma-phantomjs-launcher'],
var webpackConfig = require('./webpack.config.js');
frameworks: ['browserify', 'chai', 'sinon', 'mocha'],
module.exports = function (karma) {
karma.set({
plugins: ['karma-webpack', 'karma-chai', 'karma-sinon', 'karma-mocha', 'karma-chrome-launcher'],
frameworks: ['chai', 'sinon', 'mocha'],
files: [
'src/**/*.js',
'test/**/*.js',
'./node_modules/phantomjs-polyfill/bind-polyfill.js'
],
exclude: ['test/module-systems.js'],
preprocessors: {
'src/**/*.js' : ['browserify'],
'test/**/*.js': ['browserify']
'src/**/*.js': ['webpack'],
'test/**/*.js': ['webpack']
},
browserify: {
debug: true,
transform: ['babelify']
webpack: {
module: webpackConfig.module,
plugins: webpackConfig.plugins
},
browsers: ['PhantomJS']
webpackMiddleware: {
stats: 'errors-only'
},
browsers: ['ChromeHeadless']
});
}
};

6945
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,8 +2,8 @@
Package.describe({
name: "zenorocha:clipboard",
summary: "Modern copy to clipboard. No Flash. Just 2kb.",
version: "1.7.1",
summary: "Modern copy to clipboard. No Flash. Just 3kb.",
version: "2.0.5",
git: "https://github.com/zenorocha/clipboard.js"
});

View File

@@ -1,10 +1,10 @@
{
"name": "clipboard",
"version": "1.7.1",
"version": "2.0.5",
"description": "Modern copy to clipboard. No Flash. Just 2kb",
"repository": "zenorocha/clipboard.js",
"license": "MIT",
"main": "lib/clipboard.js",
"main": "dist/clipboard.js",
"keywords": [
"clipboard",
"copy",
@@ -16,33 +16,29 @@
"tiny-emitter": "^2.0.0"
},
"devDependencies": {
"babel-cli": "^6.24.1",
"babel-core": "^6.24.1",
"babel-plugin-transform-es2015-modules-umd": "^6.24.1",
"babel-preset-es2015": "^6.24.1",
"babelify": "^7.3.0",
"bannerify": "Vekat/bannerify#feature-option",
"browserify": "^14.3.0",
"chai": "^3.5.0",
"install": "^0.9.6",
"karma": "^1.6.0",
"karma-browserify": "^5.1.1",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.7.0",
"chai": "^4.2.0",
"cross-env": "^5.2.0",
"karma": "^3.1.1",
"karma-chai": "^0.1.0",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.4",
"karma-sinon": "^1.0.5",
"mocha": "^3.3.0",
"phantomjs-prebuilt": "^2.1.14",
"sinon": "^2.2.0",
"uglify-js": "^2.8.22",
"watchify": "^3.9.0"
"karma-mocha": "^1.2.0",
"karma-chrome-launcher": "^2.2.0",
"karma-sinon": "^1.0.4",
"karma-webpack": "^3.0.5",
"mocha": "^5.2.0",
"sinon": "^7.1.1",
"uglifyjs-webpack-plugin": "^2.0.1",
"webpack": "^4.5.0",
"webpack-cli": "^3.1.2"
},
"scripts": {
"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-min": "uglifyjs dist/clipboard.js --comments '/!/' -m screw_ie8=true -c screw_ie8=true,unused=false -o dist/clipboard.min.js",
"build-watch": "watchify src/clipboard.js -s Clipboard -t [babelify] -o dist/clipboard.js -v",
"build-debug": "webpack",
"build-min": "cross-env NODE_ENV=production webpack",
"build-watch": "webpack --watch",
"test": "karma start --single-run",
"prepublish": "babel src --out-dir lib"
"prepublish": "npm run build"
}
}

View File

@@ -34,12 +34,12 @@ First, include the script located on the `dist` folder or load it from [a third-
Now, you need to instantiate it by [passing a DOM selector](https://github.com/zenorocha/clipboard.js/blob/master/demo/constructor-selector.html#L18), [HTML element](https://github.com/zenorocha/clipboard.js/blob/master/demo/constructor-node.html#L16-L17), or [list of HTML elements](https://github.com/zenorocha/clipboard.js/blob/master/demo/constructor-nodelist.html#L18-L19).
```js
new Clipboard('.btn');
new ClipboardJS('.btn');
```
Internally, we need to fetch all elements that matches with your selector and attach event listeners for each one. But guess what? If you have hundreds of matches, this operation can consume a lot of memory.
For this reason we use [event delegation](http://stackoverflow.com/questions/1687296/what-is-dom-event-delegation) which replaces multiple event listeners with just a single listener. After all, [#perfmatters](https://twitter.com/hashtag/perfmatters).
For this reason we use [event delegation](https://stackoverflow.com/questions/1687296/what-is-dom-event-delegation) which replaces multiple event listeners with just a single listener. After all, [#perfmatters](https://twitter.com/hashtag/perfmatters).
# Usage
@@ -103,7 +103,7 @@ There are cases where you'd like to show some user feedback or capture what has
That's why we fire custom events such as `success` and `error` for you to listen and implement your custom logic.
```js
var clipboard = new Clipboard('.btn');
var clipboard = new ClipboardJS('.btn');
clipboard.on('success', function(e) {
console.info('Action:', e.action);
@@ -125,7 +125,7 @@ For a live demonstration, go to this [site](https://clipboardjs.com/) and open y
Each application has different design needs, that's why clipboard.js does not include any CSS or built-in tooltip solution.
The tooltips you see on the [demo site](https://clipboardjs.com/) were built using [GitHub's Primer](https://github.com/primer/primer-css/tree/master/modules/primer-tooltips). You may want to check that out if you're looking for a similar look and feel.
The tooltips you see on the [demo site](https://clipboardjs.com/) were built using [GitHub's Primer](https://primer.style/css/components/tooltips). You may want to check that out if you're looking for a similar look and feel.
## Advanced Options
@@ -134,7 +134,7 @@ If you don't want to modify your HTML, there's a pretty handy imperative API for
For instance, if you want to dynamically set a `target`, you'll need to return a Node.
```js
new Clipboard('.btn', {
new ClipboardJS('.btn', {
target: function(trigger) {
return trigger.nextElementSibling;
}
@@ -144,7 +144,7 @@ new Clipboard('.btn', {
If you want to dynamically set a `text`, you'll return a String.
```js
new Clipboard('.btn', {
new ClipboardJS('.btn', {
text: function(trigger) {
return trigger.getAttribute('aria-label');
}
@@ -154,7 +154,7 @@ new Clipboard('.btn', {
For use in Bootstrap Modals or with any other library that changes the focus you'll want to set the focused element as the `container` value.
```js
new Clipboard('.btn', {
new ClipboardJS('.btn', {
container: document.getElementById('modal')
});
```
@@ -162,13 +162,13 @@ new Clipboard('.btn', {
Also, if you are working with single page apps, you may want to manage the lifecycle of the DOM more precisely. Here's how you clean up the events and objects that we create.
```js
var clipboard = new Clipboard('.btn');
var clipboard = new ClipboardJS('.btn');
clipboard.destroy();
```
## Browser Support
This library relies on both [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection) and [execCommand](https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand) APIs. The first one is [supported by all browsers](http://caniuse.com/#search=selection) while the second one is supported in the following browsers.
This library relies on both [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection) and [execCommand](https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand) APIs. The first one is [supported by all browsers](https://caniuse.com/#search=selection) while the second one is supported in the following browsers.
| <img src="https://clipboardjs.com/assets/images/chrome.png" width="48px" height="48px" alt="Chrome logo"> | <img src="https://clipboardjs.com/assets/images/edge.png" width="48px" height="48px" alt="Edge logo"> | <img src="https://clipboardjs.com/assets/images/firefox.png" width="48px" height="48px" alt="Firefox logo"> | <img src="https://clipboardjs.com/assets/images/ie.png" width="48px" height="48px" alt="Internet Explorer logo"> | <img src="https://clipboardjs.com/assets/images/opera.png" width="48px" height="48px" alt="Opera logo"> | <img src="https://clipboardjs.com/assets/images/safari.png" width="48px" height="48px" alt="Safari logo"> |
|:---:|:---:|:---:|:---:|:---:|:---:|
@@ -176,7 +176,7 @@ This library relies on both [Selection](https://developer.mozilla.org/en-US/docs
The good news is that clipboard.js gracefully degrades if you need to support older browsers. All you have to do is show a tooltip saying `Copied!` when `success` event is called and `Press Ctrl+C to copy` when `error` event is called because the text is already selected.
You can also check if clipboard.js is supported or not by running `Clipboard.isSupported()`, that way you can hide copy/cut buttons from the UI.
You can also check if clipboard.js is supported or not by running `ClipboardJS.isSupported()`, that way you can hide copy/cut buttons from the UI.
## Bonus
@@ -186,4 +186,4 @@ Install for [Chrome](https://chrome.google.com/webstore/detail/codecopy/fkbfebkc
## License
[MIT License](http://zenorocha.mit-license.org/) © Zeno Rocha
[MIT License](https://zenorocha.mit-license.org/) © Zeno Rocha

View File

@@ -137,7 +137,7 @@ class ClipboardAction {
if (this.trigger) {
this.trigger.focus();
}
document.activeElement.blur();
window.getSelection().removeAllRanges();
}
@@ -201,4 +201,4 @@ class ClipboardAction {
}
}
module.exports = ClipboardAction;
export default ClipboardAction;

View File

@@ -86,10 +86,10 @@ class Clipboard extends Emitter {
*/
static isSupported(action = ['copy', 'cut']) {
const actions = (typeof action === 'string') ? [action] : action;
let support = !!document.queryCommandSupported;
let support = !document.queryCommandSupported;
actions.forEach((action) => {
support = support && !!document.queryCommandSupported(action);
support = support && !document.queryCommandSupported(action);
});
return support;
@@ -132,4 +132,4 @@ function getAttributeValue(suffix, element) {
return element.getAttribute(attribute);
}
module.exports = Clipboard;
export default Clipboard;

46
webpack.config.js Normal file
View File

@@ -0,0 +1,46 @@
const pkg = require('./package.json');
const path = require('path');
const webpack = require('webpack');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const production = process.env.NODE_ENV === 'production' || false;
const banner = `clipboard.js v${pkg.version}
https://clipboardjs.com/
Licensed MIT © Zeno Rocha`;
module.exports = {
entry: './src/clipboard.js',
mode: 'production',
output: {
filename: production ? 'clipboard.min.js' : 'clipboard.js',
path: path.resolve(__dirname, 'dist'),
library: 'ClipboardJS',
globalObject: 'this',
libraryExport: 'default',
libraryTarget: 'umd'
},
module: {
rules: [
{test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'}
]
},
optimization: {
minimize: production,
minimizer: [
new UglifyJSPlugin({
parallel: require('os').cpus().length,
uglifyOptions: {
ie8: false,
keep_fnames: false,
output: {
beautify: false,
comments: (node, {value, type}) => type == 'comment2' && value.startsWith('!')
}
}
})
]
},
plugins: [new webpack.BannerPlugin({ banner })]
};