- /* eslint-disable no-multi-spaces */
- /* eslint-disable no-return-assign */
-
- // ==UserScript==
- // @name 左手医生匿名化
- // @namespace PY-DNG userscripts
- // @version 0.1.9
- // @description 去除或随机更换左手医生页面水印
- // @author PY-DNG
- // @license Do What The F*ck You Want To Public License
- // @match *://ai-app.zuoshouyisheng.com/chat/*
- // @require https://update.gf.qytechs.cn/scripts/456034/1282804/Basic%20Functions%20%28For%20userscripts%29.js
- // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAArZJREFUOE99k1toVFcUhr91ZubMGTXGRE2a1jJBk4qJYsWA2qdYiopUrBewSKIhRS1BRXwI4tOhIPggoqJUbBqs2JaqKBTxAkWD16CNGtRUBGMxGpJ2qk7UMZl95iyZkYmDqa6XvdiXb//7X2sLOVF3X53SUpKuiJ87/3aum49cQWS9bFnSKunFuh7d4Bs2iKdRNbwQI5fUcMDxOLqvShJZQHxuUxnIZ3nTRu6SIE1gnZK6Xm1Qjz0YUAPZMZN7xMVwyPdo/nm2tMbnNDUAa+2S8Cfhkki3BOiQFd16I3GXqf+0gHkJThHkl8GI4gxgEIrHX+rRbP/H7p2//vhQxfp61On6P2Rllz74+wc+TlwD9XiWLOSMSVFtOeQXlkNxBdiR18oyQGHR93ub7ZQVPjX6ZE2fLLuiqx8d0k2mTQ56yq62FolNX6DDKGVjfhS3aCIBK21C+rAP/Y9ZcmyVHM36kjExN5Zf1E+tFI3qsVQNoawnL3rgaReYfhZc3i7HhwBqrmq1+rpJDHPVSOZGfwCedsKTTkgl6Q0G2REvZHuHK8lBwMqbOsf3+E4NM7KmpRJK7LYQu6Pgyb1AiG15hv0t+6X/bcVS264xNYxOSzVx6P4T/r2l4NMeCMvWsRM40uKK967Gkto27euPkdd1nlTvDQL5H5EqmsyFMZOo/+UL6cRVa+YFvhq3jsbhFfQlkiw+XCnPB58wy9XH3a0URAqg/HPIGwcSAkKkLJtzsbMUvbynlSXfCKGxIAEW/jRefh8EROfpfPX1Wysg8wqihIorYVQ5BCIgdgaUAWagQRh4xKzfZkvrkCqUztcPnGHUBMOssIczpaDsNSjyIYgDqjDQxfXKNqpc981nG9IHafK0NVrl2H5d0LG+DDlE7RE8s8Q/DtbGE43Sk2vo/wJyN1S7GnxfFV4B3Vgcanqr72kAAAAASUVORK5CYII=
- // @grant GM_registerMenuCommand
- // @grant GM_unregisterMenuCommand
- // @grant GM_getValue
- // @grant GM_setValue
- // @run-at document-start
- // ==/UserScript==
-
- /* global LogLevel DoLog Err $ $All $CrE $AEL $$CrE addStyle detectDom destroyEvent copyProp copyProps parseArgs escJsStr replaceText getUrlArgv dl_browser dl_GM AsyncManager */
-
- (function() {
- 'use strict';
-
- const CONST = {
- Text: {
- Setting: {
- Random: ['[ ]随机水印ID', '[✔]随机水印ID'],
- HideID: ['[ ]隐藏水印ID', '[✔]隐藏水印ID'],
- Hide: ['[ ]隐藏水印', '[✔]隐藏水印'],
- }
- }
- };
-
- let watermark, content;
- detectDom({
- selector: 'body>div>div[style="position: relative;"]>div[style]:first-child',
- attributes: true,
- callback: _watermark => {
- watermark = _watermark;
- const observer = new MutationObserver((mutationList, observer) => {
- const content = getContent();
- if (!(!!getUrlArgv('showId') ^ !!content.id) && content.text) {
- work(watermark, content);
- observer.disconnect();
- }
- });
- observer.observe(watermark, {
- attributes: true,
- attributeFilter: ['style']
- });
- }
- });
-
- function work(_watermark, _content) {
- [watermark, content] = [_watermark, _content];
-
- // Load settings
- setContent(GM_getValue('id', null), GM_getValue('text', null));
- makeBooleanSettings([{
- key: 'random',
- text: CONST.Text.Setting.Random,
- callback: (key, val) => val ? setContent(randstr(content.id.length, false, false), null) : setContent(content.id, null),
- initCallback: true
- }, {
- key: 'hideid',
- text: CONST.Text.Setting.HideID,
- callback: (key, val) => val ? hideID() : showID(),
- initCallback: true
- }, {
- key: 'hide',
- text: CONST.Text.Setting.Hide,
- callback: (key, val) => watermark.style.display = val ? 'none' : '',
- initCallback: true
- }]);
- }
-
- function hideID() {
- const xml = parseXML();
- $(xml, 'tspan:first-child').style.visibility = 'hidden';
-
- setSVG(xml);
- }
-
- function showID() {
- const xml = parseXML();
- $(xml, 'tspan:first-child').style.removeProperty('visibility');
-
- setSVG(xml);
- }
-
- function setContent(id=null, text=null) {
- const xml = parseXML();
- id !== null && ($(xml, 'tspan:first-child').innerHTML = id);
- text !== null && ($(xml, 'tspan:last-child').innerHTML = text);
-
- setSVG(xml);
- }
-
- function getContent() {
- const xml = parseXML();
-
- return {
- id: $(xml, 'tspan:first-child').innerHTML,
- text: $(xml, 'tspan:last-child').innerHTML
- }
- }
-
- function parseXML() {
- const url = watermark.style.backgroundImage.split(',', 2)[1].split('"', 2)[0];
- const svg = decodeURIComponent(url);
- const DP = new DOMParser();
- const xml = DP.parseFromString(svg, 'image/svg+xml');
-
- return xml;
- }
-
- function setSVG(xml) {
- const svg = xml.lastChild.outerHTML;
- const url = encodeURIComponent(svg);
- const val = `url("data:image/svg+xml,${url}")`;
- watermark.style.backgroundImage = val;
- }
-
- function makeBooleanSettings(settings) {
- for (const setting of settings) {
- makeBooleanMenu(setting.text, setting.key, setting.defaultValue, setting.callback, setting.initCallback);
- }
-
- function makeBooleanMenu(texts, key, defaultValue=false, callback=null, initCallback=false) {
- const initialVal = GM_getValue(key, defaultValue);
- const initialText = texts[initialVal + 0];
- let id = GM_registerMenuCommand(initialText, onClick/*, {
- autoClose: false
- }*/);
- initCallback && callback(key, initialVal);
-
- function onClick() {
- const newValue = !GM_getValue(key, defaultValue);
- const newText = texts[newValue + 0];
- GM_setValue(key, newValue);
- GM_unregisterMenuCommand(id);
- id = GM_registerMenuCommand(newText, onClick/*, {
- autoClose: false
- }*/);
-
- typeof callback === 'function' && callback(key, newValue);
- }
- }
- }
-
- // Returns a random string
- function randstr(length=16, nums=true, cases=true) {
- const all = 'abcdefghijklmnopqrstuvwxyz' + (nums ? '0123456789' : '') + (cases ? 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' : '');
- return Array(length).fill(0).reduce(pre => (pre += all.charAt(randint(0, all.length-1))), '');
- }
-
- function randint(min, max) {
- return Math.floor(Math.random() * (max - min + 1)) + min;
- }
- }) ();