Ver código fonte

Merge branch 'main' of github.com:ryangjchandler/alpine-clipboard into main

Ryan Chandler 4 anos atrás
pai
commit
9dbead52e9

+ 19 - 4
README.md

@@ -16,14 +16,12 @@ This plugin adds a new `$clipboard` magic property to all of your Alpine compone
 
 ### CDN
 
-Include the following `<script>` tag in the `<head>` of your document:
+Include the following `<script>` tag at the end of your `<body>`:
 
 ```html
-<script src="https://cdn.jsdelivr.net/npm/@ryangjchandler/alpine-clipboard@0.2.x/dist/alpine-clipboard.umd.js"></script>
+<script src="https://cdn.jsdelivr.net/npm/@ryangjchandler/alpine-clipboard@1.x.x/dist/alpine-clipboard.js"></script>
 ```
 
-> **Important**: This must be added **before** loading Alpine.js when using CDN links.
-
 ### NPM
 
 ```bash
@@ -37,6 +35,23 @@ import "@ryangjchandler/alpine-clipboard"
 // import "alpinejs"
 ```
 
+#### Legacy Browser Support
+
+If you need to support legacy browsers, you can import the `alpine-clipboard.ie11.js` file instead.
+
+**CDN**
+
+```
+<script src="https://cdn.jsdelivr.net/npm/@ryangjchandler/alpine-clipboard@1.x.x/dist/alpine-clipboard.ie11.js"></script>
+```
+
+**NPM**
+
+```js
+import "@ryangjchandler/alpine-clipboard/src/index.ie11.js"
+// import "alpinejs"
+```
+
 ## Usage
 
 To copy some data to the clipboard, invoke `$clipboard` from an event handler in your component.

+ 0 - 13
babel.config.js

@@ -1,13 +0,0 @@
-module.exports = {
-    presets: [
-        [
-            '@babel/preset-env',
-            {
-                targets: {
-                    node: 'current',
-                    edge: '18'
-                },
-            },
-        ],
-    ],
-};

+ 70 - 0
dist/alpine-clipboard.ie11.js

@@ -0,0 +1,70 @@
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.AlpineClipboard = factory());
+}(this, (function () { 'use strict';
+
+    var AlpineClipboard = {
+      start: function start() {
+        if (!window.Alpine) {
+          throw new Error('Alpine is required for `alpine-clipboard` to work.');
+        }
+
+        Alpine.addMagicProperty('clipboard', function () {
+          return function (target) {
+            var value = target;
+
+            if (typeof value === 'function') {
+              value = value();
+            } else if (typeof value !== 'string') {
+              try {
+                value = JSON.stringify(value);
+              } catch (e) {
+                console.warn(e);
+              }
+            }
+
+            var container = document.createElement('textarea');
+            container.value = value;
+            container.setAttribute('readonly', '');
+            container.style.cssText = 'position:fixed;pointer-events:none;z-index:-9999;opacity:0;';
+            document.body.appendChild(container);
+
+            if (navigator.userAgent && navigator.userAgent.match(/ipad|ipod|iphone/i)) {
+              container.contentEditable = true;
+              container.readOnly = true;
+              var range = document.createRange();
+              range.selectNodeContents(container);
+              var selection = window.getSelection();
+              selection.removeAllRanges();
+              selection.addRange(range);
+              container.setSelectionRange(0, 999999);
+            } else {
+              container.select();
+            }
+
+            try {
+              document.execCommand('copy');
+            } catch (e) {
+              console.warn(err);
+            }
+
+            document.body.removeChild(container);
+          };
+        });
+      }
+    };
+
+    var alpine = window.deferLoadingAlpine || function (callback) {
+      return callback();
+    };
+
+    window.deferLoadingAlpine = function (callback) {
+      AlpineClipboard.start();
+      alpine(callback);
+    };
+
+    return AlpineClipboard;
+
+})));
+//# sourceMappingURL=alpine-clipboard.ie11.js.map

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/alpine-clipboard.ie11.js.map


+ 35 - 1
dist/alpine-clipboard.js

