mirror of
https://github.com/SolninjaA/Chhoto-URL-Extension.git
synced 2026-10-29 00:28:29 +10:00
Compare commits
1
Commits
main
..
manifest-v3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35120f752a |
No files matched your search
Vendored
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
(function(a,b){if("function"==typeof define&&define.amd)define("webextension-polyfill",["module"],b);else if("undefined"!=typeof exports)b(module);else{var c={exports:{}};b(c),a.browser=c.exports}})("undefined"==typeof globalThis?"undefined"==typeof self?this:self:globalThis,function(a){"use strict";if("undefined"==typeof browser||Object.getPrototypeOf(browser)!==Object.prototype){if("object"!=typeof chrome||!chrome||!chrome.runtime||!chrome.runtime.id)throw new Error("This script should only be loaded in a browser extension.");a.exports=(a=>{const b={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArLine truncated
|
(function(a,b){if("function"==typeof define&&define.amd)define("webextension-polyfill",["module"],b);else if("undefined"!=typeof exports)b(module);else{var c={exports:{}};b(c),a.browser=c.exports}})("undefined"==typeof globalThis?"undefined"==typeof self?this:self:globalThis,function(a){"use strict";if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");if(!(globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id)){a.exports=(a=>{const b={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArLine truncated
|
||||||
//# sourceMappingURL=browser-polyfill.min.js.map
|
//# sourceMappingURL=browser-polyfill.min.js.map
|
||||||
|
|
||||||
// webextension-polyfill v.0.8.0 (https://github.com/mozilla/webextension-polyfill)
|
// webextension-polyfill v.0.12.0 (https://github.com/mozilla/webextension-polyfill)
|
||||||
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"sources":["browser-polyfill.js"],"names":["Object","extensionAPIs","apiMetadata","constructor","items","get","isThenable","value","makeCallback","promise","metadata","callbackArgs","pluralizeArguments","numArgs","wrapAsyncFunction","args","minArgs","name","length","maxArgs","target","resolve","reject","console","wrapMethod","apply","wrapper","hasOwnProperty","Function","wrapObject","wrappers","cache","has","prop","configurable","enumerable","set","defineProperty","Reflect","deleteProperty","proxyTarget","wrapEvent","wrapperMap","addListener","hasListener","removeListener","onRequestFinishedWrappers","listener","wrappedReq","getContent","loggedSendResponseDeprecationWarning","onMessageWrappers","didCallSendResponse","sendResponsePromise","wrappedSendResponse","result","Promise","isResultThenable","sendPromisedResult","msg","sendResponse","error","message","__mozWebExtensionPolyfillReject__","err","wrappedSendMessageCallback","reply","wrappedSendMessage","wrappedCb","apiNamespaceObj","staticWrappers","devtools","network","onRequestFinished","runtime","onMessage","onMessageExternal","sendMessage","tabs","settingMetadata","clear","services","websites","chrome","module","wrapAPIs"],"mappings":"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 truncated
|
{"version":3,"file":"browser-polyfill.min.js","mappings":"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 truncated
|
||||||
+15
-8
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 2,
|
"manifest_version": 3,
|
||||||
"name": "Chhoto URL",
|
"name": "Chhoto URL",
|
||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
"description": "An unofficial extension for shortening URLs using the Chhoto URL API. Requires a Chhoto URL instance.",
|
"description": "An unofficial extension for shortening URLs using the Chhoto URL API. Requires a Chhoto URL instance.",
|
||||||
@@ -16,13 +16,16 @@
|
|||||||
"notifications",
|
"notifications",
|
||||||
"clipboardWrite",
|
"clipboardWrite",
|
||||||
"storage",
|
"storage",
|
||||||
"https://*/*",
|
"contextMenus",
|
||||||
"contextMenus"
|
"offscreen"
|
||||||
|
],
|
||||||
|
"host_permissions": [
|
||||||
|
"https://*/*"
|
||||||
],
|
],
|
||||||
"options_ui": {
|
"options_ui": {
|
||||||
"page": "options/options.html"
|
"page": "options/options.html"
|
||||||
},
|
},
|
||||||
"browser_action": {
|
"action": {
|
||||||
"default_icon": {
|
"default_icon": {
|
||||||
"16": "icons/chhoto-url-16.png",
|
"16": "icons/chhoto-url-16.png",
|
||||||
"48": "icons/chhoto-url-48.png",
|
"48": "icons/chhoto-url-48.png",
|
||||||
@@ -34,9 +37,13 @@
|
|||||||
"default_title": "Generate a Chhoto URL!"
|
"default_title": "Generate a Chhoto URL!"
|
||||||
},
|
},
|
||||||
"background": {
|
"background": {
|
||||||
"scripts": [
|
"service_worker": "service_worker.js",
|
||||||
"lib/browser-polyfill.min.js",
|
"type": "module",
|
||||||
"background/background.js"
|
"scripts": ["lib/browser-polyfill.min.js", "service_worker.js"]
|
||||||
]
|
},
|
||||||
|
"browser_specific_settings": {
|
||||||
|
"gecko": {
|
||||||
|
"id": "{49edc8ea-f91d-4510-8710-e0e807ad5842}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<textarea id="text"></textarea>
|
||||||
|
<script src="offscreen.js"></script>
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
/**
|
||||||
|
* COPYRIGHT NOTICE
|
||||||
|
* THIS FILE WAS INSPIRED FROM: https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.offscreen-clipboard-write
|
||||||
|
* THE BASE CODE IS LICENSED UNDER THE APACHE 2 LICENSE
|
||||||
|
* (https://www.apache.org/licenses/LICENSE-2.0)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Copyright 2023 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
|
||||||
|
//
|
||||||
|
// https://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.
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* COPYRIGHT NOTICE
|
||||||
|
* ALL PERSONAL **MODIFICATIONS** ARE LICENSED UNDER THE GNU GENEARL PUBLIC LICENSE VERSION 3
|
||||||
|
* YOU MAY FIND THIS LICENSE IN THE "LICENSE.md" FILE.
|
||||||
|
* IF NOT, SEE https://www.gnu.org/licenses
|
||||||
|
* */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* An unofficial extension for easy link shortening using the Chhoto URL API.
|
||||||
|
* Copyright (C) 2025 Solomon Tech
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Get element
|
||||||
|
const textEle = document.querySelector("#text");
|
||||||
|
|
||||||
|
// Function which actually copies the link
|
||||||
|
async function copy(link) {
|
||||||
|
try {
|
||||||
|
// If the link is not a string
|
||||||
|
if (typeof link !== 'string') {
|
||||||
|
// Return an error
|
||||||
|
throw new TypeError(`The shortened URL's type must be a 'string', not "${typeof link}"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the value of the text element
|
||||||
|
textEle.value = link;
|
||||||
|
|
||||||
|
// Select the element
|
||||||
|
textEle.select();
|
||||||
|
|
||||||
|
// Copy to the clipboard
|
||||||
|
document.execCommand('copy');
|
||||||
|
} finally {
|
||||||
|
// Close the offscreen document
|
||||||
|
window.close();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Ensures the message was meant for this message handler
|
||||||
|
async function handleMessages(message) {
|
||||||
|
// Only activate if the received message was intended for the offscreen handler
|
||||||
|
if (message.type === 'clipboard') {
|
||||||
|
// Call the copy function and pass the link
|
||||||
|
copy(message.link);
|
||||||
|
} else {
|
||||||
|
// Return, if the message wasn't intended for the offscreen handler
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Listen for runtime messages
|
||||||
|
chrome.runtime.onMessage.addListener(handleMessages);
|
||||||
+13
-1
@@ -52,7 +52,9 @@ const requestParams = new URLSearchParams(window.location.search);
|
|||||||
const requestValue = requestParams.get('url');
|
const requestValue = requestParams.get('url');
|
||||||
|
|
||||||
// Get the background page, and call the sendRequest function (which is in this script)
|
// Get the background page, and call the sendRequest function (which is in this script)
|
||||||
const backgroundFunc = browser.runtime.getBackgroundPage();
|
if (typeof chrome === undefined) {
|
||||||
|
const backgroundFunc = browser.runtime.getBackgroundPage();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Functions
|
* Functions
|
||||||
@@ -136,7 +138,12 @@ function deleteLink(host, link) {
|
|||||||
deleteErrorEle.classList.remove("warning");
|
deleteErrorEle.classList.remove("warning");
|
||||||
|
|
||||||
// Send request to function which handles requests to the background page
|
// Send request to function which handles requests to the background page
|
||||||
|
if (typeof chrome !== undefined) {
|
||||||
|
browser.runtime.sendMessage({type: "generate-via-popup", longurl: longurl, shorturl: shorturl});
|
||||||
|
} else {
|
||||||
backgroundFunc.then(sendRequest, onError);
|
backgroundFunc.then(sendRequest, onError);
|
||||||
|
};
|
||||||
|
|
||||||
} else if (result.json.error) {
|
} else if (result.json.error) {
|
||||||
// Set error message
|
// Set error message
|
||||||
deleteErrorMessageEle.innerText = `Error (${result.status}): ${result.json.reason}`;
|
deleteErrorMessageEle.innerText = `Error (${result.status}): ${result.json.reason}`;
|
||||||
@@ -224,7 +231,12 @@ generateEle.addEventListener("submit", (event) => {
|
|||||||
message3Ele.classList.remove("warning");
|
message3Ele.classList.remove("warning");
|
||||||
|
|
||||||
// Send request to function which handles requests to the background page
|
// Send request to function which handles requests to the background page
|
||||||
|
if (typeof chrome !== undefined) {
|
||||||
|
browser.runtime.sendMessage({type: "generate-via-popup", longurl: longurl, shorturl: shorturl});
|
||||||
|
} else {
|
||||||
backgroundFunc.then(sendRequest, onError);
|
backgroundFunc.then(sendRequest, onError);
|
||||||
|
};
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Add the warning class
|
// Add the warning class
|
||||||
message3Ele.classList.add("warning");
|
message3Ele.classList.add("warning");
|
||||||
|
|||||||
@@ -28,6 +28,25 @@
|
|||||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
|
// Import polyfill
|
||||||
|
import "/lib/browser-polyfill.min.js";
|
||||||
|
|
||||||
|
// Create a context menu
|
||||||
|
browser.runtime.onInstalled.addListener(() => {
|
||||||
|
browser.contextMenus.create({
|
||||||
|
title: "Manually generate a Chhoto URL",
|
||||||
|
contexts: ["all"],
|
||||||
|
id: "generate-chhoto-url"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Run code when the context menu is clicked
|
||||||
|
browser.contextMenus.onClicked.addListener( (info) => {
|
||||||
|
browser.windows.create({url: `/popup/popup.html?url=${info.pageUrl}`, type: "popup"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Type Definitions
|
* Type Definitions
|
||||||
*/
|
*/
|
||||||
@@ -81,6 +100,12 @@
|
|||||||
* @returns {!Promise<[URL, string, string], Error>}
|
* @returns {!Promise<[URL, string, string], Error>}
|
||||||
*/
|
*/
|
||||||
function validateURL(url, title, type) {
|
function validateURL(url, title, type) {
|
||||||
|
// Define a new URL object, in case the url was collected from a runtime message
|
||||||
|
// In which case, the URL object wouldn't be preserved
|
||||||
|
if (type === "popup") {
|
||||||
|
url = new URL(url);
|
||||||
|
}
|
||||||
|
|
||||||
return browser.storage.local.get("allowedProtocols").then(({ allowedProtocols }) => {
|
return browser.storage.local.get("allowedProtocols").then(({ allowedProtocols }) => {
|
||||||
// Initialize a list of protocols that are allowed if unset.
|
// Initialize a list of protocols that are allowed if unset.
|
||||||
// This needs to be synced with the initialization code in options.js.
|
// This needs to be synced with the initialization code in options.js.
|
||||||
@@ -269,23 +294,25 @@ function validateChhotoResponse(httpResp) {
|
|||||||
* @returns {!Promise<ChhotoJSON, Error>} `ChhotoJSON`, unmodified, on
|
* @returns {!Promise<ChhotoJSON, Error>} `ChhotoJSON`, unmodified, on
|
||||||
* success, or an error indicating that we failed to copy to the clipboard.
|
* success, or an error indicating that we failed to copy to the clipboard.
|
||||||
*/
|
*/
|
||||||
function copyLinkToClipboard(chhotoResp) {
|
async function copyLinkToClipboard(chhotoResp) {
|
||||||
// Send finished message
|
// Send finished message
|
||||||
browser.runtime.sendMessage({message: "finished"});
|
browser.runtime.sendMessage({message: "finished"});
|
||||||
|
|
||||||
// Chrome requires this hacky workaround :(
|
// Chrome requires this hacky workaround :(
|
||||||
if (typeof chrome !== "undefined") {
|
// Currently the "getBrowserInfo" function is only available on Firefox browsers
|
||||||
const prevSelected = document.activeElement;
|
// So, we can partially detect the type of the browser
|
||||||
const tempEle = document.createElement("input");
|
// This check may change in the future
|
||||||
document.body.appendChild(tempEle);
|
if (typeof browser.runtime.getBrowserInfo !== "function") {
|
||||||
tempEle.value = chhotoResp.shorturl;
|
// Create an offscreen document
|
||||||
tempEle.select();
|
await browser.offscreen.createDocument({
|
||||||
document.execCommand('copy');
|
url: "/offscreen/offscreen.html",
|
||||||
document.body.removeChild(tempEle);
|
reasons: [chrome.offscreen.Reason.CLIPBOARD],
|
||||||
// Depending on what was previously selected, we might not be able to select the text.
|
justification: "Copy the shortened URL to the clipboard"
|
||||||
if (prevSelected?.select) {
|
});
|
||||||
prevSelected.select();
|
|
||||||
}
|
// Send a runtime message to the offscreen page
|
||||||
|
browser.runtime.sendMessage({type: "clipboard", link: chhotoResp.shorturl});
|
||||||
|
|
||||||
return Promise.resolve(chhotoResp);
|
return Promise.resolve(chhotoResp);
|
||||||
} else {
|
} else {
|
||||||
return navigator.clipboard
|
return navigator.clipboard
|
||||||
@@ -360,17 +387,27 @@ function popupGenerateChhoto(url, title) {
|
|||||||
.catch(notifyError);
|
.catch(notifyError);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to handle messages
|
||||||
|
* */
|
||||||
|
async function handleMessages(message) {
|
||||||
|
// Only activate if the messge was intended for the background page
|
||||||
|
if (message.type === "generate-via-popup") {
|
||||||
|
if (typeof message.longurl !== 'string' && typeof message.shorturl !== 'string') {
|
||||||
|
throw new TypeError(`The long URL and short URL's type must be a 'string', got "${typeof message.longurl}" and "${typeof message.shorturl} respectively."`)
|
||||||
|
};
|
||||||
|
|
||||||
|
// Generate
|
||||||
|
console.log(message.longurl);
|
||||||
|
popupGenerateChhoto(message.longurl, message.shorturl);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// When the extension icon is clicked, call the function above
|
// When the extension icon is clicked, call the function above
|
||||||
browser.browserAction.onClicked.addListener(generateChhoto);
|
browser.action.onClicked.addListener(generateChhoto);
|
||||||
|
|
||||||
// Create a context menu
|
// When a message is sent
|
||||||
browser.contextMenus.removeAll();
|
browser.runtime.onMessage.addListener(handleMessages);
|
||||||
browser.contextMenus.create({
|
|
||||||
title: "Manually generate a Chhoto URL",
|
|
||||||
contexts: ["all"]
|
|
||||||
});
|
|
||||||
|
|
||||||
// Run code when the context menu is clicked
|
|
||||||
browser.contextMenus.onClicked.addListener( (info) => {
|
|
||||||
browser.windows.create({url: `/popup/popup.html?url=${info.pageUrl}`, type: "popup"});
|
|
||||||
});
|
|
||||||
Reference in new issue
Block a user