Benutzer:P.Copp/scripts/wiki.js
aus Wikipedia, der freien Enzyklopädie
< Benutzer:P.Copp | scripts
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
/* wiki.js
* Some helper functions for preprocessor.js and the like
* <nowiki> */
// Support legacy code with ts_number_transform_table
ts_number_transform_table = { ',' : '.', '.' : ',' };
if( !String.prototype.trim ) {
String.prototype.trim = function() { return this.replace( /^\s+|\s+$/g, '' ); };
}
if( !window.Wiki ) Wiki = {};
Wiki.pageCache = {};
Wiki.messageCache = {};
Wiki.funcCache = {};
Wiki.infoLoaded = {};
//Basic string functions
Wiki.ucfirst = function( s ) {
if( !s ) return s;
return s.charAt( 0 ).toUpperCase() + s.substring( 1 );
};
Wiki.lcfirst = function( s ) {
if( !s ) return s;
return s.charAt( 0 ).toLowerCase() + s.substring( 1 );
};
//Mimic the behavior of PHP's urlencode function
Wiki.urlencode = function( s ) {
return encodeURIComponent(s)
.replace( /%20/g, '+' ).replace( /!/g, '%21' )
.replace( /'/g, '%27' ).replace( /\(/g, '%28' )
.replace( /\)/g, '%29' ).replace( /\*/g, '%2A' )
.replace( /~/g, '%7E' );
};
//This one imitates MediaWiki's wfUrlencode except that spaces are already changed to underscores
Wiki.titleencode = function( s ) {
return encodeURI( s.replace( / /g, '_' ) )
.replace( /\+/g, '%2B' ).replace( /'/g, '%27' )
.replace( /~/g, '%7E' ).replace( /#/g, '%23' )
.replace( /&/g, '%26' ).replace( /=/g, '%3D' )
.replace( /\?/g, '%3F' );
};
Wiki.anchorencode = function( s ) {
return Wiki.urlencode( s ).replace( /%/g, '.' ).replace( /\+/g, '_' ).replace( /\.3A/g, ':' );
};
Wiki.escapeXML = function( s ) {
return s.replace( /&/g, '&' ).replace( /</g, '<' )
.replace( />/g, '>' ).replace( /"/g, '"' );
};
//Counterparts to Language::parseFormattedNumber and Language::formatNum
Wiki.parseFormattedNumber = function( s ) {
if( !window.ts_number_transform_table ) ts_initTransformTable();
if ( ts_number_transform_table ) {
var plain = '';
for ( var i = 0; i < s.length; i++ ) {
var c = s.charAt( i );
plain += typeof ts_number_transform_table[c] == 'undefined'
? c
: ts_number_transform_table[c];
}
return plain.replace( /,/g, '' );
}
return s.replace( /,/g, '' );
};
Wiki.formatNum = function( s, nocommafy ) {
var s = s + '';
//First step: commafy
if( !nocommafy ) {
var rx = /(^|[^\d\.])(\d{4,})/g, m;
var result = '', index = 0;
while( m = rx.exec( s ) ) {
result += s.substring( index, m.index + m[1].length );
index = m.index + m[0].length;
result += Wiki.commafy( m[2] );
}
s = result + s.substring( index );
}
//Second step: transform to local representation
if( !window.rev_number_transform_table ) {
window.rev_number_transform_table = {};
if( !ts_number_transform_table ) ts_initTransformTable();
if( ts_number_transform_table )
for( i in ts_number_transform_table )
if( typeof i == 'string' && typeof ts_number_transform_table[i] == 'string' )
rev_number_transform_table[ts_number_transform_table[i]] = i;
}
var local = '';
for( var i = 0; i < s.length; i++ ) {
var c = s.charAt( i );
local += typeof rev_number_transform_table[c] == 'undefined'
? c
: rev_number_transform_table[c];
}
return local;
};
Wiki.commafy = function( s ) {
for( var i = s.length % 3, bits = []; i <= s.length; i += 3 )
if( i > 0 ) bits.push( s.substring( i - 3, i ) );
return bits.join( ',' );
};
Wiki.padString = function( s, len, pad, dir ) {
if( !pad ) return s;
var remain = Math.min( len, 500 ) - ( s + '' ).length;
var padding = '';
while( remain > 0 ) {
padding += pad.substring( 0, remain );
remain -= pad.length;
}
return dir === 'right' ? s + padding : padding + s;
};
//Replace message parameters "$1"...
Wiki.insertParams = function( s, params ) {
if( !s || !params ) return s;
for( var i = 0; i < params.length; i++ ) {
var rx = new RegExp('\\$'+ (i+1),'g');
s = s.replace(rx,params[i]);
};
return s;
};
Wiki.getUTCDate = function() {
var date = new Date();
var offset = date.getTimezoneOffset();
if( offset ) date.setTime( date.getTime() + offset * 60000 );
return date;
};
Wiki.getLocalDate = function() {
var date = Wiki.getUTCDate( date );
if( Wiki.timeOffset ) date.setTime( date.getTime() + Wiki.timeOffset * 60000 );
return date;
};
//from Language::sprintfDate. returns false if it finds characters it can't handle yet
Wiki.formatDate = function( date, format, rawtoggle ) {
if( !format ) return format;
var result = '', num = false, raw = false;
if( !Wiki.infoLoaded.datemessages ) Wiki.loadInfo( ['datemessages'] );
for( var i = 0; i < format.length; i++ ) {
var code = format.charAt( i );
if( code == 'x' ) code += format.charAt( ++i );
switch( code ) {
case 'xi':
case 'xj':
case 'xk':
case 'xm':
case 'xo':
case 'xt':
case 'xr':
case 'xh':
case 'z' :
case 'W' :
case 't' :
case 'L' :
case 'o' :
case 'r' : //
return false;
case 'xg':
var msg = Wiki.monthGenMessages[date.getMonth()];
result += Wiki.getMessage( wgContentLanguage, msg );
break;
case 'D' :
var msg = Wiki.weekdayAbbrevMessages[date.getDay()];
result += Wiki.getMessage( wgContentLanguage, msg );
break;
case 'l' :
var msg = Wiki.weekdayMessages[date.getDay()];
result += Wiki.getMessage( wgContentLanguage, msg );
break;
case 'F' :
var msg = Wiki.monthMessages[date.getMonth()];
result += Wiki.getMessage( wgContentLanguage, msg );
break;
case 'M' :
var msg = Wiki.monthAbbrevMessages[date.getMonth()];
result += Wiki.getMessage( wgContentLanguage, msg );
break;
case 'xx': result += 'x'; break;
case 'xn': raw = true; break;
case 'xN': var rawtoggle = !rawtoggle; break;
case 'd' : num = Wiki.padString( date.getDate(), 2, '0' ); break;
case 'j' : num = date.getDate(); break;
case 'N' : num = date.getDay() || 7; break;
case 'w' : num = date.getDay(); break;
case 'm' : num = Wiki.padString( date.getMonth() + 1, 2, '0' ); break;
case 'n' : num = date.getMonth() + 1; break;
case 'Y' : num = Wiki.padString( date.getFullYear(), 4, '0' ); break;
case 'y' : num = Wiki.padString( date.getYear(), 2, '0' ); break;
case 'a' : result += date.getHours() < 12 ? 'am' : 'pm'; break;
case 'A' : result += date.getHours() < 12 ? 'AM' : 'PM'; break;
case 'g' : num = date.getHours() % 12 || 12; break;
case 'G' : num = date.getHours(); break;
case 'h' : num = Wiki.padString( date.getHours() % 12 || 12, 2, '0' ); break;
case 'H' : num = Wiki.padString( date.getHours(), 2, '0' ); break;
case 'i' : num = Wiki.padString( date.getMinutes(), 2, '0' ); break;
case 's' : num = Wiki.padString( date.getSecond(), 2, '0' ); break;
case 'c' : result += Wiki.formatDate( date, 'Y-m-dTH:i:s+00:00', true ); break;
case 'U' : num = Math.floor( date.getTime() / 1000 ); break;
case '\\': result += format.charAt( ++i ) || '\\'; break;
case '"' :
var pos = format.indexOf( '"', i + 1 );
if( pos > -1 ) {
result += format.substring( i + 1, pos );
i = pos;
} else {
result += '"';
}
break;
default : result += format.charAt( i );
}
if( num ) {
if( raw || rawtoggle ) {
result += num;
raw = false;
} else result += Wiki.formatNum( num, true );
num = false;
}
}
return result;
};
Wiki.getNS = function( s ) {
if( typeof wgNamespaceIds[s] != 'undefined' ) return wgNamespaceIds[s];
if( typeof Wiki.canonicalNamespaceIds[s] != 'undefined' ) return Wiki.canonicalNamespaceIds[s];
return false;
};
//Page object holding the namespace and title part separately
//Constructor doesn't do any checks, use Wiki.getPage to normalize titles first
Wiki.Page = function( ns, title ) {
this.ns = ns;
this.title = title;
var nstext = wgFormattedNamespaces[ns];
//The prefixed version of the title (Namespace:Title), stored for convenience
this.ptitle = nstext + ( nstext ? ':' : '' ) + title;
};
//Construct a page object from a string. Only some basic validity checks are performed,
//interwiki and fragment handling is missing completely
Wiki.getPage = function( s, defaultns ) {
if( !s ) return false;
try{ var s = decodeURIComponent( s ); } catch( e ) {};
//check for illegal chars
if( s.match( /[<>\[\]\|\{\}\x00-\x1F\xFF]/ ) ) return false;
//normalize whitespace
var s = s.replace( /[ _]+/g, ' ' ).trim();
//TODO: Fragments
//Leading colon overrides the specified default namespace
if( s.charAt( 0 ) == ':' ) {
s = s.substring( 1 );
var defaultns = 0;
}
//Split the namespace off
var ns = false;
var pos = s.indexOf( ':' );
if( pos > -1 )
ns = Wiki.getNS( s.substring( 0, pos ).trim().toLowerCase().replace( / /g, '_' ) );
if( ns === false ) {
ns = defaultns || 0;
//TODO: Respect wgCapitalLinks
var title = Wiki.ucfirst( s.trim() );
} else var title = Wiki.ucfirst( s.substring( pos + 1 ).trim() );
if( !title ) return false;
return new Wiki.Page( ns, title );
};
Wiki.Page.prototype.createLink = function( text ) {
var link = document.createElement( 'a' );
link.href = wgArticlePath.replace( /\$1/, Wiki.titleencode( this.ptitle ) );
link.title = this.ptitle;
link.appendChild( document.createTextNode( text || this.ptitle ) );
return link;
};
Wiki.Page.prototype.doEdit = function( text, summary, callback ) {
if( !Wiki.edittoken ) throw 'missing edittoken';
var query = {
action : 'edit',
title : this.ptitle,
token : Wiki.edittoken,
summary : summary || ''
};
var ts = this.getVal( 'timestamp' );
if( ts ) query.basetimestamp = ts;
this.purge();
return Wiki.callApi( query, { text : text }, callback );
};
Wiki.Page.prototype.purge = function() { delete Wiki.pageCache[this.ptitle]; };
Wiki.Page.prototype.getVal = function( key ) {
if( !Wiki.pageCache.hasOwnProperty( this.ptitle ) ) return null;
var data = Wiki.pageCache[this.ptitle];
if( data.exists === false ) return false;
if( data.hasOwnProperty( key ) ) return data[key];
else return null;
};
Wiki.Page.prototype.setVal = function( key, val ) {
if( !Wiki.pageCache.hasOwnProperty( this.ptitle ) ) Wiki.pageCache[this.ptitle] = {};
Wiki.pageCache[this.ptitle][key] = val;
};
Wiki.Page.prototype.existsCached = function() {
if( this.ns == -1 ) return true;
return this.getVal( 'exists' );
};
Wiki.Page.prototype.exists = function( callback ) {
var cached = this.existsCached();
if( cached !== null ) return callback ? callback( cached ) : cached;
var page = this;
if( callback )
return this.load( false, false, function(){ callback( page.existsCached() ) } );
this.load();
return this.existsCached();
};
Wiki.Page.prototype.getTextCached = function( redirs ) {
if( redirs ) {
var target = this.getVal( 'redirect' );
if( target === true ) return null;
else if( target ) return Wiki.getPage( target ).getTextCached();
}
return this.getVal( 'text' );
};
Wiki.Page.prototype.getText = function( redirs, callback ) {
var cached = this.getTextCached( redirs );
if( cached !== null ) return callback ? callback( cached ) : cached;
var page = this;
if( callback )
return this.load( true, redirs, function(){ callback( page.getTextCached( redirs ) ); } );
this.load( true, redirs );
return this.getTextCached( redirs );
};
Wiki.Page.prototype.getTemplateDomCached = function() {
if( this.getVal( 'dom' ) !== null ) return this.getVal( 'dom' );
var text = this.getTextCached( true );
if( text !== null ) {
this.setVal( 'dom', Wiki.preprocessToObject( text, true ) );
return this.getVal( 'dom' );
} else return null;
};
Wiki.Page.prototype.getTemplateDom = function( callback ) {
var cached = this.getTemplateDomCached();
if( cached !== null ) return callback ? callback( cached ) : cached;
var page = this;
if( callback )
return this.load( true, true, function() { callback( page.getTemplateDomCached() ); } );
this.load( true, true );
return this.getTemplateDomCached();
};
Wiki.Page.prototype.load = function( getText, redirs, callback ) {
var query = {
action : 'query',
rvprop : ['timestamp'],
titles : this.ns == -2 ? Wiki.getPage( 'File:' + this.title ).ptitle : this.ptitle,
prop : ['revisions','info']
};
if( getText ) query.rvprop.push( 'content' );
if( redirs ) query.redirects = '';
if( this.ns == -2 ) query.prop.push( 'imageinfo' );
if( !Wiki.edittoken ) query.intoken = 'edit';
var page = this;
if( callback ) return Wiki.callApi( query, null, function( res ) {
Wiki.storePage( res );
callback();
} ); else Wiki.storePage( Wiki.callApi( query ) );
};
Wiki.storePage = function( res ) {
if( !res || !res.query ) return;
if( res.query.redirects ) {
var r = res.query.redirects;
for( var i = 0; i < r.length; i++ ) {
var page = Wiki.getPage( r[i].from );
page.setVal( 'exists', true );
page.setVal( 'redirect', r[i].to );
}
}
if( res.query.pages ) {
var p = res.query.pages;
for( var pid in p ) if( p.hasOwnProperty( pid ) ) {
var page = Wiki.getPage( p[pid].title );
if( p[pid].missing === '' || p[pid].invalid === '' ) page.setVal( 'exists', false );
else{
page.setVal( 'exists', true );
page.setVal( 'id', p[pid].pageid );
page.setVal( 'size', p[pid].length );
if( p[pid].redirect === '' ) page.setVal( 'redirect', true );
var rev = p[pid].revisions[0];
page.setVal( 'timestamp', rev.timestamp );
if( rev.hasOwnProperty( '*' ) ) page.setVal( 'text', rev['*'] || '' );
}
if( p[pid].hasOwnProperty( 'imagerepository' ) )
Wiki.getPage( 'Media:' + page.title ).setVal( 'exists', !!p[pid].imageinfo );
if( p[pid].hasOwnProperty( 'edittoken' ) ) Wiki.edittoken = p[pid].edittoken;
}
}
};
Wiki.encodeQuery = function( obj ) {
var pairs = [];
for( var name in obj ) if( obj.hasOwnProperty( name ) ) {
if( typeof obj[name] == 'object' ) obj[name] = obj[name].join( '|' );
pairs.push( encodeURIComponent( name ) + '=' + encodeURIComponent( obj[name] ) );
}
return pairs.join( '&' );
};
//Ajax functions
//If no callback function is specified, will perform synchronous calls
Wiki.callApi = function( query, data, callback ) {
var method = data ? 'POST' : 'GET';
if( typeof query == 'object' ) var query = Wiki.encodeQuery( query );
if( typeof data == 'object' ) var data = Wiki.encodeQuery( data );
var url = wgScriptPath + '/api.php?format=json&' + query;
var req = sajax_init_object();
if( !req ) return false;
req.open( method, url, !!callback );
if( method == 'POST' )
req.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
if( callback ) req.onreadystatechange = function() {
if( req.readyState == 4 ) {
if( req.status != 200 ) callback( false );
else eval( 'callback(' + req.responseText + ')' );
}
};
req.send( data || '' );
if( !callback ) return eval( '(' + req.responseText + ')' );
};
Wiki.getMessageCached = function( lang, key ) {
if( !Wiki.messageCache.hasOwnProperty( lang ) ) Wiki.messageCache[lang] = {};
var c = Wiki.messageCache[lang];
if( c.hasOwnProperty( key ) ) return c[key];
else return null;
};
Wiki.getMessage = function( lang, key, callback ) {
var cached = Wiki.getMessageCached( lang, key );
if( cached !== null ) return callback ? callback( cached ) : cached;
if( callback )
return Wiki.loadMessage( lang, key, function(){ callback( Wiki.getMessageCached( lang, key ) ); } );
Wiki.loadMessage( lang, key );
return Wiki.getMessageCached( lang, key );
};
Wiki.loadMessage = function( lang, key, callback ) {
var query = {
action : 'query',
meta : 'allmessages',
ammessages : key,
amlang : lang
};
if( callback ) return Wiki.callApi( query, null, function( res ) {
Wiki.storeMessages( res, lang );
callback();
} ); else Wiki.storeMessages( Wiki.callApi( query ), lang );
};
Wiki.storeMessages = function( res, lang ) {
if( !res || !res.query || !res.query.allmessages ) return;
var m = res.query.allmessages;
if( !Wiki.messageCache[lang] ) Wiki.messageCache[lang] = {};
var c = Wiki.messageCache[lang];
for( var i = 0; i < m.length; i++ ) c[m[i].name] = m[i]['*'];
};
Wiki.getFuncCached = function( text ) {
if( Wiki.funcCache.hasOwnProperty( text ) ) return Wiki.funcCache[text];
else return null;
};
Wiki.getFunc = function( text, callback ) {
var cached = Wiki.getFuncCached( text );
if( cached !== null ) return callback ? callback( cached ) : cached;
var query = { action : 'expandtemplates' };
var data = { text : text };
if( callback ) return Wiki.callApi( query, data, function( res ) {
callback( Wiki.funcCache[text] = res.expandtemplates['*'] );
} );
return Wiki.funcCache[text] = Wiki.callApi( query, data ).expandtemplates['*'];
};
Wiki.magicIsVar = function( name ) {
return Wiki.magicwordFlags[name] & 1;
};
Wiki.magicIsFunc = function( name ) {
return Wiki.magicwordFlags[name] & 6;
};
Wiki.getMagicWord = function( s ) {
if( !Wiki.magicwordAliases ) Wiki.loadInfo( ['magicwords'] );
var mw = Wiki.magicwordAliases[s];
if( mw ) return mw.name;
var mw = Wiki.magicwordAliases[s.toLowerCase()];
if( mw && mw['case-sensitive'] !== '' ) return mw.name;
return false;
};
Wiki.loadInfo = function( items, callback ) {
var query = { action : 'query', meta : [] };
var data = false;
var siteinfo = false;
var allmessages = false;
for( var i = 0; i < items.length; i++ ) {
if( Wiki.infoLoaded[items[i]] ) continue;
switch( items[i] ) {
case 'magicwords':
if( !siteinfo ) {
query.meta.push( 'siteinfo' );
query.siprop = [];
siteinfo = true;
}
query.siprop.push( 'magicwords' );
query.siprop.push( 'general' );
case 'datemessages':
if( !allmessages ) {
query.meta.push( 'allmessages' );
if( !data ) data = {};
data.ammessages = [];
query.amlang = wgContentLanguage;
}
for( var j = 0; j < Wiki.weekdayMessages.length; j++ )
data.ammessages.push( Wiki.weekdayMessages[j] );
for( var j = 0; j < Wiki.weekdayAbbrevMessages.length; j++ )
data.ammessages.push( Wiki.weekdayAbbrevMessages[j] );
for( var j = 0; j < Wiki.monthMessages.length; j++ )
data.ammessages.push( Wiki.monthMessages[j] );
for( var j = 0; j < Wiki.monthGenMessages.length; j++ )
data.ammessages.push( Wiki.monthGenMessages[j] );
for( var j = 0; j < Wiki.monthAbbrevMessages.length; j++ )
data.ammessages.push( Wiki.monthAbbrevMessages[j] );
}
}
if( !query.meta.length ) return;
if( callback ) Wiki.callApi( query, data, function( res ) {
Wiki.storeInfo( res );
if( typeof callback == 'function' ) callback();
} ); else Wiki.storeInfo( Wiki.callApi( query, data ) );
};
Wiki.storeInfo = function( res ) {
if( !res || !res.query ) return;
var m = res.query.general;
if( m ) Wiki.timeOffset = m.timeoffset;
var m = res.query.magicwords;
if( m ) {
Wiki.magicwordAliases = {};
for( var i = 0; i < m.length; i++ ) {
var flags = Wiki.magicwordFlags[m[i].name];
var cs = m[i]['case-sensitive'] === '';
for( var j = 0; j < m[i].aliases.length; j++ ) {
var alias = cs ? m[i].aliases[j] : m[i].aliases[j].toLowerCase();
alias = alias.replace( /:$/, '' );
if( flags & 4 ) Wiki.magicwordAliases['#' + alias] = m[i];
if( flags & 11 ) Wiki.magicwordAliases[alias] = m[i];
}
}
Wiki.infoLoaded.magicwords = true;
}
if( res.query.allmessages ) {
Wiki.storeMessages( res, wgContentLanguage );
Wiki.infoLoaded.datemessages = true;
}
};
Wiki.magicwordFlags = { //1=variable, 2=parser function w/o hash,4=p.function w. hash,8=modifier
'currentmonth' : 1,//
'currentmonth1' : 1,//
'currentmonthname' : 1,//
'currentmonthnamegen' : 1,//
'currentmonthabbrev' : 1,//
'currentday' : 1,//
'currentday2' : 1,//
'currentdayname' : 1,//
'currentyear' : 1,//
'currenttime' : 1,//
'currenthour' : 1,//
'localmonth' : 1,//
'localmonth1' : 1,//
'localmonthname' : 1,//
'localmonthnamegen' : 1,//
'localmonthabbrev' : 1,//
'localday' : 1,//
'localday2' : 1,//
'localdayname' : 1,//
'localyear' : 1,//
'localtime' : 1,//
'localhour' : 1,//
'numberofpages' : 3,
'numberofarticles' : 3,
'numberoffiles' : 3,
'numberofusers' : 3,
'numberofactiveusers' : 3,
'numberofedits' : 3,
'numberofviews' : 3,
'numberofadmins' : 3,
'pagename' : 3,//
'pagenamee' : 3,//
'namespace' : 3,//
'namespacee' : 3,//
'talkspace' : 3,//
'talkspacee' : 3,//
'subjectspace' : 3,//
'subjectspacee' : 3,//
'fullpagename' : 3,//
'fullpagenamee' : 3,//
'subpagename' : 3,//
'subpagenamee' : 3,//
'basepagename' : 3,//
'basepagenamee' : 3,//
'talkpagename' : 3,//
'talkpagenamee' : 3,//
'subjectpagename' : 3,//
'subjectpagenamee' : 3,//
'sitename' : 1,
'scriptpath' : 1,
'currentweek' : 1,
'currentdow' : 1,
'localweek' : 1,
'localdow' : 1,
'revisionid' : 1,
'revisionday' : 1,
'revisionday2' : 1,
'revisionmonth' : 1,
'revisionyear' : 1,
'revisiontimestamp' : 1,
'revisionuser' : 1,
'currentversion' : 1,
'currenttimestamp' : 1,
'localtimestamp' : 1,
'directionmark' : 1,
'contentlanguage' : 1,
'server' : 1,
'servername' : 1,
'stylepath' : 1,
'int' : 2,//
'numberingroup' : 2,
'ns' : 2,//
'localurl' : 2,//
'grammar' : 2,
'gender' : 2,
'fullurl' : 2,//
'lcfirst' : 2,//
'ucfirst' : 2,//
'lc' : 2,//
'uc' : 2,//
'displaytitle' : 2,//
'urlencode' : 2,//
'anchorencode' : 2,//
'pagesinnamespace' : 2,
'formatnum' : 2,//
'padleft' : 2,//
'padright' : 2,//
'special' : 4,
'defaultsort' : 2,//
'pagesincategory' : 2,
'pagesize' : 2,
'protectionlevel' : 2,
'formatdate' : 2,
'localurle' : 2,//
'plural' : 2,//
'fullurle' : 2,//
'nse' : 2,//
'expr' : 4,//
'if' : 4,//
'ifeq' : 4,//
'ifexpr' : 4,//
'iferror' : 4,//
'switch' : 4,//
'ifexist' : 4,//
'time' : 4,
'timel' : 4,
'rel2abs' : 4,//
'titleparts' : 4,//
'language' : 2,
'filepath' : 2,
'tag' : 4,//
'msg' : 8,
'msgnw' : 8,
'subst' : 8,
'raw' : 8
};
Wiki.weekdayMessages = [
'sunday',
'monday',
'tuesday',
'wednesday',
'thursday',
'friday',
'saturday'
];
Wiki.weekdayAbbrevMessages = [
'sun',
'mon',
'tue',
'wed',
'thu',
'fri',
'sat'
];
Wiki.monthMessages = [
'january',
'february',
'march',
'april',
'may_long',
'june',
'july',
'august',
'september',
'october',
'november',
'december'
];
Wiki.monthGenMessages = [
'january-gen',
'february-gen',
'march-gen',
'april-gen',
'may-gen',
'june-gen',
'july-gen',
'august-gen',
'september-gen',
'october-gen',
'november-gen',
'december-gen'
];
Wiki.monthAbbrevMessages = [
'jan',
'feb',
'mar',
'apr',
'may',
'jun',
'jul',
'aug',
'sep',
'oct',
'nov',
'dec'
];
//Standard namespaces
Wiki.canonicalNamespaceIds = {
'media' : -2,
'special' : -1,
'' : 0,
'talk' : 1,
'user' : 2,
'user_talk' : 3,
'project' : 4,
'project_talk' : 5,
'file' : 6,
'file_talk' : 7,
'mediawiki' : 8,
'mediawiki_talk' : 9,
'template' : 10,
'template_talk' : 11,
'help' : 12,
'help_talk' : 13,
'category' : 14,
'category_talk' : 15
};