增加通知

This commit is contained in:
woohoo 2022-01-27 18:11:42 +08:00
parent f6a6317a13
commit feae11dd78

View File

@ -1,8 +1,8 @@
// ==UserScript== // ==UserScript==
// @lastmodified 202201261722 // @lastmodified 202201271811
// @name Torn翻译 // @name Torn翻译
// @namespace WOOH // @namespace WOOH
// @version 0.3.1 // @version 0.3.2
// @description Torn UI翻译 // @description Torn UI翻译
// @author Woohoo[2687093] Sabrina_Devil[2696209] // @author Woohoo[2687093] Sabrina_Devil[2696209]
// @match https://www.torn.com/* // @match https://www.torn.com/*
@ -23,13 +23,18 @@
if (window.WHTRANS) return; if (window.WHTRANS) return;
window.WHTRANS = true; window.WHTRANS = true;
// 版本 // 版本
const version = '0.3.1'; const version = '0.3.2';
// 修改历史 // 修改历史
const changelist = [ const changelist = [
{ {
todo: true, todo: true,
cont: `翻译baza npc商店、imarket、imarket搜索结果`, cont: `翻译baza npc商店、imarket、imarket搜索结果`,
}, },
{
ver: '0.3.2',
date: '20220127',
cont: `增加通知`,
},
{ {
ver: '0.3.1', ver: '0.3.1',
date: '20220126', date: '20220126',
@ -3350,18 +3355,18 @@
clickFunc: function (e) { clickFunc: function (e) {
e.target.blur(); e.target.blur();
if (getScriptEngine() === UserScriptEngine.PDA && !window.location.href.includes('crimes.php')) { if (getScriptEngine() === UserScriptEngine.PDA && !window.location.href.includes('crimes.php')) {
window.alert('因PDA 或 Torn 限制无法开启飞贼小助手,即将转跳至 Crime 页面。') notify('因PDA 或 Torn 限制仅某些页面(如 Crime 页面)可开启飞贼小助手,即将转跳,请转跳后开启。后续将会改善。', 3,
window.location.href = 'https://www.torn.com/crimes.php'; () => window.location.href = 'https://www.torn.com/crimes.php');
return; return;
} }
const popup_node = popupMsg(`加载中 ${loading_gif_html}<br/>`, '飞贼助手加载'); // const popup_node = popupMsg(`加载中 ${loading_gif_html}<br/>`, '飞贼助手加载');
if (!GS.LOADED) { if (!GS.LOADED) {
COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js') COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js')
.catch(err => popup_node.innerHTML = err) .catch(err => notify(err))
.then(VueJS => { .then(VueJS => {
window.eval(VueJS); window.eval(VueJS);
GS.LOADED = true; GS.LOADED = true;
popup_node.innerHTML += '已载入依赖<br/>'; notify('已载入依赖');
window.GM_getValue = (k, v = undefined) => { window.GM_getValue = (k, v = undefined) => {
const objV = JSON.parse(window.localStorage.getItem('wh-gs-storage') || '{}')[k]; const objV = JSON.parse(window.localStorage.getItem('wh-gs-storage') || '{}')[k];
return objV || v; return objV || v;
@ -3391,12 +3396,12 @@
} }
window.eval(GSJS); window.eval(GSJS);
if (isDev()) window.GM_setValue("gsp_showContent", true); if (isDev()) window.GM_setValue("gsp_showContent", true);
popup_node.innerHTML += '飞贼助手已载入<br/>'; notify('飞贼助手已载入');
}) })
.catch(err => popup_node.innerHTML = `PDA API错误。${err}`); .catch(err => notify(`PDA API错误。${err}`));
}); });
} else { } else {
popup_node.innerHTML += '飞贼助手已经加载了'; notify('飞贼助手已经加载了');
} }
}, },
}) })
@ -3449,61 +3454,69 @@
domId: 'wh-test-btn', domId: 'wh-test-btn',
domText: '测试按钮', domText: '测试按钮',
clickFunc: function () { clickFunc: function () {
log(window, document) let pop = popupMsg('');
// let pop = popupMsg(''); let ifr = document.createElement('iframe');
// let ifr = document.createElement('iframe'); ifr.src = 'https://www.torn.com/crimes.php';
// ifr.src = 'https://www.torn.com/crimes.php'; document.body.append(ifr)
// document.body.append(ifr) log(ifr.contentDocument)
// log(ifr.contentDocument) ifr.onload = () => {
// ifr.onload = () => { const _window = ifr.contentWindow;
// const _window = ifr.contentWindow; const _docu = _window.document;
// const _docu = _window.document; _docu.head.innerHTML = '';
// _docu.head.innerHTML = ''; _docu.body.innerHTML = '';
// _docu.body.innerHTML = ''; COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js')
// COFetch('https://cdn.staticfile.org/vue/2.2.2/vue.min.js') // .catch(err => popup_node.innerHTML = err)
// // .catch(err => popup_node.innerHTML = err) .then(vuejs => {
// .then(vuejs => { _window.eval(vuejs)
// _window.eval(vuejs) log('Vue: ', typeof _window.Vue)
// log('Vue: ', typeof _window.Vue) // Eval(vuejs).catch(err => log(err)).then(() => {
// // Eval(vuejs).catch(err => log(err)).then(() => { // muggerInter.hasVue = true;
// // muggerInter.hasVue = true; // popup_node.innerHTML += '依赖已载入<br/>';
// // popup_node.innerHTML += '依赖已载入<br/>'; _window.GM_getValue = (k, v = undefined) => {
// _window.GM_getValue = (k, v = undefined) => { const objV = JSON.parse(_window.localStorage.getItem('wh-gs-storage') || '{}')[k];
// const objV = JSON.parse(_window.localStorage.getItem('wh-gs-storage') || '{}')[k]; return objV || v;
// return objV || v; };
// }; _window.GM_setValue = (k, v) => {
// _window.GM_setValue = (k, v) => { const obj = JSON.parse(_window.localStorage.getItem('wh-gs-storage') || '{}');
// const obj = JSON.parse(_window.localStorage.getItem('wh-gs-storage') || '{}'); obj[k] = v;
// obj[k] = v; _window.localStorage.setItem('wh-gs-storage', JSON.stringify(obj));
// _window.localStorage.setItem('wh-gs-storage', JSON.stringify(obj)); };
// }; COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${performance.now()}`)
// COFetch(`https://gitee.com/ameto_kasao/tornjs/raw/master/GoldenSnitch.js?${performance.now()}`) .then(res => {
// .then(res => { // if (getScriptEngine() === UserScriptEngine.GM) {
// // if (getScriptEngine() === UserScriptEngine.GM) { // ifr.contentWindow.GM_xmlhttpRequest = GM_xmlhttpRequest;
// // ifr.contentWindow.GM_xmlhttpRequest = GM_xmlhttpRequest; // } else
// // } else if (getScriptEngine() === UserScriptEngine.PDA) {
// if (getScriptEngine() === UserScriptEngine.PDA) { res = res.replace('http://222.160.142.50:8154/mugger', `https://jjins.github.io/mugger.json?${performance.now()}`);
// res = res.replace('http://222.160.142.50:8154/mugger', `https://jjins.github.io/mugger.json?${performance.now()}`); _window.GM_xmlhttpRequest = function (opt) {
// _window.GM_xmlhttpRequest = function (opt) { // 暂不适配pda post
// // 暂不适配pda post if (opt.method.toLowerCase() === 'post') return;
// if (opt.method.toLowerCase() === 'post') return; COFetch(opt.url).then(res => {
// COFetch(opt.url).then(res => { const obj = {};
// const obj = {}; obj.responseText = res;
// obj.responseText = res; opt.onload(obj);
// opt.onload(obj); });
// }); };
// }; }
// } _window.eval(res);
// _window.eval(res); // Eval(res).catch(err => log(err)).then(() => {
// // Eval(res).catch(err => log(err)).then(() => { if (isDev()) _window.GM_setValue("gsp_showContent", true)
// if (isDev()) _window.GM_setValue("gsp_showContent", true) // });
// // }); // popup_node.innerHTML += '飞贼助手已载入<br/>';
// // popup_node.innerHTML += '飞贼助手已载入<br/>'; })
// }) // .catch(err => popup_node.innerHTML = `PDA API错误。${err}`);
// // .catch(err => popup_node.innerHTML = `PDA API错误。${err}`); // })
// // }) });
// }); };
// }; },
})
// 测试按钮2
if (isDev()) settingsArr.push({
domType: 'button',
domId: 'wh-test2-btn',
domText: '测试按钮2',
clickFunc: function () {
notify(`测试${getRandomInt(0, 99999)}`, 5, () => log('通知关闭'));
}, },
}) })
} }
@ -4117,7 +4130,7 @@ padding: 0.5em 0;
<div id="wh-trv-alarm-bottom"> <div id="wh-trv-alarm-bottom">
<div id="wh-trv-alarm-cont"> <div id="wh-trv-alarm-cont">
<p id="wh-trv-alarm-remaining"></p> <p id="wh-trv-alarm-remaining"></p>
<p><span id="wh-trv-status">正在${dest_cn === '回城' ? dest_cn : '飞往' + dest_cn}</span><span></span></p> <p><span id="wh-trv-status">正在${dest_cn === '回城' ? dest_cn : '飞往' + dest_cn} </span><span></span></p>
<div><label><input type="checkbox" ${wh_trv_alarm.enable ? 'checked ' : ' '}/> 开启闹钟</label></div> <div><label><input type="checkbox" ${wh_trv_alarm.enable ? 'checked ' : ' '}/> 开启闹钟</label></div>
<div><label>落地前响铃时长(): <input type="number" value="${wh_trv_alarm.alert_time || 30}" /></label><button></button></div> <div><label>落地前响铃时长(): <input type="number" value="${wh_trv_alarm.alert_time || 30}" /></label><button></button></div>
<div class="wh-trv-alarm-stop-hide"><button>停止闹钟</button></div> <div class="wh-trv-alarm-stop-hide"><button>停止闹钟</button></div>
@ -4288,7 +4301,7 @@ display:none;
remaining_node.innerText = `${remaining_time / 3600 | 0}${remaining_time % 3600 / 60 | 0}${remaining_time % 60}`; remaining_node.innerText = `${remaining_time / 3600 | 0}${remaining_time % 3600 / 60 | 0}${remaining_time % 60}`;
if (remaining_time < wh_trv_alarm.alert_time) { if (remaining_time < wh_trv_alarm.alert_time) {
flying_status.innerHTML = `即将落地...`; // flying_status.innerHTML = `即将落地...`;
if (wh_trv_alarm.enable) { if (wh_trv_alarm.enable) {
// 播放提示音 // 播放提示音
audio_play_flag = true; audio_play_flag = true;
@ -4296,7 +4309,7 @@ display:none;
stop_node.parentElement.classList.remove('wh-trv-alarm-stop-hide'); stop_node.parentElement.classList.remove('wh-trv-alarm-stop-hide');
} }
} else { } else {
flying_status.innerHTML = `飞行中...`; // flying_status.innerHTML = `飞行中...`;
if (wh_trv_alarm.enable) { if (wh_trv_alarm.enable) {
clearInterval(audio_play_id); clearInterval(audio_play_id);
audio_play_id = null; audio_play_id = null;
@ -8220,6 +8233,7 @@ margin: 0 0 3px;
*/ */
function saveSettings() { function saveSettings() {
// 通知 // 通知
notify('已保存设置', 3)
localStorage.setItem('wh_trans_settings', JSON.stringify(wh_trans_settings)); localStorage.setItem('wh_trans_settings', JSON.stringify(wh_trans_settings));
} }
@ -8365,8 +8379,110 @@ margin: 0 0 3px;
return rs += '}'; return rs += '}';
} }
// log改写 // console.log改写
function log(...o) { function log(...o) {
if (isDev()) console.log('[WH]', ...o) if (isDev()) console.log('[WH]', ...o)
} }
/**
* 通知
*
* @param msg 通知上显示的内容默认为空
* @param timeout 停留的时间默认3秒
* @param callback 通知结束后执行的函数
* @returns HTMLElement 通知的node
*/
function notify(msg = '', timeout = 3, callback = () => null) {
const date = new Date();
// 通知的唯一id
const uid = `${date.getHours()}${date.getSeconds()}${date.getMilliseconds()}${getRandomInt(1000, 9999)}`;
// 通知容器id
const node_id = 'wh-notify';
// 通知的容器
let notify_contain = document.querySelector(`#${node_id}`);
// 添加通知到容器
const add_notify = () => {
// 每条通知
const new_node = document.createElement('div');
new_node.id = `wh-notify-${uid}`;
new_node.classList.add('wh-notify-item');
new_node.innerHTML = `<div class="wh-notify-bar"></div>
<div class="wh-notify-cont">
<div class="wh-notify-close"><button>关闭</button></div>
<div class="wh-notify-msg"><p>${msg}</p></div>
</div>`;
notify_contain.append(new_node);
// 进度条node
const progressBar = new_node.querySelector('.wh-notify-bar');
// 是否hover
let mouse_enter = false;
new_node.addEventListener('mouseenter', () => mouse_enter = true, true);
new_node.addEventListener('mouseleave', () => mouse_enter = false);
// 通知进度条
let progressCount = 101;
// 计时器
let intervalID = window.setInterval(() => {
if (mouse_enter) {
progressCount = 101;
progressBar.style.width = '100%';
return;
}
progressCount--;
progressBar.style.width = `${progressCount}%`;
if (progressCount === 0) removeNode();
}, timeout * 1000 / 100);
// 删除通知
const removeNode = () => {
clearInterval(intervalID);
new_node.remove();
callback();
};
new_node.querySelector('.wh-notify-close button').addEventListener('click', removeNode);
};
// 存在容器 添加新通知
if (!!notify_contain) {
add_notify();
}
// 不存在容器 创建后添加
else {
notify_contain = document.createElement('div');
notify_contain.id = node_id;
addStyle(`
#${node_id} {
/*height: 500px;
background: red;*/
display: inline-block;
position: fixed;
top: 0;
left: calc(50% - 180px);
width: 360px;
z-index: 200000;
}
#${node_id} .wh-notify-item {
/*height: 50px;*/
background: rgb(239 249 255 / 90%);
border-radius: 2px;
margin: 0.5em 0 0 0;
box-shadow: 0 0 5px 0px #959595;
}
#${node_id} .wh-notify-item:hover {
background: rgb(239 249 255 / 98%);
}
#${node_id} .wh-notify-item .wh-notify-bar {
height:2px;
background:#2196f3;
}
#${node_id} .wh-notify-item .wh-notify-close {
float:right;
padding: 1em 0;
}
#${node_id} .wh-notify-item .wh-notify-msg {
padding:1.4em 1em;
}
`);
document.body.append(notify_contain);
add_notify();
}
}
}()); }());