diff options
Diffstat (limited to 'firefox')
-rw-r--r-- | firefox/background.js | 44 | ||||
-rw-r--r-- | firefox/manifest.json | 33 | ||||
-rw-r--r-- | firefox/options.js | 47 |
3 files changed, 124 insertions, 0 deletions
diff --git a/firefox/background.js b/firefox/background.js new file mode 100644 index 0000000..30c82d9 --- /dev/null +++ b/firefox/background.js @@ -0,0 +1,44 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy of +// the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. + +const MENU_ITEM_OPEN_LINK = 'openLink'; + +function open(url) { + browser.storage.sync.get({clickBehavior: 'search'}).then(function(items) { + let waybackStem = 'https://web.archive.org/web/*/'; + if (items.clickBehavior == 'direct') { + waybackStem = 'https://web.archive.org/web/'; + } + browser.tabs.update(null, {url: waybackStem + url}); + }); +} + +browser.pageAction.onClicked.addListener(function(tab) { + open(tab.url); +}); + +browser.contextMenus.onClicked.addListener(function(info, tab) { + if (info.menuItemId == MENU_ITEM_OPEN_LINK) { + open(info.linkUrl); + } +}); + +browser.runtime.onInstalled.addListener(function() { + browser.contextMenus.create({ + 'id': MENU_ITEM_OPEN_LINK, + 'title': 'Open link in the Wayback Machine', + 'contexts': ['link'], + 'targetUrlPatterns': ['ftp://*/*', 'http://*/*', 'https://*/*'], + }); +}); diff --git a/firefox/manifest.json b/firefox/manifest.json new file mode 100644 index 0000000..e6fa3c4 --- /dev/null +++ b/firefox/manifest.json @@ -0,0 +1,33 @@ +{ + "manifest_version": 2, + "name": "Wayback Machine Lookup", + "version": "2.0.0", + "description": "Reopen the current tab in the Wayback Machine", + "icons": { + "48": "icon.svg", + "96": "icon.svg" + }, + "page_action": { + "default_icon": "icon.svg", + "default_title": "Open in the Wayback Machine", + "show_matches": ["ftp://*/*", "http://*/*", "https://*/*"] + }, + "author": "Benjamin Barenblat <bbaren@google.com>", + "background": { + "scripts": ["background.js"] + }, + "browser_specific_settings": { + "gecko": { + "id": "{fbd65aac-1f67-49ca-93fd-77de0bbf9bea}", + "strict_min_version": "59.0" + } + }, + "options_ui": { + "page": "options.html" + }, + "permissions": [ + "activeTab", + "contextMenus", + "storage" + ] +} diff --git a/firefox/options.js b/firefox/options.js new file mode 100644 index 0000000..d80cbbb --- /dev/null +++ b/firefox/options.js @@ -0,0 +1,47 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy of +// the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. + +const DEFAULT_OPTIONS = { + clickBehavior: 'search', +}; + +document.addEventListener('DOMContentLoaded', function() { + browser.storage.sync.get(DEFAULT_OPTIONS).then(function(items) { + for (let button of document.forms.clickBehavior) { + if (button.value == items.clickBehavior) { + button.checked = true; + break; + } + } + }); +}); + +function saveOptions() { + let clickBehavior = DEFAULT_OPTIONS.clickBehavior; + for (let button of document.forms.clickBehavior) { + if (button.checked) { + clickBehavior = button.value; + break; + } + } + browser.storage.sync.set({ + clickBehavior: clickBehavior, + }); +} + +for (let button of document.forms.clickBehavior) { + button.addEventListener('change', function(event) { + saveOptions(); + }); +} |