- /* eslint-disable no-multi-spaces */
-
- // ==UserScript==
- // @name Userscript App Core
- // @name:zh-CN 用户脚本应用核心
- // @name:en Userscript App Core
- // @namespace Userscript-App
- // @version 0.8
- // @description Userscript App Core For Userscript Web Apps
- // @description:zh-CN 用户脚本网页应用核心
- // @description:en Userscript App Core For Userscript Web Apps
- // @author PY-DNG
- // @license MIT
- // @match http*://*/*
- // @connect *
- // @grant GM_info
- // @grant GM_addStyle
- // @grant GM_addElement
- // @grant GM_deleteValue
- // @grant GM_listValues
- // @grant GM_addValueChangeListener
- // @grant GM_removeValueChangeListener
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant GM_log
- // @grant GM_getResourceText
- // @grant GM_getResourceURL
- // @grant GM_registerMenuCommand
- // @grant GM_unregisterMenuCommand
- // @grant GM_openInTab
- // @grant GM_xmlhttpRequest
- // @grant GM_download
- // @grant GM_getTab
- // @grant GM_saveTab
- // @grant GM_getTabs
- // @grant GM_notification
- // @grant GM_setClipboard
- // @grant GM_info
- // @grant window.onurlchange
- // @grant window.close
- // @grant window.focus
- // @grant unsafeWindow
- // @run-at document-start
- // ==/UserScript==
-
- (function __MAIN__() {
- 'use strict';
-
- const CONST = {
- Text: {
- SetPassword: 'View/Set Password',
- SetPasswordTip: 'Set your password: '
- }
- }
-
- main();
- function main() {
- const UAC = {
- grant: passFunc(GM_grant, () => GM_getValue('password', null)),
- check: pswd => pswd === GM_getValue('password', null),
- version: GM_info.script.version,
- provider: 'Userscript-Application-Core'
- };
- Object.freeze(UAC);
- Object.defineProperty(unsafeWindow, 'UAC', {
- value: UAC,
- writable: false,
- configurable: false,
- enumerable: false
- });
- unsafeWindow.dispatchEvent(new Event('uac-ready'));
-
- GM_registerMenuCommand(CONST.Text.SetPassword, setPass);
- }
-
- function setPass() {
- const newpass = prompt(CONST.Text.SetPasswordTip, GM_getValue('password', ''));
- newpass !== null && GM_setValue('password', newpass);
- }
-
- function passFunc(func, pswd) {
- return function() {
- const password = typeof pswd === 'function' ? pswd() : pswd;
- const correct = arguments.length !== 0 && password === arguments[arguments.length-1];
-
- return correct ? func.apply(this, Array.from(arguments).slice(0, arguments.length-1)) : null;
- }
- }
-
- function GM_grant(name) {
- const GMFuncs = {
- // Tampermonkey provides
- GM_addStyle: typeof GM_addStyle === 'function' ? GM_addStyle : null,
- GM_addElement: typeof GM_addElement === 'function' ? GM_addElement : null,
- GM_deleteValue: typeof GM_deleteValue === 'function' ? GM_deleteValue : null,
- GM_listValues: typeof GM_listValues === 'function' ? GM_listValues : null,
- GM_addValueChangeListener: typeof GM_addValueChangeListener === 'function' ? GM_addValueChangeListener : null,
- GM_removeValueChangeListener: typeof GM_removeValueChangeListener === 'function' ? GM_removeValueChangeListener : null,
- GM_setValue: typeof GM_setValue === 'function' ? GM_setValue : null,
- GM_getValue: typeof GM_getValue === 'function' ? GM_getValue : null,
- GM_log: typeof GM_log === 'function' ? GM_log : null,
- GM_getResourceText: typeof GM_getResourceText === 'function' ? GM_getResourceText : null,
- GM_getResourceURL: typeof GM_getResourceURL === 'function' ? GM_getResourceURL : null,
- GM_registerMenuCommand: typeof GM_registerMenuCommand === 'function' ? GM_registerMenuCommand : null,
- GM_unregisterMenuCommand: typeof GM_unregisterMenuCommand === 'function' ? GM_unregisterMenuCommand : null,
- GM_openInTab: typeof GM_openInTab === 'function' ? GM_openInTab : null,
- GM_xmlhttpRequest: typeof GM_xmlhttpRequest === 'function' ? GM_xmlhttpRequest : null,
- GM_download: typeof GM_download === 'function' ? GM_download : null,
- GM_getTab: typeof GM_getTab === 'function' ? GM_getTab : null,
- GM_saveTab: typeof GM_saveTab === 'function' ? GM_saveTab : null,
- GM_getTabs: typeof GM_getTabs === 'function' ? GM_getTabs : null,
- GM_notification: typeof GM_notification === 'function' ? GM_notification : null,
- GM_setClipboard: typeof GM_setClipboard === 'function' ? GM_setClipboard : null,
- GM_info: typeof GM_info === 'object' ? GM_info : null,
- window: typeof window === 'object' ? window : null,
- unsafeWindow: typeof unsafeWindow === 'object' ? unsafeWindow : null,
- };
- if (GMFuncs.hasOwnProperty(name)) {
- return GMFuncs[name];
- } else {
- return null;
- }
- }
- })();