MediaWiki:Skin/Adventure/Stateful.js: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
J* (Diskussion | Beiträge) (AZ: Die Seite wurde neu angelegt.) |
J* (Diskussion | Beiträge) K |
||
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
/** | /** | ||
− | * | + | * Stellt Statusfeatures für das Adventure bereit (noch experimentell). |
+ | * | ||
+ | * URL-Parameter, die mit "_adv_" anfangen, werden per Javascript quer durchs Adventure mitgeschleift, | ||
+ | * solange bis sie auf leer gesetzt werden. | ||
+ | * Wie alle URL-Parameter können sie mit #arg ausgelesenen und verarbeitet werden. | ||
+ | * | ||
+ | * Okay, jetzt nochmal, was soll das alles? | ||
+ | * | ||
+ | * - Klassisches Weiterschreiben: Link auf einer Seite ergänzen oder ähnliche Seite erstellen | ||
+ | * - ermöglicht neue Handlungen direkt vor Ort | ||
+ | * - Handlungen beeinflussen Situation nur direkt vor Ort | ||
+ | * | ||
+ | * - Weiterschreiben mit Statusfeatures: Statusparameter an Links anfügen | ||
+ | * - ermöglicht neue Handlungen an anderen Orten | ||
+ | * - Handlungen beeinflussen Situation beliebigen Orten | ||
+ | * | ||
+ | * Statusparameter-Links sehen so aus: | ||
+ | * [http://kamelopedia.mormo.org/index.php/Projekt:Adventure/x?_adv_k=v] | ||
+ | * (ersetze: x -> Zielseitennummer, k -> Key, v -> Value; zum Leersetzen v einfach weglassen) | ||
+ | * | ||
+ | * Abfrage: | ||
+ | * {{#arg:_adv_k}} | ||
+ | * (ersetze: k -> Key) | ||
+ | * | ||
+ | * Todo: | ||
+ | * - Übersichtsseite über verwendete Statusfeatures / Keys (für Autoren, zur Kollisionsvermeidung) | ||
+ | * | ||
+ | * Bekannte Bugs: | ||
+ | * - Tod führt nicht zu einem Reset der Stati | ||
*/ | */ | ||
Zeile 8: | Zeile 36: | ||
this.update = function(args) { | this.update = function(args) { | ||
for (var i in args) | for (var i in args) | ||
− | this.args[i] = args[i]; | + | if (args[i] == "") |
+ | delete this.args[i]; | ||
+ | else | ||
+ | this.args[i] = args[i]; | ||
} | } | ||
Zeile 42: | Zeile 73: | ||
for (var i in pairs) { | for (var i in pairs) { | ||
var kvs = pairs[i].split("="); | var kvs = pairs[i].split("="); | ||
− | if (!advOnly || kvs[0].substr(0,1) == "_") | + | if (kvs.length > 1 && (!advOnly || kvs[0].substr(0,1) == "_")) |
this.args[kvs[0]] = kvs[1]; | this.args[kvs[0]] = kvs[1]; | ||
} | } | ||
Zeile 52: | Zeile 83: | ||
addOnloadHook(function () { | addOnloadHook(function () { | ||
− | $( | + | $('#bodyContent a[href*="Adventure/"]').not(".new").each(function (a,b) { |
keepState(b); | keepState(b); | ||
}); | }); | ||
}); | }); |
Aktuelle Version vom 16. September 2012, 19:21 Uhr
/**
* Stellt Statusfeatures für das Adventure bereit (noch experimentell).
*
* URL-Parameter, die mit "_adv_" anfangen, werden per Javascript quer durchs Adventure mitgeschleift,
* solange bis sie auf leer gesetzt werden.
* Wie alle URL-Parameter können sie mit #arg ausgelesenen und verarbeitet werden.
*
* Okay, jetzt nochmal, was soll das alles?
*
* - Klassisches Weiterschreiben: Link auf einer Seite ergänzen oder ähnliche Seite erstellen
* - ermöglicht neue Handlungen direkt vor Ort
* - Handlungen beeinflussen Situation nur direkt vor Ort
*
* - Weiterschreiben mit Statusfeatures: Statusparameter an Links anfügen
* - ermöglicht neue Handlungen an anderen Orten
* - Handlungen beeinflussen Situation beliebigen Orten
*
* Statusparameter-Links sehen so aus:
* [http://kamelopedia.mormo.org/index.php/Projekt:Adventure/x?_adv_k=v]
* (ersetze: x -> Zielseitennummer, k -> Key, v -> Value; zum Leersetzen v einfach weglassen)
*
* Abfrage:
* {{#arg:_adv_k}}
* (ersetze: k -> Key)
*
* Todo:
* - Übersichtsseite über verwendete Statusfeatures / Keys (für Autoren, zur Kollisionsvermeidung)
*
* Bekannte Bugs:
* - Tod führt nicht zu einem Reset der Stati
*/
function UrlArgs(url, advOnly){
this.args = {};
this.update = function(args) {
for (var i in args)
if (args[i] == "")
delete this.args[i];
else
this.args[i] = args[i];
}
this.serialize = function(){
var s = "";
for (var i in this.args)
s += "&" + i + "=" + this.args[i];
return s.substr(1);
}
this.keep = function() {
var other = new UrlArgs(location.href, true);
other.update(this.args);
var s = other.serialize();
return this.base + (s ? "?"+s : "") + this.anchor;
}
this.base = /^[^?#]+/.exec(url)[0];
var anchor = /#(.+)/.exec(url);
if (anchor == null)
this.anchor = "";
else
this.anchor = anchor[0];
var script = /\?([^#]+)/.exec(url);
if (script == null)
return;
var pairs = script[1].split("&");
for (var i in pairs) {
var kvs = pairs[i].split("=");
if (kvs.length > 1 && (!advOnly || kvs[0].substr(0,1) == "_"))
this.args[kvs[0]] = kvs[1];
}
}
function keepState(link) {
link.href = new UrlArgs(link.href).keep();
}
addOnloadHook(function () {
$('#bodyContent a[href*="Adventure/"]').not(".new").each(function (a,b) {
keepState(b);
});
});