@@ -1,2 +1,36 @@
-const e={start(){if(!window.Alpine)throw new Error("Alpine is required for `alpine-clipboard` to work.");Alpine.addMagicProperty("clipboard",()=>function(e){let n=e;if("function"==typeof n)n=n();else if("string"!=typeof n)try{n=JSON.stringify(n)}catch(e){console.warn(e)}const t=document.createElement("textarea");if(t.value=n,t.setAttribute("readonly",""),t.style.cssText="position:fixed;pointer-events:none;z-index:-9999;opacity:0;",document.body.appendChild(t),navigator.userAgent&&navigator.userAgent.match(/ipad|ipod|iphone/i)){t.contentEditable=!0,t.readOnly=!0;const e=document.createRange();e.selectNodeContents(t);const n=window.getSelection();n.removeAllRanges(),n.addRange(e),t.setSelectionRange(0,999999)}else t.select();try{document.execCommand("copy")}catch(e){console.warn(err)}document.body.removeChild(t)})}},n=window.deferLoadingAlpine||(e=>e());window.deferLoadingAlpine=function(t){e.start(),n(t)},module.exports=e;
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.AlpineClipboard = factory());
+}(this, (function () { 'use strict';
+
+    const AlpineClipboard = {
+      start() {
+        if (!window.Alpine) {
+          throw new Error('Alpine is required for `alpine-clipboard` to work.');
+        }
+
+        Alpine.addMagicProperty('clipboard', () => {
+          return function (target) {
+            if (typeof target === 'function') {
+              target = target();
+            }
+
+            return window.navigator.clipboard.writeText(target);
+          };
+        });
+      }
+
+    };
+
+    const deferrer = window.deferLoadingAlpine || (callback => callback());
+
+    window.deferLoadingAlpine = function (callback) {
+      AlpineClipboard.start();
+      deferrer(callback);
+    };
+
+    return AlpineClipboard;
+
+})));
 //# sourceMappingURL=alpine-clipboard.js.map

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/alpine-clipboard.js.map


+ 0 - 2
dist/alpine-clipboard.modern.js

@@ -1,2 +0,0 @@
-const e={start(){if(!window.Alpine)throw new Error("Alpine is required for `alpine-clipboard` to work.");Alpine.addMagicProperty("clipboard",()=>function(e){let t=e;if("function"==typeof t)t=t();else if("string"!=typeof t)try{t=JSON.stringify(t)}catch(e){console.warn(e)}const n=document.createElement("textarea");if(n.value=t,n.setAttribute("readonly",""),n.style.cssText="position:fixed;pointer-events:none;z-index:-9999;opacity:0;",document.body.appendChild(n),navigator.userAgent&&navigator.userAgent.match(/ipad|ipod|iphone/i)){n.contentEditable=!0,n.readOnly=!0;const e=document.createRange();e.selectNodeContents(n);const t=window.getSelection();t.removeAllRanges(),t.addRange(e),n.setSelectionRange(0,999999)}else n.select();try{document.execCommand("copy")}catch(e){console.warn(err)}document.body.removeChild(n)})}},t=window.deferLoadingAlpine||(e=>e());window.deferLoadingAlpine=function(n){e.start(),t(n)};export default e;
-//# sourceMappingURL=alpine-clipboard.modern.js.map

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/alpine-clipboard.modern.js.map


+ 0 - 2
dist/alpine-clipboard.module.js

@@ -1,2 +0,0 @@
-const e={start(){if(!window.Alpine)throw new Error("Alpine is required for `alpine-clipboard` to work.");Alpine.addMagicProperty("clipboard",()=>function(e){let t=e;if("function"==typeof t)t=t();else if("string"!=typeof t)try{t=JSON.stringify(t)}catch(e){console.warn(e)}const n=document.createElement("textarea");if(n.value=t,n.setAttribute("readonly",""),n.style.cssText="position:fixed;pointer-events:none;z-index:-9999;opacity:0;",document.body.appendChild(n),navigator.userAgent&&navigator.userAgent.match(/ipad|ipod|iphone/i)){n.contentEditable=!0,n.readOnly=!0;const e=document.createRange();e.selectNodeContents(n);const t=window.getSelection();t.removeAllRanges(),t.addRange(e),n.setSelectionRange(0,999999)}else n.select();try{document.execCommand("copy")}catch(e){console.warn(err)}document.body.removeChild(n)})}},t=window.deferLoadingAlpine||(e=>e());window.deferLoadingAlpine=function(n){e.start(),t(n)};export default e;
-//# sourceMappingURL=alpine-clipboard.module.js.map

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/alpine-clipboard.module.js.map


+ 0 - 2
dist/alpine-clipboard.umd.js

