Wikiup:Dateiwartung/Werkzeug/d.js
aus Wikipedia, der freien Enzyklopädie
///
f i l e A d m
// Unterstützungswerkzeug für Dateien, Dateikategorien, DÜP, Dateirechte.
/// 2013-08-25 PerfektesChaos@de.wikipedia
/// Fingerprint: #0#0#
// ResourceLoader: compatible;
// dependencies: user,
// mediawiki.api, mediawiki.user, mediawiki.util
// namespaces: -1, 4, 6, 14, 100
// Documentation: Wikipedia:Dateiwartung/Werkzeug
/*jshint curly:true, latedef:true, laxbreak:true,
strict:true, trailing:true, undef:true, white:false */
/*global window: true, document: true, mediaWiki: false, jQuery: true,
unescape: true */
/*jslint browser: true, plusplus: true, regexp: true, unparam: true,
vars: true, white: true, maxerr: 50 */
/*globals jQuery: true, mediaWiki: false, unescape: true */
( function ( mw ) {
"use strict";
var FAdm,
vsn = -1;
if ( typeof( mw.libs.fileAdm ) !== "object" ) {
mw.libs.fileAdm = { };
}
FAdm = mw.libs.fileAdm;
FAdm.doc = "[[w:de:Wikipedia:Dateiwartung/Werkzeug]]";
FAdm.obj = "mw.libs";
FAdm.type = "fileAdm";
FAdm.vsn = vsn;
// Uses:
// MediaWiki 1.18
// mw.libs
// mw.user.tokens
// mw.util
// .addCSS
// .addPortletLink
// .getParamValue
// .wikiGetlink
// .wikiScript
// .wikiUrlencode
// jQuery
// Beyond basics:
// .ajaxError()
// .cookie()
// .get()
// .getJSON()
// .post()
// .ready()
// JavaScript 1.5
if ( typeof( FAdm.bb ) !== "object" ) {
FAdm.bb = { };
}
// .all overall structure and data
// .batch API.php
// .cat categories containing files
// .edit editing page content
// .file file description page
// .guide special view on some pages
// .hover unused
// .ia interactive editing
// .key Info template
// .misc utilities and anything
// .ns namespaces
// .opt forms and user config
// .portlet page portlet
// .queer file checking
// .review file review
// .str general string repository
// .trans file transfer to commons
// .users special user groups
// .wins browser windows
}( mediaWiki ) );
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.debugging = function ( FAdm ) {
// Development support
// 2012-06-12 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.debugging !== "object" ) {
FAdm.debugging = { loud: false }; // not a developer
}
FAdm.debugging.fit = function () {
// Configure debugging and development issues
// Postcondition:
// All debugging variables are preset
// Uses:
// this
// >< .debugging.loud
// >< .review.stamp
// >< .trans.stamp
// >< .trans.bot.pageName
// < .debugging.man
// < .debugging.max
// < .debugging.dummy
// 2013-01-14 PerfektesChaos@de.wikipedia
if ( this.loud === undefined ) {
this.loud = false;
}
if ( this.loud ) {
this.man = 0;
this.max = 200;
this.say = "fileAdm";
if ( this.dummy === undefined ) {
this.dummy = "Wikipedia:Dateiwartung/Werkzeug/"
+ "Programmierung/";
}
// this.dummy = false;
if ( this.dummy ) {
FAdm.review.stamp = this.dummy
+ "Vorlage:" + FAdm.review.stamp;
FAdm.trans.stamp = this.dummy
+ "Vorlage:" + FAdm.trans.stamp;
FAdm.trans.bot.pageName = this.dummy
+ FAdm.trans.bot.pageName;
}
}
}; // .debugging.fit()
}; // .bb.debugging()
mediaWiki.libs.fileAdm.bb.debugging( mediaWiki.libs.fileAdm );
delete mediaWiki.libs.fileAdm.bb.debugging;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.all = function ( FAdm, mw ) {
// Basic configuration
// 2012-06-12 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.all !== "object" ) { // overall structure and data
FAdm.all = { lang: { },
proj: { },
user: { } };
}
if ( typeof FAdm.all.lang !== "object" ) {
FAdm.all.lang = { };
}
if ( typeof FAdm.all.proj !== "object" ) {
FAdm.all.proj = { };
}
if ( typeof FAdm.all.user !== "object" ) {
FAdm.all.user = { };
}
FAdm.ns = { is: -9,
// Should be invariant: meta:Help:Namespace
// Adaption of ns.n* by switch(wgDBname) in .all.proj. only!
nMedia: -2,
nSpecial: -1,
nUser: 2,
nProject: 4,
nFile: 6,
nTemplate: 10,
nCat: 14,
nOthers1: -999 };
FAdm.hover = false;
FAdm.ia = false;
FAdm.key = false;
FAdm.all.userlang = {
// 2012-12-19 PerfektesChaos@de.wikipedia
"de" : "de",
"als" : "de",
"bar" : "de",
"dsb" : "de",
"frr" : "de",
"gsw" : "de",
"hsb" : "de",
"ksh" : "de",
"lb" : "de",
"nds" : "de",
"pdc" : "de",
"pdt" : "de",
"pfl" : "de",
"sli" : "de",
"stq" : "de",
"vmf" : "de"
}; // .all.userlang
FAdm.all.favorite = function () {
// Guess user language
// Uses:
// this
// > .userlang
// mw.config.get()
// 2012-12-19 PerfektesChaos@de.wikipedia
var r = mw.config.get( "wgUserLanguage" ).toLowerCase(),
s;
if (r.length > 4) { // Remove RFC 1766 subtag from language code
if (r.charCodeAt(2) === 45) { // '-'
r = r.substr(0, 2);
}
}
s = this.userlang[ r ];
r = ( s ? s : "en" );
return r;
}; // .all.favorite()
FAdm.all.fit = function () {
// Configure globals
// Postcondition:
// All local and internal and developer variables are preset
// Uses:
// < .str.dbName
// < .misc.local
// .all.favorite()
// .all.proj.any()
// mw.config.get()
// .all.proj.*()
// .all.proj.unknown()
// .all.lang.*()
// .all.user.*()
// .all.fill()
// .opt.fit()
// .debugging.fit()
// 2013-01-12 PerfektesChaos@de.wikipedia
var slang = this.favorite();
this.proj.any();
FAdm.str.dbName = mw.config.get( "wgDBname" );
switch ( FAdm.str.dbName ) {
case "dewiki" :
this.proj[ FAdm.str.dbName ]();
break;
case "commonswiki" :
FAdm.misc.local = false;
// fall through
default: //
this.proj.unknown();
} // switch wgDBname
switch ( mw.config.get( "wgContentLanguage" ) ) {
case "de" :
this.lang.de();
break;
default:
this.lang.en();
} // switch wgContentLanguage
this.user[ slang ]();
this.fill();
FAdm.opt.fit();
FAdm.debugging.fit();
}; // .all.fit()
FAdm.all.proj.any = function () {
// Configure default strings and data for any project
// Postcondition:
// General defaults, may be overwritten in particular project
// Uses:
// < .batch.clock
// < .batch.maxTitles
// < .batch.watch
// < .batch.watchQ
// < .batch.watchT
// < .guide.cats
// < .guide.multiQuery
// < .guide.selTemplate
// < .queer.textarea
// < .review.selTemplate
// < .trans.subject
// < .trans.idle.id
// 2011-10-27 PerfektesChaos@de.wikipedia
FAdm.batch.clock = "//upload.wikimedia.org/"
+ "wikipedia/commons"
+ "/d/de/Ajax-loader.gif";
FAdm.batch.maxTitles = 50;
FAdm.batch.watch = false;
FAdm.batch.watchQ = "watch";
FAdm.batch.watchT = "watch";
FAdm.cat.regexpMaintain = false;
FAdm.cat.reMaintain = false;
FAdm.cat.start = false;
FAdm.file.info = { };
FAdm.guide.cats = {
none: "border: solid 3px #FF0000; background-color: #E9967A",
category: "background-color: #FF69B4",
checking: [ false,
"border: solid 2px #FF0000" ],
checkX: "border:solid 2px #FF0000;background-color:#CFFFCF",
invalid: "border:solid 4px #FFA000;background-color:#FF1493",
license: [ false,
"border:solid 2px #006000;background-color:#80FF80" ],
review0: [ false,
"background-color: #FF8C00" ],
review1: [ false,
"background-color: #F0E68C" ],
review1X: "background-color: #A0A0A0",
review2: [ false,
"background-color: #CFFFCF" ],
transfer: [ false,
"border:solid 2px #0000FF;background-color:#CFFFCF" ],
transfix: [ false,
"border:solid 2px #0000FF;background-color:#D0D0FF" ],
transit: [ false,
"border:solid 2px #0000FF;background-color:#F0E68C" ],
transmit: [ false,
"border:solid 2px #0000FF;background-color:#CFFFCF" ],
transnot: "border:solid 2px #0000FF;background-color:#C0C0C0",
trash: [ false,
"border:solid 2px #0000FF;background-color:#FF8080" ],
lazyRE: true };
FAdm.guide.multiQuery = 5;
FAdm.guide.selTemplate = "#fileAdm_Guide-collection";
FAdm.queer.opts = false;
FAdm.queer.textarea = [3, 40];
FAdm.review.selTemplate = "#fileAdm_Review";
FAdm.trans.subject = "Transfer to Commons by Bot";
FAdm.trans.idle.id = "fileAdm_Transfer_idle";
FAdm.trans.vsn.sel = ".multiVersion";
}; // .all.proj.any()
FAdm.all.proj.dewiki = function () {
// Configure strings and data for German language Wikipedia
// Postcondition:
// German language Wikipedia adaption
// Uses:
// < .*.*
// 2013-01-26 PerfektesChaos@de.wikipedia
FAdm.batch.reBlacklist = "[_.;,]Werbung[_.;,]";
FAdm.batch.selfSign = "Werkzeug";
FAdm.cat.hidden = "Kategorie:Versteckt";
FAdm.cat.reMaintain = "(Datei:Datei-Wartung)";
FAdm.cat.reNoParSuggest = "(^ *(Wikipedia|Logo \\())";
FAdm.cat.selTemplate = "#Dateikategorie";
FAdm.cat.stamp = "Dateikategorie";
FAdm.cat.start = "Datei:";
FAdm.edit.defaultsort = "SORTIERUNG";
FAdm.file.info.template = [ "Information",
"Beschreibung",
"Quelle",
"Urheber",
"Datum",
"Genehmigung",
"Andere Versionen" ];
FAdm.file.info.align = 55;
FAdm.file.info.reTmpl = false;
FAdm.file.stNoCommons = "NoCommons";
FAdm.file.stNowCommons = "NowCommons";
FAdm.file.replace =
[ [ "{{ *[bB]ild-SH *}}",
"{{Bild-PD-Schöpfungshöhe}}" ],
[ "{{[cC]opy to Wikimedia Commons}}",
"{{Commonsfähig}}" ],
[ "{{ *[dD](ÜP|üp) *(}}|\\|)",
"{{Dateiüberprüfung$2" ],
[ "{{ *[dD]ateiüberprüfung *(}}|\\|)",
"{{Dateiüberprüfung$1" ],
[ "{{ *[Ss]vg *}}",
"{{In SVG konvertieren}}" ],
[ "{{ *[mM]angelhafte[ _]SVG *}}",
"{{Mangelhafte Vektorisierung}}" ],
[ "{{ *[nN]C *(}}|\\|)",
"{{NowCommons$1" ],
[ "{{ *[nN]ow[ _]Commons *(}}|\\|)",
"{{NowCommons$1" ],
[ "{{ *[nN]owcommons *(}}|\\|)",
"{{NowCommons$1" ],
[ "^=([^=\n].*[^=\n])= *\n",
"==$1==\n" ],
[ "\n=([^=\n].*[^=\n])= *\n",
"\n==$1==\n" ],
[ "^(=+) *([^ =\n].*[^ =\n]) *\\1\n",
"$1 $2 $1\n" ],
[ "\n(=+) *([^ =\n].*[^ =\n]) *\\1\n",
"\n$1 $2 $1\n" ] ];
FAdm.file.selCommons = "#commons_descr";
FAdm.file.selNowCommons = "#Vorlage_NowCommons";
// ".*" => beginnend mit
FAdm.guide.cats.checking[0] = "Wikipedia:Dateiüberprüfung.*";
FAdm.guide.cats.license[0] = [ "Datei:By.*", // Beginn mit
"Datei:CC-by.*", // Beginn mit
"Datei:CC-Zero",
"Datei:Frei",
"Datei:GFDL",
"Datei:LogoSH",
"Datei:Musik-PD .*",
"Datei:Musikzitat",
"Datei:Public Domain .*",
"Datei:Wikimedia-Copyright" ];
FAdm.guide.cats.review0[0] = "Datei:NoCommons";
FAdm.guide.cats.review1[0] = "Datei:Zweitprüfung ausstehend";
FAdm.guide.cats.review2[0] = "Datei:Geprüfte Datei";
FAdm.guide.cats.transfer[0] = [ "Datei:By",
"Datei:CC-Zero",
"Datei:Frei",
"Datei:GFDL",
"Datei:Public Domain .*" ];
FAdm.guide.cats.transfix[0] = "Datei:Nach Commons verschieben"
+ " (bestätigt)";
FAdm.guide.cats.transit[0] = "Datei:Nach Commons verschieben"
+ " (Bestätigung nötig)";
FAdm.guide.cats.transmit[0] = "Datei:Commonsfähig";
FAdm.guide.cats.trash[0] = "Datei:NowCommons.*"; // Beginn mit
FAdm.guide.linkState = { hotkey: "s" };
FAdm.ns.nOthers1 = 100; // Portal:
FAdm.opt.keep = 0;
FAdm.opt.page.id = 6425961;
FAdm.queer.opts =
[ // count from 0; hints: w:de:User:Ireas/düp-setzen-monobook.js
{ key: "Quelle",
hint: "Wenn nicht deutlich wird, "
+ "woher der Uploader die Datei hat" },
{ key: "Urheber",
hint: "Wenn nicht deutlich wird, "
+ "wer der Urheber der Datei ist" },
{ key: "Lizenz",
hint: "Wenn die Datei nicht"
+ " unter einer freien Lizenz veröffentlicht wurde" },
{ key: "Freigabe",
hint: "Wenn nicht deutlich wird, dass"
+ " der Urheber einer freien Lizenz zugestimmt hat" },
{ key: "Gezeigtes Werk",
hint: "Wenn nicht klar ist, "
+ "dass der Urheber des Originalwerks "
+ "einer freien Lizenz zugestimmt hat" },
{ key: "1923",
hint: "Für Bilder nach der 1923er-Regel, "
+ "deren Diskussionslink fehlt." },
{ key: "Besonderer Fall",
hint: "Wenn ein besonderer Fall vorliegt "
+ "(persönliche Benachrichtigung)" } ];
FAdm.queer.stamp = "Dateiüberprüfung";
FAdm.queer.specific = "Hinweis";
FAdm.queer.quest = [ FAdm.queer.stamp,
"DÜP",
"Düp",
"DÜp",
"DüP" ];
FAdm.queer.stampNotified = "Dateiüberprüfung/benachrichtigt"
+ " (Text)";
FAdm.review.selTemplate = "#filereview-successful";
FAdm.review.stamp = "Geprüfte Datei";
FAdm.trans.stable = "Commonsfähig";
FAdm.trans.stamp = "Commonsfähig";
FAdm.trans.suitable = "Commonsfähig";
FAdm.trans.bot.pageName = "Wikipedia:"
+ "Commons-Transfer per Bot"
+ "/Anfragen";
FAdm.users.r = 6358806; // real: 6358806
FAdm.users.t = 6426331; // real: 6426331
FAdm.wins.lot = true;
}; // .all.proj.dewiki()
/*
file.info.template = [ "Information",
"Description",
"Source",
"Author",
"Permission",
"other_versions" ];
file.info.align = 1;
*/
FAdm.all.proj.unknown = function () {
// Disable any major start function if current project is unknown
// Postcondition:
// Any action is disabled
// Uses:
// < .cat.action()
// < .file.action()
// < .guide.action()
// 2011-10-21 PerfektesChaos@de.wikipedia
FAdm.cat.action = false;
FAdm.file.action = false;
FAdm.guide.action = false;
}; // .all.proj.unknown()
FAdm.all.lang.de = function () {
// Configure message strings / German users; visible to other users
// Postcondition:
// German texts are set
// Uses:
// < see .all.lang.en
// 2011-12-07 PerfektesChaos@de.wikipedia
FAdm.edit.summary0 = "kosmetische Änderungen";
FAdm.queer.summary = "Dateiüberprüfung";
FAdm.review.summary1 = "Erste Dateiprüfung";
FAdm.review.summary2 = "Zweite Dateiprüfung";
FAdm.trans.summary = "Markierung für CTB gesetzt";
FAdm.trans.bot.sayConfirm = "Bestätige Transferwunsch";
FAdm.trans.vsn.say = "Mehrfache Dateiversionen";
}; // .all.lang.de()
FAdm.all.lang.en = function () {
// Configure project message strings for English and default users
// Postcondition:
// English texts are set
// Uses:
// < .edit.summary0
// < .queer.summary
// < .review.summary1
// < .review.summary2
// < .trans.summary
// < .trans.bot.sayConfirm
// < .trans.vsn.say
// 2011-12-07 PerfektesChaos@de.wikipedia
FAdm.edit.summary0 = "cosmetic changes";
FAdm.queer.summary = "File check";
FAdm.review.summary1 = "First file review";
FAdm.review.summary2 = "Second file review";
FAdm.trans.summary = "Marked for transfer to Commons";
FAdm.trans.bot.sayConfirm = "Confirm transfer request";
FAdm.trans.vsn.say = "Multiple file versions";
}; // .all.lang.en()
FAdm.all.user.de = function () {
// Configure UI strings for German users
// Postcondition:
// German texts are set
// Uses:
// < see .all.user.en
// 2012-12-19 PerfektesChaos@de.wikipedia
FAdm.batch.sayActive = "Kommuniziere mit dem GROSSEN GURU";
FAdm.batch.sayCurrentVsn = "Aktuelle Version anzeigen";
FAdm.batch.sayModified = "Änderung vorgenommen";
FAdm.batch.sayNoText = "Kein Text";
FAdm.batch.sayNothing2do = "Nichts zu tun";
FAdm.cat.sayNoTemplate = "Fehlende Vorlage";
FAdm.guide.linkState.hint = "Jede Datei nach Status markieren";
FAdm.guide.linkState.title = "Datei-Status zeigen";
FAdm.guide.toggleImg =
{ hint: "Miniaturbilder verbergen?",
hotkey: "-", // m=move
off: "zeigen",
on: "ausblenden",
title: "Miniaturbilder" };
FAdm.guide.toggleTgt =
{ hint: "Links in anderes Fenster?",
hotkey: "*",
off: "gleich",
on: "separat",
title: "Zielfenster" };
FAdm.guide.xClm =
{ hint: "Spalte mit Direktlinks?",
hotkey: "<",
title: "Bearbeitung" };
FAdm.queer.link =
{ hint: "Dateiüberprüfung",
hotkey: "ü",
title: "DÜP" };
FAdm.queer.soft = "Bearbeiten mit DÜP-Markierung";
FAdm.queer.shift = "Markiere als DÜP";
FAdm.queer.subject = "DÜP";
FAdm.review.scatter = "Noch keine Kategorie";
FAdm.review.scope = "Ohne NoCommons";
FAdm.review.second = "Bereits zweimal geprüft";
FAdm.review.self = "Du hast hier bereits geprüft";
FAdm.review.setup = "Bisher noch nie geprüft";
FAdm.review.shift = "Markiere als geprüft";
FAdm.review.signed = "Erste Prüfung bereits erfolgt";
FAdm.review.soft = "Bearbeiten mit Prüfmarkierung";
FAdm.review.subject = "Dateiprüfung";
FAdm.review.sucks = "Dateiüberprüfung";
FAdm.str.sayConflict = "KONFLIKT";
FAdm.trans.sayNo = "Seite ist gleichzeitig NoCommons"
+ " und für Commons vorgesehen";
FAdm.trans.shift = "Markiere für CTB";
FAdm.trans.soft = "Bearbeiten mit CTB-Markierung";
FAdm.trans.sucks = "Konflikt mit NoCommons";
FAdm.trans.bot.save = "Speichern++";
FAdm.trans.idle.say = "Erneuter Transfer";
FAdm.trans.idle.sleep = "Keine Änderung seit 3 Tagen";
}; // .all.user.de()
FAdm.all.user.en = function () {
// Configure UI strings for English and default users
// Postcondition:
// English texts are set
// Uses:
// < .batch.sayActive
// < .batch.sayCurrentVsn
// < .batch.sayModified
// < .batch.sayNoText
// < .batch.sayNothing2do
// 2011-10-10 PerfektesChaos@de.wikipedia
FAdm.batch.sayActive = "Contacting Wiki Server";
FAdm.batch.sayCurrentVsn = "Show current version";
FAdm.batch.sayModified = "Modification performed";
FAdm.batch.sayNoText = "No Text";
FAdm.batch.sayNothing2do = "Nothing to do";
FAdm.cat.sayNoTemplate = "Template missing";
FAdm.guide.linkState.hint = "Mark any file by state";
FAdm.guide.linkState.title = "Show file state";
FAdm.guide.toggleImg =
{ hint: "Hide thumbnails?",
hotkey: "-",
off: "(hide)",
on: " (show)",
title: "Thumbnails" };
FAdm.guide.toggleTgt =
{ hint: "Link into other window?",
hotkey: "*",
off: "(same)",
on: "(different)",
title: "Target window" };
FAdm.guide.xClm =
{ hint: "Column with direct links?",
hotkey: "<",
title: "Editing" };
FAdm.queer.link =
{ hint: "File checking needed?",
hotkey: "9",
title: "File checking" };
FAdm.queer.soft = "Edit with file check mark";
FAdm.queer.shift = "Mark for file check";
FAdm.queer.subject = "File check";
FAdm.review.scatter = "No category yet";
FAdm.review.scope = "NoCommons not seen";
FAdm.review.second = "Two file reviews done";
FAdm.review.self = "You have reviewed here already";
FAdm.review.setup = "Never reviewed yet";
FAdm.review.shift = "Mark as reviewed";
FAdm.review.signed = "First review already done";
FAdm.review.soft = "Edit with review mark";
FAdm.review.subject = "File review";
FAdm.review.sucks = "File check";
FAdm.str.sayConflict = "CONFLICT";
FAdm.trans.sayNo = "File is supposed to be both"
+ " NoCommons and on Commons";
FAdm.trans.shift = "Mark for CTB";
FAdm.trans.soft = "Edit with CTB mark";
FAdm.trans.sucks = "Conflict with NoCommons";
FAdm.trans.bot.save = "Save++";
FAdm.trans.idle.say = "New attempt to transfer";
FAdm.trans.idle.sleep = "No changes within 3 days";
}; // .all.user.en()
FAdm.all.fill = function () {
// Configure internal globals *** developers only ***
// Postcondition:
// All internal variables are preset
// Uses:
// > .opt.keep
// > .guide.lessMini
// > .wins.lot
// > .batch.watchQ
// > .batch.watchT
// > .obj
// > .type
// Requires: JavaScript 1.3 fromCharCode()
// 2013-01-19 PerfektesChaos@de.wikipedia
FAdm.batch.api = false;
FAdm.batch.page = false;
FAdm.batch.styleButton = "background: #D0D0D0;" +
"color: #000000;" +
"font-size: 100%;" +
"font-weight: normal;" +
"text-decoration: none;" +
"padding: 2px;" +
"border-style: solid;" +
"border-width: 2px;" +
"border-color: #E0E0E0 " + // top
"#E0E0E0 " + // right
"#707070 " + // bottom
"#707070;"; // left
FAdm.cat.tools = false;
FAdm.file.cats = false;
FAdm.file.lone = true;
FAdm.file.mode = 0;
FAdm.file.type = false;
FAdm.guide.lessMini = false;
FAdm.guide.jumpQuery = -1;
FAdm.guide.stateFilter = false;
FAdm.guide.stateIndex = -1;
FAdm.guide.stateMax = -1;
FAdm.guide.stateMin = -1;
FAdm.guide.stateQuery = false;
FAdm.guide.styleImg = false;
FAdm.guide.xClm.live = false;
FAdm.guide.$mins = false;
FAdm.misc.local = true;
FAdm.ns.map = false;
FAdm.ns.reTemplate = false;
FAdm.ns.sCat = false;
FAdm.ns.sFile = false;
FAdm.ns.sTemplate = false;
FAdm.ns.sUser = false;
FAdm.opt.memory = { env: "memory",
typ: "number",
val: FAdm.opt.keep };
FAdm.opt.lessMini = { env: "lessMini",
typ: "boolean",
val: FAdm.guide.lessMini };
FAdm.opt.multiWin = { env: "multiWin",
typ: "boolean",
val: FAdm.wins.lot };
FAdm.opt.watchQ = { env: "watchQ",
typ: "choice",
val: FAdm.batch.watchQ };
FAdm.opt.watchT = { env: "watchT",
typ: "choice",
val: FAdm.batch.watchT };
FAdm.queer.stuck = false;
FAdm.str.action = false;
FAdm.str.artPath = false;
FAdm.str.script = "javascript"
+ String.fromCharCode( 58 );
FAdm.str.call = FAdm.str.script + FAdm.obj + "."
+ FAdm.type + ".";
FAdm.str.page.content = false;
FAdm.str.page.id = false;
FAdm.str.page.name = false;
FAdm.str.page.rvtime = false;
FAdm.str.page.title = false;
FAdm.str.page.urlEnc = false;
FAdm.trans.bot.commons = false;
FAdm.trans.bot.discard = false;
FAdm.trans.bot.post = false;
FAdm.trans.bot.queue = false;
FAdm.trans.bot.rvtime = false;
FAdm.trans.bot.update = false;
FAdm.trans.bot.$xSave = false;
FAdm.users.i = false;
FAdm.users.n = false;
FAdm.users.w = false;
FAdm.wins.single = "fileSingle";
FAdm.wins.toolOut = "fileTools";
}; // .all.fill()
}; // .bb.all()
mediaWiki.libs.fileAdm.bb.all( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.all;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.batch = function ( FAdm, mw ) {
// API communication support
// 2012-06-12 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.batch !== "object" ) {
FAdm.batch = { };
}
FAdm.batch.failed = function ( about ) {
// API retrieval failed
// Precondition:
// about -- reason
// Postcondition:
// message is displayed
// Uses:
// jQuery()
// .misc.message()
// Remark: Used as event handler -- 'this' is not FAdm.batch
// 2011-08-30 PerfektesChaos@de.wikipedia
var style = "color: #FF0000; border: solid 2px; width: auto; "
+ "padding: 5px; margin-top: 10px;";
var $box = jQuery( "<div />" );
var $head = jQuery( "<strong />" );
$head.text( about );
$box.append( $head );
$box.attr( "style", style );
FAdm.misc.message( $box, "fileAdmError", true );
}; // .batch.failed()
FAdm.batch.failure = function ( e, jqXHR, settings, thrown ) {
// Error handler for ajax requests
// Precondition:
// Handler
// Postcondition:
// message is displayed to the user
// Uses:
// > .debugging
// .batch.failed()
// Remark: Used as event handler -- 'this' is not FAdm.batch
// 2011-11-30 PerfektesChaos@de.wikipedia
mw.log( FAdm.debugging, ".batch.failure() " + settings,
3,
jqXHR );
FAdm.batch.failed();
}; // .batch.failure()
FAdm.batch.faith = function () {
// Entertain waiting user while communicating
// Postcondition:
// message is displayed
// Sing a song; show a Mickey Mouse movie
// Uses:
// > .batch.clock
// > .batch.sayActive
// .misc.message()
// 2011-08-30 PerfektesChaos@de.wikipedia
var style = "color: #7B68EE; border: solid 2px; width: auto; "
+ "padding: 5px; margin-top: 10px; height: 40px;";
var $box = jQuery( "<div />" );
var $head = jQuery( "<strong />" );
var $img = jQuery( "<img />" );
$img.attr( "height", "40" );
$img.attr( "src", FAdm.batch.clock );
$box.append( $img );
$head.text( "... " + FAdm.batch.sayActive + " ..." );
$box.append( $head );
$box.attr( "style", style );
FAdm.misc.message( $box, "fileAdmAPI", true );
}; // .batch.faith()
FAdm.batch.feed = function ( action ) {
// Retrieve displayed page content by API, launch particular action
// Precondition:
// action -- (edit) function to be executed
// Postcondition:
// Follow-up procedure is launched
// Uses:
// > .batch.sayNoText
// > .ns.is
// > .ns.nFile
// >< .batch.api
// >< .str.page.name
// >< .str.page.id
// >< .misc.pageid
// < .str.page.content
// < .str.page.rvtime
// < .batch.rvtime
// .str.fromNum()
// (.batch.force)
// (.trans.bot.feeder)
// (.batch.failed)
// mw.util.wikiScript()
// mw.config.get()
// jQuery.getJSON()
// 2012-01-09 PerfektesChaos@de.wikipedia
var query;
if ( ! FAdm.batch.api ) {
FAdm.batch.api = mw.util.wikiScript( "api" );
}
if ( ! FAdm.str.page.name ) {
FAdm.str.page.name = mw.config.get( "wgPageName" );
}
if ( ! FAdm.str.page.id ) {
if ( typeof( FAdm.misc.pageid ) !== "number" ) {
FAdm.misc.pageid = mw.config.get( "wgArticleId" );
}
FAdm.str.page.id = FAdm.str.fromNum( FAdm.misc.pageid );
}
query = { action: "query",
prop: "revisions",
rvprop: "content|timestamp",
rvlimit: 1,
format: "json",
titles: FAdm.str.page.name };
jQuery.getJSON( FAdm.batch.api,
query,
function ( arrived ) {
var got = arrived.query;
if ( got ) {
got = got.pages[ FAdm.str.page.id ];
if ( got ) {
got = got.revisions[ "0" ];
}
}
if ( got ) {
FAdm.str.page.content = got[ "*" ];
FAdm.str.page.rvtime = got.timestamp;
FAdm.batch.rvtime = FAdm.str.page.rvtime;
if ( FAdm.str.page.content ) {
FAdm.batch.force( false, action );
} else {
got = false;
}
}
if ( got ) {
if ( FAdm.ns.is === FAdm.ns.nFile ) {
FAdm.trans.bot.feeder();
}
} else {
FAdm.batch.failed( FAdm.batch.sayNoText );
}
} );
}; // .batch.feed()
FAdm.batch.fetch = function ( access, action ) {
// Retrieve page content and timestamp, then perform action
// Precondition:
// access -- page name
// action -- edit function to be executed afterwards
// Postcondition:
// Edit procedure is performed if appropriate
// Uses:
// >< .batch.api
// jQuery.getJSON()
// 2011-10-11 PerfektesChaos@de.wikipedia
var query = { action: "query",
prop: "revisions",
rvprop: "content|timestamp",
rvlimit: 1,
indexpageids: true,
titles: access,
format: "json" };
if ( ! FAdm.batch.api ) {
FAdm.batch.api = mw.util.wikiScript( "api" );
}
jQuery.getJSON( FAdm.batch.api,
query,
action );
}; // .batch.fetch()
FAdm.batch.fine = function ( arrived, about, answer ) {
// API modification succeeded
// Precondition:
// arrived -- API data
// about -- textStatus
// answer -- jqXHR answer
// Postcondition:
// Success message is displayed
// Uses:
// > .batch.sayCurrentVsn
// > .batch.sayModified
// > .str.page.name
// mw.util.wikiGetlink()
// jQuery()
// .misc.message()
// Remark: Used as event handler -- 'this' is not FAdm.batch
// 2013-01-07 PerfektesChaos@de.wikipedia
var state = "HTTP error";
var style;
var $box;
var $head;
var $info;
var $link;
if ( answer ) {
if ( answer.status === 200 ) {
if ( arrived.indexOf( "newtimestamp=" ) > 0 ) {
state = false;
} else {
// state = "Invalid request";
state = false;
}
} else {
state = state + " " + answer.status;
}
}
if ( state ) {
FAdm.batch.failed( state );
} else {
style = "color: #007000; border: solid 2px; "
+ "width: auto; padding: 5px; margin-top: 10px;";
$box = jQuery( "<div />" );
$head = jQuery( "<strong />" );
$info = jQuery( "<p />" );
$link = jQuery( "<a />" );
$head.text( FAdm.batch.sayModified );
$box.append( $head );
$link.text( FAdm.batch.sayCurrentVsn );
//$link.attr( "href", mw.util.wikiGetlink( FAdm.str.page.name ) );
$info.append( $link );
$box.append( $info );
$box.attr( "style", style );
FAdm.misc.message( $box, "fileAdmDone", true );
}
}; // .batch.fine()
FAdm.batch.flash = function ( action, await ) {
// Perform page modification by API
// Precondition:
// action -- edit function to be executed
// await -- entertain waiting user while communicating
// Current page is subject of edit
// Postcondition:
// Procedure is launched
// Uses:
// .batch.faith()
// .batch.feed()
// 2011-10-10 PerfektesChaos@de.wikipedia
if ( await ) {
FAdm.batch.faith();
}
FAdm.batch.feed( action );
}; // .batch.flash()
FAdm.batch.force = function ( adjust, action ) {
// Perform modification by API
// Precondition:
// adjust -- false: take page content from str.page.content
// Array[3]: [0] -- modified page content
// [1] -- summary
// [2] -- true: minor edit
// action -- edit function to be executed, transforms adjust
// false if adjust is to be taken as is
// Current page will be modified, or batch.page if set
// Postcondition:
// Modification is performed if appropriate
// Uses:
// > .str.page.content
// > .str.page.rvtime
// > .batch.watch
// > .batch.selfSign
// > .vsn
// > .batch.sayNothing2do
// >< .batch.page
// >< .batch.rvtime
// >< .str.page.name
// (.batch.fine)
// .batch.failed()
// mw.config.get()
// mw.user.tokens.get()
// jQuery().post()
// Remark: Used as event handler -- 'this' is not FAdm.batch
// 2011-10-23 PerfektesChaos@de.wikipedia
var change = false;
var doit;
var wl;
if ( adjust ) {
change = adjust;
} else {
change = FAdm.str.page.content;
}
if ( action && change ) {
change = action( change );
}
if ( ! FAdm.batch.page ) {
if ( ! FAdm.str.page.name ) {
FAdm.str.page.name = mw.config.get( "wgPageName" );
}
FAdm.batch.page = FAdm.str.page.name;
}
if ( ! FAdm.batch.rvtime ) {
FAdm.batch.rvtime = FAdm.str.page.rvtime;
}
if ( change ) {
wl = ( FAdm.batch.watch ? FAdm.batch.watch
: "preferences" );
doit = { action: "edit",
token: mw.user.tokens.get( "csrfToken" ),
title: FAdm.batch.page,
text: change[0],
summary: change[1]
+ " * " + FAdm.batch.selfSign
+ " fileAdm " + FAdm.vsn,
watchlist: wl,
minor: change[2],
basetimestamp: FAdm.batch.rvtime,
nocreate: true };
jQuery.post( FAdm.batch.api, doit, FAdm.batch.fine );
} else {
FAdm.batch.failed( FAdm.batch.sayNothing2do );
}
}; // .batch.force()
}; // .bb.batch()
mediaWiki.libs.fileAdm.bb.batch( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.batch;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.cat = function ( FAdm, mw ) {
// Category page support
// 2012-06-12 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.cat !== "object" ) {
FAdm.cat = { };
}
FAdm.cat.action = function () {
// Opening file category page
// Precondition:
// Current page is supposed to be a file category page
// window.document is ready
// Page title begins with .cat.start but not only
// Postcondition:
// Procedures are performed.
// Returns void(0), as required in GUI action, if browser window
// Uses:
// > .cat.selTemplate
// > .cat.sayNoTemplate
// > .cat.stamp
// >< .str.action
// .guide.fill()
// .cat.fenced()
// .cat.find()
// .cat.format()
// mw.config.get()
// Remark: Used as event handler -- 'this' is not FAdm.cat
// 2012-08-30 PerfektesChaos@de.wikipedia
var say;
var $t;
if ( ! FAdm.str.action ) {
FAdm.str.action = mw.config.get( "wgAction" );
}
switch ( FAdm.str.action ) {
case "view" :
$t = jQuery( FAdm.cat.selTemplate );
FAdm.guide.fill();
if ( ! $t.length ) {
if ( ! FAdm.cat.fenced( false ) ) {
say = "<div class='error'"
+ " style='border: solid 1px; width: auto; "
+ "margin-top: 10px'>"
+ FAdm.cat.sayNoTemplate + ": "
+ FAdm.cat.stamp + "</div>";
FAdm.misc.message( say, "fileAdmNoTemplate", true );
}
}
FAdm.cat.find( true );
break;
case "edit" :
FAdm.cat.format();
break;
} // switch wgAction
return void(0);
}; // .cat.action()
FAdm.cat.family = function ( ask ) {
// What kind of category is described by name?
// Precondition:
// ask -- string with category title
// Postcondition:
// Returns -1 if member of hidden or maintenance category
// 1 if otherwise member of file category
// 0 if not member of any known category class
// Uses:
// > .cat.hidden
// > .cat.regexpMaintain
// > .cat.start
// > .guide.cats
// > .guide.cats.checking
// > .guide.cats.review0
// > .guide.cats.review1
// > .guide.cats.review2
// > .guide.cats.license
// > .guide.cats.transfer
// > .guide.cats.transfix
// > .guide.cats.transit
// > .guide.cats.transmit
// > .guide.cats.trash
// .guide.fulfil()
// 2011-11-30 PerfektesChaos@de.wikipedia
var gcs;
var r = 0;
if ( ask === FAdm.cat.hidden ) {
r = -1;
} else if ( FAdm.cat.regexpMaintain ) {
if ( FAdm.cat.regexpMaintain.test( ask ) ) {
r = -1;
}
}
if ( ! r ) {
gcs = FAdm.guide.cats;
r = -1;
if ( FAdm.guide.fulfil( ask, gcs.checking ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.review0 ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.review1 ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.review2 ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.license ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.transfer ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.transfix ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.transit ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.transmit ) ) {
} else if ( FAdm.guide.fulfil( ask, gcs.trash ) ) {
} else {
r = 0;
}
}
if ( ! r ) {
if ( FAdm.cat.start ) {
if ( ask.indexOf( FAdm.cat.start ) === 0 ) {
r = 1;
}
}
}
return r;
}; // .cat.family()
FAdm.cat.fenced = function ( area ) {
// Is current category member of a maintenance category?
// Precondition:
// area -- false: view string: edit/submit; article text
// Current page is a category.
// Postcondition:
// Returns true iff member of hidden or maintenance category
// Uses:
// > .ns.nCat
// > .cat.reMaintain
// > .guide.selTemplate
// > .guide.cats
// > .cat.hidden
// >< .ns.sCat
// >< .file.cats
// >< .cat.regexpMaintain
// .ns.fetch()
// .guide.furnish()
// .cat.family()
// mw.config.get()
// 2011-11-30 PerfektesChaos@de.wikipedia
var i, k;
var r = false;
var re = false;
var $g;
if ( ! FAdm.ns.sCat ) {
FAdm.ns.sCat = FAdm.ns.fetch( FAdm.ns.nCat );
}
if ( area ) { // edit mode; wgCategories empty
if ( FAdm.cat.reMaintain ) {
re = "\\[\\[ *" + FAdm.ns.sCat + ": *"
+ FAdm.cat.reMaintain + " *(\\||]])";
re = new RegExp( re );
r = re.test( area );
}
} else {
$g = jQuery( FAdm.guide.selTemplate );
if ( $g.length ) {
r = true;
} else {
if ( ! FAdm.file.cats ) {
FAdm.file.cats = mw.config.get( "wgCategories" );
}
FAdm.guide.furnish();
if ( ! FAdm.cat.regexpMaintain ) {
if ( FAdm.cat.reMaintain ) {
FAdm.cat.regexpMaintain =
new RegExp( FAdm.cat.reMaintain );
}
}
for ( i = 0; i < FAdm.file.cats.length; i++ ) {
k = FAdm.cat.family( FAdm.file.cats[i] );
if ( k < 0 ) {
r = true;
break; // for i
}
} // for i
}
}
return r;
}; // .cat.fenced()
FAdm.cat.file = function ( apply ) {
// Is current page member of a file category?
// Precondition:
// apply -- string with content tail, orfalse if unknown
// Current page is a file description page
// Postcondition:
// Returns true iff member of file category, maintenance ignored
// Uses:
// > .ns.nCat
// > .cat.reMaintain
// >< .ns.sCat
// >< .str.action
// >< .cat.regexpMaintain
// >< .file.cats
// .ns.fetch()
// .cat.family()
// .edit.field()
// mw.config.get()
// 2011-11-30 PerfektesChaos@de.wikipedia
var i, k;
var r = false;
var re;
var s;
if ( ! FAdm.ns.sCat ) {
FAdm.ns.sCat = FAdm.ns.fetch( FAdm.ns.nCat );
}
if ( ! FAdm.str.action ) {
FAdm.str.action = mw.config.get( "wgAction" );
}
switch ( FAdm.str.action ) {
case "view" :
if ( ! FAdm.cat.regexpMaintain ) {
if ( FAdm.cat.reMaintain ) {
FAdm.cat.regexpMaintain =
new RegExp( FAdm.cat.reMaintain );
}
}
if ( ! FAdm.file.cats ) {
FAdm.file.cats = mw.config.get( "wgCategories" );
}
for ( i = 0; i < FAdm.file.cats.length; i++ ) {
k = FAdm.cat.family( FAdm.file.cats[i] );
if ( k > 0 ) {
r = true;
break; // for i
}
} // for i
break;
case "edit" :
case "submit" :
if ( FAdm.cat.start ) {
re = "\\[\\[ *" + FAdm.ns.sCat
+ ": *" + FAdm.cat.start;
if ( apply ) {
s = apply;
} else {
s = FAdm.edit.field( false );
}
re = new RegExp( re );
r = ( re.test( s ) );
}
break;
} // switch wgAction
return r;
}; // .cat.file()
FAdm.cat.find = function () {
// Make link controls for category page tools (deutsch)
// Precondition:
// Current page displays file category
// Postcondition:
// Link controls for tools are created
// Uses:
// > .wins.lot
// > .wins.toolOut
// >< .cat.tools
// >< .str.page.title
// .wins.forwardMode()
// .portlet.factory()
// mw.config.get()
// mw.util.wikiUrlencode()
// 2011-10-10 PerfektesChaos@de.wikipedia
var s = "http://toolserver.org/~magnus/catscan_rewrite.php"
+ "?language=de&ns%5B6%5D=1&doit=1&categories=";
var tool = { target: false };
if ( ! FAdm.str.page.title ) {
FAdm.str.page.title = mw.config.get( "wgTitle" );
}
s = s + mw.util.wikiUrlencode( FAdm.str.page.title );
FAdm.wins.forwardMode();
if ( FAdm.wins.lot ) {
tool.target = FAdm.wins.toolOut;
}
if ( ! this.tools ) {
this.tools = [ false, false, false, false ];
}
tool.href = s + "&templates_no=Gepr%C3%BCfte+Datei";
tool.title = "Ungeprüft";
tool.id = "ca-filereview0";
tool.hint = "Ungeprüfte Dateien";
tool.hotkey = "0";
this.tools[0] = FAdm.portlet.factory( tool );
tool.href = s + "%0D%0ADatei%3AZweitpr%C3%BCfung+ausstehend";
tool.title = "1x geprüft";
tool.id = "ca-filereview1";
tool.hint = "Erst einmal geprüfte Dateien";
tool.hotkey = "1";
this.tools[1] = FAdm.portlet.factory( tool );
tool.href = s + "%0D%0ADatei%3Agepr%C3%BCfte+Datei";
tool.title = "2x geprüft";
tool.id = "ca-filereview2";
tool.hint = "Zweimal geprüfte Dateien";
tool.hotkey = "2";
this.tools[2] = FAdm.portlet.factory( tool );
tool.href = s + "&negcats=Datei%3ANoCommons";
tool.title = "ohne NoCommons";
tool.id = "ca-filereviewN";
tool.hint = "Dateien ohne 'NoCommons'";
tool.hotkey = "N";
this.tools[3] = FAdm.portlet.factory( tool );
/*
Nach Einführung: Vorlagen-Box (weißes Dingsda) ausblenden?
show= fileAdm.review.selTemplate + "{ display: none!important; }";
mw.util.addCSS( show );
*/
}; // .cat.find()
FAdm.cat.flip = function () {
// Divert window targets of category tool links
// Postcondition:
// Link controls for tools are set to current target
// Uses:
// > .wins.lot
// > .wins.toolOut
// >< .cat.tools
// 2011-08-31 PerfektesChaos@de.wikipedia
var domA;
var i;
if ( this.tools ) {
for ( i = 0; i < this.tools.length; i++ ) {
domA = this.tools[i].dom;
if ( FAdm.wins.lot ) {
domA.setAttribute( "target", FAdm.wins.toolOut );
} else {
domA.removeAttribute( "target" );
}
} // for i
}
}; // .cat.flip()
FAdm.cat.format = function () {
// Begin of editing file category page: insert or reformat template
// Precondition:
// Page contains wpTextbox1
// Postcondition:
// Page is formatted, template is in first line now
// Uses:
// > .cat.stamp
// > .cat.reNoParSuggest
// >< .str.page.title
// .cat.fenced()
// .edit.field()
// .edit.formatPageTail()
// mw.config.get()
// 2011-10-23 PerfektesChaos@de.wikipedia
var got;
var lazy;
var lock;
var re;
var scope = FAdm.edit.field( false );
var shift;
var swap;
if ( typeof( scope ) === "string" ) {
lock = this.fenced( scope );
lazy = lock;
re = new RegExp( "({{ *"
+ this.stamp
+ " *(\\| *([^}]*))? *}} *\n?)",
"i" );
shift = scope.replace( /\t/g, " " );
swap = "{{" + this.stamp;
got = re.exec( shift );
if ( got !== null ) {
if ( got[3] ) {
swap = swap + "|" + got[3];
lazy = true;
}
shift = shift.replace( re, "\n" );
}
if ( lock ) {
swap = "";
} else {
swap = swap + "}}";
}
got = FAdm.edit.formatPageTail( shift );
shift = got[0]
+ ( got[0].length && got[1].length ? "\n\n" : "")
+ got[1];
shift = swap + ( shift.length ? "\n\n" : "" ) + shift;
if ( ! lazy ) {
re = new RegExp( this.reNoParSuggest );
if ( ! FAdm.str.page.title ) {
FAdm.str.page.title = mw.config.get( "wgTitle" );
}
swap = FAdm.str.page.title.substr( this.start.length );
if ( ! re.test( swap ) ) {
shift = "{{" + this.stamp + "|"
+ swap
+ shift.substr( this.stamp.length + 2 );
}
}
if ( shift !== scope ) {
FAdm.edit.field( shift );
}
}
}; // .cat.format()
}; // .bb.cat()
mediaWiki.libs.fileAdm.bb.cat( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.cat;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.edit = function ( FAdm ) {
// Edit support
// 2012-06-11 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.edit !== "object" ) {
FAdm.edit = { template: { } };
}
if ( typeof FAdm.edit.template !== "object") {
FAdm.edit.template = { };
}
FAdm.edit.fetchRegexp = function ( ask ) {
// Fetch regexp for page title
// Precondition:
// ask -- regexp string for page title
// Postcondition:
// Return regexp string for page title
// 2013-01-11 PerfektesChaos@de.wikipedia
var r = ask.replace( /([.*+?(|){}\^$\x5B])/g, "\\$1" );
var s = r.substr( 0, 1 );
var sL = s.toLowerCase();
var sU = s.toUpperCase();
r = r.replace( /_/g, " " ).replace( / +/g, " " );
r = r.replace( / /g, "[ _]+" );
if ( sL !== sU ) {
r = "[" + sL + sU + "]" + r.substr( 1 );
}
return r;
}; // .edit.fetchRegexp()
FAdm.edit.field = function ( alter ) {
// Retrieve or replace wikitext using edit area
// Precondition:
// Interactive mode (web form)
// alter -- false or undefined: Retrieve wikitext
// string: Modified wikitext to be stored
// Postcondition:
// Return string: wpTextbox1 content if ! alter
// false: if alter
// if ! alter: editform unavailable
// or area not modifiable
// Uses:
// > .ia
// > .ia.editor
// > .ia.$textarea
// > .str.page.content
// .edit.form()
// "editform"
// >< .wpTextbox1
// WikEd
// > wikEd.disabled
// wikEd.Setup()
// wikEd.UpdateTextarea()
// wikEd.UpdateFrame()
// 2011-12-19 PerfektesChaos@de.wikipedia
var r = false;
if ( ! FAdm.ia ) { // initialize
this.form();
if ( FAdm.ia ) {
if ( typeof( window.wikEd ) === "object" ) {
if ( window.wikEd !== null ) {
if ( typeof( window.wikEd.disabled ) !== "boolean" ) {
if ( typeof window.wikEd.Setup === "function" ) {
window.wikEd.Setup();
}
}
if ( typeof( window.wikEd.disabled ) === "boolean" ) {
if ( ! window.wikEd.disabled ) {
FAdm.ia.editor = "wikEd";
} // not wikEd.disabled
} // wikEd.disabled boolean
} // != null
} // wikEd
} // ia
} // initialize
if ( typeof( FAdm.ia ) === "object" ) { // online
if ( typeof( alter ) === "string" ) { // replace
FAdm.ia.$textarea.val( alter );
switch ( FAdm.ia.editor ) {
case "wikEd" : // wikEd
window.wikEd.UpdateFrame( null );
break;
} // switch editor
} else { // retrieve
switch ( FAdm.ia.editor ) {
case "wikEd" : // wikEd
window.wikEd.UpdateTextarea( null );
break;
} // switch kit
FAdm.str.page.content = FAdm.ia.$textarea.val();
r = FAdm.str.page.content;
} // mode
} // online
return r;
}; // .edit.field()
FAdm.edit.finalize = function ( after ) {
// End (auto-)editing file description page, drop content/summary
// Precondition:
// Page contains wpTextbox1
// after -- false -- nothing to do
// array[3] -- modified
// [0] body string
// [1] summary; may be false if nothing done
// [2] true: minor change
// [3] (subject)
// [4] watchlist behaviour
// Postcondition:
// Page is formatted, templates are ahead of tail if appropriate
// Uses:
// > .str.page.content
// > .ia.$editform
// .edit.field()
// .str.trimLeft()
// 2011-10-24 PerfektesChaos@de.wikipedia
var $field;
var look;
var looking;
var setting;
var summary;
if ( after ) {
FAdm.str.page.content = after[0];
this.field( FAdm.str.page.content );
$field = FAdm.ia.$editform.find( "#wpSummary" );
if ( $field.length ) {
summary = $field.val();
if ( typeof( summary ) === "string" ) {
summary = FAdm.str.trimLeft( summary );
} else {
summary = "";
}
if ( after[1] ) {
if ( summary.length ) {
if ( summary.indexOf( after[1] ) < 0 ) {
if ( after[2] ) {
summary = summary + ", " + after[1];
} else {
summary = after[1] + ", " + summary;
}
}
} else {
summary = after[1];
}
}
$field.val( summary );
if ( typeof( after[4] ) === "string" ) {
setting = after[4];
if ( setting === "watch" ) {
look = true;
} else if ( setting === "unwatch" ) {
look = false;
} else {
setting = false;
}
if ( setting ) {
$field = FAdm.ia.$editform.find( "#wpWatchthis" );
if ( $field.length ) {
looking = $field.prop( "checked" );
if ( looking !== look ) {
if ( look ) {
$field.attr( "checked" );
} else {
$field.attr( "checked", null );
}
}
}
}
}
}
}
}; // .edit.finalize()
FAdm.edit.find = function ( ask, apply ) {
// Retrieve transclusion of template
// Precondition:
// ask -- core template name regexp
// apply -- false, or page content string (not UTF-8)
// Postcondition:
// Returns Array[2]
// [0] entire template
// [1] remaining text body
// false, if not found
// Uses:
// .edit.field()
// .edit.template.fetchRE()
// .str.trimLeft()
// .str.trimRight()
// 2011-11-30 PerfektesChaos@de.wikipedia
var got;
var r = false;
var re;
var s;
var see;
see = ( apply ? apply : this.field( false ) );
if ( see ) {
re = this.template.fetchRE( ask, false ) + "[^}]*}}";
re = new RegExp( re );
got = re.exec( see );
if ( got ) {
s = see.replace( re, "" );
s = FAdm.str.trimRight( FAdm.str.trimLeft( s ) );
s = s.replace( /\n\n\n+/g, "\n\n" );
r = [ got[0], s ];
}
}
return r;
}; // .edit.find()
FAdm.edit.fold = function ( adjust, ask, assign, align ) {
// Reformat template transclusion
// Precondition:
// adjust -- page content body string
// ask -- template name
// assign -- false: remove transclusion true: Normalize
// align -- true: order ahead of anything false: at end
// Postcondition:
// Return false -- no transclusion
// array[3] -- modified
// [0] adjusted content body string
// [1] entire transclusion
// [2] parameters from '|' until "}}"; or false
// [3] content body without transclusion
// Uses:
// .edit.template.fetchRE()
// .str.trimLeft()
// .str.trimRight()
// .edit.formatUserLink()
// 2011-11-30 PerfektesChaos@de.wikipedia
var got;
var k;
var n;
var r = false;
var re = "(" + this.template.fetchRE( ask, false ) + ")"
+ "(\\|[ \t\n]*"
+ "([^}]+:[^}]+({{!}})?[^}]+)*"
+ ")*"
+ "[ \t\n]*}}[ \t]*\n*";
var shift;
var story;
var stub;
var swap;
re = new RegExp( re );
got = re.exec( adjust );
if ( got !== null ) {
k = got[1].length;
n = got[0].length;
shift = adjust.substr( got.index, n );
story = shift.substr( k );
stub = adjust.substr( 0, got.index )
+ adjust.substr( got.index + n );
swap = false;
swap = "{{" + ask;
stub = FAdm.str.trimLeft( FAdm.str.trimRight( stub ) );
if ( story.charCodeAt( 0 ) === 124 ) { // '|'
story = FAdm.str.trimRight( story );
story = story.substr( 0, story.length - 2 );
story = this.formatUserLink( story );
swap = swap + story;
} else {
story = false;
}
swap = swap + "}}";
if ( assign ) {
if ( align ) {
shift = swap + "\n\n" + stub;
} else {
shift = stub + "\n\n" + swap;
}
}
r = [ shift, swap, story, stub ];
}
return r;
}; // .edit.fold()
FAdm.edit.form = function () {
// Setup interactive editform object
// Precondition:
// Interactive mode (web form)
// Postcondition:
// Object constructed, if possible
// Uses:
// >< .ia
// < .ia.$editform
// < .ia.$textarea
// < .ia.editor
// "editform"
// > .wpTextbox1
// 2011-10-10 PerfektesChaos@de.wikipedia
var $box;
var $form;
if ( ! FAdm.ia ) { // initialize
$form = jQuery( "#editform" );
if ( $form.length ) { // editing
$box = jQuery( "#wpTextbox1" );
if ( $box.length ) { // textarea
if ( ! $box.attr( "readonly" ) ) { // modifiable
FAdm.ia = { $editform: $form,
$textarea: $box,
editor: false };
} // modifiable
} // textarea
} // editing
} // initialize
}; // .edit.form()
FAdm.edit.formatPageTail = function ( adjust ) {
// Cleanup in tail region of some page: categories and interwiki
// Precondition:
// adjust -- page content string
// Postcondition:
// Return array[2]
// [0] body string
// [1] tail region: sort, categories, interwiki
// Uses:
// > .edit.defaultsort
// > .ns.nCat
// >< .ns.sCat
// < .edit.sisters
// .str.trimLeft()
// .str.trimRight()
// .ns.fetch()
// (.edit.foundIW)
// Requires: JavaScript 1.3 String.replace(regexp, function)
// 2012-06-10 PerfektesChaos@de.wikipedia
var got;
var re;
var seek = "Category";
var start = FAdm.str.trimRight( FAdm.str.trimLeft( adjust ) );
var swap = "";
start = start.replace( /\t/g, " " );
start = start.replace( /\{\{ +/g, "{{" );
start = start.replace( /\[\[ +/g, "[[" );
re = "{{(DEFAULTSORTKEY|DEFAULTCATEGORYSORT|DEFAULTSORT) *:";
re = new RegExp( re, "gi" );
start = start.replace( re, "{{DEFAULTSORT:" );
re = " *{{(DEFAULTSORT";
if ( this.defaultsort ) {
if ( this.defaultsort !== "DEFAULTSORT" ) {
re = re + "|" + this.defaultsort;
}
}
re = re + ") *:([^}\n]*}}) *\n?";
re = new RegExp( re, "i" );
got = re.exec( start );
if ( got !== null ) {
swap = "{{" + this.defaultsort + ":" + got[2];
start = start.replace( re, "" );
}
if ( ! FAdm.ns.sCat ) {
FAdm.ns.sCat = FAdm.ns.fetch( FAdm.ns.nCat );
}
if ( FAdm.ns.sCat !== seek ) {
seek = seek + "|" + FAdm.ns.sCat;
}
seek = "\\[\\[ *(" + seek + "): *(.+) *\\]\\] *\n?";
re = new RegExp( seek, "i" );
got = re.exec( start );
while ( got ) {
if ( swap ) {
swap = swap + "\n";
}
swap = swap + "[[" + FAdm.ns.sCat + ":" + got[2] + "]]";
start = start.substr( 0, got.index ) +
start.substr( got.index + got[0].length );
got = re.exec( start );
} // while got
swap = FAdm.str.trimRight( swap );
FAdm.edit.sisters = "";
re = "\n? *\\[\\["
+ "([a-z][a-z][-a-z]*)"
+ ":"
+ "([^|\n]+)"
+ "\\]\\] *"
+ "(\n)?";
re = new RegExp( re, "ig" );
start = FAdm.str.trimRight( start );
start = start.replace( re, this.foundIW );
if ( FAdm.edit.sisters ) {
swap = swap + "\n" + FAdm.edit.sisters;
start = FAdm.str.trimRight( start );
}
start = start.replace( /\n +\n/g, "\n\n" );
start = start.replace( /\n\n\n/g, "\n\n" );
return [ start, swap ];
}; // .edit.formatPageTail()
FAdm.edit.formatUserLink = function ( adjust ) {
// Format first link to a user, if any
// Precondition:
// adjust -- string, may contain user identification
// Postcondition:
// Returns string, may have re-formatted user links
// at least first user link has canonical form
// User properties are defined
// Uses:
// > .ns.sUser
// .users.fair()
// .str.trimLeft()
// .str.trimRight()
// 2013-08-25 PerfektesChaos@de.wikipedia
var i, j, k, re, signed,
story = FAdm.users.fair( adjust ),
start = "[[" + FAdm.ns.sUser + ":";
re = new RegExp( "(\\[\\[" + FAdm.ns.sUser + ":[^{[]+){{!}}",
"g" );
story = story.replace( re, "$1|" );
k = story.indexOf( start );
if ( k >= 0 ) {
k += start.length;
i = story.indexOf( "|", k );
j = story.indexOf( "]]", k );
if ( j > k ) {
start = story.substr( 0, k );
j = ( i > k && i < j ? i : j );
signed = story.slice( k, j );
story = story.substr( j );
signed = FAdm.str.trimRight( FAdm.str.trimLeft( signed ) );
signed = decodeURIComponent( signed );
story = start + signed + story;
}
}
return story;
}; // .edit.formatUserLink()
FAdm.edit.foundIW = function ( all, aim, assign, after ) {
// Analyse possible interwiki link
// Precondition:
// all -- entire string including possible prolog / epilog
// aim -- submatch [1]: possible sister project
// assign -- submatch [2]: title on aim
// after -- submatch [3]: trailing line break, or null
// Postcondition:
// Return unchanged string, or empty string if interwiki
// Uses:
// >< .edit.sisters
// .lang.flop()
// .str.trimLeft()
// .str.trimRight()
// Remark: Used as event handler -- 'this' is not FAdm.edit
// 2012-06-10 PerfektesChaos@de.wikipedia
var r = all;
var s;
// RegExp was used.
if ( ! FAdm.lang.flop( aim ) ) {
if ( assign.indexOf( "]" ) < 0 ) {
s = FAdm.str.trimRight( FAdm.str.trimLeft( assign ) );
if ( s ) {
FAdm.edit.sisters = FAdm.edit.sisters + "\n"
+ "[[" + aim.toLowerCase() + ":" + s
+ "]]";
r = ( after ? "\n" : "" );
}
}
}
return r;
}; // .edit.foundIW()
FAdm.edit.template.fetchParameter = function ( achieve, access ) {
// Fetch parameter from template transclusion
// Precondition:
// achieve -- string with template transclusion
// access -- number of parameter or string with name
// Postcondition:
// Return trimmed string for parameter value, or false
// Uses:
// .str.trimLeft()
// .str.trimRight()
// 2011-10-11 PerfektesChaos@de.wikipedia
var got;
var r = false;
var re = "\\|[ \t\n]*" + access + "[ \t\n]*=([^|}]*)[|}]";
re = new RegExp( re );
got = re.exec( achieve );
if ( got === null ) {
if ( typeof( access ) === "number" ) {
got = achieve.split( "|" );
if ( got.length >= access ) {
r = got[access];
if ( typeof( r ) === "string" ) {
r = r.replace( /\}\}$/, "" );
}
}
}
} else {
r = got[1];
}
if ( typeof( r ) === "string" ) {
r = FAdm.str.trimRight( FAdm.str.trimLeft( r ) );
}
return r;
}; // .edit.template.fetchParameter()
FAdm.edit.template.fetchRE = function ( ask, around ) {
// Fetch regexp for template transclusion
// Precondition:
// ask -- template name (trimmed)
// around -- include pipe or }}
// Postcondition:
// Return regexp string for template transclusion head
// Uses:
// > .ns.nTemplate
// >< .ns.sTemplate
// >< .ns.reTemplate
// .edit.fetchRegexp()
// .ns.fetch()
// Requires: JavaScript 1.5 non-capturing parentheses
// 2011-11-30 PerfektesChaos@de.wikipedia
var i;
var r;
var s;
if ( typeof( ask ) === "object" ) {
r = "(";
for ( i = 0; i < ask.length; i++ ) {
r = r + ( i ? "|" : "" )
+ FAdm.edit.fetchRegexp( ask[i] );
} // for i
r = r + ")";
} else {
r = FAdm.edit.fetchRegexp( ask );
}
if ( ! FAdm.ns.reTemplate ) {
if ( ! FAdm.ns.sTemplate ) {
FAdm.ns.sTemplate = FAdm.ns.fetch( FAdm.ns.nTemplate );
}
if ( FAdm.ns.sTemplate.toLowerCase() === "template" ) {
FAdm.ns.reTemplate = "[tT]emplate";
} else {
s = FAdm.ns.sTemplate.substr( 0, 1 );
FAdm.ns.reTemplate = "(?:[tT]emplate|["
+ s.toLowerCase() + s.toUpperCase()
+ "]"
+ FAdm.ns.sTemplate.substr( 1 ) + ")";
}
}
r = "{{[ \t\n]*"
+ "(?:" + FAdm.ns.reTemplate + ":[ \t\n]*)?" + r;
r = r + "[ \t\n]*";
if ( around ) {
r = r + "(?:}}|\\|)";
}
return r;
}; // .edit.template.fetchRE()
}; // .bb.edit()
mediaWiki.libs.fileAdm.bb.edit( mediaWiki.libs.fileAdm );
delete mediaWiki.libs.fileAdm.bb.edit;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.file = function ( FAdm, mw ) {
// File description page support
// 2012-06-11 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.file !== "object" ) {
FAdm.file = { };
}
FAdm.file.action = function () {
// Open single file description page
// Precondition:
// Page is supposed to be a local single file description page
// Description is not just a copy from Commons
// window.document is ready
// Postcondition:
// Basic procedures are performed.
// Advanced procedures are triggered.
// Returns void(0), as required in GUI action, if browser window
// Uses:
// > .file.type
// > .users.r
// > .review.features
// > .users.t
// > .trans.features
// > .queer.stamp
// > .queer.stampNotified
// > .queer.link
// > .trans.stamp
// >< .str.action
// >< .file.cats
// .guide.furnish()
// .guide.fancy()
// .queer.fetch()
// .edit.field()
// .edit.find()
// .trans.bot.find()
// .users.fidelity()
// .file.foreign()
// .file.first()
// .users.friend()
// .queer.features()
// .review.features()
// .portlet.factory()
// (.review.features)
// (.trans.features)
// (.queer.features)
// mw.config.get()
// mw.util.getParamValue()
// Remark: Used as event handler -- 'this' is not FAdm.file
// 2012-01-10 PerfektesChaos@de.wikipedia
var further = false;
var insider = -2;
var label = false;
var later = false;
var lazy;
var legal = true;
var live = false;
var lock = true;
var sub = false;
var select;
var spool;
var story;
var template;
if ( ! FAdm.str.action ) {
FAdm.str.action = mw.config.get( "wgAction" );
}
switch ( FAdm.str.action ) {
case "view" :
if ( ! mw.util.getParamValue("diff") ) {
label = true;
}
break;
case "submit" :
later = true;
// fall through
case "edit" : //
live = true;
break;
default :
lock = false;
} // switch wgAction
if ( label ) {
if ( ! FAdm.file.cats ) {
FAdm.file.cats = mw.config.get( "wgCategories" );
}
FAdm.guide.furnish();
FAdm.guide.fancy( FAdm.file.cats, false );
sub = FAdm.file.type.substr( 0, 1 ).toUpperCase();
switch ( sub ) {
case "C" :
if ( FAdm.file.type !== "category" ) {
further = FAdm.queer.features;
insider = 0;
legal = true;
lock = false;
FAdm.queer.fetch( 1, false );
}
break;
case "R" :
if ( ! FAdm.trans.flop( false ) ) {
insider = FAdm.users.r;
further = FAdm.review.features;
}
break;
case "F" :
case "T" :
if ( FAdm.users.fidelity() ) {
insider = 0;
legal = true;
} else {
insider = FAdm.users.t;
legal = false;
}
further = FAdm.trans.features;
break;
} // switch sub
}
if ( live ) {
lazy = false;
select = false;
spool = false;
story = false;
spool = mw.util.getParamValue( "fileAdm" );
if ( typeof( spool ) === "string" ) {
if ( spool.indexOf( "questionable" ) === 0 ) {
FAdm.queer.fetch( 2, spool );
select = spool;
lazy = true;
lock = false;
} else if ( spool === "approve" ) {
select = spool;
}
} else {
spool = false;
}
if ( ! lazy ) {
story = FAdm.edit.field( false );
template = FAdm.edit.find( FAdm.queer.stamp, story );
if ( template ) {
FAdm.queer.fetch( 3, template[0] );
lock = false;
}
}
template = FAdm.edit.find( FAdm.queer.stampNotified, story );
if ( template ) {
FAdm.queer.fetch( 4, template[0] );
lock = false;
}
if ( lock ) {
if ( FAdm.users.fidelity() ) {
FAdm.trans.bot.find( true, false );
} else {
FAdm.users.friend( "T",
FAdm.users.t,
FAdm.trans.bot.find );
}
if ( ! select ) {
if ( spool ) {
select = spool;
sub = true;
} else if ( FAdm.edit.find( FAdm.trans.stamp, story ) ) {
sub = true;
}
if ( ! sub ) {
if ( ! FAdm.file.foreign() ) {
insider = FAdm.users.r;
further = FAdm.review.features;
sub = "R";
}
}
}
} else {
further = FAdm.queer.features;
insider = 0;
label = true;
legal = true;
}
FAdm.file.first( select );
}
if ( further ) {
if ( insider ) {
if ( insider > 0 ) {
FAdm.users.friend( sub, insider, further );
}
} else if ( label ) {
further( legal, true );
}
}
if ( lock ) {
FAdm.queer.link.click = "queer.features(true,true)";
FAdm.queer.link.id = "ca-queer";
FAdm.portlet.factory( FAdm.queer.link );
}
return void(0);
}; // .file.action()
FAdm.file.fire = function ( action ) {
// Start editing of file description page
// Precondition:
// action -- URL parameter for edit
// Uses:
// >< .str.page.urlEnc
// >< .str.page.name
// mw.util.getParamValue()
// mw.config.get()
// mw.util.wikiUrlencode()
// mw.util.wikiScript()
// Remark: Used as event handler -- 'this' is not FAdm.file
// 2011-10-11 PerfektesChaos@de.wikipedia
var skin = mw.util.getParamValue( "useskin" );
var start = mw.config.get( "wgServer" ) +
mw.config.get( "wgScript" ) + "?title=";
if ( ! FAdm.str.page.urlEnc ) {
if ( ! FAdm.str.page.name ) {
FAdm.str.page.name = mw.config.get( "wgPageName" );
}
FAdm.str.page.urlEnc =
mw.util.wikiUrlencode( FAdm.str.page.name );
}
start = start + FAdm.str.page.urlEnc
+ "&action=edit&fileAdm=" + action;
if ( skin ) {
start = start + "&useskin=" + skin;
}
document.location.href = start;
}; // .file.fire()
FAdm.file.first = function ( action ) {
// Begin of file description page edit
// Precondition:
// Page contains wpTextbox1
// action -- false: just edit string: keyword list
// "approve", "transfer",
// "questionable.*"
// Postcondition:
// Page is formatted, templates are ahead of tail if appropriate
// Uses:
// > .ia.$editform
// .edit.field()
// .review.format()
// .trans.format()
// .queer.format()
// .file.format()
// .edit.finalize()
// Remark: Used as event handler -- 'this' is not FAdm.file
// 2013-01-11 PerfektesChaos@de.wikipedia
var change;
var lazy;
var s;
FAdm.edit.field( false );
if ( typeof( FAdm.str.page.content ) === "string" ) {
change = false;
lazy = true;
switch ( action ) {
case false :
break;
case "approve" :
change = FAdm.review.format( FAdm.str.page.content,
true );
lazy = false;
break;
case "transfer" :
change = FAdm.trans.format( true );
lazy = false;
break;
default :
if ( typeof( action ) === "string" ) {
if ( action.indexOf( "questionable" ) === 0 ) {
s = action.substr( 12 );
change = FAdm.queer.format( FAdm.str.page.content,
( s ? s : true ) );
lazy = false;
}
}
} // switch action
if ( lazy ) {
change = FAdm.file.format( FAdm.str.page.content );
}
FAdm.edit.finalize( change );
}
}; // .file.first()
FAdm.file.foreign = function () {
// Is file described on Commons or supposed to be transferred?
// Precondition:
// Any page is visible.
// window.document is ready
// Postcondition:
// true iff there is a hint for a file Commons detected
// Uses:
// > .file.selCommons
// > .file.selNowCommons
// 2011-10-10 PerfektesChaos@de.wikipedia
var r;
var $elem = jQuery( this.selCommons );
r = ( $elem.length > 0 );
if ( ! r ) {
$elem = jQuery( this.selNowCommons );
r = ( $elem.length > 0 );
}
return r;
}; // .file.foreign()
// splitted highlight - too many lines
FAdm.file.forge = function ( arglist ) {
// Create jQuery standard form box on top of file description page
// Precondition:
// arglist -- object with definition
// > .id -- box identifier
// > .shift -- link title for batch/edit
// > .soft -- link title for start editing
// > .splash -- method call for edit in process
// > .start -- method call for editing by URL
// > .style -- box decoration
// > .subject -- box headline
// > .submit -- method call for batch
// Postcondition:
// arglist modified
// < .$box -- jQuery box if created
// < .$content -- jQuery <div> for content region
// Uses:
// > .str.call
// > .batch.styleButton
// >< .str.action
// < .file.mode
// mw.config.get()
// 2013-01-07 PerfektesChaos@de.wikipedia
var suite;
var submit;
var $button;
var $flash;
var $head;
var $itemEdit;
var $linkEdit;
var $ul;
arglist.$box = jQuery( "<div />" );
if ( arglist.$box ) {
if ( typeof( arglist.id ) === "string" ) {
arglist.$box.attr( "id", arglist.id );
}
if ( typeof( arglist.style ) === "string" ) {
arglist.$box.attr( "style", arglist.style );
}
if ( typeof( arglist.subject ) === "string" ) {
$head = jQuery( "<strong />" );
$head.text( arglist.subject );
arglist.$box.append( $head );
}
arglist.$content = jQuery( "<div />" );
arglist.$box.append( arglist.$content );
if ( ! FAdm.str.action ) {
FAdm.str.action = mw.config.get( "wgAction" );
}
if ( typeof( arglist.start ) === "string" &&
typeof( arglist.shift ) === "string" ) {
switch ( FAdm.str.action ) {
case "view" :
FAdm.file.mode = 1;
break;
case "edit" :
case "submit" :
FAdm.file.mode = 2;
break;
default:
FAdm.file.mode = 0;
} // switch wgAction
}
if ( FAdm.file.mode ) {
suite = false;
$linkEdit = jQuery( "<a />" );
$button = false;
if ( FAdm.file.mode === 1 ) {
if ( typeof( arglist.soft ) === "string" ) {
suite = arglist.start;
$linkEdit.text( arglist.soft );
}
if ( typeof( arglist.submit ) === "string" ) {
submit = FAdm.str.call + arglist.submit
+ ";void(0);";
$flash = jQuery( "<a />" );
$flash.text( arglist.shift );
$flash.attr( "href", submit );
$flash.attr( "style", FAdm.batch.styleButton );
$button = jQuery( "<p />" );
$button.append( $flash );
}
} else if ( FAdm.file.mode === 2 ) {
suite = arglist.splash;
$linkEdit.text( arglist.shift );
}
if ( suite ) {
$ul = jQuery( "<ul />" );
$itemEdit = jQuery( "<li />" );
$linkEdit.attr( "href",
FAdm.str.call + suite + ";void(0);" );
$itemEdit.append( $linkEdit );
$ul.append( $itemEdit );
arglist.$box.append( $ul );
}
if ( $button ) {
arglist.$box.append( $button );
}
}
}
}; // .file.forge()
FAdm.file.format = function ( adjust ) {
// Reformat file description page
// Precondition:
// adjust -- page content string
// Postcondition:
// Return false -- nothing done
// array[3] -- modified
// [0] body string
// [1] summary; may be false if nothing done
// [2] true: minor change
// Uses:
// > .file.replace
// > .review.stamp
// > .edit.summary0
// .edit.formatPageTail()
// .edit.fold()
// .str.trimRight()
// 2012-08-30 PerfektesChaos@de.wikipedia
var got;
var i;
var r = false;
var shift;
var start;
var summary;
got = FAdm.edit.formatPageTail( adjust );
shift = got[1];
start = got[0];
if ( FAdm.file.replace ) {
for ( i = 0; i < FAdm.file.replace.length; i++ ) {
if ( typeof( FAdm.file.replace[i][0] ) === "string" ) {
FAdm.file.replace[i][0]
= new RegExp( FAdm.file.replace[i][0],
"g" );
}
start = start.replace( FAdm.file.replace[i][0],
FAdm.file.replace[i][1] );
} // for i
}
got = FAdm.edit.fold( start, FAdm.review.stamp, true, false );
if ( got ) {
start = got[0];
}
if ( start.length && shift.length ) {
start = start + "\n\n";
}
shift = start + shift + "\n";
if ( shift !== adjust ) {
summary = false;
if ( FAdm.str.trimRight( shift ) !==
FAdm.str.trimRight( adjust ) ) {
summary = FAdm.edit.summary0;
}
r = [ shift, summary, true ];
}
return r;
}; // .file.format()
}; // .bb.file()
mediaWiki.libs.fileAdm.bb.file( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.file;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.guide = function ( FAdm, mw, $ ) {
// File description page support
// 2012-09-02 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.guide !== "object" ) {
FAdm.guide = { xClm: { } };
}
if ( typeof FAdm.guide.xClm !== "object" ) {
FAdm.guide.xClm = { };
}
FAdm.guide.action = function () {
// Special view on some pages
// Precondition:
// Page is supposed to be a view listing file description links
// window.document is ready
// Postcondition:
// Images won't be displayed if not requested.
// Image toggle link is displayed.
// Procedures are performed.
// Returns void(0), as required in GUI action, if browser window
// Uses:
// > .ns.is
// > .ns.nSpecial
// > .ns.nProject
// > .ns.nOthers1
// > .opt.page.id
// > .guide.selTemplate
// >< .misc.pageid
// .opt.page.form()
// .guide.fill()
// mw.config.get()
// jQuery()
// Remark: Used as event handler -- 'this' is not FAdm.guide
// 2011-09-08 PerfektesChaos@de.wikipedia
var $guide;
var listed = false;
switch ( FAdm.ns.is ) {
case FAdm.ns.nSpecial :
listed = true;
break;
case FAdm.ns.nProject :
if ( typeof( FAdm.misc.pageid ) !== "number" ) {
FAdm.misc.pageid = mw.config.get( "wgArticleId" );
}
if ( FAdm.misc.pageid === FAdm.opt.page.id ) {
FAdm.opt.page.form();
break;
}
// fall through
case FAdm.ns.nOthers1 : //
// case ns.nUser :
$guide = jQuery( FAdm.guide.selTemplate );
listed = ( $guide.length > 0 );
break;
} // switch wgNamespaceNumber
if ( listed ) {
FAdm.guide.fill();
}
return void(0);
}; // .guide.action()
FAdm.guide.fancy = function ( assigned, adhere ) {
// Detect appropriate style for file decoration
// Precondition:
// assigned -- categories of file, Array
// adhere -- true: category is placed at assigned[].title
// false: namespace 'category:' is not heading
// Postcondition:
// Returns Array[2] with classification info
// [0] classification string
// [1] style string
// Uses:
// > .ns.nCat
// > .guide.cats
// > .guide.cats.none
// > .guide.cats.checking
// > .guide.cats.checkX
// > .guide.cats.review0
// > .guide.cats.review1
// > .guide.cats.review2
// > .guide.cats.license
// > .guide.cats.transmit
// > .guide.cats.transfer
// > .guide.cats.transit
// > .guide.cats.transfix
// > .guide.cats.trash
// > .guide.cats.transnot
// >< .ns.sCat
// < .file.type
// .ns.fetch()
// .guide.fulfil()
// 2011-09-19 PerfektesChaos@de.wikipedia
var gcs = FAdm.guide.cats;
var i;
var license = false;
var r = [ "unknown", gcs.none ];
var s;
var shift = false;
var shifting = false;
var snow = false;
var stack = false;
var start = false;
var stuck = false;
var succeed1 = false;
var succeed2 = false;
var suspect = false;
var swap = false;
if ( ! adhere ) {
if ( ! FAdm.ns.sCat ) {
FAdm.ns.sCat = FAdm.ns.fetch( FAdm.ns.nCat );
}
start = FAdm.ns.sCat + ":";
}
for ( i = 0; i < assigned.length; i++ ) {
s = assigned[i];
if ( adhere ) {
s = s.title;
} else {
s = start + s;
}
if ( ! license ) {
license = FAdm.guide.fulfil( s, gcs.license );
}
if ( ! suspect ) {
suspect = FAdm.guide.fulfil( s, gcs.checking );
}
if ( ! suspect ) {
if ( ! shift ) {
shift = FAdm.guide.fulfil( s, gcs.transfer );
}
if ( ! shifting ) {
shifting = FAdm.guide.fulfil( s, gcs.transfix );
}
if ( ! snow ) {
snow = FAdm.guide.fulfil( s, gcs.trash );
}
if ( ! stack ) {
stack = FAdm.guide.fulfil( s, gcs.transmit );
}
if ( ! swap ) {
swap = FAdm.guide.fulfil( s, gcs.transit );
}
if ( ! stuck ) {
stuck = FAdm.guide.fulfil( s, gcs.review0 );
}
if ( ! ( succeed1 || succeed2 ) ) {
succeed1 = FAdm.guide.fulfil( s, gcs.review1 );
succeed2 = FAdm.guide.fulfil( s, gcs.review2 );
}
}
} // for i
if ( suspect ) {
if ( license ) {
r = [ "checkX", gcs.checkX ];
} else {
r = [ "checking", suspect ];
}
} else if ( stuck || succeed1 || succeed2 ) {
if ( snow ) {
r = [ "trash", snow ];
} else if ( shifting || stack || swap ) {
r = [ "transnot", gcs.transnot ];
} else if ( succeed2 ) {
r = [ "review2", succeed2 ];
} else if ( succeed1 ) {
r = [ "review1", succeed1 ];
} else {
r = [ "review0", stuck ];
}
} else if ( license ) {
if ( shift || shifting || snow || stack || swap ) {
if ( snow ) {
r = [ "trash", snow ];
} else if ( shifting ) {
r = [ "transfix", shifting ];
} else if ( swap ) {
r = [ "transit", swap ];
} else {
r = [ "transfer", shift ];
}
} else {
r = [ "free", gcs.license[2] ];
}
}
FAdm.file.type = r[0];
return r;
}; // .guide.fancy()
FAdm.guide.fetch = function ( event, XMLHttpRequest, ajaxOptions ) {
// Perform API request for state of all file links
// Precondition:
// Parameters are ignored but may be evaluated
// Page is supposed to be a view on a guiding page
// Postcondition:
// Self-callback after completion of first request
// Uses:
// > .ns.nFile
// > .guide.multiQuery
// > .batch.maxTitles
// >< .ns.sFile
// >< .str.artPath
// >< .guide.stateQuery
// >< .guide.stateIndex
// >< .guide.jumpQuery
// >< .batch.api
// >< .batch.reBlacklist
// < .guide.stateFilter
// < .guide.stateMax
// < .guide.stateMin
// .ns.fetch()
// jQuery().ajaxError()
// jQuery.getJSON()
// (.batch.failure)
// (.guide.found)
// (.guide.fetch)
// mw.config.get()
// Remark: Used as event handler -- 'this' is not FAdm.guide
// 2012-02-22 PerfektesChaos@de.wikipedia
var k;
var m;
var n;
var s;
var set;
if ( ! FAdm.guide.stateQuery ) {
if ( ! FAdm.ns.sFile ) {
FAdm.ns.sFile = FAdm.ns.fetch( FAdm.ns.nFile );
}
if ( ! FAdm.str.artPath ) {
FAdm.str.artPath = mw.config.get( "wgArticlePath" );
FAdm.str.artPath = FAdm.str.artPath.replace( /\$1/, "" );
}
FAdm.guide.stateFilter = FAdm.str.artPath
+ FAdm.ns.sFile + ":";
FAdm.guide.stateQuery = { action: "query",
prop: "categories",
cllimit: 500,
indexpageids: true,
format: "json",
titles: false };
FAdm.guide.stateIndex = 0;
FAdm.guide.jumpQuery = FAdm.guide.multiQuery;
if ( ! FAdm.batch.api ) {
FAdm.batch.api = mw.util.wikiScript( "api" );
}
if ( typeof( FAdm.batch.reBlacklist ) === "string" ) {
FAdm.batch.reBlacklist =
new RegExp( "(" + FAdm.batch.reBlacklist + ")",
"gi" );
}
jQuery( document ).ajaxError( FAdm.batch.failure );
}
if ( FAdm.guide.stateIndex >= document.links.length ) {
FAdm.guide.stateIndex = 0;
FAdm.guide.jumpQuery = FAdm.guide.multiQuery;
if ( FAdm.guide.xClm.live ) {
FAdm.guide.xClm.portlet.removeAttribute( "style" );
FAdm.guide.xClm.live = false;
}
} else {
m = 0;
n = FAdm.str.artPath.length;
set = false;
if ( FAdm.guide.jumpQuery > FAdm.batch.maxTitles ) {
FAdm.guide.jumpQuery = FAdm.batch.maxTitles;
}
for ( true;
FAdm.guide.stateIndex < document.links.length;
FAdm.guide.stateIndex++ ) {
s = document.links[ FAdm.guide.stateIndex ].pathname;
k = s.indexOf( FAdm.guide.stateFilter );
if ( k >= 0 ) {
FAdm.guide.stateIndex++; // skip first link of img pair
s = decodeURIComponent( s.substr( n ) );
s = s.replace( FAdm.batch.reBlacklist, ".BLACKLIST." );
if ( set ) {
set = set + "|" + s;
} else {
set = s;
FAdm.guide.stateMin = FAdm.guide.stateIndex;
}
m++;
if ( m === FAdm.guide.jumpQuery ) {
break; // for stateIndex
}
}
} // for stateIndex
if ( set ) {
FAdm.guide.stateQuery.titles = set;
if ( FAdm.guide.stateIndex < document.links.length ) {
FAdm.guide.stateIndex++;
}
FAdm.guide.stateMax = FAdm.guide.stateIndex;
jQuery.getJSON( FAdm.batch.api,
FAdm.guide.stateQuery,
FAdm.guide.found );
}
FAdm.guide.jumpQuery += FAdm.guide.jumpQuery;
}
}; // .guide.fetch()
FAdm.guide.fill = function () {
// Decorate guiding page
// Precondition:
// Page is supposed to be a view listing file description links
// window.document is ready
// Postcondition:
// Images might be not yet displayed
// Image toggle link is displayed
// Procedures are performed
// Uses:
// > .guide.toggleImg
// > .guide.$mins
// > .guide.linkState
// > .opt.lessMini
// > .guide.toggleTgt
// > .wins.lot
// > .ns.is
// > .str.page.scp
// >< .guide.lessMini
// < .guide.toggleImg.name
// < .guide.toggleImg.script
// < .guide.linkState.click
// < .guide.linkState.id
// < .guide.toggleTgt.name
// < .guide.toggleTgt.script
// < .guide.xClm.click
// < .guide.xClm.id
// < .guide.xClm.live
// .opt.factory()
// .opt.fetch()
// .guide.flipImage()
// .portlet.factory()
// .wins.forwardSingle()
// (.guide.flipImage)
// (.guide.flipTarget)
// 2011-12-31 PerfektesChaos@de.wikipedia
var elem;
FAdm.guide.toggleImg.name = "MinImg";
FAdm.guide.toggleImg.script = "guide.flipImage";
if ( FAdm.opt.factory( FAdm.guide.toggleImg ) ) {
FAdm.guide.lessMini = FAdm.opt.fetch( FAdm.opt.lessMini );
FAdm.guide.flipImage( FAdm.guide.lessMini );
if ( FAdm.guide.$mins.length ) {
FAdm.guide.linkState.click = "guide.fetch()";
FAdm.guide.linkState.id = "ca-guide-state";
FAdm.portlet.factory( FAdm.guide.linkState );
FAdm.guide.toggleTgt.name = "TgtWin";
FAdm.guide.toggleTgt.script = "guide.flipTarget";
if ( FAdm.opt.factory( FAdm.guide.toggleTgt ) ) {
FAdm.portlet.flip( FAdm.guide.toggleTgt, FAdm.wins.lot );
}
FAdm.wins.forwardSingle();
if ( FAdm.ns.is === -1 ) {
if ( FAdm.str.page.scp === "Listfiles" ) {
FAdm.guide.xClm.click = "guide.xClm.fill(true)";
FAdm.guide.xClm.id = "ca-guide-column";
elem = FAdm.portlet.factory( FAdm.guide.xClm );
if ( elem ) {
FAdm.guide.xClm.portlet.setAttribute( "style",
"display:"
+ "none" );
FAdm.guide.xClm.live = true;
}
}
}
}
}
}; // .guide.fill()
FAdm.guide.flag = function ( about, apply, assign ) {
// Decorate file link
// Precondition:
// about -- class distinction string; false if invalid target
// apply -- style string; or false if invalid target
// assign -- page title, if valid target
// Postcondition:
// Current link is decorated
// Uses:
// > .guide.cats.invalid
// > .guide.stateMin
// > .guide.stateMax
// >< .str.artPath
// .str.trimRight()
// 2012-02-22 PerfektesChaos@de.wikipedia
var elem = false;
var i;
var ref;
var set;
var seek;
var select;
var style = FAdm.guide.cats.invalid;
var swap;
if ( apply ) {
seek = FAdm.str.artPath + assign;
for ( i = FAdm.guide.stateMin;
i < FAdm.guide.stateMax;
i++ ) {
ref = document.links[i];
swap = decodeURI( ref.pathname ).replace( /_/g, " " );
if ( unescape( swap ) === seek ) {
elem = ref;
i++;
if ( i < document.links.length ) {
ref = document.links[i];
swap = decodeURI( ref.pathname );
swap = swap.replace( /_/g, " " );
if ( unescape( swap ) === seek ) {
elem = ref;
}
}
style = apply;
break; // for i
}
} // for i
} else {
elem = document.links[ FAdm.guide.stateMin ];
}
if ( elem ) {
elem.setAttribute( "style", style );
if ( about ) {
select = "fileAdm_F_" + about;
set = "class";
if ( elem.hasAttribute( set ) ) {
select = FAdm.str.trimRight( elem.getAttribute( set ) )
+ " " + select;
}
elem.setAttribute( set, select );
}
}
}; // .guide.flag()
FAdm.guide.flipImage = function ( abolish ) {
// Toggle thumbnail images display, if any
// Precondition:
// abolish -- true: suppress thumbnail images
// Toggle link was created
// Postcondition:
// Image appearance toggled
// Toggle link is changed
// Uses:
// > .ns.is
// > .str.page.scp
// > .guide.toggleImg
// > .id
// > .opt.lessMini
// < .guide.$mins
// .portlet.flip()
// .opt.fetch()
// Remark: Used as event handler -- 'this' is not FAdm.guide
// 2011-12-31 PerfektesChaos@de.wikipedia
var selector = ".thumb";
var style;
if ( FAdm.ns.is === -1 ) {
if ( FAdm.str.page.scp === "Listfiles" ) {
// selector = ".TablePager_col_thumb";
selector = "a.image";
}
}
FAdm.guide.$mins = jQuery( selector );
if ( FAdm.guide.$mins.length ) {
if ( FAdm.guide.styleImg ) {
style = FAdm.guide.styleImg;
} else {
style = FAdm.guide.$mins.first().attr( "style" );
if ( typeof( style ) === "string" ) {
FAdm.guide.styleImg = style;
} else {
FAdm.guide.styleImg = true;
}
}
if ( abolish ) {
style = "display:none";
}
if ( typeof( style ) === "string" ) {
FAdm.guide.$mins.attr( "style", style );
} else {
FAdm.guide.$mins.removeAttr( "style" );
}
FAdm.portlet.flip( FAdm.guide.toggleImg, abolish );
FAdm.opt.fetch( FAdm.opt.lessMini, abolish );
} else if ( FAdm.guide.toggleImg.id ) {
jQuery( "#" + FAdm.guide.toggleImg.id ).css( "display",
"none" );
}
}; // .guide.flipImage()
FAdm.guide.flipTarget = function ( appear ) {
// Toggle separate target window/tab for single file description
// Precondition:
// appear -- true: show single page in separate window
// Toggle link was created
// Postcondition:
// Target page behaviour toggled
// Link targets changed
// Uses:
// > .guide.toggleTgt
// > .opt.multiWin
// < .wins.lot
// .portlet.flip()
// .opt.fetch()
// .wins.forwardSingle()
// .cat.flip()
// Remark: Used as event handler -- 'this' is not FAdm.guide
// 2011-08-31 PerfektesChaos@de.wikipedia
FAdm.wins.lot = appear;
FAdm.portlet.flip( FAdm.guide.toggleTgt, FAdm.wins.lot );
FAdm.opt.fetch( FAdm.opt.multiWin, FAdm.wins.lot );
FAdm.wins.forwardSingle();
FAdm.cat.flip();
}; // .guide.flipTarget()
FAdm.guide.found = function ( arrived ) {
// Postprocess file entry on guiding page list after ajax request
// Precondition:
// arrived -- JSON result of ajax query for guiding page
// Postcondition:
// DOM element A got appropriate colours
// Uses:
// > .guide.cats
// .guide.furnish()
// .guide.flag()
// .guide.fancy()
// Remark: Used as event handler -- 'this' is not FAdm.guide
// 2011-11-30 PerfektesChaos@de.wikipedia
var i;
var n;
var page;
var query = ( typeof( arrived ) === "object" );
var sel;
var sid;
var style;
var type;
FAdm.guide.furnish();
if ( query ) {
query = arrived.query;
}
if ( query ) {
n = query.pageids.length;
if ( n ) {
for ( i = 0; i < n; i++ ) {
sid = query.pageids[i];
if ( sid.charCodeAt( 0 ) === 45 ) { // '-'
FAdm.guide.flag( false, false );
} else {
sel = false;
style = false;
page = query.pages[sid];
if ( typeof( page.categories ) === "object" ) {
type = FAdm.guide.fancy( page.categories, true );
sel = type[0];
style = type[1];
}
FAdm.guide.flag( sel, style, page.title );
}
} // for i
} else {
FAdm.guide.flag( false, false );
}
} else {
FAdm.guide.flag( false, false );
}
FAdm.guide.fetch();
}; // .guide.found()
FAdm.guide.fulfil = function ( about, aim ) {
// Test whether a title matches an operational condition
// Precondition:
// about -- string to be tested
// aim -- operational guide.cats array[3]
// Postcondition:
// Returns style if matching, or false
// 2011-08-03 PerfektesChaos@de.wikipedia
var r = false;
switch ( aim[1] ) {
case 0 : // equals string
r = ( about === aim[0] );
break;
case 1 : // start with string
r = ( about.indexOf( aim[0] ) === 0 );
break;
case 2 : // test RegExp
r = aim[0].test( about );
break;
} // switch aim[1]
if ( r ) {
r = aim[2];
} //
return r;
}; // .guide.fulfil()
FAdm.guide.furnish = function () {
// Change human readable category style definition into operational
// Postcondition:
// .guide.cats are accelerated
// Uses:
// > .guide.cats
// > .ns.nCat
// > .cat.start
// >< .ns.sCat
// >< .guide.cats.lazyRE
// >< .guide.cats.checking
// >< .guide.cats.review0
// >< .guide.cats.review1
// >< .guide.cats.review2
// >< .guide.cats.license
// >< .guide.cats.transfer
// >< .guide.cats.transit
// >< .guide.cats.transfix
// >< .guide.cats.trash
// .guide.furnisher()
// 2011-09-19 PerfektesChaos@de.wikipedia
var gcs = this.cats;
if ( gcs.lazyRE ) {
gcs.lazyRE = false;
if ( ! FAdm.ns.sCat ) {
FAdm.ns.sCat = FAdm.ns.fetch( FAdm.ns.nCat );
}
gcs.category = [ FAdm.cat.start, 1, gcs.category ];
gcs.checking = this.furnisher( gcs.checking );
gcs.license = this.furnisher( gcs.license );
gcs.review0 = this.furnisher( gcs.review0 );
gcs.review1 = this.furnisher( gcs.review1 );
gcs.review2 = this.furnisher( gcs.review2 );
gcs.transfer = this.furnisher( gcs.transfer );
gcs.transit = this.furnisher( gcs.transit );
gcs.transmit = this.furnisher( gcs.transmit );
gcs.transfix = this.furnisher( gcs.transfix );
gcs.trash = this.furnisher( gcs.trash );
}
}; // .guide.furnish()
FAdm.guide.furnisher = function ( adjust ) {
// Prepare mapping of category
// Precondition:
// adjust -- human readable guide.cats element (Array[2])
// adjust[0] -- match: title string, or Array
// adjust[1] -- style
// Postcondition:
// Returns operational guide.cats element
// Array[3] [0] -- match: name string, or RegExp
// [1] -- mode
// 0: equals string
// 1: start with string
// 2: test RegExp
// [2] -- style = adjust[1]
// Uses:
// > .ns.sCat
// .str.substrEnd()
// 2011-08-24 PerfektesChaos@de.wikipedia
var i;
var r = [ adjust[0], 0, adjust[1] ];
var re;
switch ( typeof( adjust[0] ) ) {
case "string" :
if ( FAdm.str.substrEnd( r[0], 2 ) === ".*" ) {
r[0] = r[0].substr( 0, r[0].length - 2 );
r[1] = 1;
}
r[0] = FAdm.ns.sCat + ":" + r[0];
break;
case "object" : // Array
re = "^" + FAdm.ns.sCat + ":("; //// ns, escapeRegexp
for ( i = 0; i < r[0].length; i++ ) {
if ( i ) {
re = re + "|";
}
re = re + r[0][i];
} // for i
re = re + ")$";
r[0] = new RegExp( re );
r[1] = 2;
break;
} // switch typeof(adjust[0])
return r;
}; // .guide.furnisher()
FAdm.guide.further = function ( advanced, assign ) {
// Equip guiding page with review state link
// Precondition:
// advanced -- true: advanced functionality (Review User)
// assign -- true: set cookie
// Page is supposed to be a view on a guiding page
// Postcondition:
// Cookie is set
// Uses:
// .users.flag()
// 2011-08-18 PerfektesChaos@de.wikipedia
if ( assign ) {
FAdm.users.flag( "R", advanced );
}
}; // .guide.further()
FAdm.guide.xClm.fill = function ( ahead ) {
// Add column to Special:Listfiles table, or update
// Precondition:
// ahead -- true: setup column
// Current page is Special:Listfiles
// Uses:
// > .guide.xClm.portlet
// 2011-09-19 PerfektesChaos@de.wikipedia
var s;
var sort;
var xClm = this;
var $r;
var $tbl;
var $th;
if ( ahead ) {
$tbl = jQuery( ".TablePager" );
if ( $tbl.length ) {
sort = $tbl.attr( "class" );
this.portlet.setAttribute( "style", "display:none" );
$tbl.attr( "class", sort + " sortable" );
$r = jQuery( ".TablePager > thead > tr" );
if ( $r.length ) {
$r.children().each( function() {
$th = $( this );
sort = $th.attr( "class" )
+ " unsortable";
$th.attr( "class", sort );
} );
$th = jQuery( "<th />" );
if ( $th.length ) {
$th.text( "*" );
$th.attr( "class", "sortable" );
$r.children().last().after( $th );
}
}
}
}
$r = jQuery( ".TablePager > tbody > tr" );
if ( $r.length ) {
if ( ahead ) {
s = "<td class='TablePager_col_fileAdm'>";
$r.each( function() { $( this ).children().last().after( s );
} );
}
$r.each( function() { xClm.td = { $cell: false,
$kids: $( this ).children(),
scope: false };
xClm.td.$kids.each( xClm.find );
xClm.furnish();
} );
}
if ( this.td ) {
delete this.td;
}
}; // .guide.xClm.fill()
FAdm.guide.xClm.find = function ( index, Element ) {
// Examine any Special:Listfiles table cell in row
// Precondition:
// index -- number of table cell in row
// Element -- table cell
// Uses:
// < .guide.xClm.td.scope
// < .guide.xClm.td.$cell
// Remark: Used as event handler -- 'this' is not FAdm.guide.xClm
// 2011-09-19 PerfektesChaos@de.wikipedia
var s;
var xClm = FAdm.guide.xClm;
var $elem = jQuery( this );
switch ( $elem.attr( "class" ) ) {
case "TablePager_col_img_name" :
$elem = $elem.find( "a" );
if ( $elem.length ) {
s = $elem.attr( "class" );
if ( typeof( s ) === "string" ) {
if ( s.indexOf( "fileAdm_F_" ) === 0 ) {
xClm.td.scope = s.substr( 10 );
}
}
}
break;
case "TablePager_col_fileAdm" :
xClm.td.$cell = $elem;
break;
} // switch class
}; // .guide.xClm.furnish()
FAdm.guide.xClm.furnish = function () {
// Update content of Special:Listfiles additional cell
// Precondition:
// Current page is Special:Listfiles; .guide.xClm.td is filled
// Uses:
// > .guide.xClm.td.$cell
// > .guide.xClm.td.scope
// 2011-09-19 PerfektesChaos@de.wikipedia
var s;
if ( this.td.$cell ) {
s = ( this.td.scope ? this.td.scope : "" );
this.td.$cell.text( s );
}
}; // .guide.xClm.furnish()
}; // .bb.guide()
mediaWiki.libs.fileAdm.bb.guide( mediaWiki.libs.fileAdm, mediaWiki, jQuery);
delete mediaWiki.libs.fileAdm.bb.guide;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.lang = function ( FAdm ) {
// Language related
// 2012-06-07 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.lang !== "object" ) {
FAdm.lang = { };
}
FAdm.lang.sc3 = "ace|als|ang|arc|ast|ast|" +
"bar|bcl|bjn|bpy|bug|bxr|" +
"cdo|ceb|cho|chr|chy|ckb|crh|csb|" +
"diq|dsb|" +
"eml|epo|ext|" +
"frp|frr|fur|" +
"gag|gan|glk|got|gsw|" +
"hak|haw|hif|hsb|" +
"ilo|" +
"jbo|" +
"kaa|kab|kbd|koi|krc|ksh|" +
"lad|lbe|lez|lij|lmo|ltg|lzh|" +
"mdf|mhr|mrj|mus|mwl|myv|mzn|" +
"nah|nan|nap|nds|new|nov|nrm|nso|" +
"pag|pam|pap|pcd|pdc|pfl|pih|pms|pnb|pnt|" +
"rmy|rue|" +
"scn|scn|sco|sgs|srn|stq|szl|" +
"tet|tpi|tum|" +
"udm|" +
"vec|vep|vls|vro|" +
"war|wuu|" +
"wuu|" +
"xal|xmf|" +
"yue|" +
"zea"; // 2012-06-20
FAdm.lang.sre = "[a-z][a-z][a-z]?"
+ "|simple"
+ "|[a-z][a-z][a-z]?-[a-z][a-z][-a-z]*";
FAdm.lang.flop = function ( adjust ) {
// Analyze whether prefix is not a wikiproject language code
// Precondition:
// adjust -- heading characters before ':' in a wikilink
// Postcondition:
// Returns false iff language in any wikiproject
// String iff heading part of page name
// RegExp was used.
// Uses:
// > .lang.sre
// > .lang.sc3
// >< .lang.re
// .str.trimLeft()
// .lang.isO_639_1()
// 2013-01-11 PerfektesChaos@de.wikipedia
var got;
var k;
var r;
var s = FAdm.str.trimLeft( adjust );
if ( ! this.re ) {
this.re = new RegExp( "^(" + this.sre + ") *$", "i" );
}
got = this.re.exec( s );
if ( got ) {
r = s;
got = got[1];
s = got.toLowerCase();
k = got.length;
if ( k === 2 ) {
if ( s === "wp" ) {
r = "WP";
} else if ( this.isO_639_1( s ) ) {
r = false;
}
} else if ( k === 3 ) {
if ( s === "doi" ) {
r = s;
} else if ( this.sc3.indexOf( s ) >= 0 ) {
r = false;
}
} else if ( s === "simple" ) {
// } else if ( slang === "tokipona" ) {
} else if ( k > 5 ) {
k = s.indexOf( "-" );
if ( k === 2 || k === 3 ) {
/* |bat-smg|be-x-old|cbk-zam|fiu-vro|map-bms|nds-nl
|roa-rup|roa-tara|ru-sib
|zh-classical|zh-min-nan|zh-yue| */
if (/^[a-z][a-z][a-z]?-[a-z][a-z][\-a-z]*/.test(got)) {
r = false;
}
}
}
} else {
r = s;
} // matching lang?
return r;
}; // .lang.flop()
FAdm.lang.isO_639_1 = function ( ask ) {
// Is string a valid ISO 639-1 language code?
// Precondition:
// ask -- lowercase 2 letter query string
// Postcondition:
// Returns true iff ask is a valid ISO 639-1 language code
// 2010-07-18 PerfektesChaos@de.wikipedia
var s = "|aa|ab|ae|af|ak|am|an|ar|as|av|ay|az"
+ "|ba|be|bg|bh|bi|bm|bn|bo|br|bs"
+ "|ca|ce|ch|co|cr|cs|cu|cv|cy"
+ "|da|de|dv|dz"
+ "|ee|el|en|eo|es|et|eu"
+ "|fa|ff|fi|fj|fo|fr|fy"
+ "|ga|gd|gl|gn|gu|gv"
+ "|ha|he|hi|ho|hr|ht|hu|hy|hz"
+ "|ia|id|ie|ig|ii|ik|io|is|it|iu"
+ "|ja|jv"
+ "|ka|kg|ki|kj|kk|kl|km|kn|ko|kr|ks|ku|kv|kw|ky"
+ "|la|lb|lg|li|ln|lo|lt|lu|lv"
+ "|mg|mh|mi|mk|ml|mn|mr|ms|mt|my"
+ "|na|nb|nd|ne|ng|nl|nn|no|nr|nv|ny"
+ "|oc|oj|om|or|os"
+ "|pa|pi|pl|ps|pt"
+ "|qu"
+ "|rm|rn|ro|ru|rw"
+ "|sa|sc|sd|se|sg|sh|si|sk|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw"
+ "|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|ty"
+ "|ug|uk|ur|uz"
+ "|ve|vi|vo"
+ "|wa|wo"
+ "|xh"
+ "|yi|yo"
+ "|za|zh|zu|";
return ( s.indexOf( ask ) > 0 );
}; // .lang.isO_639_1()
}; // .bb.lang()
mediaWiki.libs.fileAdm.bb.lang( mediaWiki.libs.fileAdm );
delete mediaWiki.libs.fileAdm.bb.lang;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.misc = function ( FAdm, mw ) {
// Misc utilities
// 2012-09-15 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.misc !== "object" ) {
FAdm.misc = { lean: false };
}
FAdm.misc.message = function ( apply, assign, always, absolute ) {
// Show message similar to mw.util.jsMessage() MW 1.19
// Precondition:
// apply -- HTML box content
// assign -- identifier (unused since mw.util.jsMessage())
// always -- true: keep visible; else enable diminishing
// absolute -- CSS property assignments like width
// Uses:
// >< .misc.lean
// >< .misc.$msg
// >< .misc.$msgTop
// mw.util.addCSS()
// jQuery()
// 2012-09-15 PerfektesChaos@de.wikipedia
var $e;
var s;
if ( ! this.lean ) {
mw.util.addCSS(".cn-fundraiser-banner,"
+ "#mw-js-message,"
+ "#siteNotice,"
+ "#fundraising\n"
+ "{display: none;}");
this.lean = true;
}
if ( apply ) {
if ( absolute ) {
if ( this.$msgTop ) {
this.$msgTop.empty();
} else {
$e = jQuery( "#content" );
if ( $e.length ) {
s = "<div class='fileAdmTop'></div>";
this.$msgTop = jQuery( s );
$e.before( this.$msgTop );
}
}
if ( this.$msgTop ) {
s = "position: relative;" +
"display: block;" +
absolute;
// position: absolute;
// right: 1em;
// top: 7em;
// width: 20em;
this.$msgTop.attr( "style", s );
this.$msgTop.append( apply );
}
} else {
if ( this.$msg ) {
this.$msg.empty();
} else {
$e = jQuery( "#bodyContent" );
if ( ! $e.length ) {
$e = jQuery( "#article" );
if ( ! $e.length ) {
$e = jQuery( "#content" );
}
}
if ( $e.length ) {
this.$msg = jQuery( "<div class='fileAdm'></div>" );
$e.before( this.$msg );
}
}
if ( this.$msg ) {
s = "display: block;"
+ "font-size: 90%;";
this.$msg.attr( "style", s );
this.$msg.append( apply );
}
}
} else {
if ( this.$msgTop ) {
this.$msgTop.attr( "style", "display: none;" );
}
if ( this.$msg ) {
this.$msg.attr( "style", "display: none;" );
}
}
}; // .misc.message()
}; // .bb.misc()
mediaWiki.libs.fileAdm.bb.misc( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.misc;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.ns = function ( FAdm, mw ) {
// Namespace related
// 2012-08-30 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.ns !== "object" ) {
FAdm.ns = { };
}
FAdm.ns.fetch = function ( access ) {
// Fetch namespace related information
// Precondition:
// access -- namespace number
// Postcondition:
// Returns formatted namespace name
// Uses:
// >< .ns.map
// .str.fromNum()
// mw.config.get()
// 2011-10-09 PerfektesChaos@de.wikipedia
var r;
if ( ! FAdm.ns.map ) {
FAdm.ns.map = mw.config.get( "wgFormattedNamespaces" );
}
r = FAdm.ns.map[ FAdm.str.fromNum( access ) ];
return r;
}; // .ns.fetch()
}; // .bb.ns()
mediaWiki.libs.fileAdm.bb.ns( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.ns;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.opt = function ( FAdm, mw ) {
// User option administration
// 2012-09-15 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.opt !== "object" ) {
FAdm.opt = { control: { },
page: { } };
}
if ( typeof FAdm.opt.control !== "object" ) {
FAdm.opt.control = { };
}
if ( typeof FAdm.opt.page !== "object" ) {
FAdm.opt.page = { };
}
FAdm.opt.factory = function ( arglist ) {
// Create toggle link from general definition
// Precondition:
// arglist -- object with definition
// > .hint -- tooltip
// > .hotkey -- single character
// > .name -- toggle distinguisher
// > .title -- constant link title
// Postcondition:
// Returns true if toggle was created
// arglist modified
// < .click -- function
// < .id -- control id distinguisher
// < .varText -- SPAN for variable link text
// Uses:
// .portlet.factory()
// 2011-08-31 PerfektesChaos@de.wikipedia
var r = false;
arglist.click = "void(0);";
arglist.id = "ca-toggle-" + arglist.name;
FAdm.portlet.factory( arglist );
if ( arglist.a ) {
arglist.varText = document.createElement( "span" );
if ( arglist.varText ) {
r = true;
arglist.a.dom.appendChild( arglist.varText );
arglist.varText.textContent = "* * *";
}
}
return r;
}; // .opt.factory()
FAdm.opt.fetch = function ( arglist, already ) {
// Retrieve option data from cookie or user script if no cookie
// Precondition:
// arglist -- object with definition
// > .env -- user script environment identifier
// > .obj -- object value if user defined
// > .val -- fallback value if not yet suggested
// > .typ -- typeof required value
// already -- current value if known
// Postcondition:
// Returns option data
// Uses:
// > .opt.keep
// .str.fromNum()
// jQuery.cookie()
// 2013-01-12 PerfektesChaos@de.wikipedia
var expiry = { expires: null,
path: "/" };
var r;
var re0 = /^(false|0)$/;
var re1 = /^(true|1)$/;
var spec = "fileAdm_" + arglist.env;
var store;
if ( already === undefined ) {
store = jQuery.cookie( spec );
if ( typeof( store ) === "string" ) {
if ( arglist.typ === "number" ) {
if ( store !== "NaN" ) {
r = store;
}
} else {
r = store;
}
}
} else {
r = already;
}
if ( r === undefined && arglist.obj !== undefined ) {
r = arglist.obj;
}
if ( r === undefined ) {
r = arglist.val;
}
switch ( typeof( r ) ) {
case "string" :
switch ( arglist.typ ) {
case "boolean" :
if ( re0.test( store ) ) {
r = false;
} else if ( re1.test( store ) ) {
r = true;
}
break;
case "choice" :
r = r.toLowerCase();
break;
case "number" :
r = parseInt( r, 10 );
break;
} // switch arglist.typ
store = r;
break;
case "boolean" :
store = ( r ? "true" : "false" );
break;
case "number" :
store = FAdm.str.fromNum( r );
break;
} // switch typeof(r)
if ( this.keep < 0 ) {
store = null;
} else if ( this.keep > 0 ) {
expiry.expires = this.keep;
}
jQuery.cookie( spec, store, expiry );
return r;
}; // .opt.fetch()
FAdm.opt.fire = function () {
// Reaction on user submission of options form
// Precondition:
// Submit action of options form
// Uses:
// > .opt.memory
// > .opt.multiWin
// > .opt.lessMini
// > .opt.watchQ
// > .opt.watchT
// < .opt.keep
// < .batch.watchQ
// < .batch.watchT
// < .wins.lot
// < .guide.lessMini
// .opt.fired()
// .opt.fetch()
// .opt.fresh()
// 2013-01-27 PerfektesChaos@de.wikipedia
if ( this.fired( "fA-radio_memory_0" ) ) {
this.keep = 0;
} else if ( this.fired( "fA-radio_memory_28" ) ) {
this.keep = 28;
} else {
this.keep = -1;
}
if ( this.fired( "fA-radio_watchQ_preferences" ) ) {
FAdm.batch.watchQ = "preferences";
} else if ( this.fired( "fA-radio_watchQ_nochange" ) ) {
FAdm.batch.watchQ = "nochange";
} else if ( this.fired( "fA-radio_watchQ_unwatch" ) ) {
FAdm.batch.watchQ = "unwatch";
} else {
FAdm.batch.watchQ = "watch";
}
if ( this.fired( "fA-radio_watchT_preferences" ) ) {
FAdm.batch.watchT = "preferences";
} else if ( this.fired( "fA-radio_watchT_nochange" ) ) {
FAdm.batch.watchT = "nochange";
} else if ( this.fired( "fA-radio_watchT_unwatch" ) ) {
FAdm.batch.watchT = "unwatch";
} else {
FAdm.batch.watchT = "watch";
}
this.fetch( this.memory, this.keep );
FAdm.guide.lessMini = this.fired( "fA-radio_lessMini_true" );
FAdm.wins.lot = this.fired( "fA-radio_multiWin_true" );
this.fetch( this.multiWin, FAdm.wins.lot );
this.fetch( this.lessMini, FAdm.guide.lessMini );
this.fetch( this.watchQ, FAdm.batch.watchQ );
this.fetch( this.watchT, FAdm.batch.watchT );
this.fresh();
}; // .opt.fire()
FAdm.opt.fired = function ( access ) {
// Retrieve checked value of radio button or checkbox
// Precondition:
// access -- element selector (without leading "#")
// Postcondition:
// Uses:
// Returns true or false, else undefined
// 2011-10-12 PerfektesChaos@de.wikipedia
// jQuery( "input:radio[name=bar]:checked" ).val();
var r;
var $el = jQuery( "#" + access );
if ( $el.length ) {
if ( $el.prop( "checked" ) ) {
r = true;
} else {
r = false;
}
}
return r;
}; // .opt.fired()
FAdm.opt.fit = function () {
// Initialize user options from object
// Uses:
// > .options.*
// > .opt.memory
// > .opt.lessMini
// > .opt.multiWin
// > .opt.watchQ
// > .opt.watchT
// .opt.fitter()
// 2013-01-12 PerfektesChaos@de.wikipedia
if ( typeof( FAdm.options ) === "object" ) {
this.fitter( this.memory );
this.fitter( this.lessMini );
this.fitter( this.multiWin );
this.fitter( this.watchQ );
this.fitter( this.watchT );
}
}; // .opt.fit()
FAdm.opt.fitter = function ( arglist ) {
// Initialize user option from object
// Precondition:
// arglist -- object with definition
// > .env -- identifier in .opt.user
// > .typ -- required type
// < .obj -- value taken
// .options is an object
// Uses:
// > .options.*
// < .opt.*.val
// 2013-01-12 PerfektesChaos@de.wikipedia
var s,
v = FAdm.options[ arglist.env ];
if ( v !== undefined ) {
s = ( arglist.typ === "choice" ? "string" : arglist.typ );
if ( typeof( v ) === s ) {
arglist.obj = v;
}
}
}; // .opt.fitter()
FAdm.opt.fresh = function () {
// Transfer option data set into application
// Uses:
// > .opt.multiWin
// > .opt.lessMini
// > .opt.watchQ
// > .opt.watchT
// < .wins.lot
// < .guide.lessMini
// < .batch.watchQ
// < .batch.watchT
// 2013-01-13 PerfektesChaos@de.wikipedia
FAdm.wins.lot = FAdm.opt.fetch( FAdm.opt.multiWin );
FAdm.guide.lessMini = FAdm.opt.fetch( FAdm.opt.lessMini );
FAdm.batch.watchQ = FAdm.opt.fetch( FAdm.opt.watchQ );
FAdm.batch.watchT = FAdm.opt.fetch( FAdm.opt.watchT );
}; // .opt.fresh()
FAdm.opt.control.factory = function ( access, aim, apply, assign, active ) {
// Create <input> string
// Precondition:
// access -- element selector (without leading "#")
// aim -- 'submit' or 'radio', 'checkbox', 'text'
// apply -- initial string, or true if checked; 'submit' label
// assign -- group or event name
// active -- boolean: enabled or disabled control
// Postcondition:
// Returns input element string
// Remark:
// IE requires type='...' already on jQuery creation
// 2011-09-28 PerfektesChaos@de.wikipedia
var r = "<input id='" + access + "' type='" + aim + "'";
var show;
switch ( aim ) {
case "radio" :
r = r + " name='" + assign + "'";
// fall through
case "checkbox" : //
if ( apply ) {
r = r + " checked='init'";
}
break;
case "text" :
if ( apply ) {
if ( apply.length ) {
show = apply.replace( /\x27/g, "%27" ); // '
r = r + " value='" + show + "'";
}
}
break;
case "submit" :
r = r + " value='"
+ ( apply.length ? apply : "Submit" )
+ "'";
break;
} // switch
if ( typeof( active ) === "boolean" ) {
if ( ! active ) {
r = r + " disabled'";
}
}
r = r + ">";
return r;
}; // .opt.control.factory()
FAdm.opt.control.formel = function ( arglist ) {
// Create <input> string for checkbox
// Precondition:
// arglist -- object with definition
// > .active -- not disabled
// > .checked -- initial value
// > .id -- identifier
// > .hint -- tooltip
// Postcondition:
// Returns jQuery element
// Uses:
// .opt.control.factory()
// 2011-09-28 PerfektesChaos@de.wikipedia
var s = this.factory( arglist.id,
"checkbox",
arglist.checked,
undefined,
arglist.active );
var $r = jQuery( s );
if ( arglist.hint ) {
$r.attr( "title", arglist.hint );
}
return $r;
}; // .opt.control.formel()
FAdm.opt.page.form = function () {
// Decorate user options form page
// Precondition:
// Current page is user options form page
// Postcondition:
// Page is decorated and converted into form
// Uses:
// > .str.call
// > .opt.memory
// > .wins.lot
// > .guide.lessMini
// > .batch.watchQ
// > .batch.watchT
// > .users.n
// > mw.util.$content
// >< .opt.keep
// < .opt.page.$table
// .opt.fetch()
// .opt.fresh()
// .users.fetch()
// .opt.page.forming()
// .opt.page.formula()
// .opt.page.format()
// .opt.page.found()
// jQuery.find()
// (.opt.fire)
// 2013-01-13 PerfektesChaos@de.wikipedia
var script;
var watches;
var $form = jQuery( "#fA-form1" );
jQuery( "#fA_noscript" ).remove();
if ( $form.length ) {
script = FAdm.str.call + "opt.fire();void(0);";
watches = [ "preferences", "watch",
"nochange", "unwatch" ];
$form.wrap( "<form action='" + script + "' method='POST'>" );
FAdm.opt.keep = FAdm.opt.fetch( FAdm.opt.memory );
FAdm.opt.fresh();
FAdm.users.fetch();
this.forming( "memory", FAdm.opt.keep, [-1, 0, 28] );
this.forming( "multiWin", FAdm.wins.lot );
this.forming( "lessMini", FAdm.guide.lessMini );
this.forming( "watchQ", FAdm.batch.watchQ, watches );
this.forming( "watchT", FAdm.batch.watchT, watches );
this.formula( "TUSC1cn", FAdm.users.n, 40, 100 );
this.formula( "TUSC1pw", false, 40, 40 );
this.format( "fA-form1-submit", "submit" );
// click ---> ???? .opt.fire()
this.$table = mw.util.$content.find( "#fA-form1" );
this.found( "memory" );
this.found( "multiWin" );
this.found( "lessMini" );
this.found( "watchQ" );
this.found( "watchT" );
}
}; // .opt.page.form()
FAdm.opt.page.format = function ( access, aim, apply, assign ) {
// Convert <div> into <input>
// Precondition:
// access -- element selector (without leading "#")
// aim -- "submit" or "radio" or "checkbox" or "text"
// apply -- initial string, or true if checked
// assign -- group or event name
// Postcondition:
// Returns input element
// Uses:
// .opt.control.factory()
// 2011-09-08 PerfektesChaos@de.wikipedia
var r = false;
var show;
var $el = jQuery( "#" + access );
if ( $el.length ) {
show = apply;
if ( aim === "submit" ) {
show = $el.text();
}
r = $el.replaceWith( FAdm.opt.control.factory( access,
aim,
show,
assign ) );
}
return r;
}; // .opt.page.format()
FAdm.opt.page.forming = function ( access, apply, allow ) {
// Convert <div> into <input type='radio'>
// Precondition:
// access -- element group selector
// apply -- initial check state
// allow -- optional array, if not boolean
// Postcondition:
// Radio element created and initialized
// Uses:
// .opt.page.format()
// 2011-09-08 PerfektesChaos@de.wikipedia
var i;
var k;
var n;
var start = "fA-radio_" + access;
var $el;
var $false;
var $true;
if ( typeof( apply ) === "boolean" ) {
$false = this.format( start + "_false",
"radio",
! apply,
start );
$true = this.format( start + "_true",
"radio",
apply,
start );
} else if ( typeof( allow ) === "object" ) {
n = allow.length;
for ( i = 0; i < n; i++ ) {
k = allow[i];
$el = this.format( start + "_" + k,
"radio",
( k === apply ),
start );
} // for i
}
}; // .opt.page.forming()
FAdm.opt.page.formula = function ( access, apply, aware, amount ) {
// Convert <div> into <input type='text'>
// Precondition:
// access -- element group selector
// apply -- initial string, or false for password
// aware -- visible number of characters
// amount -- maximum number of characters
// Postcondition:
// Text input element created and initialized
// Uses:
// .opt.page.format()
// 2011-09-08 PerfektesChaos@de.wikipedia
var light = ( typeof( apply ) === "string" );
var see = ( light ? "text" : "password" );
var $el = this.format( "fA-" + see + "_" + access,
see,
apply );
if ( $el.length ) {
$el.attr( "size", aware );
$el.attr( "maxlength", amount );
}
}; // .opt.page.formula()
FAdm.opt.page.found = function ( access ) {
// Show user default at <code />
// Precondition:
// access -- element group selector
// Uses:
// > .opt.*.obj
// > .opt.page.$table
// .str.fromNum()
// jQuery.find()
// jQuery.text()
// 2013-01-11 PerfektesChaos@de.wikipedia
var v = FAdm.opt[ access ];
var s;
var $el;
if ( v ) {
v = v.obj;
switch ( typeof( v ) ) {
case "string" :
s = """ + v + """;
break;
case "boolean" :
s = ( v ? "true" : "false" );
break;
case "number" :
s = FAdm.str.fromNum( v );
break;
default:
s = false;
} // switch typeof(v)
if ( s ) {
$el = this.$table.find( "#fA-option_" + access );
$el.text( s );
}
}
}; // .opt.page.found()
}; // .bb.opt()
mediaWiki.libs.fileAdm.bb.opt( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.opt;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.portlet = function ( FAdm, mw ) {
// Support portlet links
// 2012-09-15 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.portlet !== "object" ) {
FAdm.portlet = { };
}
FAdm.portlet.factory = function ( arglist ) {
// Wrapper for mw.util.addPortletLink()
// Precondition:
// arglist -- object with definition
// > .href -- string, e.g. "http://..."
// > .click -- action, if .href not defined
// either function or string
// > .title -- visible title
// > .id -- selector for portlet element
// > .hint -- tooltip
// > .hotkey -- hotkey character
// > .target -- target of link, or false
// action -- click event handler
// Postcondition:
// Portlet link created
// Returns false iff failed, else <A> element { dom, id }
// arglist modified
// < .portlet -- DOM MW portlet element
// < .a -- <A> element { dom, id }
// Uses:
// > .str.call
// > .str.script
// .portlet.fetch()
// mw.util.addPortletLink()
// 2013-11-01 PerfektesChaos@de.wikipedia
var domEl;
var domNodes = this.fetch();
var href = "#-";
var link = ( typeof( arglist.href ) === "string" );
var r = false;
var re;
if ( link ) {
href = arglist.href;
} else if ( typeof( arglist.click ) === "string" ) {
href = FAdm.str.call + arglist.click;
link = true;
}
if ( link ) {
if ( href.indexOf( FAdm.str.script ) === 0 ) {
re = new RegExp( "\\bvoid *\\(" );
if ( ! re.test( href ) ) {
href = href + ";void(0);";
}
}
}
arglist.portlet = mw.util.addPortletLink( domNodes[0],
href,
arglist.title,
arglist.id,
arglist.hint,
arglist.hotkey,
domNodes[1] );
if ( arglist.portlet ) {
domEl = arglist.portlet;
arglist.a = false;
while ( domEl ) {
if ( domEl.nodeName.toUpperCase() === "A" ) {
arglist.a = { dom: domEl,
id: arglist.id + ".a" };
break; // while
} else if ( domEl.hasChildNodes() ) {
domEl = domEl.firstChild;
} else {
break; // while
}
} // while
if ( arglist.a ) {
arglist.a.dom.setAttribute( "id", arglist.a.id );
if ( ! link ) {
jQuery( "#" + arglist.a.id ).click(
function( event ) {
event.preventDefault();
arglist.click();
} );
}
if ( typeof( arglist.target ) === "string" ) {
arglist.a.dom.target = arglist.target;
}
r = arglist.a;
} else {
arglist.portlet = false;
}
}
return r;
}; // .portlet.factory()
FAdm.portlet.fetch = function () {
// Fetch standard portlet location for any fileAdm tool link
// Postcondition:
// Returns array[2]
// [0] selector ID of tool container
// [1] DOM elem or selector of next link to insert ahead
// Uses:
// >< .portlet.$portlet
// mw.config.get()
// 2012-08-30 PerfektesChaos@de.wikipedia
var scope = "p-tb";
var sel;
var stick = "#t-whatlinkshere";
var $li;
if ( mw.config.get( "skin" ) === "vector" ) {
if ( typeof( this.$portlet ) !== "object" ) {
sel = "#right-navigation";
this.$portlet = jQuery(document).find( sel );
}
if ( this.$portlet.length ) {
sel = "#p-cactions .menu li";
$li = this.$portlet.find( sel );
if ( $li.length ) {
stick = $li.get( 0 );
} else {
stick = "#-";
}
// resources/jquery/jquery.collapsibleTabs.js
scope = "p-cactions";
}
}
return [ scope, stick ];
}; // .portlet.fetch()
FAdm.portlet.flip = function ( arglist, apply ) {
// Toggle link
// Precondition:
// arglist -- object with definition
// > .a -- DOM portlet link
// > .off -- variable link text: "Off"
// > .on -- variable link text: "On"
// > .script -- script name to be executed
// > .varText -- SPAN for variable link text
// < .last -- apply
// apply -- true: show "Off", link to "On"
// Toggle link was created
// Postcondition:
// Toggle link is changed
// Uses:
// > .str.call
// 2011-10-06 PerfektesChaos@de.wikipedia
var script;
if ( arglist ) {
if ( arglist.varText ) {
script = arglist.script + "(" + ! apply + ");";
arglist.a.dom.href = FAdm.str.call + script
+ "void(0);";
arglist.varText.textContent = " " + ( apply ? arglist.off
: arglist.on );
arglist.last = apply;
}
}
}; // .portlet.flip()
}; // .bb.portlet()
mediaWiki.libs.fileAdm.bb.portlet( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.portlet;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.queer = function ( FAdm, mw ) {
// Questionable file description
// 2012-09-15 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.queer !== "object" ) {
FAdm.queer = { };
}
FAdm.queer.features = function ( advanced, assign ) {
// Provide control box for single questionable file description
// Precondition:
// advanced -- no meaning here
// assign -- true: set cookie; no meaning here
// Page is supposed to be a single file page during edit or view
// Desired checkbox state has to be set in advance
// Postcondition:
// Control box is displayed
// Uses:
// > .queer
// > .queer.textarea
// > .queer.opts[]
// >< .str.action
// >< .queer.link.portlet
// < .queer.id
// < .queer.style
// < .queer.splash
// < .queer.start
// < .queer.submit
// .users.flag()
// .file.forge()
// .opt.control.formel()
// (.queer.fire)
// mw.config.get()
// .misc.message()
// Remark: Used as event handler -- 'this' is not FAdm.queer
// 2012-08-30 PerfektesChaos@de.wikipedia
var i;
var max;
var option;
var portlink;
var s;
var $form;
var $ta;
if ( assign && false ) {
FAdm.users.flag( "Q", advanced );
}
if ( advanced || true ) {
FAdm.queer.id = "fileAdm_Questionable";
FAdm.queer.style = "border: solid 2px #FF0000; width: auto; "
+ "background-color: #FFD9E2; "
+ "padding: 5px; "
+ "margin-top: 10px;";
FAdm.queer.splash = "file.first('questionable')";
FAdm.queer.start = "queer.fire()";
FAdm.queer.submit = "queer.flash()";
FAdm.file.forge( FAdm.queer );
if ( FAdm.queer.$box ) {
max = -1;
if ( FAdm.queer.opts ) {
max = FAdm.queer.opts.length;
}
$form = jQuery( "<form />" );
for ( i = 0; i < max; i++ ) {
option = FAdm.queer.opts[i];
option.id = "fA-checkbox_" + i;
if ( typeof( option.active ) !== "boolean" ) {
option.active = true;
}
if ( typeof( option.checked ) !== "boolean" ) {
option.checked = false;
}
//$form.append( "<br>" ); // br changed to 2 spaces to save vertical space
$form.append( " " );
$form.append( FAdm.opt.control.formel( option ) );
$form.append( option.key );
} // for i
if ( ! FAdm.str.action ) {
FAdm.str.action = mw.config.get( "wgAction" );
}
if ( FAdm.str.action === "view" ) {
s = "<textarea id='fA-textarea'>";
$ta = jQuery( s );
// "cols='" + queer.textarea[1] + "'"
$ta.attr( "rows", "'" + FAdm.queer.textarea[0] + "'" );
$ta.attr( "style", "width: 95%;" );
$form.append( $ta );
}
FAdm.queer.$content.append( $form );
FAdm.misc.message( FAdm.queer.$box, "fileAdmQuestionable",
true );
if ( FAdm.queer.link.portlet ) {
portlink = FAdm.queer.link.portlet;
portlink.parentNode.removeChild( portlink );
FAdm.queer.link.portlet = false;
}
} // $box
} // future limitation
}; // .queer.features()
FAdm.queer.feed = function ( apply ) {
// Retrieve transclusion parameters
// Precondition:
// apply -- template string (not UTF-8) to be examined
// Postcondition:
// Returns array with boolean state
// Uses:
// > .queer.opts
// > .opts[].key
// 2011-10-23 PerfektesChaos@de.wikipedia
var i;
var max = -1;
var r = false;
var re;
if ( this.opts ) {
max = this.opts.length;
r = new Array( max );
}
for ( i = 0; i < max; i++ ) {
re = new RegExp( "\\| *" + this.opts[i].key + " *", "i" );
r[i] = re.test( apply );
} // for i
return r;
}; // .queer.feed()
FAdm.queer.fetch = function ( about, apply ) {
// Retrieve state of transclusion or checkboxes into object
// Precondition:
// about -- origin of data
// 0: checkboxes
// 1: DOM/HTML page view
// 2: URL parameter string
// 3: examine request template in apply
// 4: examine notified template in apply
// apply -- string to be examined
// Postcondition:
// .queer.opts[].checked is updated
// Uses:
// >< .queer.opts
// > .opts
// > .opts[].id
// < .opts[].active
// < .opts[].checked
// .str.trimRight()
// .queer.feed()
// 2011-10-12 PerfektesChaos@de.wikipedia
var i;
var liked;
var max = -1;
var num;
var pars;
var s;
var $elem;
if ( this.opts ) {
max = this.opts.length;
}
for ( i = 0; i < max; i++ ) {
if ( typeof( this.opts[i].checked ) !== "boolean" ) {
this.opts[i].checked = false;
}
} // for i
switch ( about ) {
case 0 : // checkboxes
for ( i = 0; i < max; i++ ) {
$elem = jQuery( "#" + this.opts[i].id );
liked = $elem.prop( "checked" );
this.opts[i].checked = liked;
} // for i
break;
case 1 : // DOM/HTML page view
for ( i = 0; i < max; i++ ) {
$elem = jQuery( "#fileAdm_Qn_" + i );
if ( $elem.length ) {
this.opts[i].active = false;
this.opts[i].checked = true;
} else {
$elem = jQuery( "#fileAdm_Q_" + i );
if ( $elem.length ) {
this.opts[i].checked = true;
}
}
} // for i
break;
case 2 : // URL parameter
pars = false;
if ( typeof( apply ) === "string" ) {
pars = apply.split( "/" );
}
if ( pars ) {
for ( i = 0; i < pars.length; i++ ) {
s = pars[i];
if ( typeof( s ) === "string" ) {
s = FAdm.str.trimRight( s );
if ( s.length ) {
num = parseInt( s, 10 );
if ( num >= 0 && num < max ) {
this.opts[num].checked = true;
}
}
}
} // for i
}
break;
case 3 : // request template string
pars = this.feed( apply );
for ( i = 0; i < max; i++ ) {
this.opts[i].checked = pars[i];
} // for i
break;
case 4 : // notified template string
pars = this.feed( apply );
for ( i = 0; i < max; i++ ) {
if ( pars[i] ) {
this.opts[i].active = false;
this.opts[i].checked = true;
}
} // for i
break;
} // switch about
}; // .queer.fetch()
FAdm.queer.fire = function () {
// Prepare URL parameter for edit start
// Postcondition:
// Editing of file description page started
// Uses:
// > .ia
// > .queer.opts
// .queer.fetch()
// .edit.field()
// .queer.format()
// .queer.free()
// .file.fire()
// Remark: Used as event handler -- 'this' is not FAdm.queer
// 2013-01-12 PerfektesChaos@de.wikipedia
var i;
var got;
var max;
var option;
var say;
var story;
FAdm.queer.fetch( 0, false );
if ( FAdm.ia ) {
got = FAdm.queer.format( FAdm.edit.field( false ) );
if ( got ) {
FAdm.edit.field( got[0] );
}
} else {
max = -1;
say = FAdm.queer.free();
story = "questionable/";
if ( FAdm.queer.opts ) {
max = FAdm.queer.opts.length;
}
for ( i = 0; i < max; i++ ) {
option = FAdm.queer.opts[i];
if ( option.checked ) {
if ( option.active ) {
story = story + i + "/";
} // checked
} // checked
} // for i
if ( say ) {
say = encodeURIComponent( say ).replace( /\//g, "%2F" )
.replace( /\'/g, "%27" );
story = story + "/*" + say + "*/";
}
FAdm.file.fire( story );
}
}; // .queer.fire()
FAdm.queer.flash = function () {
// Trigger insertion or filling questionable template by API
// Postcondition:
// Page is updated by API if possible
// Uses:
// > .batch.watchQ
// < .queer.stuck
// < .batch.watch
// .queer.free()
// .batch.flash()
// .trans.bot.feeder()
// (.queer.format)
// 2011-10-24 PerfektesChaos@de.wikipedia
this.fetch( 0, false );
this.stuck = this.free();
FAdm.batch.watch = FAdm.batch.watchQ;
FAdm.batch.flash( this.format, true );
// .trans.bot.feeder();
}; // .queer.flash()
FAdm.queer.force = function ( adjust ) {
// Insert or fill questionable template in file description page
// Precondition:
// adjust -- page content string (not UTF-8)
// Postcondition:
// Return false -- nothing done
// array[3] -- modified
// [0] body string
// [1] summary
// [2] true: minor change
// [3] .queer.subject
// Uses:
// .queer.format()
// .users.fidelity()
// .trans.bot.feeder()
// Remark: Used as event handler -- 'this' is not FAdm.queer
// 2011-10-11 PerfektesChaos@de.wikipedia
var r;
r = FAdm.queer.format( adjust, true );
if ( FAdm.users.fidelity() ) {
FAdm.trans.bot.feeder();
}
return r;
}; // .queer.force()
FAdm.queer.format = function ( adjust, assign ) {
// Insert or fill questionable template in file description page
// Precondition:
// adjust -- page content string (not UTF-8)
// assign -- true (insert at least empty template)
// string: URL edit parameter with checked data
// else: use object properties
// Postcondition:
// Return false -- nothing done
// array[5] -- modified
// [0] body string
// [1] summary
// [2] true: minor change
// [3] .queer.subject
// [4] string if watchlist
// Uses:
// > .queer.stamp
// > .queer.stuck
// > .queer.opts[].checked
// > .queer.opts[].key
// > .queer.specific
// > .edit.summary0
// > .queer.summary
// > .batch.watchQ
// > .queer.subject
// >< .queer.opts[].active
// .file.format()
// .edit.find()
// .queer.feed()
// .queer.fetch()
// .str.trimLeft()
// .str.trimRight()
// .str.escapePipes()
// Remark: Used as event handler -- 'this' is not FAdm.queer
// 2013-01-26 PerfektesChaos@de.wikipedia
var basic = FAdm.file.format( adjust );
var i;
var jot;
var light;
var max = -1;
var old = false;
var option;
var r = false;
var say = false;
var select;
var story = "{{" + FAdm.queer.stamp;
var suffix = adjust;
var summary;
var text;
var wl;
if ( basic ) {
suffix = basic[0];
}
text = FAdm.edit.find( FAdm.queer.stamp, suffix );
if ( text ) {
old = FAdm.queer.feed( text[0] );
suffix = text[1];
}
if ( typeof( assign ) === "string" ) {
select = assign;
jot = select.indexOf( "/*" );
if ( jot >= 0 ) {
say = select.substr( jot + 2 );
say = say.substr( 0, say. length - 2 );
select = select.substr( 0, jot );
}
FAdm.queer.fetch( 2, select );
} else {
say = FAdm.queer.stuck;
FAdm.queer.fetch( 1, false );
}
if ( FAdm.queer.opts ) {
max = FAdm.queer.opts.length;
}
for ( i = 0; i < max; i++ ) {
option = FAdm.queer.opts[i];
if ( option.checked ) {
if ( typeof( option.active ) !== "boolean" ) {
option.active = true;
}
if ( option.active ) {
story = story + "|" + option.key;
}
}
} // for i
if ( say ) {
say = FAdm.str.trimRight( FAdm.str.trimLeft( say ) );
story = story + "|" + FAdm.queer.specific + "="
+ FAdm.str.escapePipes( say );
}
story = story + "}}";
/*
if ( say ) {
story = story + "\n\n" + say + " --~~~~\n\n";
}
*/
if ( suffix ) {
story = story + "\n\n" + suffix;
}
if ( FAdm.str.trimRight( story ) !==
FAdm.str.trimRight( adjust ) ) {
light = true;
summary = FAdm.queer.summary;
wl = false;// 2013-05-05 false->
if ( old ) { // previous setting
summary = FAdm.edit.summary0;
for ( i = 0; i < max; i++ ) {
if ( FAdm.queer.opts[i].checked !== old[i] ) {
light = false;
summary = FAdm.queer.summary;
wl = FAdm.batch.watchQ;
break;
} // checked
} // for i
}
r = [ story, summary, light, FAdm.queer.subject, wl ];
}
return r;
}; // .queer.format()
// splitted highlight - too many lines
FAdm.queer.free = function () {
// Fetch input from free text area
// Postcondition:
// Return non-empty content string, or false
// Uses:
// .str.trimLeft
// .str.trimRight
// 2011-09-28 PerfektesChaos@de.wikipedia
var r = false;
var s;
var $free = jQuery( "#fA-textarea" );
if ( $free.length ) {
s = $free.val();
if ( s.length ) {
r = FAdm.str.trimRight( FAdm.str.trimLeft( s ) );
}
}
return r;
}; // .queer.free()
}; // .bb.queer()
mediaWiki.libs.fileAdm.bb.queer( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.queer;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.review = function ( FAdm, mw ) {
// File review on single file description page
// 2012-09-15 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.review !== "object" ) {
FAdm.review = { };
}
FAdm.review.features = function ( advanced, assign ) {
// Provide control box for file review on single file description
// Precondition:
// advanced -- true: advanced functionality (Review User)
// assign -- true: set cookie
// Page is supposed to be a single file page during edit or view
// Postcondition:
// Control box is displayed
// Uses:
// > .review.selTemplate
// > .review.setup
// > .review.signed
// > .review.self
// > .review.second
// > .review.sucks
// > .review.scope
// > .review.scatter
// < .review.id
// < .review.style
// < .review.splash
// < .review.start
// < .review.submit
// .users.flag()
// .review.fine()
// .file.forge()
// .cat.file()
// (.file.first)
// (.file.fire)
// (.review.flash)
// mw.util.addCSS()
// .misc.message()
// Remark: Used as event handler -- 'this' is not FAdm.review
// 2012-09-15 PerfektesChaos@de.wikipedia
var got = false;
var lapsus;
var mode;
var show;
var stuff;
var $info, $ol;
if ( assign ) {
FAdm.users.flag( "R", advanced );
}
if ( advanced ) {
show = FAdm.review.selTemplate
+ "{ display: none !important; }";
// + "{ display: block !important; }";
mw.util.addCSS( show );
got = FAdm.review.fine();
}
if ( got ) {
mode = got[0];
lapsus = ( mode < -1 );
FAdm.review.id = "fileAdm_Review";
FAdm.review.style = "border: solid 2px; width: auto; "
+ ( lapsus ? "color: #FF0000; "
: "background-color: "
+ "#B4EEB4; " )
+ "padding: 5px; margin-top: 10px;";
if ( mode === 0 || mode === 1 ) {
FAdm.review.splash = "file.first('approve')";
FAdm.review.start = "file.fire('approve')";
FAdm.review.submit = "review.flash()";
} else {
FAdm.review.splash = false;
FAdm.review.start = false;
FAdm.review.submit = false;
}
FAdm.file.forge( FAdm.review );
if ( FAdm.review.$box ) {
$info = jQuery( "<p />" );
if ( mode > 0 ) {
$ol = jQuery( "<ol />" );
$ol.append( got[1] );
if ( got[2] ) {
$ol.append( got[2] );
}
FAdm.review.$content.append( $ol );
}
switch ( mode ) {
case 0 :
stuff = FAdm.review.setup;
break;
case 1 :
stuff = FAdm.review.signed;
break;
case -1 :
stuff = FAdm.review.self;
break;
case 2 :
stuff = FAdm.review.second;
break;
case -2 :
stuff = FAdm.review.sucks;
break;
case -3 :
stuff = FAdm.review.scope;
break;
} // switch mode
$info.text( stuff );
FAdm.review.$content.append( $info );
if ( ! FAdm.cat.file( false ) ) {
$info = jQuery( "<p />" );
$info.text( FAdm.review.scatter + "." );
$info.attr( "style", "color: #FF0000;" );
FAdm.review.$content.append( $info );
}
FAdm.misc.message( FAdm.review.$box,
"fileAdmReview",
false,
false );
// "width: 30em; right: 1em;"
} // $box
} // got
}; // .review.features()
FAdm.review.fine = function () {
// Check whether file review is appropriate for this page
// Precondition:
// Page is supposed to be a single file page during edit or view
// Postcondition:
// Returns false -- not appropriate (Commons)
// array[2]
// [0] 0 -- no review yet
// 1 -- first review done
// -1 -- first review done by this user
// 2 -- second review done
// -2 -- checking in progress
// -3 -- not appropriate (not NoCommons)
// [1] <li> of first review
// [2] <li> of second review
// Uses:
// > .ns.sUser
// > .users.w
// > .guide.cats.review0
// > .guide.cats.review1
// > .guide.cats.review2
// > .guide.cats.checking
// > .ia
// > .review.stamp
// >< .ns.sCat
// >< .file.cats
// .file.foreign()
// .guide.furnish()
// .guide.fulfil()
// .users.fetch()
// .edit.find()
// .edit.template.fetchParameter()
// mw.config.get()
// jQuery.isArray()
// mw.util.wikiUrlencode()
// 2013-08-25 PerfektesChaos@de.wikipedia
var gcs;
var i;
var lapsus;
var n;
var r;
var re;
var s;
var scope1;
var scope2;
var signed;
var story;
var $user;
var $user1;
var $user2;
var $users;
r = ( ! FAdm.file.foreign() );
if ( r ) {
gcs = FAdm.guide.cats;
lapsus = true;
n = 0;
$user1 = false;
$user2 = false;
FAdm.guide.furnish();
if ( ! FAdm.file.cats ) {
FAdm.file.cats = mw.config.get( "wgCategories" );
}
if ( jQuery.isArray( FAdm.file.cats ) ) {
n = FAdm.file.cats.length;
}
r = 0;
for ( i = 0; i < n; i++ ) {
s = FAdm.file.cats[ i ];
story = FAdm.ns.sCat + ":" + s;
if ( FAdm.guide.fulfil( story, gcs.review0 ) ) {
lapsus = false; // NoCommons
} else if ( FAdm.guide.fulfil( story, gcs.checking ) ) {
r = -2;
break; // for i
} else if ( ! r ) {
if ( FAdm.guide.fulfil( story, gcs.review1 ) ) {
r = 1;
} else if ( FAdm.guide.fulfil( story, gcs.review2 ) ) {
r = 2;
}
}
} // for i
if ( ! n && FAdm.ia ) {
story = "/wiki/"
+ mw.util.wikiUrlencode( gcs.review0[0] );
scope1 = "/wiki/"
+ mw.util.wikiUrlencode( gcs.review1[0] );
scope2 = "/wiki/"
+ mw.util.wikiUrlencode( gcs.review2[0] );
n = document.links.length;
for ( i = 0;
i < n && ( ! r || lapsus );
i++ ) {
s = document.links[ i ].pathname;
if ( s.indexOf( story ) === 0 ) {
lapsus = false;
// gcs.checking
} else if ( s.indexOf( scope1 ) === 0 ) {
r = 1;
} else if ( s.indexOf( scope2 ) === 0 ) {
r = 2;
}
} // for i
}
if ( lapsus ) {
r = -3;
}
if ( r > 0 ) {
$users = jQuery( "#fileAdm_Review-users" );
if ( $users.length ) {
$user = $users.find( "#fileAdm_Review-user1" );
$user1 = $user.clone();
$user1 = $user.clone();
$user1.removeAttr( "id" );
$user = $users.find( "#fileAdm_Review-user2" );
$user2 = $user.clone();
$user2.removeAttr( "id" );
$users.empty();
if ( ! $user2.length ) {
if ( $user1.length ) {
$user = $user1.find( "a" );
}
if ( $user.length ) {
FAdm.users.fetch();
signed = $user.attr( "href" );
if ( signed ) {
FAdm.ns.fetch( true );
s = "/wiki/" + FAdm.ns.sUsers + ":"
+ FAdm.users.w + " ";
re = new RegExp( s, "i" );
if ( re.test( signed + " " ) ) {
r = -1;
}
}
} else {
r = false;
}
}
/*
} else if ( ia ) { // yields plain syntax links
var tmpl = edit.find( review.stamp , false );
if ( tmpl ) {
story = tmpl[0];
s = edit.template.fetchParameter( story, 1 );
$user1 = jQuery( "<li />" );
$user1.text( s );
if ( r === 2 ) {
s = edit.template.fetchParameter( story, 2 );
$user2 = jQuery( "<li />" );
$user2.text( s );
}
}
*/
}
}
r = [ r, $user1, $user2 ];
}
return r;
}; // .review.fine()
FAdm.review.flash = function () {
// Trigger insertion or filling approve template by API
// Precondition:
// Page is permitted to be approved
// Postcondition:
// Page is approved by API if permitted and possible
// Uses:
// .batch.flash()
// (.review.force)
// Remark: Used as event handler -- 'this' is not FAdm.review
// 2011-09-18 PerfektesChaos@de.wikipedia
FAdm.batch.flash( FAdm.review.force, true );
}; // .review.flash()
FAdm.review.force = function ( adjust ) {
// Insert or fill approve template in file description page
// Precondition:
// adjust -- page content string (not UTF-8)
// Postcondition:
// Return false -- nothing done
// array[3] -- modified
// [0] body string
// [1] summary
// [2] true: minor change
// [3] .review.subject
// Uses:
// .review.format()
// Remark: Used as event handler -- 'this' is not FAdm.review
// 2011-08-05 PerfektesChaos@de.wikipedia
return FAdm.review.format( adjust, true );
}; // .review.force()
FAdm.review.format = function ( adjust, approve ) {
// Reformat file description page, insert or fill approve template
// Precondition:
// adjust -- page content string
// approve -- true: approve if permitted and possible
// Postcondition:
// Return false -- nothing done
// array[3] -- modified
// [0] body string
// [1] summary
// [2] true: minor change
// [3] .review.subject
// Uses:
// > .file.stNoCommons
// > .file.stNowCommons
// > .ns.sUser
// > .users.n
// > .review.stamp
// > .edit.summary0
// > .review.summary1
// > .review.summary2
// > .review.subject
// .file.format()
// .edit.template.fetchRE()
// .users.fetch()
// .edit.formatPageTail()
// .edit.fold()
// .users.fair()
// .str.trimRight()
// 2013-08-25 PerfektesChaos@de.wikipedia
var got;
var sign;
var signed;
var start;
var story;
var suffix;
var swap;
var label = approve;
var mode = 0;
var r;
var re;
var seek;
var shift;
var summary;
r = FAdm.file.format( adjust );
shift = ( r ? r[0] : adjust );
if ( label ) {
re = FAdm.edit.template.fetchRE( FAdm.file.stNowCommons,
true );
re = new RegExp( re );
if ( re.test( shift ) ) {
label = false;
} else {
FAdm.users.fetch();
}
}
if ( label ) {
got = FAdm.edit.formatPageTail( shift );
start = got[0];
story = false;
suffix = got[1];
swap = "";
got = FAdm.edit.fold( start, FAdm.review.stamp, true,
false );
if ( got[1] ) {
sign = "[[" + FAdm.ns.sUser + ":" + FAdm.users.n;
signed = "|" + sign + "|" + FAdm.users.n + "]] ~~~~~}}";
story = got[2];
start = got[3];
if ( story ) {
story = FAdm.users.fair( story );
if ( story.indexOf( "~~~~" ) > 0 ) {
if ( story.indexOf( sign ) > 0 ) {
mode = -1;
}
}
if ( ! mode ) {
seek = ".*\\[\\[[A-Za-z]+:[^[}]+\\]\\].*";
re = new RegExp( seek + "\\|" + seek );
if ( re.test( story ) ) {
mode = -2;
} else {
re = new RegExp( seek );
if ( re.test( story ) ) {
mode = 2;
}
}
}
} else {
mode = 1;
}
} else {
mode = 1;
}
if ( mode ) {
if ( mode > 0 ) {
swap = "{{" + FAdm.review.stamp;
if ( mode === 2 ) {
swap = swap + story;
}
swap = swap + signed;
}
if ( start.length && swap.length ) {
start = start + "\n\n";
}
start = start + swap + "\n";
if ( suffix.length ) {
start = start + "\n" + suffix + "\n";
}
shift = start + "\n";
}
}
if ( shift !== adjust ) {
summary = false;
switch ( mode ) {
case 1 :
summary = FAdm.review.summary1;
break;
case 2 :
summary = FAdm.review.summary2;
break;
default :
if ( FAdm.str.trimRight( shift ) !==
FAdm.str.trimRight( adjust ) ) {
summary = FAdm.edit.summary0;
}
} // switch mode
r = [ shift,
summary,
( mode > 0 ),
FAdm.review.subject ];
}
return r;
}; // .review.format()
}; // .bb.review()
mediaWiki.libs.fileAdm.bb.review( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.review;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.str = function ( FAdm, mw ) {
// String related
// 2012-06-07 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.str !== "object" ) {
FAdm.str = { page: { scp: false } };
}
if ( typeof FAdm.str.page !== "object" ) {
FAdm.str.page = { scp: false };
}
FAdm.str.dateISO = function ( age ) {
// Format date according to ISO 8601
// Precondition:
// age -- Date
// Postcondition:
// Return string yyyy-mm-dd
// Uses:
// .str.fromNum()
// 2011-10-09 PerfektesChaos@de.wikipedia
var r;
var k = age.getFullYear() * 10000
+ (age.getMonth() + 1) * 100
+ age.getDate();
var s = this.fromNum( k );
r = s.substr( 0, 4 ) + "-" +
s.substr( 4, 2 ) + "-" +
s.substr( 6, 2 );
return r;
}; // .str.dateISO()
FAdm.str.escapePipes = function ( adjust ) {
// Escape pipe symbols '|' in text, but maintain links or templates
// Precondition:
// adjust -- base string
// Postcondition:
// Return adjust with escaped pipes
// Uses:
// this
// >< .str.reWSpaces
// 2013-01-22 PerfektesChaos@de.wikipedia
var r = adjust,
s;
if ( r.indexOf( "|" ) >= 0 ) {
if ( ! this.reWSpaces ) {
this.reWSpaces = new RegExp( "[\t\f ]+", "g" );
}
if ( ! this.rePipeTemplate ) {
s = "(\\{\\{[^}]+)\\|([^}]+\\}\\})";
this.rePipeTemplate = new RegExp( s );
this.rePipesTemplate = new RegExp( s, "g" );
}
r = r.replace( this.reWSpaces, " " )
.replace( /\]/g, "\f" )
.replace( /(\[\[[^|\f]+)\|([^\f]+\f\f)/g, "$1\t$2" );
do {
s = r;
r = r.replace( this.rePipesTemplate, "$1\t$2" );
} while ( s !== r );
r = r.replace( /\|/g, "|" )
.replace( /\f/g, "]" )
.replace( /\t/g, "|" );
}
return r;
}; // .str.escapePipes()
FAdm.str.fromNum = function ( adjust ) {
// Format number as string
// Precondition:
// adjust -- base string
// Postcondition:
// Return adjust as string
// 2011-10-09 PerfektesChaos@de.wikipedia
return adjust.toString();
}; // .str.fromNum()
FAdm.str.removeString = function ( adjust, apply ) {
// Remove string from another string one or many times
// Precondition:
// adjust -- base string
// apply -- string to be removed
// Postcondition:
// Return modified string, or false
// 2011-10-04 PerfektesChaos@de.wikipedia
var i;
var n = apply.length;
var r = false;
var s = adjust;
while ( n ) {
i = s.indexOf( apply );
if ( i < 0 ) {
break; // while
} else {
r = s.substr( 0, i ) + s.substr( i + n );
s = r;
}
} // while true
return r;
}; // .str.removeString()
FAdm.str.substrEnd = function ( apply, amount ) {
// Retrieve last characters from string like .slice(-n)
// or like Mozilla substr(-n, n)
// Precondition:
// apply -- string
// amount -- position counted from end
// Postcondition:
// Returns substring
// IE does not support substr(-n, n)
// 2011-08-11 PerfektesChaos@de.wikipedia
return apply.substr( apply.length - amount );
}; // .str.substrEnd()
FAdm.str.trimLeft = function ( adjust ) {
// Strip off any leading whitespace
// Precondition:
// adjust -- string
// Postcondition:
// Return trimmed string
// 2011-07-24 PerfektesChaos@de.wikipedia
var r = adjust;
if ( r.length ) {
while ( r.charCodeAt( 0 ) <= 32 ) {
r = r.substr( 1 );
if ( ! r.length ) {
break; // while
}
} // while
}
return r;
}; // .str.trimLeft()
FAdm.str.trimRight = function ( adjust ) {
// Strip off any leading whitespace
// Precondition:
// adjust -- string
// Postcondition:
// Return trimmed string
// 2011-07-24 PerfektesChaos@de.wikipedia
var n = adjust.length;
var r = adjust;
if ( n > 0 ) {
n--;
while ( r.charCodeAt( n ) <= 32 ) {
r = r.substr( 0, n );
n--;
if ( n < 0 ) {
break; // while
}
} // while
}
return r;
}; // .str.trimRight()
FAdm.str.urlencode = function ( adjust ) {
// Encode pagename with both namespace and a colon : in title
// Precondition:
// adjust -- string
// Postcondition:
// Return encoded string
// Uses:
// this
// .str.trimLeft()
// mw.util.wikiUrlencode()
// mw.config.get()
// 2011-10-11 PerfektesChaos@de.wikipedia
var i;
var obj;
var r;
var start;
var suffix;
r = mw.util.wikiUrlencode( this.trimLeft( adjust ) );
i = r.indexOf( ":" );
if ( i > 0 ) {
start = r.substr( 0, i );
suffix = r.substr( i + 1 ).replace( /:/g, "%3A" );
obj = mw.config.get( "wgNamespaceIds" );
if ( typeof( obj[ start.toLowerCase() ] === "number" ) ) {
r = start + ":" + suffix;
} else {
r = start + "%3A" + suffix;
}
}
return r;
}; // .str.urlencode()
}; // .bb.str()
mediaWiki.libs.fileAdm.bb.str( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.str;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.trans = function ( FAdm, mw ) {
// Transfer to commons management
// 2012-09-15 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.trans !== "object" ) {
FAdm.trans = { bot: { },
idle: { },
vsn: { } };
}
if ( typeof FAdm.trans.bot !== "object" ) {
FAdm.trans.bot = { };
}
if ( typeof FAdm.trans.idle !== "object" ) {
FAdm.trans.idle = { };
}
if ( typeof FAdm.trans.vsn !== "object" ) {
FAdm.trans.vsn = { };
}
FAdm.trans.features = function ( advanced, assign ) {
// Make control box for file transfer on single file description
// Precondition:
// advanced -- true: advanced functionality (sysop / CTB group)
// assign -- true: set cookie
// Page is supposed to be a single file page during edit or view
// Postcondition:
// Control box is displayed
// Uses:
// > .file.type
// > .trans.sucks
// > .str.action
// > .$content
// > .trans.idle.say
// > .str.call
// > .batch.styleButton
// > .trans.idle.id
// > .trans.idle.sleep
// > .trans.bot.pageName
// < .trans.id
// < .trans.style
// < .trans.splash
// < .trans.start
// < .trans.submit
// < .trans.bot.post
// .users.flag()
// .file.forge()
// .trans.idle.fetch()
// .trans.vsn.find()
// .batch.fetch()
// (.file.first)
// (.file.fire)
// (.trans.idle.flash)
// (.trans.bot.found)
// .misc.message()
// Remark: Used as event handler -- 'this' is not FAdm.trans
// 2012-08-30 PerfektesChaos@de.wikipedia
var layer;
var lazy = ( FAdm.file.type === "transfix" ||
FAdm.file.type === "transnot" ||
FAdm.file.type === "trash" );
var say;
var $button;
var $err;
var $flash;
var $idle;
if ( assign ) {
FAdm.users.flag( "T", advanced );
}
if ( advanced ) {
layer = ( FAdm.str.action === "view" );
FAdm.trans.id = "fileAdm_Transfer";
FAdm.trans.style = "border: solid 2px #0000FF; width: auto; "
+ "background-color: #DDDDFF; "
+ "padding: 5px; margin-top: 10px;";
if ( ! lazy ) {
FAdm.trans.splash = "file.first('transfer')";
FAdm.trans.start = "file.fire('transfer')";
FAdm.trans.submit = "trans.flash()";
}
FAdm.file.forge( FAdm.trans );
if ( lazy ) {
say = false;
if ( FAdm.file.type === "transnot" ) {
say = FAdm.trans.sucks;
} else if ( FAdm.file.type === "trash" ) {
say = "NowCommons";
}
if ( say ) {
$err = jQuery( "<strong />" );
if ( $err.length ) {
$err.attr( "style",
"color: #FF0000; font-weight: bold" );
$err.text( say );
FAdm.trans.$content.append( $err );
}
} else if ( layer && FAdm.file.type === "transfix" ) {
$button = jQuery( "<p />" );
$flash = jQuery( "<a />" );
$idle = jQuery( "<span />" );
$flash.text( FAdm.trans.idle.say );
$flash.attr( "href",
FAdm.str.call + "trans.idle.flash()" );
$flash.attr( "style", FAdm.batch.styleButton );
$button.append( $flash );
$idle.attr( "id", FAdm.trans.idle.id );
$idle.text( " " + FAdm.trans.idle.sleep );
$idle.css( "display", "none" );
$button.append( $idle );
FAdm.trans.$content.append( $button );
FAdm.trans.idle.fetch();
}
if ( FAdm.file.type === "trash" ) {
FAdm.trans.vsn.find();
}
}
FAdm.misc.message( FAdm.trans.$box, "fileAdmTransfer", true );
FAdm.trans.bot.post = false;
FAdm.batch.fetch( FAdm.trans.bot.pageName,
FAdm.trans.bot.found );
}
}; // .trans.features()
FAdm.trans.flash = function () {
// Trigger insertion or filling CTB template by API
// Precondition:
// Page is permitted to be transferred
// Postcondition:
// Page is marked by API if permitted and possible
// Uses:
// > .batch.watchT
// < .batch.watch
// .batch.flash()
// (.trans.force)
// 2011-10-24 PerfektesChaos@de.wikipedia
FAdm.batch.watch = FAdm.batch.watchT;
FAdm.batch.flash( this.force, true );
}; // .trans.flash()
FAdm.trans.flop = function ( already ) {
// Check whether current description page is both NoCommons and CTB
// Precondition:
// already -- false: detect from categories; true: display now
// Current page is member of NoCommons
// Postcondition:
// Returns true iff conflict -- page supposed to be transferred
// Warning box is displayed
// Uses:
// > .guide.cats.transfer
// > .guide.cats.transit
// > .guide.cats.transmit
// > .guide.cats.transfix
// > .str.sayConflict
// > .trans.sayNo
// >< .file.cats
// mw.config.get()
// .misc.message()
// 20112-08-30 PerfektesChaos@de.wikipedia
var gcs;
var i;
var r = false;
var s;
var style;
var $box;
var $head;
var $info;
if ( already ) {
r = true;
} else {
gcs = FAdm.guide.cats;
if ( ! gcs ) {
FAdm.file.cats = mw.config.get( "wgCategories" );
gcs = FAdm.guide.cats;
}
for ( i = 0; i < gcs.length; i++ ) {
s = gcs[i].title;
if ( FAdm.guide.fulfil( s, gcs.transfer ) ) {
r = true;
} else if ( FAdm.guide.fulfil( s, gcs.transit ) ) {
r = true;
} else if ( FAdm.guide.fulfil( s, gcs.transmit ) ) {
r = true;
} else if ( FAdm.guide.fulfil( s, gcs.transfix ) ) {
r = true;
}
if ( r ) {
break; // for i
}
} // for i
}
if ( r ) {
style = "color: #FF0000; border: solid 2px; width: auto; "
+ "padding: 5px; margin-top: 10px;";
$box = jQuery( "<div />" );
$head = jQuery( "<strong />" );
$info = jQuery( "<span />" );
$head.text( FAdm.str.sayConflict );
$box.append( $head );
$info.text( " * " + this.sayNo );
$box.append( $info );
FAdm.misc.message( $box, "fileAdmTransferNoCommons", true );
}
return r;
}; // .trans.flop()
FAdm.trans.force = function ( adjust ) {
// Insert or fill CTB template in file description page
// Precondition:
// adjust -- page content string (not UTF-8)
// Postcondition:
// Return false -- nothing done
// array[3] -- modified
// [0] body string
// [1] summary
// [2] true: minor change
// [3] .trans.subject
// Uses:
// < .str.page.content
// .trans.format()
// .trans.bot.feeder()
// Remark: Used as event handler -- 'this' is not FAdm.trans
// 2011-10-11 PerfektesChaos@de.wikipedia
var r;
FAdm.str.page.content = adjust;
r = FAdm.trans.format( true );
if ( r ) {
FAdm.str.page.content = r[0];
}
FAdm.trans.bot.feeder();
return r;
}; // .trans.force()
FAdm.trans.format = function ( approve ) {
// Reformat file description, insert or replace transfer template
// Precondition:
// approve -- true: transfer by bot if permitted and possible
// advance -- true: call request queue
// Postcondition:
// Return false -- nothing done
// array[3] -- modified
// [0] body string
// [1] summary
// [2] true: minor change
// [3] .trans.subject
// [4] string if watchlist
// Uses:
// > .file.stNoCommons
// > .file.stNowCommons
// > .trans.stable
// > .trans.suitable
// > .trans.stamp
// > .trans.summary
// > .batch.watchT
// > .edit.summary0
// > .trans.subject
// >< .str.page.title
// >< .str.page.content
// < .trans.bot.commons
// .file.format()
// .edit.template.fetchRE()
// .trans.flop()
// .edit.fold()
// .edit.find()
// .edit.template.fetchParameter()
// mw.config.get()
// 2011-11-30 PerfektesChaos@de.wikipedia
var r;
var got;
var label = true;
var mode = 0;
var re = FAdm.edit.template.fetchRE( FAdm.file.stNoCommons,
true );
var shift = FAdm.str.page.content;
var splash;
var summary;
var wl;
r = FAdm.file.format( FAdm.str.page.content );
if ( r ) {
shift = r[0];
mode = 1;
}
re = new RegExp( re );
if ( re.test( shift ) ) {
this.flop( true );
label = false;
} else {
re = FAdm.edit.template.fetchRE( FAdm.file.stNowCommons,
true );
re = new RegExp( re );
if ( re.test( shift ) ) {
label = false;
}
}
this.bot.commons = false;
if ( label && approve ) {
got = FAdm.edit.fold( shift, this.stable, false, false );
if ( got ) {
shift = got[3];
this.bot.commons = true;
}
got = FAdm.edit.find( this.suitable, shift );
if ( got ) {
splash = FAdm.edit.template.fetchParameter( got[0], 2 );
shift = got[1];
if ( splash ) {
this.bot.commons = splash;
} else {
this.bot.commons = true;
}
}
}
if ( label ) {
got = FAdm.edit.fold( shift, this.stamp, false, true );
if ( got ) {
splash = FAdm.edit.template.fetchParameter( got[0], 1 );
shift = got[3];
if ( splash ) {
this.bot.commons = splash;
} else {
this.bot.commons = true;
}
} else if ( approve ) {
this.bot.commons = true;
}
if ( this.bot.commons ) {
if ( typeof( this.bot.commons ) === "string" ) {
splash = "|1=" + this.bot.commons;
} else {
splash = "";
if ( ! FAdm.str.page.title ) {
FAdm.str.page.title = mw.config.get( "wgTitle" );
}
this.bot.commons = FAdm.str.page.title;
}
shift = "{{" + this.stamp + splash + "}}\n\n" + shift;
}
}
if ( shift !== FAdm.str.page.content ) {
summary = "";
wl = false;// 2013-05-05 false->
if ( this.bot.commons ) {
summary = this.summary;
wl = FAdm.batch.watchT;
mode = 2;
} else if ( FAdm.str.trimRight( shift ) !==
FAdm.str.trimRight( FAdm.str.page.content ) ) {
summary = FAdm.edit.summary0;
}
FAdm.str.page.content = shift;
r = [ FAdm.str.page.content,
summary,
( mode > 0 ),
this.subject,
wl ];
}
return r;
}; // .trans.format()
FAdm.trans.bot.feed = function () {
// Check whether desired file transfer matches bot queue content
// Precondition:
// Current page: file description, maybe transferring to commons
// API query for queue content returned
// Postcondition:
// API update of queue items equipped and started, if meaningful
// Uses:
// > .str.page.content
// > .queer.quest
// > .trans.stamp
// > .str.page.name
// > .trans.bot.queue
// >< .str.page.title
// >< .trans.bot.commons
// < .trans.bot.post
// < .trans.bot.discard
// < .trans.bot.update
// .trans.bot.finish()
// .edit.template.fetchRE()
// .edit.template.fetchParameter()
// .batch.faith()
// .batch.fetch()
// (.trans.bot.furnish)
// mw.config.get()
// mw.html.escape()
// 2012-01-08 PerfektesChaos@de.wikipedia
var got;
var i;
var k;
var m;
var mode = false;
var n;
var re;
var seek;
var shift;
var split;
var start;
var stop;
this.post = false;
if ( this.finish ) {
this.finish( true );
}
if ( ! FAdm.str.page.title ) {
FAdm.str.page.title = mw.config.get( "wgTitle" );
}
if ( this.commons ) {
mode = 1;
if ( typeof( this.commons ) !== "string" ) {
this.commons = FAdm.str.page.title;
}
}
if ( FAdm.str.page.content ) {
re = FAdm.edit.template.fetchRE( FAdm.queer.quest, true );
re = new RegExp( re );
if ( re.test( FAdm.str.page.content ) ) {
mode = -1;
}
if ( ! this.commons && ! mode ) {
re = FAdm.edit.template.fetchRE( FAdm.trans.stamp, false )
+ "[^}]*}}";
re = new RegExp( re );
got = re.exec( FAdm.str.page.content );
if ( got !== null ) {
this.commons =
FAdm.edit.template.fetchParameter( got[0], 1 );
mode = 2;
}
if ( ! this.commons ) {
this.commons = FAdm.str.page.title;
}
}
}
if ( typeof( this.queue ) === "string" ) {
seek = mw.html.escape( FAdm.str.page.title );
start = "<request local=\"";
split = "\" commons=\"";
stop = "\" />";
shift = false;
i = this.queue.indexOf( seek );
if ( i > 16 ) {
k = -2;
n = seek.length;
m = i + n + 11;
if ( this.queue.slice( i - 16, i ) === start &&
this.queue.slice( i + n, m ) === split ) {
k = this.queue.indexOf( stop, m );
if ( k > m ) {
shift = this.queue.slice( m, k );
if ( this.commons ) {
if ( this.commons !== shift ) { // update
mode = 0;
}
}
}
}
}
if ( typeof( mode ) === "number" ) {
FAdm.batch.faith();
start = start + seek + split;
if ( mode <= 0 ) {
if ( shift ) {
this.discard = start + shift + stop;
}
}
if ( mode >= 0 ) {
this.update = start
+ mw.html.escape( this.commons )
// + commons.replace( /\"/g, """ )
+ stop;
}
//FAdm.batch.fetch( this.pageName, this.furnish ); // Zeile auskommentiert für https://de.wikipedia.org/wiki/Wikipedia_Diskussion:Dateiwartung/Werkzeug#.28Halb-.29automatisch_.7B.7BCommonsf.C3.A4hig.7D.7D_einf.C3.BCgen.3F
}
}
}; // .trans.bot.feed()
FAdm.trans.bot.feeder = function () {
// Append request entry on bot page, or delete if not appropriate
// Precondition:
// Current page is description, maybe transferring to commons
// API query for queue should have been launched
// Postcondition:
// API query for queue has been launched
// Uses:
// > .trans.bot.queue
// > .str.page.content
// > .trans.bot.pageName
// < .trans.bot.post
// .trans.bot.feed()
// .batch.fetch()
// .batch.feed()
// (.trans.bot.feeder)
// Remark: Used as event handler -- 'this' is not FAdm.trans.bot
// 2011-10-11 PerfektesChaos@de.wikipedia
if ( typeof( FAdm.trans.bot.queue ) === "string" &&
typeof( FAdm.str.page.content ) === "string" ) {
FAdm.trans.bot.feed();
} else {
if ( ! FAdm.trans.bot.queue ) {
FAdm.trans.bot.queue = true;
FAdm.trans.bot.post = FAdm.trans.bot.feeder;
FAdm.batch.fetch( FAdm.trans.bot.pageName,
FAdm.trans.bot.found );
}
if ( ! FAdm.str.page.content ) {
FAdm.str.page.content = true;
FAdm.batch.feed( FAdm.trans.bot.feeder );
}
}
}; // .trans.bot.feeder()
FAdm.trans.bot.find = function ( advanced, assign ) {
// Start save button exercises on interactive edit
// Precondition:
// advanced -- true: advanced functionality (sysop / CTB group)
// assign -- true: set cookie
// Interactive mode assumed
// Uses:
// .trans.bot.finish()
// .users.flag()
// Remark: Used as event handler -- 'this' is not FAdm.trans.bot
// 2013-01-07 PerfektesChaos@de.wikipedia
if ( advanced ) {
FAdm.trans.bot.finish( false );
}
if ( assign ) {
FAdm.users.flag( "T", advanced );
}
}; // .trans.bot.find()
FAdm.trans.bot.finish = function ( able ) {
// Handle save button hook exercises on interactive edit
// Precondition:
// able -- true: execute save action, false: disable button
// Interactive mode assumed
// Uses:
// > .ia
// > .ia.$editform
// > .str.call
// > .trans.bot.save
// < .trans.bot.$xSave
// edit.form()
// button.click()
// (.trans.bot.finished)
// Remark: Used as event handler -- 'this' is not FAdm.trans.bot
// 2011-10-23 PerfektesChaos@de.wikipedia
var button;
var $button;
if ( able ) {
// DOM, not hooked by editwarner:
button = document.getElementById( "wpSave" );
if ( button !== null ) {
button.click();
}
} else { // editing
if ( ! FAdm.ia ) { // initialize
FAdm.edit.form();
}
if ( FAdm.ia ) {
$button = FAdm.ia.$editform.find( "#wpSave" );
if ( $button.length ) {
FAdm.trans.bot.$xSave = jQuery( "<a />" );
FAdm.trans.bot.$xSave.attr( "href",
FAdm.str.call
+ "trans.bot.finished()" );
FAdm.trans.bot.$xSave.attr( "style",
"border: solid 2px;"
+ "border-color: #D0D0FF "
+ "#D0D0FF "
+ "#6060FF "
+ "#6060FF;"
+ "padding: 1px 2px;" );
FAdm.trans.bot.$xSave.text( FAdm.trans.bot.save );
FAdm.trans.bot.$xSave.insertAfter( $button );
$button.css( "display", "none" );
}
}
}
}; // .trans.bot.finish()
FAdm.trans.bot.finished = function () {
// Postprocess interactive CTB file edit against bot queue and save
// Precondition:
// Special save button has been clicked
// Postcondition:
// CTB file transfer queue is
// Uses:
// > .trans.bot.$xSave
// > .str.page.content
// .trans.format()
// .edit.finalize()
// .trans.bot.feeder()
// 2011-10-11 PerfektesChaos@de.wikipedia
var change;
this.$xSave.attr( "href", null );
this.$xSave.attr( "style",
"border: solid 1px #0000FF; "
+ "padding: 1px 2px;"
+ "background-color: #D0D0FF" );
FAdm.edit.field( false );
if ( typeof( FAdm.str.page.content ) === "string" ) {
change = FAdm.trans.format( false );
FAdm.edit.finalize( change );
}
this.feeder();
}; // .trans.bot.finished()
FAdm.trans.bot.found = function ( arrived ) {
// Postprocess file entry on bot queue page after ajax request
// Precondition:
// arrived -- JSON result of ajax query for
// Postcondition:
// Queue page content is stored, trans.bot.post may be called
// Uses:
// > .trans.bot.post
// < .trans.bot.queue
// < .trans.bot.rvtime
// (.trans.bot.post)
// Remark: Used as event handler -- 'this' is not FAdm.trans.bot
// 2011-10-11 PerfektesChaos@de.wikipedia
var query = ( typeof( arrived ) === "object" );
var sid;
if ( query ) {
query = arrived.query;
if ( query ) {
sid = query.pageids[0];
if ( sid.charCodeAt( 0 ) !== 45 ) { // '-'
query = query.pages[ sid ];
if ( query ) {
query = query.revisions;
if ( query ) {
query = query[ "0" ];
if ( query ) {
FAdm.trans.bot.queue = query[ "*" ];
FAdm.trans.bot.rvtime = query.timestamp;
}
}
}
} // for i
if ( FAdm.trans.bot.post ) {
FAdm.trans.bot.post();
}
}
}
}; // .trans.bot.found()
FAdm.trans.bot.furnish = function ( arrived ) {
// Update bot transfer queue
// Precondition:
// arrived -- JSON result of ajax query for
// API query for queue content most recently updated
// Postcondition:
// API update for queue content launched
// Uses:
// > .trans.bot.queue
// > .trans.bot.discard
// > .trans.bot.update
// > .trans.bot.rvtime
// > .batch.watchT
// >< .str.page.name
// >< .str.page.title
// < .trans.bot.post
// < .batch.page
// < .batch.rvtime
// < .batch.watch
// .trans.bot.found()
// .str.removeString()
// .str.trimRight()
// .batch.force()
// mw.config.get()
// .misc.message()
// Remark: Used as event handler -- 'this' is not FAdm.trans.bot
// 2012-08-30 PerfektesChaos@de.wikipedia
var change;
var say = false;
var s;
FAdm.trans.bot.found( arrived );
FAdm.trans.bot.post = false;
if ( FAdm.trans.bot.discard ) {
s = FAdm.str.removeString( FAdm.trans.bot.queue,
FAdm.trans.bot.discard );
if ( s ) {
FAdm.trans.bot.queue = s;
say = "-";
}
}
if ( FAdm.trans.bot.update ) {
s = FAdm.str.trimRight( FAdm.trans.bot.queue );
if ( s.indexOf( FAdm.trans.bot.update ) < 0 ) {
FAdm.trans.bot.queue = s + "\n\n"
+ FAdm.trans.bot.update + "\n";
if ( say ) {
say = "~";
} else {
say = "+";
}
}
}
if ( say ) {
if ( ! FAdm.str.page.name ) {
FAdm.str.page.name = mw.config.get( "wgPageName" );
}
if ( ! FAdm.str.page.title ) {
FAdm.str.page.title = mw.config.get( "wgTitle" );
}
change = [ FAdm.trans.bot.queue,
say + " [[" + FAdm.str.page.name
+ "|" + FAdm.str.page.title + "]]",
false ];
FAdm.batch.page = FAdm.trans.bot.pageName;
FAdm.batch.rvtime = FAdm.trans.bot.rvtime;
FAdm.batch.watch = FAdm.batch.watchT;
FAdm.batch.force( change, false );
}
FAdm.misc.message();
}; // .trans.bot.furnish()
FAdm.trans.idle.fetch = function () {
// Query whether current page has been unchanged for some days
// Precondition:
// Current page is file description with transfer to commons
// Postcondition:
// API query has been launched
// Uses:
// >< .str.page.name
// >< .batch.api
// < .trans.idle.query
// .str.dateISO()
// (.trans.idle.found)
// mw.config.get()
// mw.util.wikiScript()
// jQuery.getJSON()
// 2011-10-10 PerfektesChaos@de.wikipedia
var timer = new Date();
timer.setTime( timer.getTime() - 3 * 86400 * 1000 );
if ( ! FAdm.str.page.name ) {
FAdm.str.page.name = mw.config.get( "wgPageName" );
}
if ( ! FAdm.batch.api ) {
FAdm.batch.api = mw.util.wikiScript( "api" );
}
this.query = { action: "query",
prop: "revisions",
rvprop: "content|timestamp",
rvlimit: 1,
indexpageids: true,
titles: FAdm.str.page.name,
format: "json" };
this.query.rvend = FAdm.str.dateISO( timer ) + "T00:00:00Z";
jQuery.getJSON( FAdm.batch.api,
this.query,
this.found );
}; // .trans.idle.fetch()
FAdm.trans.idle.flash = function () {
// Update request entry on bot page
// Precondition:
// Page is permitted to be transferred
// Postcondition:
// Request queue update is launched
// Uses:
// < .trans.bot.finish
// .trans.bot.feeder()
// Remark: Used as event handler -- 'this' is not FAdm.trans.idle
// 2011-10-11 PerfektesChaos@de.wikipedia
FAdm.trans.bot.finish = false;
FAdm.trans.bot.feeder();
}; // .trans.idle.flash()
FAdm.trans.idle.found = function ( arrived ) {
// Postprocess page revision list after ajax request
// Precondition:
// arrived -- JSON result of ajax query for page revisions
// Postcondition:
// Invisible remark on idle page is displayed.
// Uses:
// > .trans.idle.id
// Remark: Used as event handler -- 'this' is not FAdm.trans.idle
// 2011-12-30 PerfektesChaos@de.wikipedia
var query = ( typeof( arrived ) === "object" );
var lazy = false;
var $idle;
if ( query ) {
query = arrived.query;
if ( query ) {
query = query.pages[ query.pageids[ 0 ] ];
if ( query ) {
query = query.revisions;
if ( query ) {
lazy = ( query.length === 0 );
}
}
}
}
if ( lazy ) {
$idle = jQuery( "#" + FAdm.trans.idle.id );
if ( $idle.length ) {
$idle.attr( "style", "color:#FF0000; font-style:italic;" );
}
}
}; // .trans.idle.found()
FAdm.trans.vsn.find = function () {
// Check for multiple versions of image
// Precondition:
// File description page contains NowCommons template/category.
// Postcondition:
// Query is launched
// Uses:
// > .str.page.name
// >< .batch.api
// < .trans.vsn.query
// mw.config.get()
// mw.util.wikiScript()
// jQuery.getJSON()
// (.trans.vsn.found)
// 2011-12-30 PerfektesChaos@de.wikipedia
if ( ! FAdm.str.page.name ) {
FAdm.str.page.name = mw.config.get( "wgPageName" );
}
if ( ! FAdm.batch.api ) {
FAdm.batch.api = mw.util.wikiScript( "api" );
}
this.query = { action: "query",
prop: "imageinfo",
iilimit: 2,
indexpageids: true,
titles: FAdm.str.page.name,
format: "json" };
jQuery.getJSON( FAdm.batch.api,
this.query,
this.found );
}; // .trans.vsn.find()
FAdm.trans.vsn.found = function ( arrived ) {
// Postprocess file description page after ajax request
// Precondition:
// arrived -- JSON result of ajax query for multiple version
// Postcondition:
// Multiple version note on page is displayed.
// Uses:
// > .trans.vsn.say
// > .trans.$content
// > .trans.vsn.sel
// < .file.lone
// Remark: Used as event handler -- 'this' is not FAdm.trans.vsn
// 2011-12-30 PerfektesChaos@de.wikipedia
var query = ( typeof( arrived ) === "object" );
var $multi;
if ( query ) {
query = arrived.query;
if ( query ) {
query = query.pages[ query.pageids[ 0 ] ];
if ( query ) {
query = query.imageinfo;
if ( query ) {
if ( query.length === 2 ) {
$multi = jQuery( "<span />" );
FAdm.file.lone = false;
$multi.text( "... " + FAdm.trans.vsn.say );
FAdm.trans.$content.append( $multi );
$multi = jQuery( FAdm.trans.vsn.sel );
if ( $multi.length ) {
$multi.attr( "style", null );
}
}
}
}
}
}
}; // .trans.vsn.found()
}; // .bb.trans()
mediaWiki.libs.fileAdm.bb.trans( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.trans;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.users = function ( FAdm, mw ) {
// User rights management
// 2012-08-30 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.users !== "object" ) {
FAdm.users = { };
}
/************************************************************************
* Zur Beschleunigung werden für Zugangsbeschränkungen Cookies benutzt.
* Die Cookies sind sitzungsbezogen;
beim Starten des Browsers
werden Cookies der letzten Sitzung nicht berücksichtigt.
* Der Zugang wird über einmaligen Abruf von Schnipsel-Seiten ermöglicht.
* Die Cookies merken sich positives wie negatives Ergebnis.
* Ein Admin kann Zweitaccount als Normalo haben ("Jodo" und "Jodo Test").
* Auf eigene Verantwortung kann ein session cookie
ein Ablaufdatum erhalten; die Schnipsel-Seite wird dann ignoriert.
* Codes:
** Q = DÜP
** R = WPDK
** T = CTB
************************************************************************/
FAdm.users.fair = function ( adjust ) {
// Precondition:
// adjust -- string with source text
// Postcondition:
// string with source text, but user names standardized
// Uses:
// > .ns.sUsers
// > .ns.sUser
// >< .ns.reUsers
// .users.fetch()
// 2013-08-25 PerfektesChaos@de.wikipedia
if ( ! FAdm.ns.reUsers ) {
FAdm.ns.fetch( true );
FAdm.ns.reUsers =
new RegExp( "\\[\\[ *" + FAdm.ns.sUsers + ": *",
"gi" );
}
return adjust.replace( FAdm.ns.reUsers,
"[[" + FAdm.ns.sUsers + ":" );
// .users.fair() Benutzer|Benutzerin
}; // .users.fair()
FAdm.users.familiar = function ( ask, already, apply ) {
// Extend a session cookie for this task and user
// Precondition:
// ask -- kind of task
// already -- true: preserve current content
// apply -- string to be appended, or null for deletion
// Postcondition:
// Cookie was set
// Uses:
// > .users.i
// jQuery.cookie()
// 2012-01-07 PerfektesChaos@de.wikipedia
var select = "fileAdm" + ask;
var stored;
var story = apply;
if ( already && apply ) {
stored = jQuery.cookie( select );
if ( typeof( stored ) !== "string" ) {
stored = "";
}
if ( stored.indexOf( this.i ) < 0 ) {
story = stored + apply;
}
}
if ( story !== apply ) {
jQuery.cookie( select,
story,
{ expires: null,
path: "/" } );
}
}; // .users.familiar()
FAdm.users.fetch = function ( advanced ) {
// Set user properties
// Precondition:
// advanced -- true: advanced functionality (RegExp)
// Postcondition:
// User properties fetched
// Uses:
// > .ns.nUser
// >< .users.n
// >< .users.w
// >< .ns.sUser
// >< .ns.sUsers
// .ns.fetch()
// mw.config.get()
// mw.util.wikiUrlencode()
// 2013-08-25 PerfektesChaos@de.wikipedia
var s;
if ( ! this.n ) {
this.n = mw.config.get( "wgUserName" );
}
if ( ! this.w ) {
this.w = mw.util.wikiUrlencode( this.n );
}
if ( ! FAdm.ns.sUser ) {
FAdm.ns.sUser = FAdm.ns.fetch( FAdm.ns.nUser );
}
if ( advanced && ! FAdm.ns.sUsers ) {
FAdm.ns.every = mw.config.get( "wgNamespaceIds" );
for ( s in FAdm.ns.every ) {
if ( FAdm.ns.every[ s ] === FAdm.ns.nUser ) {
FAdm.ns.sUsers = ( FAdm.ns.sUsers
? FAdm.ns.sUsers + "|" + s
: "(?:" );
}
} // for s in .ns.every
FAdm.ns.sUsers = FAdm.ns.sUsers + ")";
}
}; // .users.fetch()
FAdm.users.fidelity = function () {
// Check whether current user is sysop
// Postcondition:
// Returns true iff sysop
// Uses:
// mw.config.get()
// 2011-08-26 PerfektesChaos@de.wikipedia
var g = mw.config.get( "wgUserGroups" );
var i;
var n;
var r = false;
if ( typeof( g ) === "object" ) {
n = g.length;
for ( i = 0; i < n; i++ ) {
r = ( g[i] === "sysop" );
if ( r ) {
break; // for i
}
} // for i
}
return r;
}; // .users.fidelity()
FAdm.users.flag = function ( ask, advanced ) {
// Extend cookie for this task and user permission
// Precondition:
// ask -- kind of task
// advanced -- true: advanced functionality
// Uses:
// > .users.i
// .users.familiar()
// 2011-07-31 PerfektesChaos@de.wikipedia
var s = this.i + ( advanced ? "*" : "-" ) + "!";
this.familiar( ask, true, s );
}; // .users.flag()
FAdm.users.flush = function () {
// Clear all cookies for user permissions
// Postcondition:
// Cookies are deleted
// Uses:
// .users.familiar()
// 2011-08-24 PerfektesChaos@de.wikipedia
this.familiar( "Q", false, null );
this.familiar( "R", false, null );
this.familiar( "T", false, null );
}; // .users.flush()
FAdm.users.found = function ( arrived ) {
// Postprocess user list after ajax request
// Precondition:
// arrived -- result of ajax query for permission page
// Postcondition:
// Run delegated procedure
// Uses:
// > .users.w
// > .ns.sUser
// > window.deferred_action
// .users.fetch()
// (window.deferred_action)
// Remark: Used as event handler -- 'this' is not FAdm.users
// 2011-07-31 PerfektesChaos@de.wikipedia
var located = false;
var seek;
if ( typeof( arrived ) === "string" ) {
FAdm.users.fetch();
seek = "[[" + FAdm.ns.sUser + ":" + FAdm.users.w + "|";
located = ( arrived.indexOf( seek ) > 0 );
} else if ( typeof( arrived ) === "object" ) {
}
if ( typeof( window.deferred_action ) === "function" ) {
window.deferred_action( located, true );
}
}; // .users.found()
FAdm.users.fragment = function () {
// Ensure that user identifiers are set, also cookie
// Postcondition:
// Cookie identifier is defined
// Uses:
// > .users.n
// > .str.dbName
// >< .users.i
// .users.fetch()
// 2011-10-09 PerfektesChaos@de.wikipedia
var s;
this.fetch();
if ( ! this.i ) {
s = this.n.replace( /~/g, "%7E" ).replace( /!/g, "%21" );
this.i = "!" + FAdm.str.dbName + "." + s + "~";
}
}; // .users.fragment()
FAdm.users.friend = function ( ask, access, action ) {
// Trigger advanced procedures if user has permission
// Precondition:
// ask -- kind of task to be done
// access -- curid of permission page
// action -- function to be called if user has permission
// Postcondition:
// Procedures are triggered directly or delegated
// Uses:
// > .users.i
// < window.deferred.doit
// .users.fragment()
// (.users.found)
// jQuery.cookie()
// mw.config.get()
// jQuery.get()
// 2011-08-30 PerfektesChaos@de.wikipedia
var k = -2;
var query;
var source;
var stored = jQuery.cookie( "fileAdm" + ask );
this.fragment();
if ( typeof( stored ) === "string" ) {
k = stored.indexOf( this.i );
} else {
stored = "";
}
if ( k < 0 ) {
if ( access > 0 ) {
query = { action: "raw",
curid: access };
source = mw.config.get( "wgScript" );
window.deferred_action = action;
jQuery.get( source, query, this.found );
}
} else if ( stored.charCodeAt( this.i.length ) === 42 ) {
action( true, false );
}
}; // .users.friend()
window.fileAdm_ClearCookies = function() {
// API: Alle fileAdm-Cookies für Benutzergruppen zurücksetzen
// Nach Änderung der jeweiligen Schnipsel-Seite
// Postcondition:
// Cookies are deleted.
// Returns void(0), as required in GUI action, if browser window
// Uses:
// .users.flush()
// 2011-10-03 PerfektesChaos@de.wikipedia
mediaWiki.libs.fileAdm.users.flush();
return void(0);
}; // fileAdm_ClearCookies()
}; // .bb.users()
mediaWiki.libs.fileAdm.bb.users( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.users;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.wins = function ( FAdm ) {
// Wins utilities
// 2012-08-30 PerfektesChaos@de.wikipedia
"use strict";
if ( typeof FAdm.wins !== "object" ) {
FAdm.wins = { };
}
FAdm.wins.forwardMode = function () {
// Check whether particular links shall be shown in other windows
// Precondition:
// Users might have defined .options.multiWin
// Postcondition:
// Option is retrieved, data is stored as session cookie
// Uses:
// >< .opt.multiWin
// >< .wins.lot
// .opt.fetch()
// 2012-08-30 PerfektesChaos@de.wikipedia
if ( FAdm.opt.multiWin ) {
this.lot = FAdm.opt.fetch( FAdm.opt.multiWin, this.lot );
}
}; // .wins.forwardMode()
FAdm.wins.forwardSingle = function () {
// Divert links to single files into other browser tab if desired
// Postcondition:
// Links to single files may be directed into another tab/window
// Uses:
// > .ns.nFile
// > .wins.lot
// > .wins.single
// >< .ns.sFile
// .wins.forwardMode()
// .ns.fetch()
// 2012-08-30 PerfektesChaos@de.wikipedia
var hype;
var i;
var select = "/wiki/";
this.forwardMode();
if ( ! FAdm.ns.sFile ) {
FAdm.ns.sFile = FAdm.ns.fetch( FAdm.ns.nFile );
}
select = select + FAdm.ns.sFile + ":";
for ( i = 0; i < document.links.length; i++ ) {
hype = document.links[i];
if ( hype.pathname.indexOf( select ) >= 0 ) {
if ( this.lot ) {
hype.target = this.single;
} else {
hype.removeAttribute( "target" );
}
} // match
} // for i
}; // .wins.forwardSingle()
}; // .bb.wins()
mediaWiki.libs.fileAdm.bb.wins( mediaWiki.libs.fileAdm );
delete mediaWiki.libs.fileAdm.bb.wins;
//-----------------------------------------------------------------------
mediaWiki.libs.fileAdm.bb.auto = function ( FAdm, mw ) {
// Autorun and endrun
// 2012-06-12 PerfektesChaos@de.wikipedia
"use strict";
FAdm.all.fire = function () {
// Start entire toolbox on page loading if appropriate
// Precondition:
// Interactive mode (web)
// Postcondition:
// Returns void(0), as required in GUI action, if browser window
// Started various procedures if current page is appropriate.
// Uses:
// > .ns.nSpecial
// > .ns.nProject
// > .ns.nOthers1
// > .ns.nFile
// > .ns.nCat
// > .cat.start
// < .ns.is
// < .str.action
// < .str.page.scp
// < .misc.pageid
// < .str.page.title
// .all.fit()
// (.guide.action)
// (.file.action)
// (.cat.action)
// mw.util.getParamValue()
// mw.config.get()
// jQuery().ready();
// 2012-02-07 PerfektesChaos@de.wikipedia
var exec = false,
learnt = false,
lf;
if ( mw.util.getParamValue( "oldid" ) === null ) {
FAdm.ns.is = mw.config.get( "wgNamespaceNumber" );
switch ( FAdm.ns.is ) {
case FAdm.ns.nSpecial :
FAdm.str.page.scp =
mw.config.get( "wgCanonicalSpecialPageName" );
lf = ( FAdm.str.page.scp === "Listfiles" ||
FAdm.str.page.scp === "Newimages" );
if ( lf ) {
exec = FAdm.guide.action;
}
break;
case FAdm.ns.nProject :
case FAdm.ns.nOthers1 :
// case FAdm.ns.nUser :
FAdm.str.action = mw.config.get( "wgAction" );
if ( FAdm.str.action === "view" ) {
exec = FAdm.guide.action;
}
break;
case FAdm.ns.nFile :
FAdm.misc.pageid = mw.config.get( "wgArticleId" );
if ( FAdm.misc.pageid > 0 ) { // not only on Commons
exec = FAdm.file.action;
}
break;
case FAdm.ns.nCat :
learnt = true;
FAdm.all.fit();
FAdm.str.page.title = mw.config.get( "wgTitle" );
if ( ! FAdm.str.page.title.indexOf( FAdm.cat.start ) ) {
if ( FAdm.str.page.title !== FAdm.cat.start ) {
exec = FAdm.cat.action;
}
}
break;
} // switch wgNamespaceNumber
if ( exec ) {
if ( ! learnt ) {
FAdm.all.fit();
}
if ( exec ) { // might have been disabled for this project
jQuery( document ).ready( exec );
}
}
}
return void(0);
}; // .all.fire()
if ( FAdm.identity === undefined ) { // prevent multiple load
FAdm.identity = FAdm.vsn;
mw.loader.state( "w:de:WP:fileAdm", "ready" );
jQuery( document ).trigger( "loadWikiScript",
[ "fileAdm", FAdm.vsn ] );
mw.loader.using( [ "user",
"mediawiki.user",
"mediawiki.util",
"jquery.cookie" ],
FAdm.all.fire() ); // autoRun()
} else {
window.alert( "fileAdm: multiple load --"
+ " may have destroyed configuration data" );
}
}; // .bb.auto()
mediaWiki.libs.fileAdm.bb.auto( mediaWiki.libs.fileAdm, mediaWiki );
delete mediaWiki.libs.fileAdm.bb.auto;
// Emacs
// Local Variables:
// encoding: utf-8-dos
// coding: utf-8-dos
// fill-column: 80
// End:
/// end of fileAdm.js