// ==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...
})();