@@ -1,2 +0,0 @@
-!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e=e||self).alpineClipboard=n()}(this,function(){const e={start(){if(!window.Alpine)throw new Error("Alpine is required for `alpine-clipboard` to work.");Alpine.addMagicProperty("clipboard",()=>function(e){let n=e;if("function"==typeof n)n=n();else if("string"!=typeof n)try{n=JSON.stringify(n)}catch(e){console.warn(e)}const t=document.createElement("textarea");if(t.value=n,t.setAttribute("readonly",""),t.style.cssText="position:fixed;pointer-events:none;z-index:-9999;opacity:0;",document.body.appendChild(t),navigator.userAgent&&navigator.userAgent.match(/ipad|ipod|iphone/i)){t.contentEditable=!0,t.readOnly=!0;const e=document.createRange();e.selectNodeContents(t);const n=window.getSelection();n.removeAllRanges(),n.addRange(e),t.setSelectionRange(0,999999)}else t.select();try{document.execCommand("copy")}catch(e){console.warn(err)}document.body.removeChild(t)})}},n=window.deferLoadingAlpine||(e=>e());return window.deferLoadingAlpine=function(t){e.start(),n(t)},e});
-//# sourceMappingURL=alpine-clipboard.umd.js.map

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
dist/alpine-clipboard.umd.js.map


+ 17 - 0
examples/ie11.html

@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<head>
+    <title>Alpine Clipboard IE11</title>
+    <script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.js" defer></script>
+</head>
+<body>
+    <div x-data="{ input: '' }">
+        <input x-model="input">
+        <button type="button" @click="$clipboard(input)">Copy to Clipboard</button>
+    </div>
+
+    <div x-data="{}">
+        <button type="button" @click="$clipboard(() => 'Testing')">Copy 'Testing' to Clipboard</button>
+    </div>
+
+    <script src="../dist/alpine-clipboard.ie11.js"></script>
+</body>

+ 3 - 2
examples/index.html

@@ -1,16 +1,17 @@
 <!DOCTYPE html>
 <head>
     <title>Alpine Clipboard</title>
-    <script src="../dist/alpine-clipboard.umd.js"></script>
     <script src="https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.x.x/dist/alpine.js" defer></script>
 </head>
 <body>
     <div x-data="{ input: '' }">
         <input x-model="input">
-        <button type="button" @click="$clipboard(input)">Copy to Clipboard</button>
+        <button type="button" @click="await $clipboard(input)">Copy to Clipboard</button>
     </div>
 
     <div x-data="{}">
         <button type="button" @click="$clipboard(() => 'Testing')">Copy 'Testing' to Clipboard</button>
     </div>
+
+    <script src="../dist/alpine-clipboard.js"></script>
 </body>

Diferenças do arquivo suprimidas por serem muito extensas
+ 1959 - 575
package-lock.json


+ 10 - 13
package.json

@@ -8,24 +8,21 @@
         "type": "git",
         "url": "https://github.com/ryangjchandler/alpine-clipboard"
     },
-    "source": "src/index.js",
-    "main": "dist/alpine-clipboard.js",
-    "umd:main": "dist/alpine-clipboard.umd.js",
-    "module": "dist/alpine-clipboard.module.js",
+    "main": "dist/alpine-clipboard.ie11.js",
+    "module": "src/index.js",
     "scripts": {
-        "build": "microbundle",
-        "watch": "microbundle watch",
-        "test": "jest"
+        "build": "rollup -c && rollup -c rollup.ie11.config.js",
+        "watch": "rollup -c -w"
     },
     "dependencies": {
         "alpinejs": "^2.6.0"
     },
     "devDependencies": {
-        "@babel/preset-env": "^7.11.0",
-        "@testing-library/dom": "^7.2.2",
-        "@testing-library/jest-dom": "^5.5.0",
-        "jest": "^25.4.0",
-        "jsdom-simulant": "^1.1.2",
-        "microbundle": "^0.12.3"
+        "@babel/preset-env": "^7.12.11",
+        "@babel/core": "^7.12.10",
+        "rollup": "^2.35.1",
+        "rollup-plugin-babel": "^4.4.0",
+        "rollup-plugin-filesize": "^9.1.0",
+        "rollup-plugin-node-resolve": "^5.2.0"
     }
 }

+ 34 - 0
rollup.config.js

@@ -0,0 +1,34 @@
+
+import babel from 'rollup-plugin-babel'
+import filesize from 'rollup-plugin-filesize'
+import resolve from 'rollup-plugin-node-resolve'
+
+export default {
+    input: 'src/index.js',
+    output: [
+        {
+            name: 'AlpineClipboard',
+            file: 'dist/alpine-clipboard.js',
+            format: 'umd',
+            sourcemap: true
+        }
+    ],
+    plugins: [
+        resolve(),
+        filesize(),
+        babel({
+            babelrc: false,
+            exclude: 'node_modules/**',
+            presets: [
+                [
+                    '@babel/preset-env',
+                    {
+                        targets: {
+                            node: 'current'
+                        }
+                    }
+                ]
+            ]
+        })
+    ]
+}

