您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A enhanced configuration dialog for Userscripts.
此脚本不应直接安装,它是供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/45343/759338/Configuration%20Dialog.js
/* ///////////////////////////////////////////////////// # # # Script made by Marius Adam # # ©DevForce 2019 # # Code Version 0.4 # # # ///////////////////////////////////////////////////// */ var configurationWindow = { maximized: false, minimized: false, changed: false, data: undefined, window_id: "window", values: {}, get : function(id){ return this.values[id]; }, getElseSet : function(id, def, ifNone){ var val = this.get(id); if(val == undefined){ if(def == undefined){ val = ifNone; this.set(id, ifNone); }else{ val = def; this.set(id, def); } } return val; }, set : function(id, value){ this.values[id] = value; }, save : function(){ GM_setValue(this.window_id, JSON.stringify(this.values)); console.debug("Saved to #" + this.window_id, this.values); }, load : function(){ var loaded = GM_getValue(this.window_id); if(loaded == undefined || loaded.length < 2) loaded = "{}"; this.values = JSON.parse(loaded); console.debug("Loaded Values: ", this.values); }, updateChanged : function() { this.changed = ($('[style*="border: 2px solid rgb(255, 244, 0);"]').length + $('[style*="outline: rgb(255, 244, 0) solid 3px;"]').length + $('[style*="outline: 3px solid rgb(255, 244, 0);"]').length) > 0; $('#' + this.window_id).find('#saveButton').prop("disabled", ! this.changed); $('#' + this.window_id).find('#revertButton').prop("disabled", ! this.changed); }, maximize : function() { $('#' + this.window_id).find('#content').show(); $('#' + this.window_id).find('#footer').show(); $('#' + this.window_id).find('#theme_dropdown').show(); $("#window_minimize").show(); $('#' + this.window_id).width("calc(100% - 20px)"); $('#' + this.window_id).height("calc(100% - 20px)"); $('#' + this.window_id).css("top", "7px"); $('#' + this.window_id).css("left", "7px"); $('#' + this.window_id).css("min-height", ""); this.maximized = true; this.minimized = false; }, minimize : function(){ $('#' + this.window_id).find('#content').hide(); $('#' + this.window_id).find('#footer').hide(); $('#' + this.window_id).find('#theme_dropdown').hide(); $("#window_minimize").hide(); $('#' + this.window_id).width("50%"); $('#' + this.window_id).height("25px"); $('#' + this.window_id).css("top", "calc(100% - 30px)"); $('#' + this.window_id).css("left", "25%"); $('#' + this.window_id).css("min-height", "30px"); this.minimized = true; }, normalize : function(){ $('#' + this.window_id).find('#content').show(); $('#' + this.window_id).find('#footer').show(); $('#' + this.window_id).find('#theme_dropdown').show(); $("#window_minimize").show(); $('#' + this.window_id).width(""); $('#' + this.window_id).height(""); $('#' + this.window_id).css("top", ""); $('#' + this.window_id).css("left", ""); $('#' + this.window_id).css("min-height", ""); this.maximized = false; this.minimized = false; }, clearSelection : function(){ if (window.getSelection) { if (window.getSelection().empty) { // Chrome window.getSelection().empty(); } else if (window.getSelection().removeAllRanges) { // Firefox window.getSelection().removeAllRanges(); } } else if (document.selection) { // IE document.selection.empty(); } }, makeDragable : function(move, dragbox, useBorder) { if(dragbox == undefined) dragbox = move; if(useBorder == undefined) useBorder = true; var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0, dragged = false; dragbox.onmousedown = dragMouseDown; function dragMouseDown(e) { e = e || window.event; if(configurationWindow.minimized){ document.onmouseup = null; document.onmousemove = null; return; } // get the mouse cursor position at startup: pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; // call a function whenever the cursor moves: document.onmousemove = elementDrag; } function elementDrag(e) { e = e || window.event; // calculate the new cursor position: pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; // set the element's new position: var new_top = move.offsetTop - pos2; var new_left = move.offsetLeft - pos1; if(configurationWindow.maximized){ configurationWindow.normalize(); new_top = e.clientY; new_left = e.clientX; } if(useBorder){ var max_width = $(window).width() - $(move).width(); var max_height = $(window).height() - $(move).height(); if(new_top < 0) new_top = 0; else if(new_top > max_height) new_top = max_height; if(new_left < 0) new_left = 0; else if(new_left > max_width) new_left = max_width; } move.style.left = new_left + "px"; move.style.top = new_top + "px"; dragged = true; configurationWindow.clearSelection(); } function closeDragElement() { /* stop moving when mouse button is released:*/ if(useBorder && dragged){ if(move.style.top.indexOf("%") == -1 && move.style.top.replace("px", "") < 2) configurationWindow.maximize(); } document.onmouseup = null; document.onmousemove = null; } }, isArray : function(what) { return Object.prototype.toString.call(what) === '[object Array]'; }, isObject : function(what) { return Object.prototype.toString.call(what) === '[object Object]'; }, join : function(labelFirst, label, element){ return (labelFirst ? label + " " + element : element + " " + label); }, replaceAll : function(target, search, replacement) { return target.replace(new RegExp(search, 'g'), replacement); }, revertChanges : function(){ $('#' + this.window_id).find("#content").find("input[type=text], input[type=password], input[type=number], input[type=color], textarea").each(function(){ $(this).val($(this).attr("value")); $(this).css("border", ""); }); $('#' + this.window_id).find("#content").find("select").each(function(){ this.value = $(this).find("option[selected]").val(); $(this).css("border", ""); }); $('#' + this.window_id).find("#content").find('input[type=checkbox]:not(.toggle)').each(function() { this.checked = $(this).attr("default") == "true"; $(this).css("outline", ""); }); $($(this)).change(); this.updateChanged(); }, saveChanges : function(){ $('#' + this.window_id).find("#content").find("input[type=text], input[type=password], input[type=number], input[type=color], textarea").each(function(){ configurationWindow.set(this.id, this.value); $(this).attr("value", this.value); $(this).css("border", ""); }); $('#' + this.window_id).find("#content").find("select").each(function(){ configurationWindow.set(this.id, this.value); var main_val = this.value; $(this).find("option[selected]").removeAttr("selected"); $(this).find("option").filter(function() { return this.innerHTML == main_val; }).attr("selected", "selected"); this.value = main_val; $(this).css("border", ""); }); $('#' + this.window_id).find("#content").find('input[type=checkbox]:not(.toggle)').each(function() { configurationWindow.set(this.id, this.checked); $(this).attr("default", this.checked); $(this).css("outline", ""); }); this.updateChanged(); this.save(); }, ResetSettings : function(){ if(this.isArray(this.data.content)){ for(i = 0; i < this.data.content.length; i++){ if(this.isObject(this.data.content[i])){ var object = this.data.content[i]; object.default = (object.default == undefined ? "" : object.default); var elem = $('#' + this.window_id).find("#content").find("#" + object.id); var type = elem.attr("type"); if(type == undefined && elem.is("select")) type = "select"; switch(type){ case "text": case "number": case "password": case "select": case "textarea": $(elem).val(object.default); break; case "checkbox": $(elem).prop("checked", object.default); break; default: break; } $(elem).change(); } } } this.updateChanged(); }, close : function(){ if(this.changed){ if(!confirm(this.data.confirm_close)){ return false; } } $('#' + this.window_id).attr("style", "display: none;"); return true; }, open : function(data){ $('#' + this.window_id).attr("style", ""); }, create : function(data){ //var data = JSON.parse(content); this.data = data; if(this.window_id != undefined) $('#' + this.window_id).remove(); $('#window_style').remove(); $('#font-awesome').remove(); if(data.id == undefined) data.id = "window"; this.window_id = data.id; this.load(); $('head').append('<link id="font-awesome" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">'); if (data.theme == undefined) data.theme = "mac"; if (!(data.theme == "mac" || data.theme == "win10" || data.theme == "winXP")) data.theme = "mac"; var saved_theme = GM_getValue("config_theme"); if(data.theme_selector == undefined || data.theme_selector == true || data.theme_selector == "true"){ data.theme_selector = true; if(saved_theme != undefined) data.theme = saved_theme; }else{ data.theme_selector = false; } if(data.width == undefined) data.width = 50; if(data.height == undefined) data.height = 50; var section_color = "#c9c9c9"; var subsection_color = "#f1f1f1"; var style = "<style id='window_style'>"; if(data.theme == "mac"){ style += ` #` + this.window_id + ` > #top > .btn { height: 16px; width: 16px; background-color: #bbb; border-radius: 50%; float: right; margin-right: 10px; display: inline-block; font-size: 10px; text-align: center; color: white; cursor: pointer; //font-weight: bold; } #` + this.window_id + ` > #top > .title { margin: auto; font-size: 16px; font-weight: bold; cursor: move; } #` + this.window_id + ` { border: 3px solid #f1f1f1; border-top-left-radius: 3px; border-top-right-radius: 3px; height: ` + data.height + `%; width: ` + data.width + `%; top: ` + ((100 - data.height) / 2) + `%; left: ` + ((100 - data.width) / 2) + `%; position: fixed; z-index: 11000; background: white; min-width: 250px; min-height: 250px; resize: both; overflow: auto; line-height: unset; overflow-y: hidden;` + (data.font != undefined ? (data.font.size != undefined ? "font-size: " + data.font.size + ";" : "") + (data.font.family != undefined ? "font-family: " + data.font.family + ";" : "") : "") + `} #` + this.window_id + ` > #top { padding: 10px; //height: 20px; background: #f1f1f1; border-top-left-radius: 4px; border-top-right-radius: 4px; position: absolute; width: calc(100% - 20px); } `; }else if(data.theme == "win10"){ section_color = "#1f9cff"; subsection_color = "#9dd4ff"; style += ` #` + this.window_id + ` > #top > .btn { height: 22px; width: 30px; float: right; margin-right: 5px; display: inline-block; font-size: 16px; text-align: center; color: white; cursor: pointer; color: black; padding: 2px; } #` + this.window_id + ` > #top > #window_minimize:hover, #` + this.window_id + ` > #top > #window_maximize:hover { background-color: #ddd; } #` + this.window_id + ` > #top > #window_close:hover { background-color: red; } #` + this.window_id + ` > #top > .title { margin: auto; font-size: 16px; font-weight: bold; cursor: move; padding: 10px; } #` + this.window_id + ` { border: 3px solid #1f9cff; height: ` + data.height + `%; width: ` + data.width + `%; top: ` + ((100 - data.height) / 2) + `%; left: ` + ((100 - data.width) / 2) + `%; position: fixed; z-index: 11000; background: white; min-width: 250px; min-height: 250px; resize: both; overflow: auto; line-height: unset; overflow-y: hidden;` + (data.font != undefined ? (data.font.size != undefined ? "font-size: " + data.font.size + ";" : "") + (data.font.family != undefined ? "font-family: " + data.font.family + ";" : "") : "") + `} #` + this.window_id + ` > #top { //padding: 10px; //height: 20px; background: #1f9cff; position: absolute; width: 100%; } `; }else if(data.theme == "winXP"){ section_color = "#226ce7"; subsection_color = "#4094ff"; style += ` #` + this.window_id + ` > #top > .btn { height: 20px; width: 20px; float: right; margin-right: 5px; margin-top: 5px; display: inline-block; font-size: 16px; text-align: center; color: white; cursor: pointer; color: white; border-radius: 2px; padding: 2px; border: 1px solid white; background: linear-gradient(135deg, #7EAED6 0%, #1B72FF 50%, #1655BE 100%); } #` + this.window_id + ` > #top > #window_minimize:hover, #` + this.window_id + ` > #top > #window_maximize:hover { background: linear-gradient(135deg, #6a93b5 0%, #1862da 50%, #124499 100%); } #` + this.window_id + ` > #top > #window_close { background: linear-gradient(135deg, #F1A689 0%, #C0442A 50%, #C2311E 100%); } #` + this.window_id + ` > #top > #window_close:hover { background: linear-gradient(135deg, #c3846c 0%, #a43923 50%, #982415 100%); } #` + this.window_id + ` > #top > .title { margin: auto; font-size: 16px; font-weight: bold; cursor: move; padding: 10px; color: white; } #` + this.window_id + ` { border-left: 3px solid #0056e4; border-right: 3px solid #0056e4; border-bottom: 3px solid #0056e4; height: ` + data.height + `%; width: ` + data.width + `%; top: ` + ((100 - data.height) / 2) + `%; left: ` + ((100 - data.width) / 2) + `%; position: fixed; z-index: 11000; background: white; min-width: 250px; min-height: 250px; border-radius: 8px; resize: both; overflow: auto; line-height: unset; overflow-y: hidden;` + (data.font != undefined ? (data.font.size != undefined ? "font-size: " + data.font.size + ";" : "") + (data.font.family != undefined ? "font-family: " + data.font.family + ";" : "") : "") + `} #` + this.window_id + ` > #top { //padding: 10px; //height: 20px; border-radius: 5px 5px 0px 0px; background: linear-gradient(to bottom, #4094ff 0%, #0056e4 13%, #0056e4 71%, #16428b 100%); position: absolute; width: 100%; } `; } style += ` #` + this.window_id + ` > #footer { text-align: right; margin: 0px 0px 4px -20px; height: 40px; border-top-left-radius: 4px; border-top-right-radius: 4px; position: absolute; width: 100%; bottom: 0; pointer-events: none; } #` + this.window_id + ` > #footer > button { background-color: #f1f1f1; border: none; color: black; padding: 12px 40px; font-size: 14px; cursor: pointer; margin-left: 5px; pointer-events: all; } #` + this.window_id + ` > #footer > button:hover { background-color: RoyalBlue; color: white; } #` + this.window_id + ` > #footer > button:disabled { background-color: darkgrey; color: white; } #` + this.window_id + ` > #content { padding: 10px; margin-top: 40px; overflow-y: scroll; height: calc(100% - 75px); overflow-wrap: break-word; } #` + this.window_id + ` > #content > input,#` + this.window_id + ` > #content > select {` + (data.font != undefined ? (data.font.size != undefined ? "font-size: " + data.font.size + ";" : "") + (data.font.family != undefined ? "font-family: " + data.font.family + ";" : "") : "") + `} #` + this.window_id + ` > #content > br { display: block; margin-top: 4px; content: " "; } #` + this.window_id + ` > #theme_dropdown { float: left; bottom: 5px; position: absolute; left: 5px; border: none; -webkit-appearance: none; -moz-appearance: none; appearance: none; color: gray; background-color: transparent; } #` + this.window_id + ` > #theme_dropdown > option { color: black; } .no-margin { margin: 0px; } .wrap-collapsible { margin-bottom: 1.2rem 0; } .toggle { display: none; } .lbl-toggle { display: block; cursor: pointer; transition: all 0.25s ease-out; } .lbl-toggle h2, .lbl-toggle h4 { display: inline; } .lbl-toggle:hover { color: white; } .lbl-toggle::before { content: ' '; display: inline-block; border-top: 5px solid transparent; border-bottom: 5px solid transparent; border-left: 5px solid currentColor; vertical-align: middle; margin-right: .7rem; transform: translateY(-2px); transition: transform .2s ease-out; } .toggle:checked + .lbl-toggle::before { transform: rotate(90deg) translateX(-3px); } .collapsible-content { max-height: 0px; overflow: hidden; transition: max-height .25s ease-in-out; } .toggle:checked + .lbl-toggle + .collapsible-content { max-height: unset; } .collapsible-content .content-inner { //background: rgba(161, 161, 161, 0.2); //border: 1px solid black; } `; style += "<style>"; $('head').append(style); if(data.theme_section_color == undefined || data.theme_section_color == false){ section_color = "#c9c9c9"; subsection_color = "#f1f1f1"; } var content = ""; if(this.isArray(data.content)){ var section_collapsible = false; var subsection_collapsible = false; var collapsible_id = 1; for(i = 0; i < data.content.length; i++){ if(this.isObject(data.content[i])){ var label_first = undefined; Object.keys(data.content[i]).forEach(function(key){ if(label_first != undefined) return; if(key == "label") label_first = true; else if(key == "type") label_first = false; }); var label = this.replaceAll(data.content[i].label, " ", " "); var object = data.content[i]; if(object.style != undefined) object.style = " style='" + object.style + "'"; else object.style = ""; if(object.require != undefined) object.style += " require='" + object.require + "'"; switch(object.type){ case "p": content += "<p class='no-margin'" + object.style + ">" + label + "</p>"; break; case "h1": content += "<h1 class='no-margin'" + object.style + ">" + label + "</h1>"; break; case "h2": content += "<h2 class='no-margin'" + object.style + ">" + label + "</h2>"; break; case "h3": content += "<h3 class='no-margin'" + object.style + ">" + label + "</h3>"; break; case "h4": content += "<h4 class='no-margin'" + object.style + ">" + label + "</h4>"; break; case "section": if(object.align == undefined) object.align = "center"; if(object.background == undefined) object.background = section_color; if(subsection_collapsible){ content += "</div></div></div>"; subsection_collapsible = false; } if(section_collapsible){ content += "</div></div></div>"; section_collapsible = false; } if(object.collapsible != undefined && object.collapsible){ content += "<div class='wrap-collapsible'><input id='collapsible" + collapsible_id + "' class='toggle' type='checkbox' " + (object.collapsed != undefined && object.collapsed == false ? "checked" : "") + "><label style='margin: 5px 0px 0px 0px; background: " + object.background + "; text-align: " + object.align + ";' for='collapsible" + collapsible_id + "' class='lbl-toggle'><h2>" + label + "</h2></label><div class='collapsible-content'><div class='content-inner'>"; section_collapsible = true; collapsible_id++; }else{ content += "<div width='100%' style='margin: 5px 0px; background: " + object.background + "; text-align: " + object.align + ";'><h2 class='no-margin'>" + label + "</h2></div>"; } break; case "subsection": if(object.align == undefined) object.align = "center"; if(object.background == undefined) object.background = subsection_color; if(subsection_collapsible){ content += "</div></div></div>"; subsection_collapsible = false; } if(object.collapsible != undefined && object.collapsible){ content += "<div class='wrap-collapsible'><input id='collapsible" + collapsible_id + "' class='toggle' type='checkbox' " + (object.collapsed != undefined && object.collapsed == false ? "checked" : "") + "><label style='margin: 5px 0px 0px 0px; background: " + object.background + "; text-align: " + object.align + ";' for='collapsible" + collapsible_id + "' class='lbl-toggle'><h4>" + label + "</h4></label><div class='collapsible-content'><div class='content-inner'>"; subsection_collapsible = true; collapsible_id++; }else{ content += "<div width='100%' style='margin: 5px 0px; background: " + object.background + "; text-align: " + object.align + ";'><h4 class='no-margin'>" + label + "</h4></div>"; } break; case "text": var value = this.getElseSet(object.id, object.default, ""); content += this.join(label_first, label, "<input id='" + object.id + "'" + object.style + " type='text' value='" + value + "' />"); content += "<br>"; break; case "textarea": var value = this.getElseSet(object.id, object.default, ""); content += this.join(label_first, label, "<textarea id='" + object.id + "'" + object.style + " value='" + value + "'>" + value + "</textarea>"); content += "<br>"; break; case "password": var value = this.getElseSet(object.id, object.default, ""); content += this.join(label_first, label, "<input id='" + object.id + "'" + object.style + " type='password' value='" + value + "' />"); content += "<br>"; break; case "checkbox": var value = this.getElseSet(object.id, object.default, false); if(value == "true" || value == true) value = true; else value = false; label = "<label for='" + object.id + "'>" + label + "</label>"; content += this.join(label_first, label, "<input id='" + object.id + "'" + object.style + " default='" + value + "' type='checkbox' " + (value ? "checked" : "") + "/>"); content += "<br>"; break; case "select": var value = this.getElseSet(object.id, object.default, ""); var select = " <select" + object.style + " id='" + object.id + "'>"; object.options.forEach(function(opt){ if(opt == value){ select += "<option selected>" + opt + "</option>"; }else{ select += "<option>" + opt + "</option>"; } }); select += "</select> "; content += this.join(label_first, label, select); content += "<br>"; break; case "numeric": var value = this.getElseSet(object.id, object.default, 0); var element = "<input id='" + object.id + "'" + object.style + " type='number' value='" + value + "'"; if(object.min != undefined) element += " min='" + object.min + "'"; if(object.max != undefined) element += " max='" + object.max + "'"; element += " />"; content += this.join(label_first, label, element); content += "<br>"; break; case "color": var value = this.getElseSet(object.id, object.default, "#FFFFFF"); content += this.join(label_first, label, "<input id='" + object.id + "'" + object.style + " type='color' value='" + value + "' />"); content += "<br>"; break; default: break; } }else{ content += "<p>" + data.content[i] + "</p>"; } } if(subsection_collapsible){ content += "</div></div></div>"; section_collapsible = false; } if(section_collapsible){ content += "</div></div></div>"; section_collapsible = false; } }else{ content = data.content; } //content += "<br style='height: 25px;' />"; content += "<br><br><br>"; var buttons = ""; if(data.completeresetbutton == undefined || data.completeresetbutton == true || data.completeresetbutton == "true"){ buttons += "<button id='completeResetButton'><i class='fa fa-trash'></i></button>"; } if(data.revertbutton == undefined || data.revertbutton == true || data.revertbutton == "true"){ buttons += "<button id='revertButton'><i class='fa fa-undo'></i></button>"; } if(data.savebutton == undefined || data.savebutton == true || data.savebutton == "true"){ buttons += "<button id='saveButton'><i class='fa fa-save'></i></button>"; } var topbuttons = ""; if(data.top == undefined || data.top.close == undefined || data.top.close == "true"){ if(data.theme == "mac") topbuttons += '<span id="window_close" class="btn" style="background:#ED594A; margin-right: 20px;"><i class="fa fa-times" style="vertical-align: sub;"></i></span>'; else if(data.theme == "win10") topbuttons += '<span id="window_close" class="btn" style="margin-right: 0px;"><i class="fa fa-times"></i></span>'; else if(data.theme == "winXP") topbuttons += '<span id="window_close" class="btn"><i class="fa fa-times"></i></span>'; } if(data.top == undefined || data.top.maximize == undefined || data.top.maximize == "true"){ if(data.theme == "mac") topbuttons += '<span id="window_maximize" class="btn" style="background:#FDD800;"><i class="fa fa-window-maximize" style="vertical-align: sub;"></i></span>'; else if(data.theme == "win10" || data.theme == "winXP") topbuttons += '<span id="window_maximize" class="btn"><i class="fa fa-window-maximize"></i></span>'; } if(data.top == undefined || data.top.minimize == undefined || data.top.minimize == "true"){ if(data.theme == "mac") topbuttons += '<span id="window_minimize" class="btn" style="background:#5AC05A;"><i class="fa fa-window-minimize" style="vertical-align: sub;"></i></span>'; else if(data.theme == "win10" || data.theme == "winXP") topbuttons += '<span id="window_minimize" class="btn"><i class="fa fa-window-minimize"></i></span>'; } $('body').append(` <div id="` + this.window_id + `" style='display: none;' class="window"> <div id="top"> ` + topbuttons + `<p class="title">` + data.title + `</p> </div> <div id="content"> ` + content + ` </div> <div id="footer"> ` + buttons + ` </div> ` + (data.theme_selector ? `<select id="theme_dropdown" value="Theme"> <option value="std" style="display: none;">Theme</option> <option value="mac">Mac</option> <option value="win10">Windows 10</option> <option value="winXP">Windows XP</option> </select>` : "") + ` </div> `); this.makeDragable($('#' + this.window_id)[0], $('#' + this.window_id).find("#top")[0], true); var confirm_close = "Unsaved changes. Discard changes?"; var confirm_revert = "Reset all changes?"; var confirm_reset = "Bring settings back to factory settings?"; if(data.confirm_close != undefined) confirm_close = data.confirm_close; if(data.confirm_revert != undefined) confirm_revert = data.confirm_revert; if(data.confirm_reset != undefined) confirm_reset = data.confirm_reset; $('#' + this.window_id).find('#revertButton').click(function(){ if(confirm(confirm_revert)) configurationWindow.revertChanges(); }); $('#' + this.window_id).find('#saveButton').click(function(){ configurationWindow.saveChanges(); $('#' + configurationWindow.window_id).find('#saveButton').css("background", "lime"); setTimeout(function(){ $('#' + configurationWindow.window_id).find('#saveButton').css("background", ""); }, 1000); }); $('#' + this.window_id).find('#completeResetButton').click(function(){ if(confirm(confirm_reset)) configurationWindow.ResetSettings(); }); $('#' + this.window_id).find('#window_close').click(function(){ configurationWindow.close(); }); //================ WINDOW RESIZE BUTTONS ===================// $('#' + this.window_id).find('#window_maximize').click(function(){ if(configurationWindow.maximized && !configurationWindow.minimized) configurationWindow.normalize(); else configurationWindow.maximize(); }); $('#' + this.window_id).find('#window_minimize').click(function(){ configurationWindow.minimize(); }); $('#' + this.window_id).find("#top").dblclick(function(){ if(configurationWindow.minimized){ if(configurationWindow.maximized) configurationWindow.maximize(); else configurationWindow.normalize(); }else{ if(configurationWindow.maximized) configurationWindow.normalize(); else configurationWindow.maximize(); } configurationWindow.clearSelection(); }); //==================== THEME SELECTOR =======================// $('#' + this.window_id).find("#theme_dropdown").change(function(){ if(! configurationWindow.close()) return; GM_setValue("config_theme", this.value); configurationWindow.create(configurationWindow.data); configurationWindow.open(); }); //==================== FIELD CHANGE LISTENER =====================// $('#' + this.window_id).find("#content").find("input[type=text], input[type=number], input[type=password], input[type=color], textarea").change(function(){ if($(this).attr("value") != $(this).val()) $(this).css("border", "#fff400 solid 2px"); else $(this).css("border", ""); configurationWindow.updateChanged(); }); $('#' + this.window_id).find("#content").find("input[type=number]").change(function(){ if($(this).attr("min") != undefined && $(this).val() < parseFloat($(this).attr("min"))) $(this).val($(this).attr("min")); else if($(this).attr("max") != undefined && $(this).val() > parseFloat($(this).attr("max"))){ $(this).val($(this).attr("max")); } configurationWindow.updateChanged(); }); $('#' + this.window_id).find("#content").find("select").change(function(){ if(this.value != $(this).find("option[selected]").val()) $(this).css("border", "#fff400 solid 2px"); else $(this).css("border", ""); configurationWindow.updateChanged(); }); $('#' + this.window_id).find("#content").find('input[type=checkbox]:not(.toggle)').change(function() { if(this.checked != ($(this).attr("default") == "true")){ $(this).css("outline", "#fff400 solid 3px"); }else{ $(this).css("outline", ""); } $('[require="' + this.id + '"]').prop("disabled", !this.checked); configurationWindow.updateChanged(); }); $('#' + this.window_id).find("#content").find('input[type=checkbox]:not(.toggle)').trigger("change"); $(document).keyup(function(e) { if (e.keyCode == 27) { configurationWindow.close(); } }); this.updateChanged(); } };