Initial commit
This commit is contained in:
16
content_scripts/base-url-switcher.js
Normal file
16
content_scripts/base-url-switcher.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
(function () {
|
||||||
|
if (window.hasRun) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
window.hasRun = true;
|
||||||
|
|
||||||
|
browser.runtime.onMessage.addListener((message) => {
|
||||||
|
if (message.command === "switch_base_url") {
|
||||||
|
window.location =
|
||||||
|
message.baseUrl +
|
||||||
|
window.location.pathname +
|
||||||
|
window.location.search +
|
||||||
|
window.location.hash;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
BIN
icons/base-url-switcher-96.png
Normal file
BIN
icons/base-url-switcher-96.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 541 B |
24
manifest.json
Normal file
24
manifest.json
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"name": "Base Url Switcher",
|
||||||
|
"version": "1.0",
|
||||||
|
|
||||||
|
"description": "Allows for fast switching between different base urls with the same url parameters.",
|
||||||
|
"icons": {
|
||||||
|
"96": "icons/base-url-switcher-96.png"
|
||||||
|
},
|
||||||
|
|
||||||
|
"options_ui": {
|
||||||
|
"page": "options/options.html",
|
||||||
|
"browser_style": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"permissions": ["activeTab", "storage"],
|
||||||
|
|
||||||
|
"browser_action": {
|
||||||
|
"default_icon": "icons/base-url-switcher-96.png",
|
||||||
|
"default_title": "Base Url Switcher",
|
||||||
|
"default_popup": "popup/choose_url.html",
|
||||||
|
"browser_style": true
|
||||||
|
}
|
||||||
|
}
|
||||||
55
options/options.css
Normal file
55
options/options.css
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
body {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
padding: 10px 10px 10px 0;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="submit"] {
|
||||||
|
background-color: #1e65ff;
|
||||||
|
color: white;
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="submit"]:hover {
|
||||||
|
background-color: #3071ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-25 {
|
||||||
|
float: left;
|
||||||
|
width: 25%;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-75 {
|
||||||
|
float: left;
|
||||||
|
width: 75%;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.row {
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clear floats after the columns */
|
||||||
|
.row:after {
|
||||||
|
content: "";
|
||||||
|
display: table;
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
43
options/options.html
Normal file
43
options/options.html
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<link rel="stylesheet" href="options.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<form>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-25">
|
||||||
|
<label for="local">Local</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-75">
|
||||||
|
<input type="text" id="local" placeholder="https://localhost:8080/">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-25">
|
||||||
|
<label for="test">Test</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-75">
|
||||||
|
<input type="text" id="test" placeholder="https://test.mydomain.com/">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-25">
|
||||||
|
<label for="prod">Production</label>
|
||||||
|
</div>
|
||||||
|
<div class="col-75">
|
||||||
|
<input type="text" id="prod" placeholder="https://mydomain.com/">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script src="options.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
26
options/options.js
Normal file
26
options/options.js
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
function saveOptions(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
browser.storage.local.set({
|
||||||
|
local: document.querySelector("#local").value,
|
||||||
|
test: document.querySelector("#test").value,
|
||||||
|
prod: document.querySelector("#prod").value,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function restoreOptions() {
|
||||||
|
function updateUI(restoredSettings) {
|
||||||
|
document.querySelector("#local").value = restoredSettings.local || "";
|
||||||
|
document.querySelector("#test").value = restoredSettings.test || "";
|
||||||
|
document.querySelector("#prod").value = restoredSettings.prod || "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function onError(error) {
|
||||||
|
console.log(`Error: ${error}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const gettingStoredSettings = browser.storage.local.get();
|
||||||
|
gettingStoredSettings.then(updateUI, onError);
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", restoreOptions);
|
||||||
|
document.querySelector("form").addEventListener("submit", saveOptions);
|
||||||
15
popup/choose_url.css
Normal file
15
popup/choose_url.css
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
html, body {
|
||||||
|
width: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
width: 100%;
|
||||||
|
padding: 4px;
|
||||||
|
font-size: 1.5em;
|
||||||
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover {
|
||||||
|
background-color: #CFF2F2;
|
||||||
|
}
|
||||||
18
popup/choose_url.html
Normal file
18
popup/choose_url.html
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<link rel="stylesheet" href="choose_url.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="popup-content">
|
||||||
|
<div id="local" class="button" data-url="">Local</div>
|
||||||
|
<div id="test" class="button" data-url="">Test</div>
|
||||||
|
<div id="prod" class="button" data-url="">Production</div>
|
||||||
|
</div>
|
||||||
|
<script src="choose_url.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
31
popup/choose_url.js
Normal file
31
popup/choose_url.js
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
function listenForClicks() {
|
||||||
|
document.addEventListener("click", function (e) {
|
||||||
|
if (!e.target.classList.contains("button")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
browser.tabs.query({ active: true, currentWindow: true }).then((tabs) => {
|
||||||
|
browser.tabs.sendMessage(tabs[0].id, {
|
||||||
|
command: "switch_base_url",
|
||||||
|
baseUrl: e.target.getAttribute("data-url"),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUrls(settings) {
|
||||||
|
document.querySelector("#local").setAttribute("data-url", settings.local);
|
||||||
|
document.querySelector("#test").setAttribute("data-url", settings.test);
|
||||||
|
document.querySelector("#prod").setAttribute("data-url", settings.prod);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onError(e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
const gettingStoredSettings = browser.storage.local.get();
|
||||||
|
gettingStoredSettings.then(setUrls, onError);
|
||||||
|
|
||||||
|
browser.tabs
|
||||||
|
.executeScript({ file: "/content_scripts/base-url-switcher.js" })
|
||||||
|
.then(listenForClicks);
|
||||||
Reference in New Issue
Block a user