Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
/* Framework für Remote Procedure Calls in JavaScript, Dokumentation unter [[Benutzer:Schnark/js/rpc]] <nowiki>
Beispiel:
Datei mit Definitionen
mw.libs.rpc.define('eineFunktion', function (param1, param2) {
//...
return mw.libs.rpc.ret(rueckgabe); //oder direkt ein $.Deferred().promise()
});
Aufrufendes Skript
mw.libs.rpc.register('eineFunktion', 'URL oder Seitenname jener Datei von oben');
var eineFunktion = mw.libs.rpc.stub('eineFunktion');
eineFunktion(1, 2).then(function (ergebnis) {
//...
}, function () {
//da ging etwas schief
});
//oder direkt
mw.libs.rpc.call('eineFunktion', 1, 2).then(function (ergebnis) {
});
mw.libs.rpc.exists('eineFunktion') //hoffentlich true
mw.libs.rpc.preload('eineFunktion'); //falls wir sicher sind, dass wir sie brauchen und die Datei gleich laden wollen
*/
/*global mediaWiki*/
(function ($, mw, libs) {
"use strict";
var queue = {}, functions = {}, loadedFiles = {}, slice = Array.prototype.slice;
function register (f, url) {
if (f in functions) {
return false;
}
functions[f] = url;
return true;
}
function load (url) {
if (!(/(https?:)?\/\//).test(url)) {
url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' +
encodeURIComponent(url.replace(/ /g, '_')).replace(/%2F/ig, '/').replace(/%3A/ig, ':') +
'&action=raw&ctype=text/javascript';
}
if (loadedFiles[url]) {
return;
}
mw.loader.load(url);
loadedFiles[url] = true;
}
function preload (f) {
if (!(f in functions)) {
return false;
}
if (typeof functions[f] === 'string') {
load(functions[f]);
}
return true;
}
function define (f, ff) {
if (typeof functions[f] === 'function') {
return false;
}
functions[f] = ff;
runQueue(f);
return true;
}
function exists (f) {
return f in functions;
}
function ret (r) {
return $.Deferred().resolve(r).promise();
}
function stub (f) {
return function () {
var args = slice.call(arguments, 0);
args.unshift(f);
return call.apply(null, args);
};
}
function call (f) {
var args = slice.call(arguments, 1);
if (!(f in functions)) {
return $.Deferred().reject('missing').promise();
}
if (typeof functions[f] === 'function') {
return functions[f].apply(null, args);
}
return pushQueue(f, args);
}
function pushQueue (f, args) {
var d = $.Deferred();
if (!(f in queue)) {
preload(f);
queue[f] = [];
}
queue[f].push([args, d]);
timeout(d);
return d.promise();
}
function runQueue (f) {
var i, d;
if (!(f in queue)) {
return;
}
for (i = 0; i < queue[f].length; i++) {
d = queue[f][i][1];
if (d.state() === 'rejected') {
continue;
}
functions[f].apply(null, queue[f][i][0]).then(d.resolve, d.reject);
}
delete queue[f];
}
function timeout (d) {
var id = setTimeout(function () {
d.reject('timeout');
}, libs.rpc.timeout);
d.always(function () {
clearTimeout(id);
});
}
libs.rpc = {
version: 1.2,
register: register,
define: define,
preload: preload,
exists: exists,
call: call,
stub: stub,
ret: ret,
timeout: 5000
};
})(jQuery, mediaWiki, mediaWiki.libs);
//</nowiki>