Bearbeiten von „OS2.ergebnisse“
Zur Navigation springen
Zur Suche springen
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Greasemonkey]] | [[Kategorie:Greasemonkey]] | ||
{| style="background-color:white; font-size:11px; float: right; margin:3px 3px 3px 10px; border:1px solid #999; border-color: #9C1818; border-collapse:collapse;" width=500 cellpadding=3 cellspacing=0 | {| style="background-color:white; font-size:11px; float: right; margin:3px 3px 3px 10px; border:1px solid #999; border-color: #9C1818; border-collapse:collapse;" width=500 cellpadding=3 cellspacing=0 | ||
| colspan="2" style="padding:0.3em; background-color:#9C1818; font-size: 18px; color:#FFFFFF" align=center| '''OS2.ergebnisse''' | | colspan="2" style="padding:0.3em; background-color:#9C1818; font-size: 18px; color:#FFFFFF" align=center| '''OS2.ergebnisse''' | ||
Zeile 8: | Zeile 7: | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Version''' | | '''Version''' | ||
| '''0. | | '''0.30''' | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
| '''Autor''' | | '''Autor''' | ||
Zeile 26: | Zeile 25: | ||
|- bgcolor="#FFCC00" | |- bgcolor="#FFCC00" | ||
|} | |} | ||
<pre> | <pre> | ||
// ==UserScript== | // ==UserScript== | ||
// @name OS2.ergebnisse | // @name OS2.ergebnisse | ||
// @namespace http://os.ongapo.com/ | // @namespace http://os.ongapo.com/ | ||
// @version 0. | // @version 0.30 | ||
// @copyright 2016+ | // @copyright 2016+ | ||
// @author Sven Loges (SLC) | // @author Sven Loges (SLC) | ||
// @description Aktiviert als Standard die Option "Ergebnisse anzeigen" fuer Online Soccer 2.0 | // @description Aktiviert als Standard die Option "Ergebnisse anzeigen" fuer Online Soccer 2.0 | ||
// @include / | // @include http*://os.ongapo.com/ls.php | ||
// @ | // @include http*://os.ongapo.com/ls.php?* | ||
// @ | // @include http*://os.ongapo.com/lp.php | ||
// @ | // @include http*://os.ongapo.com/lp.php?* | ||
// @ | // @include http*://os.ongapo.com/oseq.php | ||
// @ | // @include http*://os.ongapo.com/oseq.php?* | ||
// @ | // @include http*://os.ongapo.com/ose.php | ||
// @include http*://os.ongapo.com/ose.php?* | |||
// @include http*://os.ongapo.com/oscq.php | |||
// @include http*://os.ongapo.com/oscq.php?* | |||
// @include http*://os.ongapo.com/oschr.php | |||
// @include http*://os.ongapo.com/oschr.php?* | |||
// @include http*://os.ongapo.com/osczr.php | |||
// @include http*://os.ongapo.com/osczr.php?* | |||
// @include http*://os.ongapo.com/oscfr.php | |||
// @include http*://os.ongapo.com/oscfr.php?* | |||
// @include http*://os.ongapo.com/zer.php | |||
// @include http*://os.ongapo.com/zer.php?* | |||
// @include http*://www.os.ongapo.com/ls.php | |||
// @include http*://www.os.ongapo.com/ls.php?* | |||
// @include http*://www.os.ongapo.com/lp.php | |||
// @include http*://www.os.ongapo.com/lp.php?* | |||
// @include http*://www.os.ongapo.com/oseq.php | |||
// @include http*://www.os.ongapo.com/oseq.php?* | |||
// @include http*://www.os.ongapo.com/ose.php | |||
// @include http*://www.os.ongapo.com/ose.php?* | |||
// @include http*://www.os.ongapo.com/oscq.php | |||
// @include http*://www.os.ongapo.com/oscq.php?* | |||
// @include http*://www.os.ongapo.com/oschr.php | |||
// @include http*://www.os.ongapo.com/oschr.php?* | |||
// @include http*://www.os.ongapo.com/osczr.php | |||
// @include http*://www.os.ongapo.com/osczr.php?* | |||
// @include http*://www.os.ongapo.com/oscfr.php | |||
// @include http*://www.os.ongapo.com/oscfr.php?* | |||
// @include http*://www.os.ongapo.com/zer.php | |||
// @include http*://www.os.ongapo.com/zer.php?* | |||
// @include http*://online-soccer.eu/ls.php | |||
// @include http*://online-soccer.eu/ls.php?* | |||
// @include http*://online-soccer.eu/lp.php | |||
// @include http*://online-soccer.eu/lp.php?* | |||
// @include http*://online-soccer.eu/oseq.php | |||
// @include http*://online-soccer.eu/oseq.php?* | |||
// @include http*://online-soccer.eu/ose.php | |||
// @include http*://online-soccer.eu/ose.php?* | |||
// @include http*://online-soccer.eu/oscq.php | |||
// @include http*://online-soccer.eu/oscq.php?* | |||
// @include http*://online-soccer.eu/oschr.php | |||
// @include http*://online-soccer.eu/oschr.php?* | |||
// @include http*://online-soccer.eu/osczr.php | |||
// @include http*://online-soccer.eu/osczr.php?* | |||
// @include http*://online-soccer.eu/oscfr.php | |||
// @include http*://online-soccer.eu/oscfr.php?* | |||
// @include http*://online-soccer.eu/zer.php | |||
// @include http*://online-soccer.eu/zer.php?* | |||
// @include http*://www.online-soccer.eu/ls.php | |||
// @include http*://www.online-soccer.eu/ls.php?* | |||
// @include http*://www.online-soccer.eu/lp.php | |||
// @include http*://www.online-soccer.eu/lp.php?* | |||
// @include http*://www.online-soccer.eu/oseq.php | |||
// @include http*://www.online-soccer.eu/oseq.php?* | |||
// @include http*://www.online-soccer.eu/ose.php | |||
// @include http*://www.online-soccer.eu/ose.php?* | |||
// @include http*://www.online-soccer.eu/oscq.php | |||
// @include http*://www.online-soccer.eu/oscq.php?* | |||
// @include http*://www.online-soccer.eu/oschr.php | |||
// @include http*://www.online-soccer.eu/oschr.php?* | |||
// @include http*://www.online-soccer.eu/osczr.php | |||
// @include http*://www.online-soccer.eu/osczr.php?* | |||
// @include http*://www.online-soccer.eu/oscfr.php | |||
// @include http*://www.online-soccer.eu/oscfr.php?* | |||
// @include http*://www.online-soccer.eu/zer.php | |||
// @include http*://www.online-soccer.eu/zer.php?* | |||
// @grant GM_getValue | // @grant GM_getValue | ||
// @grant GM_setValue | // @grant GM_setValue | ||
Zeile 50: | Zeile 112: | ||
// ==/UserScript== | // ==/UserScript== | ||
// ECMAScript 6: | // ECMAScript 6: Erlaubt 'const', 'let', ... | ||
/* jshint esnext: true */ | /* jshint esnext: true */ | ||
/* jshint moz: true */ | /* jshint moz: true */ | ||
Zeile 109: | Zeile 171: | ||
}, | }, | ||
'reset' : { // Optionen auf die "Werkseinstellungen" zuruecksetzen | 'reset' : { // Optionen auf die "Werkseinstellungen" zuruecksetzen | ||
'Name' : "reset", | 'Name' : "reset", | ||
'Type' : __OPTTYPES.SI, | 'Type' : __OPTTYPES.SI, | ||
Zeile 118: | Zeile 179: | ||
}, | }, | ||
'storage' : { // Browserspeicher fuer die Klicks auf Optionen | 'storage' : { // Browserspeicher fuer die Klicks auf Optionen | ||
'Name' : "storage", | 'Name' : "storage", | ||
'Type' : __OPTTYPES.MC, | 'Type' : __OPTTYPES.MC, | ||
'ValType' : | 'ValType' : "String", | ||
'Choice' : Object.keys(__OPTMEM), | 'Choice' : Object.keys(__OPTMEM), | ||
'Action' : __OPTACTION.NXT, | 'Action' : __OPTACTION.NXT, | ||
Zeile 129: | Zeile 189: | ||
}, | }, | ||
'oldStorage' : { // Vorheriger Browserspeicher fuer die Klicks auf Optionen | 'oldStorage' : { // Vorheriger Browserspeicher fuer die Klicks auf Optionen | ||
'Name' : "oldStorage", | 'Name' : "oldStorage", | ||
'Type' : __OPTTYPES.SD, | 'Type' : __OPTTYPES.SD, | ||
Zeile 137: | Zeile 196: | ||
}, | }, | ||
'showForm' : { // Optionen auf der Webseite (true = anzeigen, false = nicht anzeigen) | 'showForm' : { // Optionen auf der Webseite (true = anzeigen, false = nicht anzeigen) | ||
'Name' : "showForm", | 'Name' : "showForm", | ||
'Type' : __OPTTYPES.SW, | 'Type' : __OPTTYPES.SW, | ||
Zeile 143: | Zeile 201: | ||
'Permanent' : true, | 'Permanent' : true, | ||
'Default' : false, | 'Default' : false, | ||
'Action' : __OPTACTION.NXT, | 'Action' : __OPTACTION.NXT, | ||
'Label' : "Optionen anzeigen", | 'Label' : "Optionen anzeigen", | ||
'Hotkey' : 'a', | 'Hotkey' : 'a', | ||
'AltLabel' : "Optionen verbergen", | 'AltLabel' : "Optionen verbergen", | ||
'AltHotkey' : 'v', | 'AltHotkey' : 'v', | ||
Zeile 155: | Zeile 211: | ||
// ==================== Invarianter Abschnitt fuer Optionen ==================== | // ==================== Invarianter Abschnitt fuer Optionen ==================== | ||
// Kompatibilitaetsfunktion zur Ermittlung des Namens einer Funktion (falle <Function>.name nicht vorhanden ist) | // Kompatibilitaetsfunktion zur Ermittlung des Namens einer Funktion (falle <Function>.name nicht vorhanden ist) | ||
Zeile 193: | Zeile 221: | ||
} | } | ||
// | // Ein Satz von Logfunktionen, die je nach Loglevel zur Verfuegung stehen. Aufruf: __LOG[level](text) | ||
// | const __LOG = { | ||
// | 'logFun' : [ | ||
// | console.error, // [0] Alert | ||
// | console.error, // [1] Error | ||
console.log, // [2] Log: Release | |||
console.log, // [3] Log: Info | |||
console.log, // [4] Log: Debug | |||
console.log, // [5] Log: Verbose | |||
console.log // [6] Log: Very verbose | |||
], | |||
'init' : function(win, logLevel = 1) { | |||
for (level = 0; level < this.logFun.length; level++) { | |||
this[level] = ((level > logLevel) ? function() { } : this.logFun[level]); | |||
} | |||
}, | |||
'changed' : function(oldVal, newVal) { | |||
const __OLDVAL = safeStringify(oldVal); | |||
const __NEWVAL = safeStringify(newVal); | |||
return ((__OLDVAL !== __NEWVAL) ? __OLDVAL + " => " : "") + __NEWVAL; | |||
}; | } | ||
}; | |||
__LOG.init(window, __LOGLEVEL); | |||
// Gibt eine Meldung in der Console aus und oeffnet ein Bestaetigungsfenster mit der Meldung | // Gibt eine Meldung in der Console aus und oeffnet ein Bestaetigungsfenster mit der Meldung | ||
Zeile 219: | Zeile 251: | ||
// message: Der Meldungs-Text | // message: Der Meldungs-Text | ||
// data: Ein Wert. Ist er angegeben, wird er in der Console ausgegeben | // data: Ein Wert. Ist er angegeben, wird er in der Console ausgegeben | ||
function showAlert(label, message, data = undefined) { | function showAlert(label, message, data = undefined) { | ||
__LOG[ | __LOG[1](label + ": " + message); | ||
if (data !== undefined) { | if (data !== undefined) { | ||
Zeile 228: | Zeile 259: | ||
alert(label + "\n\n" + message); | alert(label + "\n\n" + message); | ||
} | } | ||
Zeile 294: | Zeile 292: | ||
console.assert((__BASE === null) || ((typeof __BASE) === 'function'), "No function:", __BASE); | console.assert((__BASE === null) || ((typeof __BASE) === 'function'), "No function:", __BASE); | ||
console.assert((typeof initFun) === 'function', " | console.assert((typeof initFun) === 'function', "No function:", initFun); | ||
this.init = initFun; | this.init = initFun; | ||
Zeile 322: | Zeile 320: | ||
const __CREATEPROTO = ((createProto === undefined) ? true : createProto); | const __CREATEPROTO = ((createProto === undefined) ? true : createProto); | ||
console.assert((typeof this) === 'function' | console.assert((typeof this) === 'function'); | ||
console.assert((typeof __MEMBERS) === 'object' | console.assert((typeof __MEMBERS) === 'object'); | ||
const __CLASS = new Class(this.name || __MEMBERS.__name, baseClass, initFun || __MEMBERS.__init); | const __CLASS = new Class(this.name || __MEMBERS.__name, baseClass, initFun || __MEMBERS.__init); | ||
Zeile 366: | Zeile 364: | ||
return this.className; | return this.className; | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse Class ==================== | // ==================== Ende Abschnitt fuer Klasse Class ==================== | ||
Zeile 413: | Zeile 411: | ||
this.home = home; | this.home = home; | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse Delims ==================== | // ==================== Ende Abschnitt fuer Klasse Delims ==================== | ||
Zeile 492: | Zeile 490: | ||
this.node = node; | this.node = node; | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse UriDelims ==================== | // ==================== Ende Abschnitt fuer Klasse UriDelims ==================== | ||
Zeile 591: | Zeile 589: | ||
return __DIRS.slice(1); | return __DIRS.slice(1); | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse Path ==================== | // ==================== Ende Abschnitt fuer Klasse Path ==================== | ||
Zeile 650: | Zeile 648: | ||
const __NOSCHEME = this.stripSchemePrefix(path); | const __NOSCHEME = this.stripSchemePrefix(path); | ||
const __INDEXHOST = (__NOSCHEME ? __NOSCHEME.indexOf(__HOSTDELIM) : -1); | const __INDEXHOST = (__NOSCHEME ? __NOSCHEME.indexOf(__HOSTDELIM) : -1); | ||
const __PATH = | const __PATH = (~ __INDEXHOST) ? __NOSCHEME.substring(__INDEXHOST + __HOSTDELIM.length) : __NOSCHEME; | ||
const __INDEXHOSTPORT = (__PATH ? __PATH.indexOf(__ROOTDELIM) : -1); | const __INDEXHOSTPORT = (__PATH ? __PATH.indexOf(__ROOTDELIM) : -1); | ||
const __HOSTPORT = | const __HOSTPORT = (~ __INDEXHOSTPORT) ? __PATH.substring(0, __INDEXHOSTPORT) : undefined; | ||
const __INDEXPORT = (__HOSTPORT ? __HOSTPORT.indexOf(__PORTDELIM) : -1); | const __INDEXPORT = (__HOSTPORT ? __HOSTPORT.indexOf(__PORTDELIM) : -1); | ||
const __HOST = | const __HOST = (~ __INDEXPORT) ? __HOSTPORT.substring(0, __INDEXPORT) : __HOSTPORT; | ||
const __PORT = | const __PORT = (~ __INDEXPORT) ? __HOSTPORT.substring(__INDEXPORT + __PORTDELIM.length) : undefined; | ||
return { | return { | ||
Zeile 666: | Zeile 664: | ||
const __ROOTDELIM = this.delims.root + this.delims.delim; | const __ROOTDELIM = this.delims.root + this.delims.delim; | ||
const __INDEXHOST = (path ? path.indexOf(__HOSTDELIM) : -1); | const __INDEXHOST = (path ? path.indexOf(__HOSTDELIM) : -1); | ||
const __PATH = | const __PATH = (~ __INDEXHOST) ? path.substring(__INDEXHOST + __HOSTDELIM.length) : path; | ||
const __INDEXHOSTPORT = (__PATH ? __PATH.indexOf(__ROOTDELIM) : -1); | const __INDEXHOSTPORT = (__PATH ? __PATH.indexOf(__ROOTDELIM) : -1); | ||
return | return (~ __INDEXHOSTPORT) ? __PATH.substring(__INDEXHOSTPORT) : __PATH; | ||
}, | }, | ||
'getSchemePrefix' : function(path = undefined) { | 'getSchemePrefix' : function(path = undefined) { | ||
Zeile 675: | Zeile 673: | ||
const __INDEXSCHEME = (path ? path.indexOf(__SCHEMEDELIM) : -1); | const __INDEXSCHEME = (path ? path.indexOf(__SCHEMEDELIM) : -1); | ||
return | return (~ __INDEXSCHEME) ? path.substring(0, __INDEXSCHEME) : undefined; | ||
}, | }, | ||
'stripSchemePrefix' : function(path = undefined) { | 'stripSchemePrefix' : function(path = undefined) { | ||
Zeile 681: | Zeile 679: | ||
const __INDEXSCHEME = (path ? path.indexOf(__SCHEMEDELIM) : -1); | const __INDEXSCHEME = (path ? path.indexOf(__SCHEMEDELIM) : -1); | ||
return | return (~ __INDEXSCHEME) ? path.substring(__INDEXSCHEME + __INDEXSCHEME.length) : path; | ||
}, | }, | ||
'getNodeSuffix' : function(path = undefined) { | 'getNodeSuffix' : function(path = undefined) { | ||
Zeile 687: | Zeile 685: | ||
const __INDEXNODE = (path ? path.lastIndexOf(__NODEDELIM) : -1); | const __INDEXNODE = (path ? path.lastIndexOf(__NODEDELIM) : -1); | ||
return | return (~ __INDEXNODE) ? path.substring(__INDEXNODE + __NODEDELIM.length) : undefined; | ||
}, | }, | ||
'stripNodeSuffix' : function(path = undefined) { | 'stripNodeSuffix' : function(path = undefined) { | ||
Zeile 693: | Zeile 691: | ||
const __INDEXNODE = (path ? path.lastIndexOf(__NODEDELIM) : -1); | const __INDEXNODE = (path ? path.lastIndexOf(__NODEDELIM) : -1); | ||
return | return (~ __INDEXNODE) ? path.substring(0, __INDEXNODE) : path; | ||
}, | }, | ||
'getQueryString' : function(path = undefined) { | 'getQueryString' : function(path = undefined) { | ||
Zeile 700: | Zeile 698: | ||
const __INDEXQUERY = (__PATH ? __PATH.indexOf(__QUERYDELIM) : -1); | const __INDEXQUERY = (__PATH ? __PATH.indexOf(__QUERYDELIM) : -1); | ||
return | return (~ __INDEXQUERY) ? __PATH.substring(__INDEXQUERY + __QUERYDELIM.length) : undefined; | ||
}, | }, | ||
'stripQueryString' : function(path = undefined) { | 'stripQueryString' : function(path = undefined) { | ||
Zeile 706: | Zeile 704: | ||
const __INDEXQUERY = (path ? path.indexOf(__QUERYDELIM) : -1); | const __INDEXQUERY = (path ? path.indexOf(__QUERYDELIM) : -1); | ||
return | return (~ __INDEXQUERY) ? path.substring(0, __INDEXQUERY) : path; | ||
}, | }, | ||
'formatParams' : function(params, formatFun, delim = ' ', assign = '=') { | 'formatParams' : function(params, formatFun, delim = ' ', assign = '=') { | ||
Zeile 728: | Zeile 726: | ||
if (__PARAM) { | if (__PARAM) { | ||
const __INDEX = __PARAM.indexOf(assign); | const __INDEX = __PARAM.indexOf(assign); | ||
const __KEY = | const __KEY = (~ __INDEX) ? __PARAM.substring(0, __INDEX) : __PARAM; | ||
const __VAL = | const __VAL = (~ __INDEX) ? parseFun(__PARAM.substring(__INDEX + assign.length)) : true; | ||
__RET[__KEY] = __VAL; | __RET[__KEY] = __VAL; | ||
Zeile 749: | Zeile 747: | ||
const __LOWER = (value ? value.toLowerCase() : undefined); | const __LOWER = (value ? value.toLowerCase() : undefined); | ||
if ((__LOWER === | if ((__LOWER === "true") || (__LOWER === "false")) { | ||
return (value === | return (value === "true"); | ||
} | } | ||
} | } | ||
Zeile 802: | Zeile 800: | ||
return Path.prototype.getDirs.call(this, __PATH); | return Path.prototype.getDirs.call(this, __PATH); | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse URI ==================== | // ==================== Ende Abschnitt fuer Klasse URI ==================== | ||
Zeile 842: | Zeile 840: | ||
return this.getPath(); | return this.getPath(); | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse Directory ==================== | // ==================== Ende Abschnitt fuer Klasse Directory ==================== | ||
Zeile 870: | Zeile 868: | ||
return ret; | return ret; | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse ObjRef ==================== | // ==================== Ende Abschnitt fuer Klasse ObjRef ==================== | ||
Zeile 915: | Zeile 913: | ||
// Gibt ein Produkt zurueck. Ist einer der Multiplikanten nicht definiert, wird ein Alternativwert geliefert | // Gibt ein Produkt zurueck. Ist einer der Multiplikanten nicht definiert, wird ein Alternativwert geliefert | ||
// valueA: Ein | // valueA: Ein Multipliksnt. Ist dieser undefined, wird als Produkt defValue zurueckgeliefert | ||
// valueB: Ein | // valueB: Ein Multipliksnt. Ist dieser undefined, wird als Produkt defValue zurueckgeliefert | ||
// digits: Anzahl der Stellen nach dem Komma fuer das Produkt (Default: 0) | // digits: Anzahl der Stellen nach dem Komma fuer das Produkt (Default: 0) | ||
// defValue: Default-Wert fuer den Fall, dass ein Multiplikant nicht gesetzt ist (Default: NaN) | // defValue: Default-Wert fuer den Fall, dass ein Multiplikant nicht gesetzt ist (Default: NaN) | ||
Zeile 925: | Zeile 923: | ||
if ((valueA !== undefined) && (valueB !== undefined)) { | if ((valueA !== undefined) && (valueB !== undefined)) { | ||
product = parseFloat(valueA) * parseFloat(valueB); | product = parseFloat(valueA) * parseFloat(valueB); | ||
} | } | ||
return parseFloat(product.toFixed(digits)); | return parseFloat(product.toFixed(digits)); | ||
} | } | ||
Zeile 956: | Zeile 934: | ||
function instanceOf(obj, base) { | function instanceOf(obj, base) { | ||
while (obj !== null) { | while (obj !== null) { | ||
if (obj === base.prototype) | if (obj === base.prototype) | ||
return true; | return true; | ||
if ((typeof obj) === 'xml') { // Sonderfall mit Selbstbezug | if ((typeof obj) === 'xml') { // Sonderfall mit Selbstbezug | ||
return (base.prototype === XML.prototype); | return (base.prototype === XML.prototype); | ||
Zeile 1.008: | Zeile 985: | ||
let active = true; | let active = true; | ||
if (inList) { | if (inList !== undefined) { | ||
active = (inList[item] === true); // gesetzt und true | active = (inList[item] === true); // gesetzt und true | ||
} | } | ||
if (exList) { | if (exList !== undefined) { | ||
if (exList[item] === true) { // gesetzt und true | if (exList[item] === true) { // gesetzt und true | ||
active = false; // NICHT anzeigen | active = false; // NICHT anzeigen | ||
Zeile 1.030: | Zeile 1.007: | ||
if (checkItem(item, addList, ignList)) { | if (checkItem(item, addList, ignList)) { | ||
data[item] = addData[item]; | data[item] = addData[item]; | ||
} | } | ||
} | } | ||
Zeile 1.126: | Zeile 1.088: | ||
} | } | ||
// | // Speichert einen beliebiegen (strukturierten) Wert unter einem Namen ab | ||
// | // name: GM_setValue-Name, unter dem die Daten gespeichert werden | ||
// value: | // value: Beliebiger (strukturierter) Wert | ||
// return | // return String-Darstellung des Wertes | ||
function | function serialize(name, value) { | ||
const __STREAM = (value !== undefined) ? safeStringify(value) : value; | |||
__LOG[4](name + " >> " + __STREAM); | |||
GM_setValue(name, __STREAM); | |||
return __STREAM; | |||
return | |||
} | } | ||
// | // Holt einen beliebiegen (strukturierter) Wert unter einem Namen zurueck | ||
// name: GM_setValue-Name, unter dem die Daten gespeichert werden | |||
// defValue: Default-Wert fuer den Fall, dass nichts gespeichert ist | |||
// return Objekt, das unter dem Namen gespeichert war | |||
function deserialize(name, defValue = undefined) { | |||
const __STREAM = GM_getValue(name, defValue); | |||
__LOG[4](name + " << " + __STREAM); | |||
if (! | if ((__STREAM !== undefined) && __STREAM.length) { | ||
try { | |||
return JSON.parse(__STREAM); | |||
} catch (ex) { | |||
__LOG[1](name + ": " + ex.message); | |||
} | |||
} | } | ||
return undefined; | |||
return | |||
} | } | ||
// | // Setzt eine Option dauerhaft und laedt die Seite neu | ||
// | // name: Name der Option als Speicherort | ||
// | // value: Zu setzender Wert | ||
// | // reload: Seite mit neuem Wert neu laden | ||
// return Gespeicherter Wert fuer setOptValue() | |||
function setStored(name, value, reload = false, serial = false) { | |||
if (serial) { | |||
serialize(name, value); | |||
} else { | } else { | ||
GM_setValue(name, value); | |||
} | } | ||
if (reload) { | |||
window.location.reload(); | |||
} | } | ||
return | return value; | ||
} | } | ||
// | // Setzt den naechsten Wert aus einer Array-Liste als Option | ||
// name: | // arr: Array-Liste mit den moeglichen Optionen | ||
// value: | // name: Name der Option als Speicherort | ||
// return | // value: Vorher gesetzter Wert | ||
function | // reload: Seite mit neuem Wert neu laden | ||
// return Gespeicherter Wert fuer setOptValue() | |||
function setNextStored(arr, name, value, reload = false, serial = false) { | |||
return | return setStored(name, getNextValue(arr, value), reload, serial); | ||
} | } | ||
// | // Fuehrt die in einem Storage gespeicherte Operation aus | ||
// | // memory: __OPTMEM.normal = unbegrenzt gespeichert (localStorage), __OPTMEM.begrenzt = bis Browserende gespeichert (sessionStorage), __OPTMEM.inaktiv | ||
// return Array von Objekten mit 'cmd' / 'key' / 'val' (derzeit maximal ein Kommando) oder undefined | |||
// return | function getStoredCmds(memory = undefined) { | ||
function | const __STORAGE = getMemory(memory); | ||
const __MEMORY = __STORAGE.Value; | |||
const __RUNPREFIX = __STORAGE.Prefix; | |||
const __STOREDCMDS = []; | |||
if (__MEMORY !== undefined) { | |||
const __GETITEM = function(item) { | |||
return __MEMORY.getItem(__RUNPREFIX + item); | |||
}; | |||
const __DELITEM = function(item) { | |||
return __MEMORY.removeItem(__RUNPREFIX + item); | |||
}; | |||
const __CMD = ((__MEMORY !== undefined) ? __GETITEM('cmd') : undefined); | |||
if (__CMD !== undefined) { | |||
const __KEY = __GETITEM('key'); | |||
let value = __GETITEM('val'); | |||
try { | |||
} | value = JSON.parse(value); | ||
} catch (ex) { | |||
__LOG[1]("getStoredCmds(): " + __CMD + " '" + __KEY + "' hat illegalen Wert '" + value + "'"); | |||
// ... meist kann man den String selber aber speichern, daher kein "return"... | |||
// | |||
} | } | ||
__STOREDCMDS.push({ | |||
'cmd' : __CMD, | |||
'key' : __KEY, | |||
'val' : value | |||
}); | |||
} | |||
} | |||
__DELITEM('cmd'); | |||
__DELITEM('key'); | |||
__DELITEM('val'); | |||
} | |||
return | return (__STOREDCMDS.length ? __STOREDCMDS : undefined); | ||
} | } | ||
// Fuehrt die in einem Storage gespeicherte Operation aus | // Fuehrt die in einem Storage gespeicherte Operation aus | ||
// storedCmds: Array von Objekten mit 'cmd' / 'key' / 'val' (siehe getStoredCmds()) | |||
// optSet: Set mit den Optionen | |||
// beforeLoad: Angabe, ob nach der Speicherung noch loadOptions() aufgerufen wird | |||
// memory: __OPTMEM.normal = unbegrenzt gespeichert (localStorage), __OPTMEM.begrenzt = bis Browserende gespeichert (sessionStorage), __OPTMEM.inaktiv | // memory: __OPTMEM.normal = unbegrenzt gespeichert (localStorage), __OPTMEM.begrenzt = bis Browserende gespeichert (sessionStorage), __OPTMEM.inaktiv | ||
// return Array von | // return Array von Operationen (wie storedCmds), die fuer die naechste Phase uebrig bleiben | ||
function | function runStoredCmds(storedCmds, optSet = undefined, beforeLoad = undefined) { | ||
const | const __BEFORELOAD = getValue(beforeLoad, true); | ||
const | const __STOREDCMDS = getValue(storedCmds, []); | ||
const | const __LOADEDCMDS = []; | ||
let invalidated = false; | |||
while (__STOREDCMDS.length) { | |||
const | const __STORED = __STOREDCMDS.shift(); | ||
const __CMD = __STORED.cmd; | |||
const __KEY = __STORED.key; | |||
const | const __VAL = __STORED.val; | ||
const | |||
if ( | if (__BEFORELOAD) { | ||
if (__STOREDCMDS.length) { | |||
invalidateOpts(optSet); // alle Optionen invalidieren | |||
invalidated = true; | |||
} | } | ||
switch (__OPTACTION[__CMD]) { | |||
case __OPTACTION.SET : __LOG[4]("SET '" + __KEY + "' " + __VAL); | |||
setStored(__KEY, __VAL, false, false); | |||
break; | |||
case __OPTACTION.NXT : __LOG[4]("SETNEXT '" + __KEY + "' " + __VAL); | |||
//setNextStored(__CONFIG.Choice, __KEY, __VAL, false, false); | |||
setStored(__KEY, __VAL, false, false); | |||
break; | |||
case __OPTACTION.RST : __LOG[4]("RESET (delayed)"); | |||
__LOADEDCMDS.push(__STORED); | |||
break; | |||
switch (__OPTACTION[__CMD]) { | |||
case __OPTACTION.SET : __LOG[4]("SET '" + __KEY + "' " + __VAL); | |||
setStored(__KEY, __VAL, false, false | |||
break; | |||
case __OPTACTION.NXT : __LOG[4]("SETNEXT '" + __KEY + "' " + __VAL); | |||
//setNextStored(__CONFIG.Choice, __KEY, __VAL, false, false | |||
setStored(__KEY, __VAL, false, false | |||
break; | |||
case __OPTACTION.RST : __LOG[4]("RESET (delayed)"); | |||
__LOADEDCMDS.push(__STORED); | |||
break; | |||
default : break; | default : break; | ||
} | } | ||
Zeile 1.405: | Zeile 1.237: | ||
break; | break; | ||
case __OPTACTION.RST : __LOG[4]("RESET"); | case __OPTACTION.RST : __LOG[4]("RESET"); | ||
resetOptions(optSet, false); | |||
loadOptions(optSet); // Reset auf umbenannte Optionen anwenden! | |||
break; | break; | ||
default : break; | default : break; | ||
Zeile 1.508: | Zeile 1.340: | ||
// force: Laedt auch Optionen mit 'AutoReset'-Attribut | // force: Laedt auch Optionen mit 'AutoReset'-Attribut | ||
// return Gesetzter Wert | // return Gesetzter Wert | ||
function getOptValue(opt, defValue = undefined, load = true | function getOptValue(opt, defValue = undefined, load = true, force = false) { | ||
let value; | let value; | ||
if (opt !== undefined) { | if (opt !== undefined) { | ||
if (load && ! opt.Loaded) { | if (load && ! opt.Loaded) { | ||
value = loadOption(opt, force); | |||
} else { | } else { | ||
value = opt.Value; | value = opt.Value; | ||
Zeile 1.608: | Zeile 1.435: | ||
// Gibt rekursiv und detailliert die Groesse des benutzten Speichers fuer ein Objekt aus | // Gibt rekursiv und detailliert die Groesse des benutzten Speichers fuer ein Objekt aus | ||
// value: (Enumerierbares) Objekt oder Wert, dessen Groesse gemessen wird | // value: (Enumerierbares) Objekt oder Wert, dessen Groesse gemessen wird | ||
// out: Logfunktion, etwa | // out: Logfunktion, etwa console.log | ||
// depth: Gewuenschte Rekursionstiefe (0 = nur dieses Objekt, -1 = alle Ebenen) | // depth: Gewuenschte Rekursionstiefe (0 = nur dieses Objekt, -1 = alle Ebenen) | ||
// name: Name des Objekts | // name: Name des Objekts | ||
Zeile 1.617: | Zeile 1.444: | ||
const __SIZE = value.length; | const __SIZE = value.length; | ||
__OUT("USAGE: " + name + '\t' + __SIZE + '\t' + value. | __OUT("USAGE: " + name + '\t' + __SIZE + '\t' + value.substr(0, 255)); | ||
} else if ((typeof value) === 'object') { | } else if ((typeof value) === 'object') { | ||
if (depth === 0) { | if (depth === 0) { | ||
Zeile 1.639: | Zeile 1.466: | ||
// Restauriert den vorherigen Speicher (der in einer Option definiert ist) | // Restauriert den vorherigen Speicher (der in einer Option definiert ist) | ||
// opt: Option zur Wahl des Speichers | // opt: Option zur Wahl des Speichers | ||
// return | // return Gesuchter Speicher oder Null-Speicher ('inaktiv') | ||
function restoreMemoryByOpt(opt) { | |||
// Memory Storage fuer vorherige Speicherung... | // Memory Storage fuer vorherige Speicherung... | ||
const __STORAGE = | const __STORAGE = getOptValue(opt, __MEMNORMAL, true, true); | ||
return __OPTMEM[__STORAGE]; | return __OPTMEM[__STORAGE]; | ||
Zeile 1.650: | Zeile 1.477: | ||
// opt: Option zur Wahl des Speichers | // opt: Option zur Wahl des Speichers | ||
// saveOpt: Option zur Speicherung der Wahl des Speichers (fuer restoreMemoryByOpt) | // saveOpt: Option zur Speicherung der Wahl des Speichers (fuer restoreMemoryByOpt) | ||
// return Gesuchter Speicher oder Null-Speicher ('inaktiv'), falls speichern nicht moeglich ist | // return Gesuchter Speicher oder Null-Speicher ('inaktiv'), falls speichern nicht moeglich ist | ||
function startMemoryByOpt(opt, saveOpt | function startMemoryByOpt(opt, saveOpt = undefined) { | ||
// Memory Storage fuer naechste Speicherung... | // Memory Storage fuer naechste Speicherung... | ||
let storage = getOptValue(opt, __MEMNORMAL); | let storage = getOptValue(opt, __MEMNORMAL); | ||
Zeile 1.666: | Zeile 1.491: | ||
if (saveOpt !== undefined) { | if (saveOpt !== undefined) { | ||
setOpt(saveOpt, storage, false | setOpt(saveOpt, storage, false); | ||
} | } | ||
Zeile 1.677: | Zeile 1.502: | ||
// Initialisiert das Script-Modul und ermittelt die beschreibenden Daten | // Initialisiert das Script-Modul und ermittelt die beschreibenden Daten | ||
// meta: Metadaten des Scripts (Default: | // meta: Metadaten des Scripts (Default: GM_info.script) | ||
// return Beschreibende Daten fuer __DBMOD | // return Beschreibende Daten fuer __DBMOD | ||
function ScriptModule(meta) { | function ScriptModule(meta) { | ||
'use strict'; | 'use strict'; | ||
const __META = getValue(meta, | const __META = getValue(meta, GM_info.script); | ||
const __PROPS = { | const __PROPS = { | ||
'name' : true, | 'name' : true, | ||
Zeile 1.788: | Zeile 1.613: | ||
// funOff: Funktion zum Ausschalten | // funOff: Funktion zum Ausschalten | ||
// keyOff: Hotkey zum Ausschalten im Menu | // keyOff: Hotkey zum Ausschalten im Menu | ||
function registerMenuOption(val, menuOn, funOn, keyOn, menuOff, funOff, keyOff) { | function registerMenuOption(val, menuOn, funOn, keyOn, menuOff, funOff, keyOff) { | ||
const __ON = (val ? '*' : ""); | const __ON = (val ? '*' : ""); | ||
Zeile 1.796: | Zeile 1.620: | ||
if (val) { | if (val) { | ||
GM_registerMenuCommand(menuOff, funOff, keyOff); | |||
} else { | } else { | ||
GM_registerMenuCommand(menuOn, funOn, keyOn); | |||
} | } | ||
} | } | ||
Zeile 1.808: | Zeile 1.632: | ||
// fun: Funktion zum Setzen des naechsten Wertes | // fun: Funktion zum Setzen des naechsten Wertes | ||
// key: Hotkey zum Setzen des naechsten Wertes im Menu | // key: Hotkey zum Setzen des naechsten Wertes im Menu | ||
function registerNextMenuOption(val, arr, menu, fun, key) { | function registerNextMenuOption(val, arr, menu, fun, key) { | ||
const __MENU = | const __MENU = menu.replace('$', val); | ||
let options = "OPTION " + __MENU; | let options = "OPTION " + __MENU; | ||
Zeile 1.822: | Zeile 1.645: | ||
__LOG[3](options); | __LOG[3](options); | ||
GM_registerMenuCommand(__MENU, fun, key); | |||
} | } | ||
Zeile 1.832: | Zeile 1.655: | ||
// hidden: Angabe, ob Menupunkt nicht sichtbar sein soll (Default: sichtbar) | // hidden: Angabe, ob Menupunkt nicht sichtbar sein soll (Default: sichtbar) | ||
// serial: Serialization fuer komplexe Daten | // serial: Serialization fuer komplexe Daten | ||
function registerDataOption(val, menu, fun, key, hidden = false, serial = true) { | function registerDataOption(val, menu, fun, key, hidden = false, serial = true) { | ||
const __VALUE = ((serial && (val !== undefined)) ? safeStringify(val) : val); | const __VALUE = ((serial && (val !== undefined)) ? safeStringify(val) : val); | ||
const __MENU = | const __MENU = getValue(menu, "").replace('$', __VALUE); | ||
const __OPTIONS = (hidden ? "HIDDEN " : "") + "OPTION " + __MENU + | const __OPTIONS = (hidden ? "HIDDEN " : "") + "OPTION " + __MENU + | ||
getValue(__VALUE, "", " = " + __VALUE); | getValue(__VALUE, "", " = " + __VALUE); | ||
Zeile 1.841: | Zeile 1.663: | ||
__LOG[hidden ? 4 : 3](__OPTIONS); | __LOG[hidden ? 4 : 3](__OPTIONS); | ||
if (hidden) { | if (! hidden) { | ||
GM_registerMenuCommand(__MENU, fun, key); | |||
} | } | ||
} | } | ||
Zeile 1.850: | Zeile 1.670: | ||
// Zeigt den Eintrag im Menu einer Option | // Zeigt den Eintrag im Menu einer Option | ||
// opt: Config und Value der Option | // opt: Config und Value der Option | ||
function registerOption(opt) { | function registerOption(opt) { | ||
const __CONFIG = getOptConfig(opt); | const __CONFIG = getOptConfig(opt); | ||
Zeile 1.862: | Zeile 1.681: | ||
if (! __CONFIG.HiddenMenu) { | if (! __CONFIG.HiddenMenu) { | ||
switch (__CONFIG.Type) { | switch (__CONFIG.Type) { | ||
case __OPTTYPES.MC : | case __OPTTYPES.MC : registerNextMenuOption(__VALUE, __CONFIG.Choice, __LABEL, __ACTION, __HOTKEY); | ||
case __OPTTYPES.SW : | break; | ||
case __OPTTYPES.SW : registerMenuOption(__VALUE, __LABEL, __ACTION, __HOTKEY, | |||
case __OPTTYPES.TF : | __CONFIG.AltLabel, __ACTION, __CONFIG.AltHotkey); | ||
break; | |||
case __OPTTYPES.SD : | case __OPTTYPES.TF : registerMenuOption(__VALUE, __LABEL, __ACTION, __HOTKEY, | ||
case __OPTTYPES.SI : | __CONFIG.AltLabel, opt.AltAction, __CONFIG.AltHotkey); | ||
default : | break; | ||
case __OPTTYPES.SD : registerDataOption(__VALUE, __LABEL, __ACTION, __HOTKEY, __HIDDEN, __SERIAL); | |||
break; | |||
case __OPTTYPES.SI : registerDataOption(__VALUE, __LABEL, __ACTION, __HOTKEY, __HIDDEN, __SERIAL); | |||
break; | |||
default : break; | |||
} | } | ||
} else { | } else { | ||
// Nur Anzeige im Log... | // Nur Anzeige im Log... | ||
registerDataOption(__VALUE, __LABEL, __ACTION, __HOTKEY, __HIDDEN, __SERIAL); | |||
} | } | ||
} | } | ||
Zeile 1.925: | Zeile 1.749: | ||
switch (optAction) { | switch (optAction) { | ||
case __OPTACTION.SET : fun = function() { | case __OPTACTION.SET : fun = function() { | ||
return setOptByName(optSet, item, __CONFIG.SetValue, __RELOAD | return setOptByName(optSet, item, __CONFIG.SetValue, __RELOAD); | ||
}; | }; | ||
break; | break; | ||
case __OPTACTION.NXT : fun = function() { | case __OPTACTION.NXT : fun = function() { | ||
return promptNextOptByName(optSet, item, __CONFIG.SetValue, __RELOAD, | return promptNextOptByName(optSet, item, __CONFIG.SetValue, __RELOAD, | ||
__CONFIG.FreeValue, __CONFIG.SelValue, __CONFIG.MinChoice | __CONFIG.FreeValue, __CONFIG.SelValue, __CONFIG.MinChoice); | ||
}; | }; | ||
break; | break; | ||
case __OPTACTION.RST : fun = function() { | case __OPTACTION.RST : fun = function() { | ||
return resetOptions(optSet, __RELOAD | return resetOptions(optSet, __RELOAD); | ||
}; | }; | ||
break; | break; | ||
Zeile 1.985: | Zeile 1.807: | ||
const __OBJREF = getSharedRef(__SHARED, item); // Gemeinsame Daten | const __OBJREF = getSharedRef(__SHARED, item); // Gemeinsame Daten | ||
if (getValue(__SHARED.item, '$') !== '$') { // | if (getValue(__SHARED.item, '$') !== '$') { // __REF ist ein Item | ||
const __REF = valueOf(__OBJREF); | const __REF = valueOf(__OBJREF); | ||
Zeile 1.991: | Zeile 1.813: | ||
addProps(config, getOptConfig(__REF)); | addProps(config, getOptConfig(__REF)); | ||
addProps(config, optConfig); | addProps(config, optConfig); | ||
config.setConst('SharedData', getOptValue(__REF) | config.setConst('SharedData', getOptValue(__REF)); | ||
} else { // | } else { // __REF enthaelt die Daten selbst | ||
if (! config.Name) { | if (! config.Name) { | ||
config.Name = __OBJREF.getPath(); | config.Name = __OBJREF.getPath(); | ||
Zeile 2.023: | Zeile 1.845: | ||
const __CONFIG = getSharedConfig(__OPTCONFIG, opt); | const __CONFIG = getSharedConfig(__OPTCONFIG, opt); | ||
const __ALTACTION = getValue(__CONFIG.AltAction, __CONFIG.Action); | const __ALTACTION = getValue(__CONFIG.AltAction, __CONFIG.Action); | ||
// Gab es vorher einen Aufruf, der einen Stub-Eintrag erzeugt hat | // Gab es vorher einen Aufruf, der einen Stub-Eintrag erzeugt hat? Wurde ggfs. bereits geaendert... | ||
const | const __USESTUB = ((preInit === false) && __PREINIT); | ||
const | const __LOADED = (__USESTUB && optSet[opt].Loaded); | ||
const __VALUE = ( | const __VALUE = (__USESTUB ? optSet[opt].Value : undefined); | ||
optSet[opt] = { | optSet[opt] = { | ||
Zeile 2.032: | Zeile 1.854: | ||
'Config' : __CONFIG, | 'Config' : __CONFIG, | ||
'Loaded' : (__ISSHARED || __LOADED), | 'Loaded' : (__ISSHARED || __LOADED), | ||
'Value' : initOptValue(__CONFIG, __VALUE), | 'Value' : initOptValue(__CONFIG, __VALUE), | ||
'SetValue' : __CONFIG.SetValue, | 'SetValue' : __CONFIG.SetValue, | ||
Zeile 2.044: | Zeile 1.865: | ||
'Config' : __OPTCONFIG, | 'Config' : __OPTCONFIG, | ||
'Loaded' : false, | 'Loaded' : false, | ||
'Value' : initOptValue(__OPTCONFIG), | 'Value' : initOptValue(__OPTCONFIG), | ||
'ReadOnly' : (__ISSHARED || __OPTCONFIG.ReadOnly) | 'ReadOnly' : (__ISSHARED || __OPTCONFIG.ReadOnly) | ||
Zeile 2.077: | Zeile 1.897: | ||
// optConfig: Konfiguration der Optionen | // optConfig: Konfiguration der Optionen | ||
// optSet: Platz fuer die gesetzten Optionen | // optSet: Platz fuer die gesetzten Optionen | ||
// return | // return Gefuelltes Objekt mit den gesetzten Optionen | ||
function startOptions(optConfig, optSet = undefined, classification = undefined) { | |||
optSet = initOptions(optConfig, optSet, true); // PreInit | optSet = initOptions(optConfig, optSet, true); // PreInit | ||
// Memory Storage fuer vorherige Speicherung... | // Memory Storage fuer vorherige Speicherung... | ||
myOptMemSize = getMemSize(myOptMem = | myOptMemSize = getMemSize(myOptMem = restoreMemoryByOpt(optSet.oldStorage)); | ||
// Zwischengespeicherte Befehle auslesen... | // Zwischengespeicherte Befehle auslesen... | ||
const __STOREDCMDS = getStoredCmds(myOptMem); | const __STOREDCMDS = getStoredCmds(myOptMem); | ||
// ... ermittelte Befehle | // ... ermittelte Befehle ausführen... | ||
const __LOADEDCMDS = | const __LOADEDCMDS = runStoredCmds(__STOREDCMDS, optSet, true); // BeforeLoad | ||
// Bisher noch nicht geladenene Optionen laden... | // Bisher noch nicht geladenene Optionen laden... | ||
loadOptions(optSet); | |||
// Memory Storage fuer naechste Speicherung... | // Memory Storage fuer naechste Speicherung... | ||
Zeile 2.103: | Zeile 1.923: | ||
if (classification !== undefined) { | if (classification !== undefined) { | ||
// Umbenennungen durchfuehren... | // Umbenennungen durchfuehren... | ||
classification.renameOptions(); | |||
} | } | ||
// ... ermittelte Befehle | // ... ermittelte Befehle ausführen... | ||
runStoredCmds(__LOADEDCMDS, optSet, false); // Rest | |||
// Als globale Daten speichern... | // Als globale Daten speichern... | ||
Zeile 2.124: | Zeile 1.944: | ||
// 'formWidth': Anzahl der Elemente pro Zeile | // 'formWidth': Anzahl der Elemente pro Zeile | ||
// 'formBreak': Elementnummer des ersten Zeilenumbruchs | // 'formBreak': Elementnummer des ersten Zeilenumbruchs | ||
function showOptions(optSet = undefined, optParams = { 'hideMenu' : false }) { | function showOptions(optSet = undefined, optParams = { 'hideMenu' : false }) { | ||
if (! optParams.hideMenu) { | if (! optParams.hideMenu) { | ||
buildMenu(optSet | buildMenu(optSet); | ||
} | } | ||
Zeile 2.133: | Zeile 1.952: | ||
buildForm(optParams.menuAnchor, optSet, optParams); | buildForm(optParams.menuAnchor, optSet, optParams); | ||
} | } | ||
} | } | ||
Zeile 2.142: | Zeile 1.959: | ||
// value: (Bei allen Typen) Zu setzender Wert | // value: (Bei allen Typen) Zu setzender Wert | ||
// reload: Seite mit neuem Wert neu laden | // reload: Seite mit neuem Wert neu laden | ||
// return Gesetzter Wert | // return Gesetzter Wert | ||
function setOpt(opt, value, reload = false | function setOpt(opt, value, reload = false) { | ||
return setOptValue(opt, setStored(getOptName(opt), value, reload, getOptConfig(opt).Serial | return setOptValue(opt, setStored(getOptName(opt), value, reload, getOptConfig(opt).Serial)); | ||
} | } | ||
Zeile 2.173: | Zeile 1.988: | ||
// value: Default fuer ggfs. zu setzenden Wert | // value: Default fuer ggfs. zu setzenden Wert | ||
// reload: Seite mit neuem Wert neu laden | // reload: Seite mit neuem Wert neu laden | ||
// return Gesetzter Wert | // return Gesetzter Wert | ||
function setNextOpt(opt, value = undefined, reload = false | function setNextOpt(opt, value = undefined, reload = false) { | ||
return setOpt(opt, getNextOpt(opt, value), reload | return setOpt(opt, getNextOpt(opt, value), reload); | ||
} | } | ||
Zeile 2.186: | Zeile 1.999: | ||
// freeValue: Angabe, ob Freitext zugelassen ist (Default: false) | // freeValue: Angabe, ob Freitext zugelassen ist (Default: false) | ||
// minChoice: Ab wievielen Auswahlmoeglichkeiten soll abgefragt werden? (Default: 3) | // minChoice: Ab wievielen Auswahlmoeglichkeiten soll abgefragt werden? (Default: 3) | ||
// return Gesetzter Wert | // return Gesetzter Wert | ||
function promptNextOpt(opt, value = undefined, reload = false, freeValue = false, selValue = true, minChoice = 3 | function promptNextOpt(opt, value = undefined, reload = false, freeValue = false, selValue = true, minChoice = 3) { | ||
const __CONFIG = getOptConfig(opt); | const __CONFIG = getOptConfig(opt); | ||
const __CHOICE = __CONFIG.Choice; | const __CHOICE = __CONFIG.Choice; | ||
if (value || (! __CHOICE) || (__CHOICE.length < minChoice)) { | if (value || (! __CHOICE) || (__CHOICE.length < minChoice)) { | ||
return setNextOpt(opt, value, reload | return setNextOpt(opt, value, reload); | ||
} | } | ||
Zeile 2.207: | Zeile 2.018: | ||
message += (index + 1) + ") " + __CHOICE[index] + '\n'; | message += (index + 1) + ") " + __CHOICE[index] + '\n'; | ||
} | } | ||
message += "\nNummer | message += "\nNummer eingeben:"; | ||
} else { | } else { | ||
message = __CHOICE.join(" / ") + "\n\nWert eingeben:"; | message = __CHOICE.join(" / ") + "\n\nWert eingeben:"; | ||
Zeile 2.229: | Zeile 2.040: | ||
if (nextVal !== __VALUE) { | if (nextVal !== __VALUE) { | ||
if (nextVal) { | if (nextVal) { | ||
return setOpt(opt, nextVal, reload | return setOpt(opt, nextVal, reload); | ||
} | } | ||
const __LABEL = | const __LABEL = __CONFIG.Label.replace('$', __VALUE); | ||
showAlert(__LABEL, "Ung\xFCltige Eingabe: " + __ANSWER); | showAlert(__LABEL, "Ung\xFCltige Eingabe: " + __ANSWER); | ||
Zeile 2.238: | Zeile 2.049: | ||
} | } | ||
} catch (ex) { | } catch (ex) { | ||
__LOG[ | __LOG[1]("promptNextOpt: " + ex.message); | ||
} | } | ||
Zeile 2.250: | Zeile 2.061: | ||
// value: (Bei allen Typen) Zu setzender Wert | // value: (Bei allen Typen) Zu setzender Wert | ||
// reload: Seite mit neuem Wert neu laden | // reload: Seite mit neuem Wert neu laden | ||
// return Gesetzter Wert | // return Gesetzter Wert | ||
function setOptByName(optSet, item, value, reload = false | function setOptByName(optSet, item, value, reload = false) { | ||
const __OPT = getOptByName(optSet, item); | const __OPT = getOptByName(optSet, item); | ||
return setOpt(__OPT, value, reload | return setOpt(__OPT, value, reload); | ||
} | } | ||
Zeile 2.275: | Zeile 2.084: | ||
// value: Default fuer ggfs. zu setzenden Wert | // value: Default fuer ggfs. zu setzenden Wert | ||
// reload: Seite mit neuem Wert neu laden | // reload: Seite mit neuem Wert neu laden | ||
// return Gesetzter Wert | // return Gesetzter Wert | ||
function setNextOptByName(optSet, item, value = undefined, reload = false | function setNextOptByName(optSet, item, value = undefined, reload = false) { | ||
const __OPT = getOptByName(optSet, item); | const __OPT = getOptByName(optSet, item); | ||
return setNextOpt(__OPT, value, reload | return setNextOpt(__OPT, value, reload); | ||
} | } | ||
Zeile 2.291: | Zeile 2.098: | ||
// freeValue: Angabe, ob Freitext zugelassen ist (Default: false) | // freeValue: Angabe, ob Freitext zugelassen ist (Default: false) | ||
// minChoice: Ab wievielen Auswahlmoeglichkeiten soll abgefragt werden? (Default: 3) | // minChoice: Ab wievielen Auswahlmoeglichkeiten soll abgefragt werden? (Default: 3) | ||
// return Gesetzter Wert | // return Gesetzter Wert | ||
function promptNextOptByName(optSet, item, value = undefined, reload = false, freeValue = false, selValue = true, minChoice = 3 | function promptNextOptByName(optSet, item, value = undefined, reload = false, freeValue = false, selValue = true, minChoice = 3) { | ||
const __OPT = getOptByName(optSet, item); | const __OPT = getOptByName(optSet, item); | ||
return promptNextOpt(__OPT, value, reload, freeValue, selValue, minChoice | return promptNextOpt(__OPT, value, reload, freeValue, selValue, minChoice); | ||
} | } | ||
// Baut das Benutzermenu auf | // Baut das Benutzermenu auf | ||
// optSet: Gesetzte Optionen | // optSet: Gesetzte Optionen | ||
function buildMenu(optSet) { | |||
__LOG[3]("buildMenu()"); | __LOG[3]("buildMenu()"); | ||
for (let opt in optSet) { | for (let opt in optSet) { | ||
registerOption(optSet[opt]); | |||
} | } | ||
} | } | ||
Zeile 2.316: | Zeile 2.118: | ||
// opt: Zu invalidierende Option | // opt: Zu invalidierende Option | ||
// force: Invalidiert auch Optionen mit 'AutoReset'-Attribut | // force: Invalidiert auch Optionen mit 'AutoReset'-Attribut | ||
function invalidateOpt(opt, force = false) { | function invalidateOpt(opt, force = false) { | ||
if (! opt.ReadOnly) { | |||
const __CONFIG = getOptConfig(opt); | |||
// Wert "ungeladen"... | |||
opt.Loaded = (force || ! __CONFIG.AutoReset); | |||
if (opt.Loaded && __CONFIG.AutoReset) { | |||
// Nur zuruecksetzen, gilt als geladen... | |||
setOptValue(opt, initOptValue(__CONFIG)); | |||
} | |||
} | |||
} | } | ||
// Invalidiert die (ueber Menu) gesetzten Optionen | // Invalidiert die (ueber Menu) gesetzten Optionen | ||
// optSet: | // optSet: Set mit den Optionen | ||
// force: Invalidiert auch Optionen mit 'AutoReset'-Attribut | // force: Invalidiert auch Optionen mit 'AutoReset'-Attribut | ||
// return | // return Set mit den geladenen Optionen | ||
function invalidateOpts(optSet, force = false) { | |||
for (let opt in optSet) { | for (let opt in optSet) { | ||
const __OPT = optSet[opt]; | const __OPT = optSet[opt]; | ||
if (__OPT.Loaded) { | |||
invalidateOpt(__OPT, force); | |||
} | |||
} | } | ||
Zeile 2.352: | Zeile 2.151: | ||
// opt: Zu ladende Option | // opt: Zu ladende Option | ||
// force: Laedt auch Optionen mit 'AutoReset'-Attribut | // force: Laedt auch Optionen mit 'AutoReset'-Attribut | ||
// return | // return Gesetzter Wert der gelandenen Option | ||
function loadOption(opt, force = false) { | function loadOption(opt, force = false) { | ||
const __CONFIG = getOptConfig(opt); | |||
const __ISSHARED = getValue(__CONFIG.Shared, false, true); | |||
const __NAME = getOptName(opt); | |||
const __DEFAULT = getOptValue(opt, undefined, false, false); | |||
let value; | |||
if (opt.Loaded && ! __ISSHARED) { | |||
__LOG[1]("Error: Oprion '" + __NAME + "' bereits geladen!"); | |||
} | |||
if (opt.ReadOnly || __ISSHARED) { | |||
value = __DEFAULT; | |||
} else if (! force && __CONFIG.AutoReset) { | |||
value = initOptValue(__CONFIG); | |||
} else { | |||
value = (__CONFIG.Serial ? | |||
deserialize(__NAME, __DEFAULT) : | |||
GM_getValue(__NAME, __DEFAULT)); | |||
} | |||
__LOG[5]("LOAD " + __NAME + ": " + __LOG.changed(__DEFAULT, value)); | |||
// Wert als geladen markieren... | |||
opt.Loaded = true; | |||
// Wert intern setzen... | |||
return setOptValue(opt, value); | |||
} | |||
// Laedt die (ueber Menu) gesetzten Optionen | |||
// optSet: Set mit den Optionen | |||
// force: Laedt auch Optionen mit 'AutoReset'-Attribut | |||
// return Set mit den geladenen Optionen | |||
// Laedt die (ueber Menu) gesetzten Optionen | |||
// optSet: | |||
// force: Laedt auch Optionen mit 'AutoReset'-Attribut | |||
// return | |||
function loadOptions(optSet, force = false) { | function loadOptions(optSet, force = false) { | ||
for (let opt in optSet) { | for (let opt in optSet) { | ||
const __OPT = optSet[opt]; | const __OPT = optSet[opt]; | ||
if (! __OPT.Loaded) { | if (! __OPT.Loaded) { | ||
loadOption(__OPT, force); | |||
} | } | ||
} | } | ||
return | return optSet; | ||
} | } | ||
Zeile 2.430: | Zeile 2.201: | ||
// opt: Gesetzte Option | // opt: Gesetzte Option | ||
// force: Entfernt auch Optionen mit 'Permanent'-Attribut | // force: Entfernt auch Optionen mit 'Permanent'-Attribut | ||
// reset: Setzt bei Erfolg auf Initialwert der Option | // reset: Setzt bei Erfolg auf Initialwert der Option | ||
function deleteOption(opt, force = false, reset = true) { | function deleteOption(opt, force = false, reset = true) { | ||
const __CONFIG = getOptConfig(opt); | const __CONFIG = getOptConfig(opt); | ||
Zeile 2.440: | Zeile 2.210: | ||
__LOG[4]("DELETE " + __NAME); | __LOG[4]("DELETE " + __NAME); | ||
GM_deleteValue(__NAME); | |||
if (reset) { | |||
setOptValue(opt, initOptValue(__CONFIG)); | |||
} | |||
} | } | ||
} | } | ||
Zeile 2.455: | Zeile 2.223: | ||
// force: Entfernt auch Optionen mit 'Permanent'-Attribut | // force: Entfernt auch Optionen mit 'Permanent'-Attribut | ||
// reset: Setzt bei Erfolg auf Initialwert der Option | // reset: Setzt bei Erfolg auf Initialwert der Option | ||
function deleteOptions(optSet, optSelect = undefined, force = false, reset = true) { | |||
const __DELETEALL = (optSelect === undefined) || (optSelect === true); | |||
const __DELETEALL = | |||
const __OPTSELECT = getValue(optSelect, { }); | const __OPTSELECT = getValue(optSelect, { }); | ||
for (let opt in optSet) { | for (let opt in optSet) { | ||
if (getValue(__OPTSELECT[opt], __DELETEALL)) { | if (getValue(__OPTSELECT[opt], __DELETEALL)) { | ||
deleteOption(optSet[opt], force, reset); | |||
} | } | ||
} | } | ||
} | } | ||
Zeile 2.474: | Zeile 2.239: | ||
// reload: Wert nachladen statt beizubehalten | // reload: Wert nachladen statt beizubehalten | ||
// force: Laedt auch Optionen mit 'AutoReset'-Attribut | // force: Laedt auch Optionen mit 'AutoReset'-Attribut | ||
// return | // return Umbenannte Option | ||
function renameOption(opt, name, reload = false, force = false) { | |||
const __NAME = getOptName(opt); | const __NAME = getOptName(opt); | ||
if (__NAME !== name) { | if (__NAME !== name) { | ||
deleteOption(opt, true, ! reload); | |||
setOptName(opt, name); | setOptName(opt, name); | ||
if (reload) { | if (reload) { | ||
loadOption(opt, force); | |||
} | } | ||
} | } | ||
return | return opt; | ||
} | } | ||
Zeile 2.520: | Zeile 2.281: | ||
// - name: Neu zu setzender Name (Speicheradresse) | // - name: Neu zu setzender Name (Speicheradresse) | ||
// - param: Parameter "renameParam" von oben, z.B. Prefix oder Postfix | // - param: Parameter "renameParam" von oben, z.B. Prefix oder Postfix | ||
function renameOptions(optSet, optSelect, renameParam = undefined, renameFun = prefixName) { | |||
if (renameFun === undefined) { | if (renameFun === undefined) { | ||
__LOG[ | __LOG[1]("RENAME: Illegale Funktion!"); | ||
} | } | ||
for (let opt in optSelect) { | for (let opt in optSelect) { | ||
Zeile 2.530: | Zeile 2.290: | ||
if (__OPT === undefined) { | if (__OPT === undefined) { | ||
__LOG[ | __LOG[1]("RENAME: Option '" + opt + "' nicht gefunden!"); | ||
} else { | } else { | ||
const __NAME = getOptName(__OPT); | const __NAME = getOptName(__OPT); | ||
Zeile 2.540: | Zeile 2.300: | ||
const __FORCE = (__ISSCALAR ? true : __OPTPARAMS.force); | const __FORCE = (__ISSCALAR ? true : __OPTPARAMS.force); | ||
renameOption(__OPT, __NEWNAME, __RELOAD, __FORCE); | |||
} | } | ||
} | } | ||
Zeile 2.548: | Zeile 2.308: | ||
// optSet: Gesetzte Optionen | // optSet: Gesetzte Optionen | ||
// reload: Seite mit "Werkseinstellungen" neu laden | // reload: Seite mit "Werkseinstellungen" neu laden | ||
function resetOptions(optSet, reload = true) { | |||
// Alle (nicht 'Permanent') gesetzten Optionen entfernen... | // Alle (nicht 'Permanent') gesetzten Optionen entfernen... | ||
deleteOptions(optSet, true, false, ! reload); | |||
// ... und | if (reload) { | ||
// ... und Seite neu laden (mit "Werkseinstellungen")... | |||
window.location.reload(); | |||
} | |||
} | } | ||
Zeile 2.564: | Zeile 2.325: | ||
// type: Typ der Input-Felder (Default: unsichtbare Daten) | // type: Typ der Input-Felder (Default: unsichtbare Daten) | ||
// return Ergaenztes Form-Konstrukt | // return Ergaenztes Form-Konstrukt | ||
function addInputField(form, props, type = | function addInputField(form, props, type = "hidden") { | ||
for (let fieldName in props) { | for (let fieldName in props) { | ||
let field = form[fieldName]; | let field = form[fieldName]; | ||
if (! field) { | if (! field) { | ||
field = document.createElement( | field = document.createElement("input"); | ||
field.type = type; | field.type = type; | ||
field.name = fieldName; | field.name = fieldName; | ||
Zeile 2.584: | Zeile 2.345: | ||
// return Ergaenztes Form-Konstrukt | // return Ergaenztes Form-Konstrukt | ||
function addHiddenField(form, props) { | function addHiddenField(form, props) { | ||
return addInputField(form, props, | return addInputField(form, props, "hidden"); | ||
} | } | ||
Zeile 2.597: | Zeile 2.358: | ||
return obj.addEventListener(type, callback, capture); | return obj.addEventListener(type, callback, capture); | ||
} else if (obj.attachEvent) { | } else if (obj.attachEvent) { | ||
return obj.attachEvent( | return obj.attachEvent("on" + type, callback); | ||
} else { | } else { | ||
__LOG[ | __LOG[1]("Could not add " + type + " event:"); | ||
__LOG[2](callback); | __LOG[2](callback); | ||
Zeile 2.616: | Zeile 2.377: | ||
return obj.removeEventListener(type, callback, capture); | return obj.removeEventListener(type, callback, capture); | ||
} else if (obj.detachEvent) { | } else if (obj.detachEvent) { | ||
return obj.detachEvent( | return obj.detachEvent("on" + type, callback); | ||
} else { | } else { | ||
__LOG[ | __LOG[1]("Could not remove " + type + " event:"); | ||
__LOG[2](callback); | __LOG[2](callback); | ||
Zeile 2.655: | Zeile 2.416: | ||
// return Gesuchtes Element mit der lfd. Nummer index oder undefined (falls nicht gefunden) | // return Gesuchtes Element mit der lfd. Nummer index oder undefined (falls nicht gefunden) | ||
function getElement(name, index = 0, doc = document) { | function getElement(name, index = 0, doc = document) { | ||
const __TAGS = | const __TAGS = document.getElementsByName(name); | ||
const __TABLE = (__TAGS ? __TAGS[index] | const __TABLE = (__TAGS === undefined) ? undefined : __TAGS[index]; | ||
return __TABLE; | return __TABLE; | ||
Zeile 2.666: | Zeile 2.427: | ||
// doc: Dokument (document) | // doc: Dokument (document) | ||
// return Gesuchtes Element oder undefined (falls nicht gefunden) | // return Gesuchtes Element oder undefined (falls nicht gefunden) | ||
function getTable(index, tag = | function getTable(index, tag = "table", doc = document) { | ||
const __TAGS = | const __TAGS = document.getElementsByTagName(tag); | ||
const __TABLE = (__TAGS ? __TAGS[index] | const __TABLE = (__TAGS === undefined) ? undefined : __TAGS[index]; | ||
return __TABLE; | return __TABLE; | ||
} | } | ||
Zeile 2.690: | Zeile 2.439: | ||
// return Gesuchte Zeilen oder undefined (falls nicht gefunden) | // return Gesuchte Zeilen oder undefined (falls nicht gefunden) | ||
function getRows(index, doc = document) { | function getRows(index, doc = document) { | ||
const __TABLE = getTable(index, | const __TABLE = getTable(index, "table", doc); | ||
const __ROWS = (__TABLE ? __TABLE.rows | const __ROWS = (__TABLE === undefined) ? undefined : __TABLE.rows; | ||
return __ROWS; | return __ROWS; | ||
} | } | ||
// | // ==================== Abschnitt fuer Optionen auf der Seite ==================== | ||
// Liefert den Funktionsaufruf zur Option als String | |||
// Liefert den Funktionsaufruf zur Option als String | |||
// opt: Auszufuehrende Option | // opt: Auszufuehrende Option | ||
// isAlt: Angabe, ob AltAction statt Action gemeint ist | // isAlt: Angabe, ob AltAction statt Action gemeint ist | ||
Zeile 2.733: | Zeile 2.471: | ||
const __CONFIG = getOptConfig(opt); | const __CONFIG = getOptConfig(opt); | ||
const __SERIAL = getValue(serial, getValue(__CONFIG.Serial, false)); | const __SERIAL = getValue(serial, getValue(__CONFIG.Serial, false)); | ||
const __THISVAL = ((__CONFIG.ValType === | const __THISVAL = ((__CONFIG.ValType === "String") ? "'\\x22' + this.value + '\\x22'" : "this.value"); | ||
const __TVALUE = getValue(__CONFIG.ValType, __THISVAL, "new " + __CONFIG.ValType + '(' + __THISVAL + ')'); | const __TVALUE = getValue(__CONFIG.ValType, __THISVAL, "new " + __CONFIG.ValType + '(' + __THISVAL + ')'); | ||
const __VALSTR = ((value !== undefined) ? safeStringify(value) : __SERIAL ? "JSON.stringify(" + __TVALUE + ')' : __TVALUE); | const __VALSTR = ((value !== undefined) ? safeStringify(value) : __SERIAL ? "JSON.stringify(" + __TVALUE + ')' : __TVALUE); | ||
Zeile 2.762: | Zeile 2.500: | ||
// memory: __OPTMEM.normal = unbegrenzt gespeichert (localStorage), __OPTMEM.begrenzt = bis Browserende gespeichert (sessionStorage), __OPTMEM.inaktiv | // memory: __OPTMEM.normal = unbegrenzt gespeichert (localStorage), __OPTMEM.begrenzt = bis Browserende gespeichert (sessionStorage), __OPTMEM.inaktiv | ||
// return String mit dem (reinen) Funktionsaufruf | // return String mit dem (reinen) Funktionsaufruf | ||
function getFormActionEvent(opt, isAlt = false, value = undefined, type = | function getFormActionEvent(opt, isAlt = false, value = undefined, type = "click", serial = undefined, memory = undefined) { | ||
const __ACTION = getFormAction(opt, isAlt, value, serial, memory); | const __ACTION = getFormAction(opt, isAlt, value, serial, memory); | ||
return getValue(__ACTION, "", ' on' + type + '="' + __ACTION + '"'); | return getValue(__ACTION, "", ' on' + type + '="' + __ACTION + '"'); | ||
} | } | ||
Zeile 2.819: | Zeile 2.513: | ||
const __NAME = getOptName(opt); | const __NAME = getOptName(opt); | ||
const __VALUE = getOptValue(opt); | const __VALUE = getOptValue(opt); | ||
const __ACTION = getFormActionEvent(opt, false, undefined, | const __ACTION = getFormActionEvent(opt, false, undefined, "change", undefined); | ||
const __FORMLABEL = | const __FORMLABEL = getValue(__CONFIG.FormLabel, __CONFIG.Label); | ||
const __LABEL = '<label for="' + __NAME + '">' + __FORMLABEL + '</label>'; | const __LABEL = '<label for="' + __NAME + '">' + __FORMLABEL + '</label>'; | ||
let element = '<select name="' + __NAME + '" id="' + __NAME + '"' + __ACTION + '>'; | let element = '<select name="' + __NAME + '" id="' + __NAME + '"' + __ACTION + '>'; | ||
Zeile 2.835: | Zeile 2.528: | ||
element += '\n</select>'; | element += '\n</select>'; | ||
return | return __LABEL.replace('$', element); | ||
} | } | ||
Zeile 2.845: | Zeile 2.538: | ||
const __NAME = getOptName(opt); | const __NAME = getOptName(opt); | ||
const __VALUE = getOptValue(opt, false); | const __VALUE = getOptValue(opt, false); | ||
const __ACTION = getFormActionEvent(opt, false, true, | const __ACTION = getFormActionEvent(opt, false, true, "click", false); | ||
const __ALTACTION = getFormActionEvent(opt, true, false, | const __ALTACTION = getFormActionEvent(opt, true, false, "click", false); | ||
const __ELEMENTON = '<input type="radio" name="' + __NAME + | const __ELEMENTON = '<input type="radio" name="' + __NAME + | ||
'" id="' + __NAME + 'ON" value="1"' + | '" id="' + __NAME + 'ON" value="1"' + | ||
Zeile 2.861: | Zeile 2.550: | ||
' /><label for="' + __NAME + 'OFF">' + | ' /><label for="' + __NAME + 'OFF">' + | ||
__CONFIG.AltLabel + '</label>'; | __CONFIG.AltLabel + '</label>'; | ||
return | return [ __ELEMENTON, __ELEMENTOFF ]; | ||
} | } | ||
Zeile 2.877: | Zeile 2.561: | ||
const __NAME = getOptName(opt); | const __NAME = getOptName(opt); | ||
const __VALUE = getOptValue(opt, false); | const __VALUE = getOptValue(opt, false); | ||
const __ACTION = getFormActionEvent(opt, __VALUE, ! __VALUE, | const __ACTION = getFormActionEvent(opt, __VALUE, ! __VALUE, "click", false); | ||
const | const __FORMLABEL = getValue(__CONFIG.FormLabel, __CONFIG.Label); | ||
return | return '<input type="checkbox" name="' + __NAME + | ||
'" id="' + __NAME + '" value="' + __VALUE + '"' + | |||
(__VALUE ? ' CHECKED' : "") + __ACTION + ' /><label for="' + | |||
__NAME + '">' + __FORMLABEL + '</label>'; | |||
} | } | ||
Zeile 2.895: | Zeile 2.577: | ||
const __NAME = getOptName(opt); | const __NAME = getOptName(opt); | ||
const __VALUE = getOptValue(opt); | const __VALUE = getOptValue(opt); | ||
const __ACTION = getFormActionEvent(opt, false, undefined, | const __ACTION = getFormActionEvent(opt, false, undefined, "submit", undefined); | ||
const __SUBMIT = getValue(__CONFIG.Submit, ""); | const __SUBMIT = getValue(__CONFIG.Submit, ""); | ||
//const __ONSUBMIT = (__SUBMIT.length ? ' onKeyDown="' + __SUBMIT + '"': ""); | //const __ONSUBMIT = (__SUBMIT.length ? ' onKeyDown="' + __SUBMIT + '"': ""); | ||
const __ONSUBMIT = (__SUBMIT ? ' onKeyDown="' + __SUBMIT + '"': ""); | const __ONSUBMIT = (__SUBMIT ? ' onKeyDown="' + __SUBMIT + '"': ""); | ||
const __FORMLABEL = | const __FORMLABEL = getValue(__CONFIG.FormLabel, __CONFIG.Label); | ||
const __ELEMENTLABEL = '<label for="' + __NAME + '">' + __FORMLABEL + '</label>'; | const __ELEMENTLABEL = '<label for="' + __NAME + '">' + __FORMLABEL + '</label>'; | ||
const __ELEMENTTEXT = '<textarea name="' + __NAME + '" id="' + __NAME + '" cols="' + __CONFIG.Cols + | const __ELEMENTTEXT = '<textarea name="' + __NAME + '" id="' + __NAME + '" cols="' + __CONFIG.Cols + | ||
Zeile 2.906: | Zeile 2.587: | ||
safeStringify(__VALUE, __CONFIG.Replace, __CONFIG.Space) + '</textarea>'; | safeStringify(__VALUE, __CONFIG.Replace, __CONFIG.Space) + '</textarea>'; | ||
return [ | return [ __ELEMENTLABEL, __ELEMENTTEXT ]; | ||
} | } | ||
Zeile 2.916: | Zeile 2.597: | ||
const __NAME = getOptName(opt); | const __NAME = getOptName(opt); | ||
const __VALUE = getOptValue(opt, false); | const __VALUE = getOptValue(opt, false); | ||
const __ACTION = getFormActionEvent(opt, __VALUE, ! __VALUE, | const __ACTION = getFormActionEvent(opt, __VALUE, ! __VALUE, "click", false); | ||
const __BUTTONLABEL = (__VALUE ? | const __BUTTONLABEL = (__VALUE ? __CONFIG.AltLabel : __CONFIG.Label); | ||
const __FORMLABEL = | const __FORMLABEL = getValue(__CONFIG.FormLabel, __CONFIG.Label); | ||
return '<label for="' + __NAME + '">' + __FORMLABEL + '</label> | return '<label for="' + __NAME + '">' + __FORMLABEL + | ||
'</label><input type="button" name="' + __NAME + | |||
'" id="' + __NAME + '" value="' + __BUTTONLABEL + '"' + | |||
__ACTION + '/>'; | |||
} | } | ||
Zeile 2.954: | Zeile 2.634: | ||
} | } | ||
if ( | if (element.length === 2) { | ||
element = '<div>' + | element = '<div>' + element[0] + '<br />' + element[1] + '</div>'; | ||
} | } | ||
} | } | ||
return element; | return element; | ||
} | } | ||
Zeile 2.997: | Zeile 2.656: | ||
const __FORMBREAK = getValue(optParams.formBreak, __FORMWIDTH); | const __FORMBREAK = getValue(optParams.formBreak, __FORMWIDTH); | ||
const __SHOWFORM = getOptValue(optSet.showForm, true) ? optParams.showForm : { 'showForm' : true }; | const __SHOWFORM = getOptValue(optSet.showForm, true) ? optParams.showForm : { 'showForm' : true }; | ||
let form = __FORM; | let form = __FORM; | ||
let count = 0; // Bisher angezeigte Optionen | let count = 0; // Bisher angezeigte Optionen | ||
let column = 0; // Spalte der letzten Option (1-basierend) | let column = 0; // Spalte der letzten Option (1-basierend) | ||
for (let | for (let opt in optSet) { | ||
if (checkItem(opt, __SHOWFORM, optParams.hideForm)) { | |||
const __ELEMENT = getOptionElement(optSet[opt]); | |||
const __TDOPT = (~ __ELEMENT.indexOf('|')) ? "" : ' colspan="2"'; | |||
if (__ELEMENT) { | |||
if (++count > __FORMBREAK) { | |||
if (++column > __FORMWIDTH) { | |||
column = 1; | |||
} | } | ||
} | } | ||
if (column === 1) { | |||
form += '</tr><tr>'; | |||
} | |||
form += '\n<td' + __TDOPT + '>' + __ELEMENT.replace('|', '</td><td>') + '</td>'; | |||
} | } | ||
} | } | ||
Zeile 3.099: | Zeile 2.755: | ||
if (__PARAM !== undefined) { | if (__PARAM !== undefined) { | ||
// Klassifizierte Optionen umbenennen... | // Klassifizierte Optionen umbenennen... | ||
renameOptions(this.optSet, this.optSelect, __PARAM, this.renameFun); | |||
} | } | ||
}, | }, | ||
'deleteOptions' : function( | 'deleteOptions' : function() { | ||
return deleteOptions(this.optSet, this.optSelect, true, true); | |||
return deleteOptions(this.optSet, | |||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse Classification ==================== | // ==================== Ende Abschnitt fuer Klasse Classification ==================== | ||
Zeile 3.136: | Zeile 2.788: | ||
} | } | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse TeamClassification ==================== | // ==================== Ende Abschnitt fuer Klasse TeamClassification ==================== | ||
Zeile 3.161: | Zeile 2.813: | ||
'LgNr' : true | 'LgNr' : true | ||
} | } | ||
}); | } ); | ||
// ==================== Ende Abschnitt fuer Klasse Team ==================== | // ==================== Ende Abschnitt fuer Klasse Team ==================== | ||
// ==================== Spezialisierter Abschnitt fuer Optionen ==================== | // ==================== Spezialisierter Abschnitt fuer Optionen ==================== | ||
Zeile 3.213: | Zeile 2.837: | ||
addProps(myTeam, teamParams, myTeam.__TEAMITEMS); | addProps(myTeam, teamParams, myTeam.__TEAMITEMS); | ||
__LOG[2]("Ermittelt: " + safeStringify(myTeam)); | __LOG[2]("Ermittelt: " + safeStringify(myTeam)); | ||
// ... und abspeichern | // ... und abspeichern... | ||
setOpt(optSet.team, myTeam, false); | |||
} else { | } else { | ||
const __TEAM = | const __TEAM = getOptValue(optSet.team); // Gespeicherte Parameter | ||
if ((__TEAM !== undefined) && (__TEAM.Land !== undefined)) { | if ((__TEAM !== undefined) && (__TEAM.Land !== undefined)) { | ||
Zeile 3.224: | Zeile 2.846: | ||
__LOG[2]("Gespeichert: " + safeStringify(myTeam)); | __LOG[2]("Gespeichert: " + safeStringify(myTeam)); | ||
} else { | } else { | ||
__LOG[ | __LOG[1]("Unbekannt: " + safeStringify(__TEAM)); | ||
} | } | ||
} | } | ||
//return ((myTeam.length > 0) ? myTeam : undefined); | |||
return myTeam; | return myTeam; | ||
} | } | ||
Zeile 3.242: | Zeile 2.865: | ||
// 'formWidth': Anzahl der Elemente pro Zeile | // 'formWidth': Anzahl der Elemente pro Zeile | ||
// 'formBreak': Elementnummer des ersten Zeilenumbruchs | // 'formBreak': Elementnummer des ersten Zeilenumbruchs | ||
// return | // return Gefuelltes Objekt mit den gesetzten Optionen | ||
function buildOptions(optConfig, optSet = undefined, optParams = { 'hideMenu' : false }) { | function buildOptions(optConfig, optSet = undefined, optParams = { 'hideMenu' : false }) { | ||
// Klassifikation ueber Land und Liga des Teams... | // Klassifikation ueber Land und Liga des Teams... | ||
Zeile 3.248: | Zeile 2.871: | ||
__TEAMCLASS.teamParams = optParams.teamParams; // Ermittelte Parameter | __TEAMCLASS.teamParams = optParams.teamParams; // Ermittelte Parameter | ||
optSet = startOptions(optConfig, optSet); | |||
showOptions(optSet, optParams); | |||
return optSet; | |||
} | } | ||
Zeile 3.257: | Zeile 2.882: | ||
// ==================== Abschnitt fuer interne IDs auf den Seiten ==================== | // ==================== Abschnitt fuer interne IDs auf den Seiten ==================== | ||
const | const __GAMETYPES = { // "Blind FSS gesucht!" | ||
'unbekannt' : -1, | 'unbekannt' : -1, | ||
"reserviert" : 0, | |||
"Frei" : 0, | |||
"spielfrei" : 0, | |||
"Friendly" : 1, | |||
"Liga" : 2, | |||
"LP" : 3, | |||
"OSEQ" : 4, | |||
"OSE" : 5, | |||
"OSCQ" : 6, | |||
"OSC" : 7 | |||
}; | }; | ||
const __LIGANRN = { | const __LIGANRN = { | ||
Zeile 3.298: | Zeile 2.906: | ||
'3. Liga D' : 7 | '3. Liga D' : 7 | ||
}; | }; | ||
const __LANDNRN = { | const __LANDNRN = { | ||
Zeile 3.355: | Zeile 2.962: | ||
'Zypern' : 38 | 'Zypern' : 38 | ||
}; | }; | ||
// ==================== Abschnitt fuer Daten des Spielplans ==================== | // ==================== Abschnitt fuer Daten des Spielplans ==================== | ||
// Gibt die ID fuer den Namen eines Wettbewerbs zurueck | // Gibt die ID fuer den Namen eines Wettbewerbs zurueck | ||
// gameType: Name des Wettbewerbs eines Spiels | // gameType: Name des Wettbewerbs eines Spiels | ||
// return OS2-ID fuer den Spieltyp (1 bis 7), 0 fuer spielfrei/Frei/reserviert, -1 fuer ungueltig | |||
// return OS2-ID fuer den Spieltyp (1 bis 7 | function getGameTypeID(gameType) { | ||
function getGameTypeID(gameType | return getValue(__GAMETYPES[gameType], __GAMETYPES.unbekannt); | ||
return getValue( | } | ||
} | |||
// Gibt die ID des Landes mit dem uebergebenen Namen zurueck. | |||
// Gibt | // land: Name des Landes | ||
// | // return OS2-ID des Landes, 0 fuer ungueltig | ||
function getLandNr(land) { | |||
return getValue(__LANDNRN[land], __LANDNRN.unbekannt); | |||
function | } | ||
return getValue( | |||
} | // Gibt die ID der Liga mit dem uebergebenen Namen zurueck. | ||
// land: Name der Liga | |||
// Gibt | // return OS2-ID der Liga, 0 fuer ungueltig | ||
// | function getLigaNr(liga) { | ||
// return | return getValue(__LIGANRN[liga], __LIGANRN.unbekannt); | ||
function | } | ||
return getValue( | |||
} | // ==================== Hauptprogramm ==================== | ||
// | // Verarbeitet eine Ergebnis-Ansicht | ||
function procErgebnisse() { | |||
// | buildOptions(__OPTCONFIG, __OPTSET, { | ||
'menuAnchor' : getTable(0, "div"), | |||
function | 'formWidth' : 2 | ||
}); | |||
} | |||
// | // Aktiviere Checkbox "Ergebnisse anzeigen" je nach Einstellung der Option | ||
getTable(0, "input").checked = getOptValue(__OPTSET.showErgs); | |||
} | } | ||
try { | |||
procErgebnisse(); | |||
} catch (ex) { | |||
showAlert('[' + ex.lineNumber + "] " + __DBMOD.Name, ex.message, ex); | |||
} finally { | |||
__LOG[2]("SCRIPT END"); | |||
} | } | ||
// *** EOF *** | // *** EOF *** | ||
</pre> | </pre> |