+ 37 - 0
rollup.ie11.config.js

@@ -0,0 +1,37 @@
+import babel from 'rollup-plugin-babel'
+import filesize from 'rollup-plugin-filesize'
+import resolve from 'rollup-plugin-node-resolve'
+
+export default {
+    input: 'src/index.ie11.js',
+    output: [
+        {
+            name: 'AlpineClipboard',
+            file: 'dist/alpine-clipboard.ie11.js',
+            format: 'umd',
+            sourcemap: true,
+        }
+    ],
+    plugins: [
+        resolve(),
+        filesize(),
+        babel({
+            exclude: 'node_modules/**',
+            babelrc: false,
+            presets: [
+                [
+                    '@babel/preset-env',
+                    {
+                        targets: {
+                            node: 'current',
+                            edge: '18',
+                            ie: '11',
+                            ios: '11.3',
+                            safari: '13'
+                        }
+                    }
+                ]
+            ]
+        })
+    ]
+}

+ 67 - 0
src/index.ie11.js

@@ -0,0 +1,67 @@
+const AlpineClipboard = {
+    start() {
+        if (!window.Alpine) {
+            throw new Error('Alpine is required for `alpine-clipboard` to work.')
+        }
+
+        Alpine.addMagicProperty('clipboard', () => {
+            return function (target) {
+                let value = target
+
+                if (typeof value === 'function') {
+                    value = value()
+                } else if (typeof value !== 'string') {
+                    try {
+                        value = JSON.stringify(value)
+                    } catch (e) {
+                        console.warn(e)
+                    }
+                }
+
+                const container = document.createElement('textarea')
+
+                container.value = value
+                container.setAttribute('readonly', '')
+                container.style.cssText = 'position:fixed;pointer-events:none;z-index:-9999;opacity:0;'
+
+                document.body.appendChild(container)
+
+                if (navigator.userAgent && navigator.userAgent.match(/ipad|ipod|iphone/i)) {
+                    container.contentEditable = true
+                    container.readOnly = true
+
+                    const range = document.createRange()
+
+                    range.selectNodeContents(container)
+
+                    const selection = window.getSelection()
+
+                    selection.removeAllRanges()
+                    selection.addRange(range)
+
+                    container.setSelectionRange(0, 999999)
+                } else {
+                    container.select()
+                }
+
+                try {
+                    document.execCommand('copy')
+                } catch (e) {
+                    console.warn(err)
+                }
+
+                document.body.removeChild(container)
+            }
+        })
+    }
+}
+
+const alpine = window.deferLoadingAlpine || ((callback) => callback())
+
+window.deferLoadingAlpine = function (callback) {
+    AlpineClipboard.start()
+
+    alpine(callback)
+}
+
+export default AlpineClipboard

+ 6 - 46
src/index.js

@@ -6,62 +6,22 @@ const AlpineClipboard = {
 
         Alpine.addMagicProperty('clipboard', () => {
             return function (target) {
-                let value = target
-
-                if (typeof value === 'function') {
-                    value = value()
-                } else if (typeof value !== 'string') {
-                    try {
-                        value = JSON.stringify(value)
-                    } catch (e) {
-                        console.warn(e)
-                    }
-                }
-
-                const container = document.createElement('textarea')
-
-                container.value = value
-                container.setAttribute('readonly', '')
-                container.style.cssText = 'position:fixed;pointer-events:none;z-index:-9999;opacity:0;'
-
-                document.body.appendChild(container)
-
-                if (navigator.userAgent && navigator.userAgent.match(/ipad|ipod|iphone/i)) {
-                    container.contentEditable = true
-                    container.readOnly = true
-
-                    const range = document.createRange()
-
-                    range.selectNodeContents(container)
-
-                    const selection = window.getSelection()
-
-                    selection.removeAllRanges()
-                    selection.addRange(range)
-
-                    container.setSelectionRange(0, 999999)
-                } else {
-                    container.select()
+                if (typeof target === 'function') {
+                    target = target()
                 }
-
-                try {
-                    document.execCommand('copy')
-                } catch (e) {
-                    console.warn(err)
-                }
-
-                document.body.removeChild(container)
+                
+                return window.navigator.clipboard.writeText(target)
             }
         })
     }
 }
 
-const alpine = window.deferLoadingAlpine || ((callback) => callback())
+const deferrer = window.deferLoadingAlpine || ((callback) => callback())
 
 window.deferLoadingAlpine = function (callback) {
     AlpineClipboard.start()
 
-    alpine(callback)
+    deferrer(callback)
 }
 
 export default AlpineClipboard

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff