// ==UserScript==
// @name upload.cc简易控制脚本
// @namespace https://gf.qytechs.cn/users/14059
// @description upload.cc简易控制脚本,点击菜单弹出对话框,输入输出保存的图片记录,然后自己手动管理
// @include https://upload.cc/*
// @author setycyas
// @version 1.04
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_listValues
// @grant GM_deleteValue
// @grant GM_registerMenuCommand
// @run-at document-end
// @license MIT
// ==/UserScript==
(function(){
'use strict';
console.log("upload.cc简易控制脚本运行开始");
/****************************************
######## version 1.03 @2019-05-13 #######
######## 脚本正式开始 ###################
****************************************/
/* ## Functions ## */
/* 加入bootstrap组件 **/
function addBootstrap(){
var bootstrapLink = '<link href="https://lib.baomitu.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">';
$(bootstrapLink).appendTo($('head'));
}
/* 加入模拟框相关html与命令 **/
function addModal(){
/* 加入模拟框html */
var modalHtml = `
<div id="modal" class = "modal fade hide"><div class="modal-content">
<textarea id="modal-text" placeholder="这里读写记录(json格式)" style="width:1000px;height:120px;"></textarea><br>
<label class="form-inline">
<button id="getRecord" class="btn btn-sm btn-primary">获取当前记录</button>
<button id="setRecord" class="btn btn-sm btn-danger">设定新记录</button>
<button id="backup" class="btn btn-sm btn-warning">备份文本记录</button>
<button id="readBackup" class="btn btn-sm btn-info">读取备份标签</button>
<button id="delBackup" class="btn btn-sm btn-danger">删除备份标签</button>
<button id="listBackup" class="btn btn-sm btn-info">列出备份标签</button>
</label>
<label class="form-inline">
<button id="readAllBackup" class="btn btn-sm btn-info">导出所有备份</button>
<button id="closeModal" class="btn btn-sm btn-default">关闭模拟框</button>
</label>
</div></div>
`;
$(modalHtml).appendTo($('body'));
/* 设定css */
$('.modal-content').css({
'margin':'80px',
'padding-left':'100px',
'padding-top':'30px',
'text-align':'left',
'background-color':'#e8e8e8'
});
$('#modal .btn').css({
'width':'150px',
'text-align':'center',
'margin':'5px',
'float':'right'
});
/* 设定按钮行为 */
// 设定获取记录按钮的行为
$('#getRecord').click(function(){
$('#modal-text').val(window.localStorage['user_upload_history']);
alert('获取当前记录成功!');
});
// 设定读取记录按钮的行为,读取后替换原来的记录,需要谨慎
$('#setRecord').click(function(){
var res = confirm("确定替换记录吗?这是个不可取消的操作,未保存原记录时请小心使用.");
if(res == true){
var text = $('#modal-text').val();
try {
var obj = JSON.parse(text);
window.localStorage.setItem('user_upload_history',text);
window.location.href = 'https://upload.cc/';
} catch(e) {
alert('输入有错误,不是json字符串');
}
}
});
// 备份按钮
$('#backup').click(function(){
var backupLabel = prompt('备份当前文本框记录,请输入你设定的标签名.\n空标签则取消备份','');
if(backupLabel) backupLabel = backupLabel.trim();
if(backupLabel){
var text = $('#modal-text').val();
try {
var obj = JSON.parse(text);
GM_setValue(backupLabel,text);
alert(`备份完成!标签为:${backupLabel}`);
} catch(e) {
alert('输入有错误,不是json字符串');
}
}else{
alert('没有进行备份');
}
});
/*
$('#backup').click(function(){
var backupLabel = prompt('备份当前图片记录,请输入你设定的标签名.\n空标签则取消备份','');
if(backupLabel) backupLabel = backupLabel.trim();
if(backupLabel){
GM_setValue(backupLabel,window.localStorage['user_upload_history']);
alert(`备份完成!标签为:${backupLabel}`);
}else{
alert('没有进行备份');
}
});
*/
// 读取备份按钮
$('#readBackup').click(function(){
var backupLabel = prompt('请输入要读取的标签名.','');
if(backupLabel) backupLabel = backupLabel.trim();
var data = GM_getValue(backupLabel,'');
if(data){
$('#modal-text').val(data);
alert('备份读取成功');
}else{
alert('读取备份失败,可能还没有该标签的备份资料.');
}
});
// 删除备份按钮
$('#delBackup').click(function(){
var backupLabel = prompt('请输入要删除的备份标签名.','');
if(backupLabel) backupLabel = backupLabel.trim();
var backupList = GM_listValues();
if($.inArray(backupLabel,backupList) > -1){
GM_deleteValue(backupLabel);
alert('删除备份标签: '+backupLabel);
}else{
alert('没有这个备份标签!');
}
});
// 列出备份按钮
$('#listBackup').click(function(){
var backupList = GM_listValues();
var listLength = backupList.length;
if(listLength > 0){
$('#modal-text').val(backupList.join('\n'));
alert(`在模拟文本框中列出标签表,标签个数: ${listLength}`);
}else{
alert('目前没有备份标签');
}
});
// 导出所有备份按钮
$('#readAllBackup').click(function(){
var backupList = GM_listValues();
var result = {};
for(var i = 0;i < backupList.length;i++){
let key = backupList[i];
let value = GM_getValue(key,'');
result[key] = value;
}
let resultText = JSON.stringify(result).replace(/\\"/g,'"');
resultText = resultText.replace(/"\[\{/g,'\[\{');
resultText = resultText.replace(/\}\]"/g,'\}\]');
$('#modal-text').val(resultText);
});
// 关闭模拟框按钮
$('#closeModal').click(function(){
var modal = $('div#modal');
// 由显示状态转变为隐藏状态
modal.removeClass('show');
modal.addClass('hide');
modal.css({'display':'none'});
});
}
/* 模拟框开关.由于中途加入的bootstrap有些问题,用官方的方法设定模拟框显隐有问题.只好用手动方法.
关键是除了顶层的modal外,还有.modal-backdrop这个自动生成的div,要把两个层的'hide','show'class切换,还要手动切换display状态.
但若完全不用官方脚本,则不需要考虑.modal-backdrop,因为不会生成这个层.不用官方的js还有个好处,就是不需要加载.
**/
function modalToggle(){
var modal = $('div#modal');
var modalClassList = modal[0].classList;
// 看'hide'是否在class列表中,判断当前的显隐状态
if($.inArray('hide',modalClassList) > -1) {
// 由隐藏状态转变为显示状态
modal.removeClass('hide');
modal.addClass('show');
modal.css({'display':'block'});
}else{
// 由显示状态转变为隐藏状态
modal.removeClass('show');
modal.addClass('hide');
modal.css({'display':'none'});
}
}
/* ## Main Script ## */
//addBootstrap();
//addModal();
//GM_registerMenuCommand('模拟框开关',modalToggle);
GM_registerMenuCommand('模拟框开关',function(){
if($('div#modal').length == 0){
addBootstrap();
addModal();
}
modalToggle();
});
/****************************************
######## 脚本结束 ###################
****************************************/
})();