在GKD网页审查工具复制规则后,弹出提示框,让用户修改规则名称和描述
目前為
// ==UserScript== // @name GKD网页审查工具规则复制增强 // @namespace https://blog.adproqwq.xyz // @version 0.4.1 // @description 在GKD网页审查工具复制规则后,弹出提示框,让用户修改规则名称和描述 // @author Adpro // @match https://i.gkd.li/snapshot/* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant unsafeWindow // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/index.min.js // @license MIT // ==/UserScript== (function() { 'use strict'; var layer, form, element; let layuiScript = document.createElement('script'); layuiScript.src = 'https://www.layuicdn.com/layui/layui.js'; let layuiCss = document.createElement('link'); layuiCss.rel = 'stylesheet'; layuiCss.href = 'https://www.layuicdn.com/layui/css/layui.css' document.body.appendChild(layuiScript); document.head.appendChild(layuiCss); unsafeWindow.onload = () => { layer = layui.layer; form = layui.form; element = layui.element; if(unsafeWindow.localStorage.getItem('categories') === null) unsafeWindow.localStorage.setItem('categories',''); }; var mode = '0', cate = ''; function modifyRule(){ let isSelectorCopyButtonExist = document.querySelector('[title=\"复制规则\"]'); if(isSelectorCopyButtonExist !== null){ document.querySelector('[title=\"复制规则\"]') = isSelectorCopyButtonExist; isSelectorCopyButtonExist.onclick = () => { navigator.clipboard.readText().then((a)=>{ let rule = JSON5.parse(a); layer.open({ type: 1, title: '菜单', area: 'auto', shadeClose: true, success: (layero, index, that) => { document.getElementsByName('copy')[0].onclick = ()=>{ let ruleName = document.getElementsByName('Rname')[0].value; let ruleDesc = document.getElementsByName('Rdesc')[0].value; if(ruleName != '') rule.groups[0].name = cate + ruleName; else{ if(cate != '') rule.groups[0].name = cate; } if(ruleDesc == '') delete rule.groups[0].desc; else rule.groups[0].desc = ruleDesc; copyRule(rule, mode); layer.close(index); }; document.getElementsByName('saveSettings')[0].onclick = ()=>{ let categories = document.getElementsByName('categories')[0].value; unsafeWindow.localStorage.setItem('categories',categories); layer.msg('保存成功',{icon: 6}); categories(); }; categories(); }, content: ` <div class="layui-tab layui-tab-brief" lay-filter="tab-filter"> <ul class="layui-tab-title"> <li class="layui-this" lay-id="info">信息配置</li> <li lay-id="settings">设置</li> </ul> <div class="layui-tab-content"> <div class="layui-tab-item layui-show"> <div class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">选择模式:</label> <input type="radio" name="mode" value="0" title="app模式" lay-filter="mode-filter" checked> <input type="radio" name="mode" value="1" title="groups模式" lay-filter="mode-filter"> <input type="radio" name="mode" value="2" title="rules模式" lay-filter="mode-filter"> </div> <div id="categories" class="layui-form-item"> <label class="layui-form-label">选择分类:</label> </div> <div class="layui-form-item"> <label class="layui-form-label">规则组名称:</label> <div class="layui-input-block"> <input type="text" name="Rname" placeholder="${rule.groups[0].name}" lay-affix="clear" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">规则组描述:</label> <div class="layui-input-block"> <input type="text" name="Rdesc" placeholder="没有描述不填" lay-affix="clear" class="layui-input"> </div> </div> <div class="layui-btn-container"> <button type="button" name="copy" class="layui-btn">确定</button> </div> </div> </div> <div class="layui-tab-item"> <div class="layui-form"> <div class="layui-form-item"> <label class="layui-form-label">分类:</label> <div class="layui-input-block"> <textarea name="categories" cols=50 rows=15 placeholder="多个{key, name}组成的数组,支持JSON5语法" class="layui-textarea"></textarea> </div> </div> <div class="layui-btn-container"> <button type="button" name="saveSettings" class="layui-btn">保存</button> </div> </div> </div> </div> </div> `, }); layui.use(()=>{ form.render(); element.render('tab', 'tab-filter'); }); form.on('radio(mode-filter)', (data)=>{ let elem = data.elem; mode = elem.value; }); form.on('radio(cate-filter)', (data)=>{ let elem = data.elem; cate = elem.value + '-'; }); element.on('tab(tab-filter)',(data)=>{ console.log(this); // 当前 tab 标题所在的原始 DOM 元素 console.log(data.index); // 得到当前 tab 项的所在下标 console.log(data.elem); // 得到当前的 tab 容器 }); }); }; } } function copyRule(rule, mode){ if(mode == '0'){ navigator.clipboard.writeText(JSON5.stringify(rule,null,2)).then(()=>{ layer.msg('注入修改成功',{icon: 1}); }); } else if(mode == '1'){ navigator.clipboard.writeText(JSON5.stringify(rule.groups[0],null,2)).then(()=>{ layer.msg('注入修改成功',{icon: 1}); }); } else if(mode == '2'){ navigator.clipboard.writeText(JSON5.stringify(rule.groups[0].rules[0],null,2)).then(()=>{ layer.msg('注入修改成功',{icon: 1}); }); } } function categories(){ let categories = unsafeWindow.localStorage.getItem('categories'); let CateChoo = document.getElementById('categories'); if(categories != ''){ categories = JSON5.parse(categories); categories.forEach((b)=>{ let TInput = document.createElement('input'); TInput.type = 'radio'; TInput.name = 'RCate'; TInput.value = b.name; TInput.title = b.name; TInput.setAttribute('lay-filter','cate-filter'); CateChoo.appendChild(TInput); }); } } let body = document.body; let config = { childList: true }; let callback = (mutationsList)=>{ mutationsList.forEach(() => { modifyRule(); }); }; let observer = new MutationObserver(callback); observer.observe(body,config); })();