您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
try to take over the world!
// ==UserScript== // @name 为 echart 编辑器添加缓存工具 // @namespace http://tampermonkey.net/ // @version 0.2 // @description try to take over the world! // @author You // @match https://echarts.apache.org/examples/zh/editor.html* // @require https://cdn.staticfile.org/jquery/3.5.0/jquery.min.js // @grant none // ==/UserScript== (function() { 'use strict'; var storage = (function(){ return { warning: false, list: "_tmp_save_list_", map: "_tmp_save_map_", current: "", saveId: null, tmpList: [], // 这里理解为 id listMap: {}, // 这里理解为 id 对应的名字,便于使用者看 get(name,def) { let s = localStorage.getItem(name); if (s) { return JSON.parse(s); } else { return def; } }, save(name,val) { localStorage.setItem(name,JSON.stringify(val)); }, remove(name) { localStorage.removeItem(name); } } })(); var ul = $('#navbar-collapse .navbar-left'); storage.tmpList = storage.get(storage.list,[]); storage.listMap = storage.get(storage.map,{}); var saveLi = $(`<li id="nav-save"><a href="#">保存</a></li>`); var saveAsLi = $(`<li id="nav-save" style="display: none;"><a href="#">另保存</a></li>`); function openSaveDialog(newOne) { if (storage.saveId) { clearTimeout(storage.saveId); } storage.saveId = setTimeout(function () { if (!storage.warning) { storage.warning = true; alert('代码并不能被长期保存,请自己妥善管理'); } if (!newOne && storage.current) { storage.save(storage.current,{code: gb.editor.getValue()}); return; } else { let name = "code_" + (new Date().getTime()); let cname = prompt("名称",name); if (cname) { storage.current = name; storage.save(name,{code: gb.editor.getValue()}); storage.tmpList.push(name); storage.save(storage.list,storage.tmpList); storage.listMap[name] = cname; storage.save(storage.map,storage.listMap); storage.saveId = null; saveLi.find(`a`).text(`保存[${cname}]`); saveAsLi.css({display: 'block'}); } } },500); }; saveLi.on('click',function () { openSaveDialog(false); }); saveAsLi.on('click',function () { openSaveDialog(true); }); var getLi = $(`<li id="nav-get"><a href="#">恢复</a></li>`); var selectDiv = $(`<div class="myPanel" style="overflow-y: scroll;width: 405px;display:none;position: absolute;top: 5px;left: 6px;padding: 5px;;height: calc(100vh - 10px);z-index: 10000;background: #d9edf7;"></div>`); var showSelectDiv = function() { let createBtns = (id,name) => `<div class="btn-group" role="group" style="padding-top: 3px;"> <button type="button" class="btn btn-default disabled" style="width: 270px;outline:white;opacity: 1;text-overflow: ellipsis;white-space:nowrap;">${name}</button> <button type="button" class="btn btn-default" style="width: 55px;outline: white;" method="import" tar="${id}">导入</button> <button type="button" class="btn btn-default" style="width: 55px;outline: white;" method="delete" tar="${id}">删除</button> </div>`; selectDiv.html(""); let dom = `<div class="btn-group" role="group"> <button tar="close" type="button" class="btn btn-default" style="width: 390px;outline:white;opacity: 1;text-overflow: ellipsis;white-space:nowrap;">关闭</button> </div>`; storage.tmpList.forEach(item => { if (item in storage.listMap) { dom += createBtns(item,storage.listMap[item]); } }); selectDiv.html(dom); selectDiv.find(`button[tar="close"]`).on('click',function () { selectDiv.css({display: "none"}); }); selectDiv.find(`button[method="import"]`).on('click',function () { let item = $(this).attr('tar'); let code = storage.get(item,{code: ""}); gb.editor.setValue(code.code); storage.current = item; saveLi.find(`a`).text(`保存[${storage.listMap[item]}]`); saveAsLi.css({display: 'block'}); }); selectDiv.find(`button[method="delete"]`).on('click',function () { let item = $(this).attr('tar'); storage.remove(item); delete storage.listMap[item]; storage.save(storage.map,storage.listMap); if (storage.tmpList.indexOf(item) !== -1) { storage.tmpList.splice(storage.tmpList.indexOf(item),1); } $(this).parent().remove(); }); selectDiv.css({display: 'block'}); } getLi.on('click',function () { if (storage.tmpList.length) { showSelectDiv(); } else { alert('没有保存记录'); } }); $('head').append(`<style>.myPanel::-webkit-scrollbar {/*滚动条整体样式*/ width: 4px; /*高宽分别对应横竖滚动条的尺寸*/ height: 4px; scrollbar-arrow-color:red; } .myPanel::-webkit-scrollbar-thumb {/*滚动条里面小方块*/ border-radius: 5px; -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); background: rgba(0,0,0,0.2); scrollbar-arrow-color:red; } .myPanel::-webkit-scrollbar-track {/*滚动条里面轨道*/ -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2); border-radius: 0; background: rgba(0,0,0,0.1); }</style>`) $('body').append(selectDiv); ul.append(saveLi); ul.append(saveAsLi); ul.append(getLi); // Your code here... })();