Tätä skriptiä ei tulisi asentaa suoraan. Se on kirjasto muita skriptejä varten sisällytettäväksi metadirektiivillä // @require https://update.greatest.deepsurf.us/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();
- }
- };