├── README.md
├── test.html
├── manifest.json
├── clippy-octicon.svg
├── always-paste.js
├── LICENSE
└── .gitignore
/README.md:
--------------------------------------------------------------------------------
1 | # always-paste
2 | A browser extension so that you can always paste in fields (email, password…)
3 |
--------------------------------------------------------------------------------
/test.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Test
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 2,
3 | "name": "Always Paste",
4 | "version": "1.0",
5 | "description": "Always be able to paste into form fields, even when the site tries to block you.",
6 | "icons": {
7 | "96": "icons/clippy-octicon.svg"
8 | },
9 | "content_scripts": [
10 | {
11 | "js": ["always-paste.js"]
12 | }
13 | ],
14 | "permissions": [
15 | "clipboardRead"
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/clippy-octicon.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/always-paste.js:
--------------------------------------------------------------------------------
1 |
2 | // XXX switch this to background script
3 | let id = 'always-paste'
4 | , options = {
5 | id,
6 | title: 'Paste Anyway!',
7 | contexts: ['edtiable'],
8 | icons: {
9 | 16: './clippy-octicon.svg',
10 | },
11 | enabled: false,
12 | }
13 | ;
14 |
15 | browser.contextMenus.create(options);
16 | browser.contextMenus.onClicked.addListener((info) => {
17 | if (info.menuItemId === id) {
18 | let el = browser.menus.getTargetElement(info.targetElementId);
19 | if (!el) return;
20 | navigator
21 | .clipboard
22 | .readText()
23 | .then(txt => el.value = txt)
24 | ;
25 | }
26 | });
27 | browser.contextMenus.onShown.addListener(async function (info) {
28 | let txt = await navigator.clipboard.readText();
29 | browser.menus.update(id, { enabled: !!txt });
30 | browser.menus.refresh();
31 | });
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Robin Berjon
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (https://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # TypeScript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # next.js build output
61 | .next
62 |
--------------------------------------------------------------------------------