// ==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 // @downloadURL https://update.greasyfork.icu/scripts/414739/%E4%B8%BA%20echart%20%E7%BC%96%E8%BE%91%E5%99%A8%E6%B7%BB%E5%8A%A0%E7%BC%93%E5%AD%98%E5%B7%A5%E5%85%B7.user.js // @updateURL https://update.greasyfork.icu/scripts/414739/%E4%B8%BA%20echart%20%E7%BC%96%E8%BE%91%E5%99%A8%E6%B7%BB%E5%8A%A0%E7%BC%93%E5%AD%98%E5%B7%A5%E5%85%B7.meta.js // ==/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 = $(``); var saveAsLi = $(``); 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 = $(``); var selectDiv = $(``); var showSelectDiv = function() { let createBtns = (id,name) => `
`; selectDiv.html(""); let dom = `
`; 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(``) $('body').append(selectDiv); ul.append(saveLi); ul.append(saveAsLi); ul.append(getLi); // Your code here... })();