Greasy Fork is available in English.
Menu Editor
此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/467897/1199988/Menu%20Editor%20%28Console%29.js
// ==UserScript== // @name Menu Editor (Console). // @version 0.2 // @description Menu Editor // @author Zpayer./.AMiNE. // @match http://*/* // @match https://*/* // @grant none // @run-at document-start // ==/UserScript== const SetEditor=(ConfigColor='#9598c5',ConfigFont='monospace')=>{ let make=(cl)=>top.document.createElement(cl); let html=(id)=>top.document.getElementById(id); window.Editor=top.Editor={ addCate:(name='unknown',clss='unknown')=>{ let el=make('div'); el.id=name+'_cate'; el.textContent=name; el.className='_cate'; el.style=` border-bottom:2px solid ${ConfigColor}; width:98%; cursor:default; padding:4px; color:${ConfigColor}; margin:10px 2px 2px 4px; transition: 0.5s; `; clss.appendChild(el); return el; }, addButton:(name='unknown',clss='unknown',func=()=>{},long=false)=>{ let el=make('input'); el.id='_button'; el.button_name=name; el.value=name; el.className=clss+'_element'; el.type='button'; el.style=`color:#aaa;background-color:#4f545c;border-radius:5px;border:none;height:23px;width:${long?'98.5%':'49%'};margin:1px;`; el.addEventListener('click',func); clss.appendChild(el); return el; }, addRange:(text,clss,value,Min,Max,func)=>{ let div = document.createElement("div") div.className = "CheatRangeDiv" div.style= ` width: 100%;` let txt = document.createElement("div") txt.style = ` font-family: ${ConfigFont}; display: inline-block; width: 7%; font-size: 16px; left: 0%; color: rgb(219, 220, 220); position: relative; margin-right: 5%; text-align: left; ` txt.textContent = text let el=document.createElement('input'); el.id=text+'slider'; el.value=value; el.className='slider'; el.type='range'; el.max = Max el.min = Min el.style=``; let num=make('input'); num.value = value num.id=text+' num'; num.type='number'; num.max = Max num.min = Min num.style=` color:${ConfigColor}; background-color: rgba(255, 255, 255, 0.06); border-radius: 1px; border: 1px solid; height: 25px; width: 35%; right: 0%; position: relative; display: inline; margin: 0px 1px; text-align: center; `; num.addEventListener('input',function(){ el.value = num.value func() }); el.addEventListener("input",function(){ num.value = el.value func() }); div.appendChild(txt); div.appendChild(el); div.appendChild(num); clss.appendChild(div); return {Number:num,Range:el,} }, addField:(name='unknown',clss='unknown',n,Height=100,Width=95,top='l')=>{ let field = document.createElement("fieldset") field.id = n+'field_box' field.className = 'scroller' field.style=` width:${Width}%; top: ${top}%; height:${Height}%; position: relative; background: transparent; border: 1px solid rgb(255 255 255 / 86%); display: inline-block; ` clss.appendChild(field); let leg=make('legend'); leg.id=name+'legend'; leg.textContent =name leg.className='legend'; leg.style=` font-size: 15px; font-weight: bold; text-align: left; text-transform: uppercase; padding: 3px; font-family:${ConfigFont}; cursor: default; color:rgb(255 255 255 / 86%); width: 23%; `; field.appendChild(leg); return field }, addToggle:(name='unknown',clss='unknown',func2=()=>{},func1=()=>{},check=false)=>{ let div = document.createElement("div") div.className = "CheatRangeDiv" let txt = document.createElement("h2") txt.style = ` font-family: ${ConfigFont}; display: inline-block; font-size: 16px; position: relative; text-align: left; /* left: -22%; */ margin-left: -54%; }` txt.textContent = name let el=make('label'); el.className = 'switcher' let checkbox=make('input'); checkbox.type = 'checkbox' checkbox.checked=check checkbox.id = name+'_Switcher' el.onclick=()=>{ if(checkbox.checked){ func2() checkbox.checked=false; }else{ func1() checkbox.checked=true; } } el.appendChild(checkbox); let slider=make('span'); slider.className = 'toggle' el.appendChild(slider); div.appendChild(txt); div.appendChild(el); clss.appendChild(div); }, addSelect:(txt, options, tab, confirm)=>{ let div = document.createElement("div") div.className = "CheatSelectDiv" let select = document.createElement("select") select.className = "CheatSelect" select.defaultState = function(){ select.options[0].selected = true } select.updateOptions = function(options){ select.options.length = 0 let option = document.createElement("option") option.textContent = txt option.disabled = true option.selected = true select.appendChild(option) options.forEach((opt)=>{ let option = document.createElement("option") option.textContent = opt select.appendChild(option) }) } let option = document.createElement("option") option.selected = true option.disabled = true option.textContent = txt select.appendChild(option) options.forEach((opt) => { let option = document.createElement("option") option.textContent = opt select.appendChild(option) }) let input = document.createElement("input") input.className = "CheatButton" input.style = ` height: 40px; width: 40px; margin-left: 10px; ` input.type = "button" input.value = "✓" input.onclick = confirm div.appendChild(select) div.appendChild(input) tab.appendChild(div) return select }, addPlaceHolder:(txt,clss,id,func=()=>{})=>{//----------------------------------------- super "All" Chat let el= make('input'); el.id=id; el.type='placeholder'; el.style=` color: rgb(219, 220, 220); background-color: rgba(163, 165, 167, 0.07); border-radius: 1px; border: 1px solid; height: 30px; width: 95%; margin: 1px 11px;`; el.placeholder = txt; el.addEventListener("keydown", function(e) { if (e.key == "Enter") { func() el.value = ""; } }); clss.appendChild(el); return el }, addLister:(txt,options,tab,func)=>{ let div = document.createElement("div") let div2_ = document.createElement("div") var divslist=[] //var ListOfSelected=[] var ListerSelector = addSelect(txt,options,tab,()=>{ const Selected=GetSelected(ListerSelector) ListerSelector.Lister.push(Selected) let div2 = document.createElement("div") var tt = addButton(Selected,div2,()=>{}) tt.style.width='80%' var yoptov= addButton("X",div2,()=>{ const index = ListerSelector.Lister.indexOf(Selected); if (index > -1) { // only splice array when item is found ListerSelector.Lister.splice(index, 1); // 2nd parameter means remove one item only } div2.remove() }) yoptov.style.width='15%' div2_.appendChild(div2); divslist.push(div2) }) ListerSelector.Lister=[] div.appendChild(div2_); var ApplyButton=addButton('Apply',div,()=>{ func() ListerSelector.Lister=[] divslist.forEach(k=>k.remove()) },true) tab.appendChild(div); return ListerSelector }, addBB:(name='unknown',id='unknown',box='unknown_box',choosen=0)=>{ let el=make('div'); var jo = el el.className='scroller' el.id=box; el.style=` position:absolute; display:${choosen?'block':'none'}; width:75%;height:90%; top:10%; right:0px; `; html('console').appendChild(el); el=make('div'); el.id='console_bar_'+id; el.className='bar_element bar_element_'+(choosen?'on':'off'); el.textContent=name; el.addEventListener('click',function(e){ if(this!=html('console_bar').cur){ html(box).style.display='block'; html('console').cur.style.display='none'; html('console').cur=html(box); this.className='bar_element bar_element_on'; html('console_bar').cur.className='bar_element bar_element_off'; html('console_bar').cur=this; } }); html('console_bar').appendChild(el); return jo }, addColorPicker:(clss='unknown',value)=>{ let el=make('input'); el.className='color'+clss; el.value = value el.type='color'; el.style=` background-color: rgb(192 192 192); border-radius: 2px; border: none; height: 37%; width: 40%; `; clss.appendChild(el); return el; }, addFile:(clss='unknown')=>{ let el=make('input'); el.className='fileClass'; el.type='file'; el.id = 'fileu' el.style = 'position: fixed;right: 20000000000000%;' clss.appendChild(el); let button=make('input'); button.className='NewfileClass'; button.type='button'; button.id = 'filebutton'; button.value = 'Choose image'; button.onclick = function(){el.click()} button.style = ` color: ${ConfigColor}; background-color: rgb(35 35 35); border-radius: 5px; border: 1px solid ${ConfigColor}; height: 25px; width: 25%; margin: 1px;` clss.appendChild(button); return el; }, addSwitcher:(name='unknown',clss='unknown',state=[],func=[],funcint=[],time=0,vehicle='')=>{ let a=make('div'); a.id=vehicle+name+'_switcher_settings'; a.style=` display:flex; justify-content:center; align-items:center; margin:3px 0; `; clss.appendChild(a); let elm=make('div'); elm.id=vehicle+name+'_switcher_attribute'; elm.style=` color:#aaa; width:49%; display:flex; align-items:center; justify-content:center; margin:1px 11px; `; elm.textContent=name; a.appendChild(elm); var el=make('input'); var switchinterval=0; var i=0; el.id=vehicle+name+'_switcher'; el.button_name=vehicle+name; el.value=state[0]; el.className=clss+'_element'; el.type='button'; el.style=` color:#aaa; background-color:#4f545c; border-radius:5px; border:none; height:23px; width:49%; margin:1px 11px; `; el.addEventListener('click',function(){ if(i)clearInterval(switchinterval); i=++i%(state.length); el.value=state[i]; if(func[i])func[i](); if(i&&funcint[i])switchinterval=setInterval(funcint[i],time); }); a.appendChild(el); return a; }, addList:(name,clss,list=[],func=[],Lists=Console_.Lists)=>{ let edl=make('div'); edl.id=name+'_list'; edl.className='scroller' edl.setAttribute('style', ` display:none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgb(35 35 35 / 94%); direction: rtl; border: 1px solid rgb(54, 57, 63); `); clss.appendChild(edl); addCate(name,edl) edl.CurrentButtons=[] /*edl.UpdateFunctions=function(NewFunc){ edl.CurrentButtons.forEach(m=>m.remove()) edl.CurrentButtons=[] for (var i=0;i>=Math.min(list.length,func.length); i++) { var CB = addButton(list[i],edl,()=>{edl.style.display='none';NewFunc[i]();}) edl.CurrentButtons.push(CB) } } edl.UpdateList=function(NewList){ edl.CurrentButtons.forEach(m=>m.remove()) edl.CurrentButtons=[] for (var i=0;i>=Math.min(list.length,func.length); i++) { var CB = addButton(NewList[i],edl,()=>{edl.style.display='none';func[i]();}) edl.CurrentButtons.push(CB) } }*/ edl.UpdateAll=function(NewList,NewFunc,time=10){ if(Math.min(NewList.length,NewFunc.length)!=0){ var i = 0 var ButtonMakerInter = setInterval(()=>{ if(i>=Math.min(NewList.length,NewFunc.length)){ clearInterval(ButtonMakerInter);ButtonMakerInter=0; }else{ i++ var CB = addButton(NewList[i],edl,()=>{edl.style.display='none';NewFunc[i]();}) edl.CurrentButtons.push(CB) } },time) } } if(Lists.Lists[name]==undefined){ Lists.Lists[name]=[] } Lists.Lists[name].push(edl) if(Math.min(list.length,func.length)!=0){ var i = 0 var ButtonMakerInter = setInterval(()=>{ if(i>=Math.min(list.length,func.length)){ clearInterval(ButtonMakerInter);ButtonMakerInter=0; }else{ i++ var CB = addButton(list[i],edl,()=>{edl.style.display='none';func[i]();}) edl.CurrentButtons.push(CB) } },10) } return edl }, } var sheet=top.document.head.appendChild(make('style')).sheet; sheet.insertRules=rules=>rules.replace(/\}/g,'}^').split('^').map(r=>(r.indexOf('{')+1)&&sheet.insertRule(r)); sheet.insertRules(` .scroller{overflow-y:auto;} .scroller::-webkit-scrollbar{ width:10px; } .scroller::-webkit-scrollbar-thumb{ background-color:rgba(0,0,0,.4); -webkit-box-shadow:inset 0 0 2px rgba(0,0,0,.5); box-shadow:inset 0 0 2px rgba(0,0,0,.5); } .scroller::-webkit-scrollbar-track{ background-color:rgba(0,0,0,.3); } .scroller::-webkit-scrollbar-thumb{ background:#000; } .bar_element:hover{ opacity:0.9; background:#40444bAA; transition-duration: 0.3s; } .bar_element{ color:#FFF; line-height: 200%; cursor:pointer; height:10%; width:100%; } .cheat_element:hover{ color:#FFF !important; } .bar_element_off{ opacity:0.5; background:#0000; } .bar_element_on{ opacity:1; background:#40444b; } .CheatSelect { background-color: rgb(38 38 38 / 0%); color: rgb(219 220 220); height: 40px; box-sizing: border-box; border: 1px solid; width: 61%; opacity: 0.7; transition: all 0.5s ease 0s; display: inline-block; font-family: ${ConfigFont}; } .CheatSelect:hover { opacity: 1; } .CheatButton { background-color: rgb(38 38 38 / 0%); color: rgb(219, 220, 220); height: 40px; width: 140px; text-align: center; box-sizing: border-box; border: 1px solid; outline: none; opacity: 0.7; transition: all 0.5s ease 0s; } .CheatButton:hover { opacity: 1; } .slider { appearance: none; width: 46%; height: 5px; background: rgb(219, 220, 220); outline: none; opacity: 0.7; transition: opacity 0.2s ease 0s; display: inline; margin: 6px; } .slider:hover { opacity: 1; } .slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 7px; height: 15px; background:${ConfigColor}; cursor: pointer; } .switch { position: relative; display: inline-block; width: 60px; height: 34px; } .switch input { opacity: 0; width: 0; height: 0; } .switcher { position: absolute; display: inline-block; width: 57px; height: 23px; left: 74%; } .switcher input { opacity: 0; width: 0; height: 0; } .toggle { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; -webkit-transition: .4s; transition: .4s; } .toggle:before { position: absolute; content: ""; height: 21px; width: 20px; left: 8px; border-radius: 4px; bottom: 1px; background-color: white; transition: all 0.4s ease 0s; } input:checked + .toggle { background-color:${ConfigColor}; } input:focus + .toggle { box-shadow: 0 0 1px #2196F3; } input:checked + .toggle:before { -webkit-transform: translateX(26px); -ms-transform: translateX(26px); transform: translateX(26px); } `); return window.Editor }