您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a button on coriolis backup / detailed-export, to save the output as file.
// ==UserScript== // @name Coriolis - Save export to file // @name:de Coriolis - Export in Datei speichern // @namespace https://greasyfork.org/users/928242 // @version 1.0.2 // @description Add a button on coriolis backup / detailed-export, to save the output as file. // @description:de Füge einen Button zu "Coriolis Backup / Detailed-Export" hinzu, um die Ausgabe als Datei zu speichern. // @author Kamikaze (https://github.com/Kamiikaze) // @supportURL https://github.com/Kamiikaze/Tampermonkey/issues // @match https://coriolis.io/* // @icon https://www.google.com/s2/favicons?sz=64&domain=coriolis.io // @grant none // @license MIT // ==/UserScript== const settingsElSelector = "#coriolis .r.menu .menu-header"; const menuElSelector = "#coriolis .menu-list ul"; const menuEntryBackupElSelector = "li:nth-child(1) > a"; const menuEntryExportElSelector = "li:nth-child(2) > a"; const modalElSelector = ".modal"; (async () => { const settingsElement = await waitForElm(settingsElSelector) settingsElement.addEventListener('click', async () => { const menuElement = await waitForElm(menuElSelector) const menuEntryBackup = await waitForElm(menuEntryBackupElSelector, menuElement) menuEntryBackup.addEventListener('click', () => { createDLBtn('backup') }) const menuEntryExport = await waitForElm(menuEntryExportElSelector, menuElement) menuEntryExport.addEventListener('click', () => { createDLBtn('detailed-export') }) }) })(); async function createDLBtn(type) { const modal = await waitForElm(modalElSelector) const btn = document.createElement("button") btn.className = "r cap" btn.innerText = "download" btn.addEventListener('click', async () => { const data = await getJsonData() download(data, type) }) modal.append(btn) } async function getJsonData() { const modal = await waitForElm(modalElSelector) const textfield = await waitForElm("textarea", modal) return JSON.parse(textfield.value) } function download(content, type) { const a = document.createElement("a"); const file = new Blob([JSON.stringify(content, null, 2)], {type: 'text/plain'}) const timestamp = new Date().toISOString() a.href = URL.createObjectURL(file) a.download = `${timestamp}_coriolis_${type}.json` a.click() } function waitForElm(selector, parent = document) { return new Promise((resolve) => { if (parent.querySelector(selector)) { console.debug("Element found", selector) return resolve(parent.querySelector(selector)); } const observer = new MutationObserver(() => { if (parent.querySelector(selector)) { console.debug("Element found", selector) resolve(parent.querySelector(selector)) observer.disconnect() } }); observer.observe(document.body, { childList: true, subtree: true }); }); }