mirror of
https://github.com/Pathduck/pathduck.github.io.git
synced 2026-07-16 16:42:00 -04:00
187 lines
6.2 KiB
JavaScript
Executable File
187 lines
6.2 KiB
JavaScript
Executable File
// Backup Search Engines
|
|
// version 2025.1.0
|
|
// https://forum.vivaldi.net/post/277594
|
|
// Adds functionality to backup and restore search engines in
|
|
// vivaldi://settings/search.
|
|
|
|
(function backupSearchEngines() {
|
|
function msg(print) {
|
|
clearTimeout(msgTimeout);
|
|
if (print === "backup") {
|
|
info.innerText = "Backup copied to clipboard";
|
|
} else if (print === "restore") {
|
|
info.innerText = "Search engines restored";
|
|
} else {
|
|
info.innerText = "Code error, aborted";
|
|
}
|
|
msgTimeout = setTimeout(() => (info.innerText = ""), 5000);
|
|
}
|
|
|
|
function bringingItAllBackHome(remains, defaultsArray) {
|
|
vivaldi.searchEngines.getTemplateUrls((engines) => {
|
|
const getKeys = engines.templateUrls.map((e) => e.keyword);
|
|
for (let i = 0; i < defaultsArray.length; i++) {
|
|
const index = getKeys.lastIndexOf(defaultsArray[i][0]);
|
|
const id = engines.templateUrls[index].id.toString();
|
|
const ds = defaultsArray[i][1];
|
|
vivaldi.searchEngines.setDefault(ds, id);
|
|
}
|
|
remains.forEach((remove) => {
|
|
vivaldi.searchEngines.removeTemplateUrl(remove);
|
|
});
|
|
msg("restore");
|
|
});
|
|
}
|
|
|
|
function exec(collection) {
|
|
vivaldi.searchEngines.getTemplateUrls((engines) => {
|
|
const oldDefaults = [
|
|
engines.defaultImage,
|
|
engines.defaultPrivate,
|
|
engines.defaultSearch,
|
|
];
|
|
const newDefaults = [
|
|
collection.defaultImage,
|
|
collection.defaultPrivate,
|
|
collection.defaultSearch,
|
|
collection.defaultSearchField,
|
|
collection.defaultSearchFieldPrivate,
|
|
collection.defaultSpeeddials,
|
|
collection.defaultSpeeddialsPrivate,
|
|
];
|
|
engines.templateUrls.forEach((engine) => {
|
|
if (oldDefaults.indexOf(engine.guid) === -1) {
|
|
vivaldi.searchEngines.removeTemplateUrl(engine.guid);
|
|
}
|
|
});
|
|
console.info("restoring search engines...");
|
|
const defaultsArray = [];
|
|
collection.templateUrls.forEach((collect) => {
|
|
vivaldi.searchEngines.addTemplateUrl(collect, () => {
|
|
console.info(` \u2022 ${collect.name}`);
|
|
if (newDefaults.indexOf(collect.guid) > -1) {
|
|
const indeces = newDefaults
|
|
.map((e, i) => (e === collect.guid ? i : ""))
|
|
.filter(String);
|
|
indeces.forEach((index) => {
|
|
let ds;
|
|
if (index === 0) {
|
|
ds = vivaldi.searchEngines.DefaultType.DEFAULT_IMAGE;
|
|
} else if (index === 1) {
|
|
ds = vivaldi.searchEngines.DefaultType.DEFAULT_PRIVATE;
|
|
} else if (index === 2) {
|
|
ds = vivaldi.searchEngines.DefaultType.DEFAULT_SEARCH;
|
|
} else if (index === 3) {
|
|
ds = vivaldi.searchEngines.DefaultType.DEFAULT_SEARCH_FIELD;
|
|
} else if (index === 4) {
|
|
ds = vivaldi.searchEngines.DefaultType.DEFAULT_SEARCH_FIELD_PRIVATE;
|
|
} else if (index === 5) {
|
|
ds = vivaldi.searchEngines.DefaultType.DEFAULT_SPEEDDIALS;
|
|
} else {
|
|
ds = vivaldi.searchEngines.DefaultType.DEFAULT_SPEEDDIALS_PRIVATE;
|
|
}
|
|
const tunnel = [collect.keyword, ds];
|
|
defaultsArray.push(tunnel);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
const remains = [...new Set(oldDefaults)];
|
|
bringingItAllBackHome(remains, defaultsArray);
|
|
});
|
|
}
|
|
|
|
function restore(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
let backupCode;
|
|
let collection;
|
|
if (e.type === "paste") {
|
|
const clipboardData = e.clipboardData;
|
|
backupCode = clipboardData.getData("text");
|
|
} else {
|
|
backupCode = e.dataTransfer.getData("text");
|
|
}
|
|
try {
|
|
collection = JSON.parse(backupCode);
|
|
} catch (err) {
|
|
msg("error");
|
|
return;
|
|
}
|
|
if (
|
|
"defaultImage" in collection &&
|
|
"defaultPrivate" in collection &&
|
|
"defaultSearch" in collection
|
|
) {
|
|
exec(collection);
|
|
} else {
|
|
msg("error");
|
|
}
|
|
}
|
|
|
|
function backup() {
|
|
vivaldi.searchEngines.getTemplateUrls((engines) => {
|
|
const backupCode = JSON.stringify(engines, null, 2);
|
|
navigator.clipboard.writeText(backupCode);
|
|
msg("backup");
|
|
});
|
|
}
|
|
|
|
function ui() {
|
|
const check = document.getElementById("vm-bse-backup");
|
|
if (!check) {
|
|
const place = document.querySelector(
|
|
".setting-section > div > .setting-group.unlimited > .setting-single"
|
|
);
|
|
const btn = document.createElement("input");
|
|
btn.setAttribute("type", "button");
|
|
btn.setAttribute("value", "Backup");
|
|
btn.classList.add("vm-bse-backup");
|
|
place.insertBefore(btn, place.lastChild);
|
|
btn.addEventListener("click", backup);
|
|
const input = document.createElement("input");
|
|
input.setAttribute("type", "text");
|
|
input.setAttribute("placeholder", "Restore Backup");
|
|
input.classList.add("vm-bse-restore");
|
|
place.insertBefore(input, place.lastChild);
|
|
input.addEventListener("paste", restore);
|
|
input.addEventListener("drop", restore);
|
|
info = document.createElement("span");
|
|
info.classList.add("vm-bse-msg");
|
|
place.insertBefore(info, place.lastChild);
|
|
}
|
|
}
|
|
|
|
const css = `
|
|
.vm-bse-restore {
|
|
width: 130px;
|
|
margin-left: 6px;
|
|
margin-top: 6px;
|
|
}
|
|
.vm-bse-restore::-webkit-input-placeholder {
|
|
opacity: 1;
|
|
color: var(--colorHighlightBg);
|
|
text-align: center;
|
|
}
|
|
.vm-bse-msg {
|
|
margin-left: 12px;
|
|
}
|
|
`;
|
|
|
|
let msgTimeout;
|
|
const settingsUrl =
|
|
"chrome-extension://mpognobbkildjkofajifpdfhcoklimli/components/settings/settings.html?path=";
|
|
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
|
|
if (changeInfo.url === `${settingsUrl}search`) {
|
|
setTimeout(ui, 100);
|
|
const check = document.getElementById("vm-bse-css");
|
|
if (!check) {
|
|
const style = document.createElement("style");
|
|
style.id = "vm-bse-css";
|
|
style.innerHTML = css;
|
|
document.getElementsByTagName("head")[0].appendChild(style);
|
|
}
|
|
}
|
|
});
|
|
})();
|