diff --git a/data/icon16.png b/data/icon16.png new file mode 100644 index 0000000..06ff843 Binary files /dev/null and b/data/icon16.png differ diff --git a/data/icon32.png b/data/icon32.png new file mode 100644 index 0000000..80285d7 Binary files /dev/null and b/data/icon32.png differ diff --git a/data/icon64.png b/data/icon64.png new file mode 100644 index 0000000..5caee9f Binary files /dev/null and b/data/icon64.png differ diff --git a/data/inserter.js b/data/inserter.js new file mode 100644 index 0000000..3bded2a --- /dev/null +++ b/data/inserter.js @@ -0,0 +1,5 @@ +self.port.on('insert', data => { + var elem = document.createElement('div') + elem.textContent = data + document.body.appendChild(elem) +}) diff --git a/index.js b/index.js index 6995d96..9c9c94d 100644 --- a/index.js +++ b/index.js @@ -1,9 +1,62 @@ -var self = require("sdk/self"); +var self = require('sdk/self'); +var clipboard = require('sdk/clipboard') +var buttons = require('sdk/ui/button/action'); +var tabs = require('sdk/tabs'); +var { ToggleButton } = require('sdk/ui/button/toggle') +var timers = require('sdk/timers') -// a dummy function, to show how tests work. -// to see how to test this function, look at test/test-index.js -function dummy(text, callback) { - callback(text); +var button = ToggleButton({ + id: "clipboard-inserter-btn", + label: "Toggle Clipboard Cnserter", + icon: { + 16: "./icon16.png", + 32: "./icon32.png", + 64: "./icon64.png" + }, + onChange: function(state) { + this.state('window', null) + let { checked } = this.state('tab') + checked = !checked + this.state('tab', { checked }) + if(checked) { + enableMonitor() + } else { + disableMonitor() + } + } +}) +//
Icons made by Google from www.flaticon.com is licensed by CC 3.0 BY
+ +function enableMonitor() { + console.log("Enabling clipboard monitor") + tabs.activeTab.clinClipboardMonitor = new ClipboardMonitor() } -exports.dummy = dummy; +function disableMonitor() { + console.log("Disabling clipboard monitor") + var monitor = tabs.activeTab.clinClipboardMonitor + if(monitor) { + timers.clearInterval(monitor.intervalID) + delete tabs.activeTab.clinClipboardMonitor + } else { + console.error("Trying to disable clipboard monitor on tab without active ClipboardMonitor!") + } +} + +function ClipboardMonitor() { + + var lastContent = '' + + this.worker = tabs.activeTab.attach({ contentScriptFile: self.data.url('inserter.js') }) + + this.intervalID = timers.setInterval(() => { + if(clipboard.currentFlavors.indexOf('text') != -1) { + var currentContent = clipboard.get('text/unicode') + if(lastContent !== currentContent) { + this.worker.port.emit('insert', currentContent) + lastContent = currentContent + } + } + }, 100) + +} diff --git a/test/test-index.js b/test/test-index.js index b3ad6e8..34c319b 100644 --- a/test/test-index.js +++ b/test/test-index.js @@ -1,19 +1 @@ var main = require("../"); - -exports["test main"] = function(assert) { - assert.pass("Unit test running!"); -}; - -exports["test main async"] = function(assert, done) { - assert.pass("async Unit test running!"); - done(); -}; - -exports["test dummy"] = function(assert, done) { - main.dummy("foo", function(text) { - assert.ok((text === "foo"), "Is the text actually 'foo'"); - done(); - }); -}; - -require("sdk/test").run(exports);