„Benutzer:Codeispoetry/helperFunctions.js“ – Versionsunterschied
Erscheinungsbild
Inhalt gelöscht Inhalt hinzugefügt
K typo |
nach Benutzer:Codeispoetry/supportFuncs.js ausgelagert |
||
Zeile 280: | Zeile 280: | ||
return lemma; |
return lemma; |
||
} |
} |
||
function nextItem (category, namespace) { |
|||
var cmstart = UrlParameters['cmstart']; |
|||
if (!cmstart) { |
|||
var cookie = Cookie.read('cmstart'); |
|||
if (cookie) cookie = cookie.match(/(.+)\/\/(.+)/); |
|||
if (cookie && cookie[1] == category) cmstart = cookie[2]; |
|||
} |
|||
var scriptElem = document.createElement('script'); |
|||
var url = '/w/api.php?action=query&list=categorymembers&cmtitle=Category:' + category + '&cmsort=timestamp&cmdir=asc&cmlimit=1&cmprop=title&format=json&callback=gotNextItem'; |
|||
if (cmstart) url += '&cmstart=' + cmstart; |
|||
if (namespace != undefined) url += '&cmnamespace=' + namespace; |
|||
scriptElem.setAttribute('src', url); |
|||
scriptElem.setAttribute('type','text/javascript'); |
|||
Cookie.create('cmstart', category, '0.1'); |
|||
document.getElementsByTagName('head')[0].appendChild(scriptElem); |
|||
} |
|||
function gotNextItem(obj) { |
|||
if(!obj['query'] || !obj['query']['categorymembers'] || !obj['query']['categorymembers'][0]) return |
|||
var url = '/w/index.php?title=' + encodeURIComponent(obj['query']['categorymembers'][0]['title']); |
|||
if (obj['query-continue'] && obj['query-continue']['categorymembers']) |
|||
url += '&cmstart=' + encodeURIComponent(obj['query-continue']['categorymembers']['cmstart']); |
|||
Cookie.create('cmstart', Cookie.read('cmstart') + '//' + obj['query-continue']['categorymembers']['cmstart'], '0.1'); |
|||
location.href = url; |
|||
} |
|||
function newRequest() { |
|||
try { |
|||
if (window.XMLHttpRequest) { |
|||
return new XMLHttpRequest(); |
|||
} else { |
|||
return new ActiveXObject("MSXML2.XMLHTTP"); |
|||
} |
|||
} catch (e) { |
|||
return false; |
|||
} |
|||
} |
|||
Cookie = { |
|||
create: function (name, value, days) { |
|||
var expires = ""; |
|||
if (days) { |
|||
var date = new Date(); |
|||
date.setTime(date.getTime()+(days*24*60*60*1000)); |
|||
expires = '; expires=' + date.toGMTString(); |
|||
} |
|||
document.cookie = name + "=" + value + expires + "; path=/"; |
|||
}, |
|||
read: function (name) { |
|||
var nameEQ = name + "="; |
|||
var ca = document.cookie.split(';'); |
|||
for(var i=0;i < ca.length;i++) { |
|||
var c = ca[i]; |
|||
while (c.charAt(0)==' ') c = c.substring(1,c.length); |
|||
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); |
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
/** simple ajax helper */ |
|||
Ajax = { |
|||
/** GET from an URL, calls the okFunc if successful */ |
|||
get: function(url, params, okFunc, xml) { |
|||
var getURL = url |
|||
+ (url.indexOf("?") == -1 ? "?" : "&") |
|||
+ this.urlEncode(params, false); |
|||
var client = newRequest(); |
|||
client.open("GET", getURL, true); |
|||
if (xml && client.overrideMimeType) |
|||
client.overrideMimeType('text/xml'); |
|||
client.onreadystatechange = function() { |
|||
if (client.readyState != 4) return; |
|||
okFunc(client); |
|||
} |
|||
client.send(null); |
|||
}, |
|||
/** POST to an URL, calls the okFunc if successful */ |
|||
post: function(url, params, okFunc) { |
|||
var postBody = this.urlEncode(params, true); |
|||
var client = newRequest(); |
|||
client.open("POST", url, true); |
|||
client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); |
|||
client.onreadystatechange = function() { |
|||
if (client.readyState != 4) return; |
|||
okFunc(client); |
|||
} |
|||
client.send(postBody); |
|||
}, |
|||
/** encodes a Map or Pair-Array into a query string, optionally for use with application/x-www-form-urlencoded */ |
|||
urlEncode: function(params, form) { |
|||
if (!params) params = []; |
|||
else if (params.constructor != Array) params = this.mapToPairs(params); |
|||
var encodeComponent = form ? this.encodeFormValue : encodeURIComponent; |
|||
function encodePair(pair) { return pair.map(encodeComponent).join("="); } |
|||
return params.map(encodePair).join("&"); |
|||
}, |
|||
/** encodes a single value for application/x-www-form-urlencoded */ |
|||
encodeFormValue: function(value) { |
|||
return encodeURIComponent(value |
|||
.replace(/\r\n|\n|\r/g, "\r\n")) |
|||
.replace(/(^|[^%])(%%)*%20/g, "$1$2+"); |
|||
}, |
|||
/** convert a map into an Array for 2-element Arrays */ |
|||
mapToPairs: function(params) { |
|||
var out = []; |
|||
for (key in params) { |
|||
var val = params[key]; |
|||
if (val === null) continue; |
|||
if (val === false) continue; |
|||
if (val === true) val = "1"; |
|||
val = val.toString(); |
|||
out.push([ key, val ]); |
|||
} |
|||
return out; |
|||
}, |
|||
/** parse XML and XHTML content */ |
|||
parseXML: function(text) { |
|||
var xml = new DOMParser().parseFromString(text, "text/xml"); |
|||
var doc = xml.documentElement; |
|||
if (doc.tagName == "parserError") throw "XML parser error: " + doc.textContent; |
|||
return xml; |
|||
} |
|||
}; |
|||
function newtext (subj,text,wo) |
function newtext (subj,text,wo) |
||
Zeile 438: | Zeile 305: | ||
} |
} |
||
insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText)) |
insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText)) |
||
} |
|||
function editPage(title, section, formChangeFunc, finishedFunc) { |
|||
var args = { |
|||
title: title, |
|||
action: "edit", |
|||
section: section |
|||
}; |
|||
Ajax.get(wgScript, args, function(client) { |
|||
if (client.status != 200) throw "expected status 200, got: " + client.status; |
|||
// fetch editform |
|||
var xml = Ajax.parseXML(client.responseText); |
|||
var editform = xml.getElementById("editform"); |
|||
if (!editform) throw "editform not found"; |
|||
// extract editform |
|||
var action = editform.action; |
|||
var formData = { |
|||
wpTextbox1: editform.elements["wpTextbox1"].value, |
|||
wpSummary: editform.elements["wpSummary"].value, |
|||
wpMinoredit: editform.elements["wpMinoredit"].checked, |
|||
wpWatchthis: editform.elements["wpWatchthis"].checked, |
|||
wpSection: editform.elements["wpSection"].value, |
|||
wpEdittime: editform.elements["wpEdittime"].value, |
|||
wpEditToken: editform.elements["wpEditToken"].value, |
|||
wpStarttime: editform.elements["wpStarttime"].value, |
|||
wpScrolltop: editform.elements["wpScrolltop"].value, |
|||
wpAutoSummary: editform.elements["wpAutoSummary"].value, |
|||
wpSave: false, |
|||
wpPreview: false, |
|||
wpDiff: false |
|||
}; |
|||
// change editform |
|||
var save = formChangeFunc(formData); |
|||
if (!save) return; |
|||
// store editform |
|||
Ajax.post(action, formData, function(client) { |
|||
if (client.status != 200) throw "expected status 200, got: " + client.status; |
|||
if (finishedFunc) finishedFunc(client.responseText); |
|||
}); |
|||
}); |
|||
} |
|||
function displayBoxPage (title) { |
|||
var req = newRequest(); |
|||
if (!req) { |
|||
jsMsg('Fehlgeschlagen!', 'display'); |
|||
return; |
|||
} |
|||
req.open('GET', title, true); |
|||
req.onreadystatechange = function() { |
|||
if(req.readyState == 4) |
|||
var content_html = req.responseText.match(/<!-- start content -->([\s\S]+)<!-- (end content|NewPP limit report)/m); |
|||
if (!(content_html && jsMsg(content_html[1], 'display'))) { // Box bauen, sonst |
|||
if (req.responseXML == 'null') { // Seiteninhalt ersetzen, und zwar als Text |
|||
var newMatch = req.responseText.match(/(<a\s*name="top"\s*id="top">\s*<\/a>.+)<\/div>\s*<div\s*id="column-one">/); |
|||
if (newMatch) |
|||
document.getElementById('content').innerHTML = newMatch[1]; |
|||
} |
|||
else { // oder DOM |
|||
var content = req.responseXML.getElementById('content'); |
|||
if (content) |
|||
document.getElementById('content').parentNode.replaceChild(content, document.getElementById('content')); |
|||
} |
|||
} |
|||
} |
|||
req.send(null); |
|||
} |
|||
function newActionBar (id) { |
|||
var bar = document.createElement('DIV'); |
|||
bar.style.textAlign = 'center'; |
|||
bar.style.width = '100%'; |
|||
bar.id = id; |
|||
bar.addLink = function (caption, title, href, onclick) { |
|||
var link = document.createElement('a'); |
|||
if (href != '') link.href = href; |
|||
if (typeof onclick != 'undefined') { |
|||
link.setAttribute('onclick', onclick); |
|||
link.style.cursor = 'pointer'; |
|||
} |
|||
link.innerHTML = caption; |
|||
link.title = title; |
|||
this.appendChild(link); |
|||
this.appendChild(document.createTextNode(' ')); |
|||
} |
|||
return bar; |
|||
} |
} |
||
Aktuelle Version vom 30. Mai 2008, 09:38 Uhr
// helperFunctions.js:
// enthält obligatorische Hilfsfunktionen für [[Benutzer:PDD/monobook.js]]
// <nowiki>
if (typeof(drawquickbar) == 'undefined')
var drawquickbar = true;
////////////////////////////////////////////////////////////////////////////////////////
// URI-Parameter für fillActionPage(), benutzt in eintragen.js, hinweise.js
// außerdem in addEditAndRevertLinks.js (nur subjp, minorp, speichernp)
// nur in [[Benutzer:Euku/markErledigt.js]] : subjaddp
var subjp = "subj"; // Subject
var subjaddp = "subjadd"; // Subject zum Ranhängen
var textp = "txt"; // Für Text-Austausch
var insp = "ins"; // Vor dem Text einfügen
var addp = "add"; // an Text anhängen
var minorp = "minor"; // (k)leine Änderung
var speichernp = "speichern"; // Auf "Speichern" klicken
var nocreatep = "nocreate"; // beim Eintragen keine neue Seite generieren
////////////////////////////////////////////////////////////////////////////////////////
// URI-Parameter für setReload() und doReload()
var reloadme = "neuladen"; // merker für reload
////////////////////////////////////////////////////////////////////////////////////////
// absenden()
// aufgerufen aus fillActionPage() und hinweis() in hinweise.js
function absenden() {
if (!debugme)
document.editform.wpSave.click();
else
alert ('Speichern');
}
////////////////////////////////////////////////////////////////////////////////////////
// fillActionPage() (früher aktion(), ganz früher loeschkandidat() )
// von Littl, ergänzt von Revvar
//
// Entnimmt Parameter aus der URI, fügt sie in die Textfelder ein und klickt ggf. auf "Speichern"
// (die aufgerufene Seite ist dabei immer im Editmodus)
function fillActionPage() {
// wenn Bausteineinfügung am Anfang:
// nur einfügen, wenn Seite noch nicht gelöscht
var pagedeleted = false;
if (document.getElementById("newarticletext"))
pagedeleted = true;
// nur einfügen, wenn noch nicht eingetragen
// der URI-Aktionsparameter ist immer entweder insp oder textp oder addp, daher else
var doubleinsert = false;
if (UrlParameters[textp] > "")
doubleinsert = findDoubleEntry(UrlParameters[textp], document.editform.wpTextbox1.value);
else if (UrlParameters[insp] > "")
doubleinsert = findDoubleEntry(UrlParameters[insp], document.editform.wpTextbox1.value);
else if (UrlParameters[addp] > "")
doubleinsert = findDoubleEntry(UrlParameters[addp], document.editform.wpTextbox1.value);
// Textfeld ausfüllen
if (UrlParameters[textp] > "") {
if (doubleinsert)
document.editform.wpTextbox1.value = UrlParameters[textp] + document.editform.wpTextbox1.value;
else
document.editform.wpTextbox1.value = UrlParameters[textp];
} else if (UrlParameters[insp] > "") {
document.editform.wpTextbox1.value = UrlParameters[insp] + document.editform.wpTextbox1.value;
} else if (UrlParameters[addp] > "") {
document.editform.wpTextbox1.value = document.editform.wpTextbox1.value + UrlParameters[addp];
}
// weitere Felder ausfüllen
if (UrlParameters[subjp] > "")
document.editform.wpSummary.value = UrlParameters[subjp];
if (UrlParameters[minorp] == "1")
document.editform.wpMinoredit.checked=true;
// wenn Textbaustein doppelt: Warnung
if (doubleinsert)
alert("Artikel enthält den gewählten Baustein bereits!");
// wenn Seite schon gelöscht: Warnung
else if (pagedeleted && (UrlParameters[nocreatep] == "1"))
alert("Artikel wurde bereits gelöscht!");
// wenn autosave eingeschaltet: Seite speichern
else if (UrlParameters[speichernp] == "1")
absenden();
}
if ( ( (isEdit) && (!isSpecial) ) || ((UrlParameters["ins"] > "") && (wgUserName == 'TheWolf')) || ((location.href.substring(location.href.indexOf("/wiki/")).search(/\d+\.\d+\.\d+\.\d+/) != -1) && (location.href.substring(location.href.indexOf("/wiki/")).search(/protect/) == -1)) ) addOnloadHook(fillActionPage);
////////////////////////////////////////////////////////////////////////////////////////
// findDoubleEntry()
// aufgerufen aus fillActionPage()
function findDoubleEntry(baustein, artikeltext) {
var doublette = false;
// wenn keine Vorlage enthalten: Abbruch
if (baustein == baustein.split("{{")[0]) return (doublette);
var chkbaustein = baustein.split("{{")[1].split("}}")[0].split("|")[0];
chkbaustein = "{{" + chkbaustein ;
if (navigator.userAgent.indexOf("Opera") == -1) {
// checking
// Zeilen wie die nächste generieren Fehler mit Opera, daher diesen Bereich auskommentiert
// Fehler: RegExp.prototype.compile: syntax error in pattern or string
// mit Firefox2 und IE7 geht das problemlos, hmm
if (artikeltext.search(chkbaustein) != -1)
doublette = true;
// Kleinschreibung & SLA & substs
if (chkbaustein == "{{Löschen") {
if (artikeltext.search("{{löschen") != -1)
doublette = true;
if (artikeltext.search("{{SLA") != -1)
doublette = true;
}
if (chkbaustein == "{{subst:Löschantrag") {
if (artikeltext.search("{{Löschantragstext") != -1)
doublette = true;
}
if (chkbaustein == "{{subst:Qualitätssicherung") {
if (artikeltext.search("{{QS-Antrag") != -1)
doublette = true;
}
} // end of Opera hack
return (doublette);
}
////////////////////////////////////////////////////////////////////////////////////////
// initQuickbar()
// positioniert den Quickbar
function initQuickbar() {
// Variables that could be defined in your monobook
if (typeof(keeplogo) == 'undefined')
keeplogo = false;
if (typeof(releasequickbar) == 'undefined')
releasequickbar = false;
var quickbarpos = "fixed";
// IE6- kann kein position:fixed und hat demzufolge Pech
if ( navigator.userAgent.indexOf("MSIE") > -1 )
quickbarpos = "absolute";
// IE7 und als MSIE maskiertes Opera 8/9: können position:fixed
if (( navigator.userAgent.indexOf("MSIE 7") > -1 ) || ( navigator.userAgent.indexOf("Opera") > -1 ))
quickbarpos = "fixed";
if (!keeplogo) {
// logo ausblenden (revvar)
document.getElementById("p-logo").style.visibility = "hidden";
// padding in column-one (platz für quickbar)
document.getElementById("column-one").style.paddingTop =
(10+document.getElementById("p-quickbar").clientHeight)+"px";
}
if (!releasequickbar) {
document.getElementById("p-quickbar").style.position = quickbarpos;
}
}
if (drawquickbar) addOnloadHook(initQuickbar);
////////////////////////////////////////////////////////////////////////////////////////
// doReload()
// setzt nach Reload die Reload-Selection wieder
function doReload() {
if (UrlParameters[reloadme] == "1") {
document.getElementById('reloadme').checked=true;
setReload();
}
}
if (!isEdit) addOnloadHook(doReload);
////////////////////////////////////////////////////////////////////////////////////////
// setReload()
// aufgerufen, wenn im Quickbar die Reload-Selection gesetzt wird
var timeoutaktiv;
function setReload() {
if (document.getElementById('reloadme').checked && (UrlParameters[reloadme] != "1")) {
var uri = (document.URL.indexOf('?') >0) ? ('&' + reloadme + '=1') : ('?' + reloadme + '=1');
timeoutaktiv = window.setTimeout(location.href=location.href+uri, timeout);
}
else if (document.getElementById('reloadme').checked && (UrlParameters[reloadme] == "1")) {
timeoutaktiv=window.setTimeout("location.reload()", timeout);
}
else {
window.clearTimeout(timeoutaktiv); // bizarr, timeoutaktiv ist hier gar nicht belegt?
}
}
////////////////////////////////////////////////////////////////////////////////////////
// checkAllDeletedVersions()
// alle Checkboxen auswählen, für Versionenwiederherstellung ([[Spezial:Wiederherstellen]])
// Idee: Poupou
// Autoren: BLueFiSH.as, Schwalbe (ursprünglich als "TaggAll()")
// Neue Version ohne JS-Errors: PDD
function revAllDeletedVersions() {
var inputobject = document.getElementsByTagName("input");
for (var i=3; i<inputobject.length; i++)
inputobject[i].checked = !inputobject[i].checked;
}
/*
* Stringlänge überprüfen für Zusammenfassungszeile
*/
function EditCommentLength(str) {
return (199-str.length);
}
////////////////////////////////////////////////////////////////////////////////////////
// undate()
// von [[Benutzer:D]]
// entlinkt verlinkte Daten
function undate() {
document.editform.wpTextbox1.value = document.editform.wpTextbox1.value.replace(/\[\[\s*(\d+(er)?( v. Chr.)?)\s*\]\]/g, "$1")
.replace(/\[\[\s*(\d+\. (Jahrhundert|Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\s*\]\]/g, "$1");
document.editform.wpDiff.click();
}
////////////////////////////////////////////////////////////////////////////////////////
// insertAfter()
// neuen Node nach einem referenceNode einfügen
function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling);
}
////////////////////////////////////////////////////////////////////////////////////////
// trim()
// Leerzeichen am Anfang und Ende entfernen
function trim(str) {
return str.replace(/^\s*|\s*$/g,"");
}
//
// Funktion nowcomm()
// Trägt NowCommons-Baustein ein
// (aufgerufen aus der monobook.js)
//
function nowcomm() {
var lemma = getLemma();
if (lemma.substring(0, 5) == "Bild:") lemma=lemma.slice(5);
var lemmaneu = prompt('Neuer Dateiname',lemma);
if (lemmaneu != null )
newtext('NowCommons','\{\{NowCommons|' + lemmaneu +'}}',3);
}
//
// Helper-Funktion getLemma()
// extrahiert Lemma, entfernt "Bild:" und "Kategorie:"
// (aufgerufen von eintragen() aus der eintragen.js, nowcomm() )
//
function getLemma () { //Littl
var lemma;
if ((isContrib) && ( UrlParameters["target"] > "" ))
lemma = UrlParameters["target"];
else if ( UrlParameters["title"] > "" )
lemma = UrlParameters["title"];
else {
lemma = decodeURIComponent(location.href.substring(location.href.indexOf("/wiki/") + 6)).split('#')[0];
// fix linky links (?redirect=no)
//lemma = lemma.split['\x3F'][0];
if (lemma.indexOf("redirect=no")!=-1)
lemma=lemma.substring(0,lemma.indexOf("redirect=no")-1);
}
// if (lemma.substring(0, 5) == "Bild:") lemma=lemma.slice(5);
// if (lemma.substring(0, 10) == "Kategorie:") lemma=lemma.slice(10);
if (isPHP) lemma=lemma.split('+').join('_');
return lemma;
}
function newtext (subj,text,wo)
{ //wo=1 : Text austauschen
//wo=2 : Text am Ende anhängen
//wo=3 : Text vorne Einfügen
if (subj > "") {
if (document.editform.wpSummary.value > "") document.editform.wpSummary.value += ", ";
document.editform.wpSummary.value = document.editform.wpSummary.value + subj;
}
switch (wo) {
case 1 : document.editform.wpTextbox1.value=text+'\n'; break;
case 2 : document.editform.wpTextbox1.value=document.editform.wpTextbox1.value+'\n'+text;break;
case 3 : document.editform.wpTextbox1.value=text+'\n'+document.editform.wpTextbox1.value;break;
}
document.editform.wpTextbox1.focus();
}
function insertTagsWrapper(tagOpen, tagClose, sampleText, subj) {
if (subj > "") {
if (document.editform.wpSummary.value > "") document.editform.wpSummary.value += ", ";
document.editform.wpSummary.value = document.editform.wpSummary.value + subj;
}
insertTags(untagEscape(tagOpen), untagEscape(tagClose), untagEscape(sampleText))
}
// </nowiki>