Merge "Move mediawiki.legacy.* modules from skins/common/ to resources/"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 30 Aug 2014 22:38:30 +0000 (22:38 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 30 Aug 2014 22:38:30 +0000 (22:38 +0000)
34 files changed:
docs/uidesign/design.html
resources/Resources.php
resources/src/mediawiki.legacy/ajax.js [new file with mode: 0644]
resources/src/mediawiki.legacy/commonPrint.css [new file with mode: 0644]
resources/src/mediawiki.legacy/images/ajax-loader.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/images/checker.png [new file with mode: 0644]
resources/src/mediawiki.legacy/images/feed-icon.png [new file with mode: 0644]
resources/src/mediawiki.legacy/images/feed-icon.svg [new file with mode: 0644]
resources/src/mediawiki.legacy/images/help-question-hover.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/images/help-question.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/images/question.png [new file with mode: 0644]
resources/src/mediawiki.legacy/images/question.svg [new file with mode: 0644]
resources/src/mediawiki.legacy/images/spinner.gif [new file with mode: 0644]
resources/src/mediawiki.legacy/oldshared.css [new file with mode: 0644]
resources/src/mediawiki.legacy/protect.js [new file with mode: 0644]
resources/src/mediawiki.legacy/shared.css [new file with mode: 0644]
resources/src/mediawiki.legacy/upload.js [new file with mode: 0644]
resources/src/mediawiki.legacy/wikibits.js [new file with mode: 0644]
skins/common/ajax.js [changed from file to symlink]
skins/common/commonPrint.css [deleted file]
skins/common/images/Checker-16x16.png [deleted file]
skins/common/images/ajax-loader.gif [deleted file]
skins/common/images/feed-icon.png [deleted file]
skins/common/images/feed-icon.svg [deleted file]
skins/common/images/help-question-hover.gif [deleted file]
skins/common/images/help-question.gif [deleted file]
skins/common/images/question-small.png [deleted file]
skins/common/images/question.svg [deleted file]
skins/common/images/spinner.gif [deleted file]
skins/common/oldshared.css [deleted file]
skins/common/protect.js [deleted file]
skins/common/shared.css [deleted file]
skins/common/upload.js [deleted file]
skins/common/wikibits.js [changed from file to symlink]

index a285a5b..51c1b55 100644 (file)
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html lang="en" dir="ltr">
 <head>
-       <link rel="stylesheet" href="../../skins/common/shared.css">
+       <link rel="stylesheet" href="../../resources/src/mediawiki.legacy/shared.css">
 </head>
 <body style="font-size: small;">
 
index 4a9827a..3dc831b 100644 (file)
@@ -1407,24 +1407,18 @@ return array(
        /* MediaWiki Legacy */
 
        'mediawiki.legacy.ajax' => array(
-               'scripts' => 'common/ajax.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'scripts' => 'resources/src/mediawiki.legacy/ajax.js',
                'dependencies' => array(
                        'mediawiki.util',
                        'mediawiki.legacy.wikibits',
                ),
-               'position' => 'top', // Temporary hack for legacy support
+               'position' => 'top',
        ),
        'mediawiki.legacy.commonPrint' => array(
-               'styles' => array( 'common/commonPrint.css' => array( 'media' => 'print' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'styles' => array( 'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' ) ),
        ),
        'mediawiki.legacy.protect' => array(
-               'scripts' => 'common/protect.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'scripts' => 'resources/src/mediawiki.legacy/protect.js',
                'dependencies' => array(
                        'jquery.byteLimit',
                ),
@@ -1432,19 +1426,13 @@ return array(
        ),
        'mediawiki.legacy.shared' => array(
                // Used in the web installer. Test it after modifying this definition!
-               'styles' => array( 'common/shared.css' => array( 'media' => 'screen' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'styles' => array( 'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' ) ),
        ),
        'mediawiki.legacy.oldshared' => array(
-               'styles' => array( 'common/oldshared.css' => array( 'media' => 'screen' ) ),
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'styles' => array( 'resources/src/mediawiki.legacy/oldshared.css' => array( 'media' => 'screen' ) ),
        ),
        'mediawiki.legacy.upload' => array(
-               'scripts' => 'common/upload.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'scripts' => 'resources/src/mediawiki.legacy/upload.js',
                'dependencies' => array(
                        'jquery.spinner',
                        'mediawiki.api',
@@ -1453,9 +1441,7 @@ return array(
                ),
        ),
        'mediawiki.legacy.wikibits' => array(
-               'scripts' => 'common/wikibits.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => $GLOBALS['wgStyleDirectory'],
+               'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
                'dependencies' => array(
                        'mediawiki.util',
                ),
diff --git a/resources/src/mediawiki.legacy/ajax.js b/resources/src/mediawiki.legacy/ajax.js
new file mode 100644 (file)
index 0000000..6b9464a
--- /dev/null
@@ -0,0 +1,194 @@
+/**
+ * Remote Scripting Library
+ * Copyright 2005 modernmethod, inc
+ * Under the open source BSD license
+ * http://www.modernmethod.com/sajax/
+ */
+
+/*jshint camelcase:false */
+/*global alert */
+( function ( mw ) {
+
+/**
+ * if sajax_debug_mode is true, this function outputs given the message into
+ * the element with id = sajax_debug; if no such element exists in the document,
+ * it is injected.
+ */
+function debug( text ) {
+       if ( !window.sajax_debug_mode ) {
+               return false;
+       }
+
+       var b, m,
+               e = document.getElementById( 'sajax_debug' );
+
+       if ( !e ) {
+               e = document.createElement( 'p' );
+               e.className = 'sajax_debug';
+               e.id = 'sajax_debug';
+
+               b = document.getElementsByTagName( 'body' )[0];
+
+               if ( b.firstChild ) {
+                       b.insertBefore( e, b.firstChild );
+               } else {
+                       b.appendChild( e );
+               }
+       }
+
+       m = document.createElement( 'div' );
+       m.appendChild( document.createTextNode( text ) );
+
+       e.appendChild( m );
+
+       return true;
+}
+
+/**
+ * Compatibility wrapper for creating a new XMLHttpRequest object.
+ */
+function createXhr() {
+       debug( 'sajax_init_object() called..' );
+       var a;
+       try {
+               // Try the new style before ActiveX so we don't
+               // unnecessarily trigger warnings in IE 7 when
+               // set to prompt about ActiveX usage
+               a = new XMLHttpRequest();
+       } catch ( xhrE ) {
+               try {
+                       a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
+               } catch ( msXmlE ) {
+                       try {
+                               a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
+                       } catch ( msXhrE ) {
+                               a = null;
+                       }
+               }
+       }
+       if ( !a ) {
+               debug( 'Could not create connection object.' );
+       }
+
+       return a;
+}
+
+/**
+ * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
+ *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
+ *   args - an array of arguments to that function
+ *   target - the target that will handle the result of the call. If this is a function,
+ *            if will be called with the XMLHttpRequest as a parameter; if it's an input
+ *            element, its value will be set to the resultText; if it's another type of
+ *            element, its innerHTML will be set to the resultText.
+ *
+ * Example:
+ *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
+ *
+ * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
+ * (1, 2, 3) as the parameter list, and will show the result in the element
+ * with id = showFoo
+ */
+function doAjaxRequest( func_name, args, target ) {
+       var i, x, uri, post_data;
+       uri = mw.util.wikiScript() + '?action=ajax';
+       if ( window.sajax_request_type === 'GET' ) {
+               if ( uri.indexOf( '?' ) === -1 ) {
+                       uri = uri + '?rs=' + encodeURIComponent( func_name );
+               } else {
+                       uri = uri + '&rs=' + encodeURIComponent( func_name );
+               }
+               for ( i = 0; i < args.length; i++ ) {
+                       uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
+               }
+               //uri = uri + '&rsrnd=' + new Date().getTime();
+               post_data = null;
+       } else {
+               post_data = 'rs=' + encodeURIComponent( func_name );
+               for ( i = 0; i < args.length; i++ ) {
+                       post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
+               }
+       }
+       x = createXhr();
+       if ( !x ) {
+               alert( 'AJAX not supported' );
+               return false;
+       }
+
+       try {
+               x.open( window.sajax_request_type, uri, true );
+       } catch ( e ) {
+               if ( location.hostname === 'localhost' ) {
+                       alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
+               }
+               throw e;
+       }
+       if ( window.sajax_request_type === 'POST' ) {
+               x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
+               x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
+       }
+       x.setRequestHeader( 'Pragma', 'cache=yes' );
+       x.setRequestHeader( 'Cache-Control', 'no-transform' );
+       x.onreadystatechange = function () {
+               if ( x.readyState !== 4 ) {
+                       return;
+               }
+
+               debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
+
+               //if ( x.status != 200 )
+               //      alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
+               //else
+
+               if ( typeof target === 'function' ) {
+                       target( x );
+               } else if ( typeof target === 'object' ) {
+                       if ( target.tagName === 'INPUT' ) {
+                               if ( x.status === 200 ) {
+                                       target.value = x.responseText;
+                               }
+                               //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
+                       } else {
+                               if ( x.status === 200 ) {
+                                       target.innerHTML = x.responseText;
+                               } else {
+                                       target.innerHTML = '<div class="error">Error: ' + x.status +
+                                               ' ' + x.statusText + ' (' + x.responseText + ')</div>';
+                               }
+                       }
+               } else {
+                       alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
+               }
+       };
+
+       debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
+       x.send( post_data );
+       debug( func_name + ' waiting..' );
+
+       return true;
+}
+
+/**
+ * @return {boolean} Whether the browser supports AJAX
+ */
+function wfSupportsAjax() {
+       var request = createXhr(),
+               supportsAjax = request ? true : false;
+
+       request = undefined;
+       return supportsAjax;
+}
+
+// Expose + Mark as deprecated
+var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
+
+// Variables
+mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
+mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
+// Methods
+mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
+mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
+mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
+mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
+
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.legacy/commonPrint.css b/resources/src/mediawiki.legacy/commonPrint.css
new file mode 100644 (file)
index 0000000..dda17fb
--- /dev/null
@@ -0,0 +1,431 @@
+/**
+ * MediaWiki Print style sheet for CSS2-capable browsers.
+ * Copyright Gabriel Wicke, http://www.aulinx.de/
+ *
+ * Derived from the plone (http://plone.org/) styles
+ * Copyright Alexander Limi
+ */
+
+/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
+
+/**
+ * Hide all the elements irrelevant for printing
+ */
+.noprint,
+div#jump-to-nav,
+.mw-jump,
+div.top,
+div#column-one,
+#colophon,
+.mw-editsection,
+.mw-editsection-like,
+.toctoggle,
+#toc.tochidden,
+div#f-poweredbyico,
+div#f-copyrightico,
+li#viewcount,
+li#about,
+li#disclaimer,
+li#mobileview,
+li#privacy,
+#footer-places,
+.mw-hidden-catlinks,
+tr.mw-metadata-show-hide-extended,
+span.mw-filepage-other-resolutions,
+#filetoc,
+.usermessage,
+.patrollink,
+#mw-navigation,
+#siteNotice {
+       display: none;
+}
+
+/**
+ * Pagination
+ */
+.wikitable, .thumb, img {
+       page-break-inside: avoid;
+}
+
+h2, h3, h4, h5, h6 {
+       page-break-after: avoid;
+}
+
+p {
+       widows: 3;
+       orphans: 3;
+}
+
+/**
+ * Generic HTML elements
+ */
+body {
+       background: white;
+       color: black;
+       margin: 0;
+       padding: 0;
+}
+
+ul {
+       list-style-type: square;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: bold;
+}
+
+dt {
+       font-weight: bold;
+}
+
+p {
+       margin: 1em 0;
+       line-height: 1.2em;
+}
+
+pre, .mw-code {
+       border: 1pt dashed black;
+       white-space: pre;
+       font-size: 8pt;
+       overflow: auto;
+       padding: 1em 0;
+       background: white;
+       color: black;
+}
+
+/**
+ * MediaWiki-specific elements
+ */
+#globalWrapper {
+       width: 100% !important;
+       min-width: 0 !important;
+}
+
+#content {
+       background: white;
+       border: none !important;
+       padding: 0 !important;
+       margin: 0 !important;
+       direction: ltr;
+       color: black;
+}
+
+#column-content {
+       margin: 0 !important;
+}
+
+#column-content #content {
+       padding: 1em;
+       margin: 0 !important;
+}
+
+#toc {
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       display: -moz-inline-block;
+       display: inline-block;
+       display: table;
+       /* IE7 and earlier */
+       zoom: 1;
+       *display: inline;
+}
+
+#footer {
+       background: white;
+       color: black;
+       margin-top: 1em;
+       border-top: 1px solid #AAA;
+       direction: ltr;
+}
+
+img {
+       border: none;
+       vertical-align: middle;
+}
+
+/* math */
+span.texhtml {
+       font-family: serif;
+}
+
+/**
+ * Links
+ */
+a.stub,
+a.new {
+       color: #ba0000;
+       text-decoration: none;
+}
+
+a {
+       color: black !important;
+       background: none !important;
+       padding: 0 !important;
+}
+
+a:link, a:visited {
+       color: #520;
+       background: transparent;
+       text-decoration: underline;
+}
+
+/* Expand URLs for printing */
+#content a.external.text:after,
+#content a.external.autonumber:after {
+       content: " (" attr(href) ")";
+}
+
+/* Expand protocol-relative URLs for printing */
+#content a.external.text[href^='//']:after,
+#content a.external.autonumber[href^='//']:after {
+       content: " (https:" attr(href) ")";
+}
+
+/* MSIE/Win doesn't understand 'inherit' */
+a,
+a.external,
+a.new,
+a.stub {
+       color: black !important;
+       text-decoration: none !important;
+}
+
+/* Continue ... */
+a,
+a.external,
+a.new,
+a.stub {
+       color: inherit !important;
+       text-decoration: inherit !important;
+}
+
+/**
+ * Floating divs
+ */
+div.floatright {
+       float: right;
+       clear: right;
+       position: relative;
+       margin: 0.5em 0 0.8em 1.4em;
+}
+
+div.floatright p {
+       font-style: italic;
+}
+
+div.floatleft {
+       float: left;
+       clear: left;
+       position: relative;
+       margin: 0.5em 1.4em 0.8em 0;
+}
+
+div.floatleft p {
+       font-style: italic;
+}
+
+div.center {
+       text-align: center;
+}
+
+/**
+ * Thumbnails
+ */
+div.thumb {
+       border: none;
+       width: auto;
+       margin-top: 0.5em;
+       margin-bottom: 0.8em;
+       background-color: transparent;
+}
+
+div.thumbinner {
+       border: 1px solid #cccccc;
+       padding: 3px !important;
+       background-color: White;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+
+html .thumbimage {
+       border: 1px solid #cccccc;
+}
+
+html .thumbcaption {
+       border: none;
+       text-align: left;
+       line-height: 1.4em;
+       padding: 3px !important;
+       font-size: 94%;
+}
+
+div.magnify {
+       display: none;
+}
+
+/* @noflip */
+div.tright {
+       float: right;
+       clear: right;
+       margin: 0.5em 0 0.8em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+       float: left;
+       clear: left;
+       margin: 0.5em 1.4em 0.8em 0;
+}
+
+img.thumbborder {
+       border: 1px solid #dddddd;
+}
+
+/**
+ * Galleries (see shared.css for more info)
+ */
+li.gallerybox {
+       vertical-align: top;
+       display: inline-block;
+}
+
+ul.gallery, li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       margin: 2px;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
+
+/**
+ * Diff rendering
+ */
+table.diff {
+       background: white;
+}
+
+td.diff-otitle {
+       background: #ffffff;
+}
+
+td.diff-ntitle {
+       background: #ffffff;
+}
+
+td.diff-addedline {
+       background: #ccffcc;
+       font-size: smaller;
+       border: solid 2px black;
+}
+
+td.diff-deletedline {
+       background: #ffffaa;
+       font-size: smaller;
+       border: dotted 2px black;
+}
+
+td.diff-context {
+       background: #eeeeee;
+       font-size: smaller;
+}
+
+.diffchange {
+       color: silver;
+       font-weight: bold;
+       text-decoration: underline;
+}
+
+/**
+ * Table rendering
+ * As on shared.css but with white background.
+ */
+table.wikitable,
+table.mw_metadata {
+       margin: 1em 0;
+       border: 1px #aaa solid;
+       background: white;
+       border-collapse: collapse;
+}
+
+table.wikitable > tr > th, table.wikitable > tr > td,
+table.wikitable > * > tr > th, table.wikitable > * > tr > td,
+.mw_metadata th, .mw_metadata td {
+       border: 1px #aaa solid;
+       padding: 0.2em;
+}
+
+table.wikitable > tr > th,
+table.wikitable > * > tr > th,
+.mw_metadata th {
+       text-align: center;
+       background: white;
+       font-weight: bold;
+}
+
+table.wikitable > caption,
+.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.listing,
+table.listing td {
+       border: 1pt solid black;
+       border-collapse: collapse;
+}
+
+a.sortheader {
+       margin: 0 0.3em;
+}
+
+/**
+ * Categories
+ */
+.catlinks ul {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
+       vertical-align: middle !ie;
+}
+
+.catlinks li {
+       display: inline-block;
+       line-height: 1.15em;
+       padding: 0 .4em;
+       border-left: 1px solid #AAA;
+       margin: 0.1em 0;
+       zoom: 1;
+       display: inline !ie;
+}
+
+.catlinks li:first-child {
+       padding-left: .2em;
+       border-left: none;
+}
diff --git a/resources/src/mediawiki.legacy/images/ajax-loader.gif b/resources/src/mediawiki.legacy/images/ajax-loader.gif
new file mode 100644 (file)
index 0000000..72203fd
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/ajax-loader.gif differ
diff --git a/resources/src/mediawiki.legacy/images/checker.png b/resources/src/mediawiki.legacy/images/checker.png
new file mode 100644 (file)
index 0000000..3e9e3d0
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/checker.png differ
diff --git a/resources/src/mediawiki.legacy/images/feed-icon.png b/resources/src/mediawiki.legacy/images/feed-icon.png
new file mode 100644 (file)
index 0000000..00f49f6
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/feed-icon.png differ
diff --git a/resources/src/mediawiki.legacy/images/feed-icon.svg b/resources/src/mediawiki.legacy/images/feed-icon.svg
new file mode 100644 (file)
index 0000000..6e5f570
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki.legacy/images/help-question-hover.gif b/resources/src/mediawiki.legacy/images/help-question-hover.gif
new file mode 100644 (file)
index 0000000..515138d
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/help-question-hover.gif differ
diff --git a/resources/src/mediawiki.legacy/images/help-question.gif b/resources/src/mediawiki.legacy/images/help-question.gif
new file mode 100644 (file)
index 0000000..b4fc9c5
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/help-question.gif differ
diff --git a/resources/src/mediawiki.legacy/images/question.png b/resources/src/mediawiki.legacy/images/question.png
new file mode 100644 (file)
index 0000000..f7405d2
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/question.png differ
diff --git a/resources/src/mediawiki.legacy/images/question.svg b/resources/src/mediawiki.legacy/images/question.svg
new file mode 100644 (file)
index 0000000..98fbe8d
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
diff --git a/resources/src/mediawiki.legacy/images/spinner.gif b/resources/src/mediawiki.legacy/images/spinner.gif
new file mode 100644 (file)
index 0000000..6146be4
Binary files /dev/null and b/resources/src/mediawiki.legacy/images/spinner.gif differ
diff --git a/resources/src/mediawiki.legacy/oldshared.css b/resources/src/mediawiki.legacy/oldshared.css
new file mode 100644 (file)
index 0000000..a4e7544
--- /dev/null
@@ -0,0 +1,538 @@
+/**
+ * oldshared.css
+ * This file contains CSS settings common to Wikistandard, Nostalgia and
+ * CologneBlue, the old pre-Monobook skins
+ */
+
+/* For clarity, explicitly state some recommendations from
+ * http://www.w3.org/TR/CSS21/sample.html to make sure the editsection links scale right
+ */
+
+h1 {
+       font-size: 2em;
+}
+
+h2 {
+       font-size: 1.5em;
+}
+
+h3 {
+       font-size: 1.17em;
+}
+
+h4 {
+       font-size: 1.11em;
+}
+
+h5 {
+       font-size: 1.05em;
+}
+
+h6 {
+       font-size: 1em;
+}
+
+h1, h2, h3, h4, h5, h6 {
+       font-weight: bolder;
+}
+
+/* Now the custom parts */
+
+#footer {
+       clear: both;
+}
+
+/* images */
+/* @noflip */
+div.floatright {
+       float: right;
+       clear: right;
+       margin: 0 0 1em 1em;
+}
+
+/* @noflip */
+div.floatright p {
+       font-style: italic;
+}
+
+/* @noflip */
+div.floatleft {
+       float: left;
+       clear: left;
+       margin: 0.3em 0.5em 0.5em 0;
+}
+
+/* @noflip */
+div.floatleft p {
+       font-style: italic;
+}
+
+/* table standards */
+table.rimage {
+       float: right;
+       margin-left: 1em;
+       margin-bottom: 1em;
+       text-align: center;
+       font-size: smaller;
+}
+
+/* thumbnails */
+div.thumb {
+       margin-bottom: .5em;
+       border-style: solid;
+       border-color: white;
+       width: auto;
+}
+
+div.thumbinner {
+       border: 1px solid #ccc;
+       padding: 3px;
+       background-color: #f9f9f9;
+       font-size: 94%;
+       text-align: center;
+       overflow: hidden;
+}
+
+html .thumbimage {
+       border: 1px solid #ccc;
+}
+
+html .thumbcaption {
+       border: none;
+       line-height: 1.4em;
+       padding: 3px;
+       font-size: 94%;
+       text-align: left;
+}
+
+div.magnify {
+       float: right;
+       margin-left: 3px;
+}
+
+div.magnify a {
+       display: block;
+       /* Hide the text… */
+       text-indent: 15px;
+       white-space: nowrap;
+       overflow: hidden;
+       /* â€¦and replace it with the image */
+       width: 15px;
+       height: 11px;
+       /* @embed */
+       background: url(images/magnify-clip-ltr.png) center center no-repeat;
+       /* Don't annoy people who copy-paste everything too much */
+       -moz-user-select: none;
+       -webkit-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+/* Temporary WMF deployment hack, to be removed before 1.24 release */
+div.magnify img {
+       display: none;
+}
+
+/* @noflip */
+div.tright {
+       clear: right;
+       float: right;
+       border-width: .5em 0 .8em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+       float: left;
+       clear: left;
+       margin-right: .5em;
+       border-width: .5em 1.4em .8em 0;
+}
+
+img.thumbborder {
+       border: 1px solid #dddddd;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+       color: #4b4b4b;
+}
+
+img {
+       border: none;
+}
+
+#toc,
+.toc {
+       border: 1px solid #bba;
+       background-color: #f7f8ff;
+       padding: 5px;
+       font-size: 95%;
+       text-align: center;
+       display: -moz-inline-block;
+       display: inline-block;
+       display: table;
+
+       /* IE7 and earlier */
+       zoom: 1;
+       *display: inline;
+
+       padding: 7px;
+}
+
+/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
+table#toc,
+table.toc {
+       border-collapse: collapse;
+}
+
+/* Remove additional paddings inside table-cells that are not present in <div>s */
+table#toc td,
+table.toc td {
+       padding: 0;
+}
+
+#toc h2,
+.toc h2 {
+       display: inline;
+       border: none;
+       padding: 0;
+       font-size: 100%;
+       font-weight: bold;
+}
+
+#toc ul,
+.toc ul {
+       list-style-type: none;
+       list-style-image: none;
+       padding: 0;
+       text-align: left;
+}
+
+#toc ul ul,
+.toc ul ul {
+       margin: 0 0 0 2em;
+}
+
+#toc .toctoggle,
+.toc .toctoggle {
+       font-size: 94%;
+}
+
+.error {
+       color: red;
+       font-size: larger;
+}
+
+/* preference page with js-genrated toc */
+#preftoc {
+       float: left;
+       margin: 1em 1em 1em 1em;
+       width: 13em;
+}
+
+#preftoc li {
+       border: 1px solid White;
+}
+
+#preftoc li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaaaaa;
+}
+
+#preftoc a,
+#preftoc a:active {
+       display: block;
+       color: #005189;
+}
+
+.mw-prefs-buttons {
+       clear: left;
+       float: left;
+       margin-top: 1em;
+}
+
+div.htmlform-tip {
+       font-size: 94%;
+       margin-top: 0.4em;
+       color: #666;
+}
+
+fieldset.prefsection {
+       margin-top: 1em;
+}
+
+fieldset.operaprefsection {
+       margin-left: 15em;
+}
+
+/* emulate center */
+.center {
+       width: 100%;
+       text-align: center;
+}
+
+*.center * {
+       margin-left: auto;
+       margin-right: auto;
+}
+
+/* small for tables and similar */
+.small {
+       font-size: 94%;
+}
+
+table.small {
+       font-size: 100%;
+}
+
+/* use this instead of #toc for page content */
+.toccolours {
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+}
+
+#siteNotice {
+       border: 1px solid #aaaaaa;
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+}
+
+.redirectText {
+       font-size: 150%;
+       margin: 5px;
+}
+
+.sharedUploadNotice {
+       font-style: italic;
+}
+
+span.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+span.updatedmarker {
+       color: black;
+       background-color: #00FF00;
+}
+
+div.gallerybox {
+       width: 150px;
+}
+
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+.previewnote {
+       text-align: center;
+       color: #cc0000;
+}
+
+.editExternally {
+       border-style: solid;
+       border-width: 1px;
+       border-color: gray;
+       background: #ffffff;
+       padding: 3px;
+       margin-top: 0.5em;
+       float: left;
+       font-size: small;
+       text-align: center;
+}
+
+.editExternallyHelp {
+       font-style: italic;
+       color: gray;
+}
+
+li span.deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+/* Classes for Exif data display */
+table.mw_metadata {
+       margin-left: 0.5em;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td,
+table.mw_metadata th {
+       border: 1px solid #aaaaaa;
+       padding-left: 4px;
+       padding-right: 4px;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.mw_metadata td.spacer {
+       background: inherit;
+       border-top: none;
+       border-bottom: none;
+}
+
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+.visualClear {
+       clear: both;
+}
+
+/* Allmessages table */
+#allmessagestable th {
+       background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+       background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+       background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+       background-color: #f0f0ff;
+}
+
+#jump-to-nav {
+       display: none;
+}
+
+div.multipageimagenavbox {
+       border: solid 1px silver;
+       padding: 4px;
+       margin: 1em;
+       background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+       border: none;
+       margin-left: 2em;
+       margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+       margin: 6px;
+}
+
+table.multipageimage td {
+       text-align: center;
+}
+
+/*
+  Table pager (e.g. Special:Imagelist)
+  - remove underlines from the navigation link
+  - collapse borders
+  - set the borders to outsets (similar to Special:Allmessages)
+  - remove line wrapping for all td and th, set background color
+  - restore line wrapping for the last two table cells (description and size)
+*/
+.TablePager_nav a {
+       text-decoration: none;
+}
+
+.TablePager {
+       border-collapse: collapse;
+}
+
+.TablePager,
+.TablePager td,
+.TablePager th {
+       border: 0.15em solid #777777;
+       padding: 0 0.15em 0 0.15em;
+}
+
+.TablePager th {
+       background-color: #eeeeff;
+}
+
+.TablePager td {
+       background-color: #ffffff;
+}
+
+.TablePager tr:hover td {
+       background-color: #eeeeff;
+}
+
+.templatesUsed {
+       margin-top: 1em;
+}
+
+.MediaTransformError {
+       border: thin solid #777;
+       background-color: #ccc;
+       padding: 0.1em;
+}
+
+.MediaTransformError td {
+       text-align: center;
+       vertical-align: middle;
+       font-size: 90%;
+}
+
+form#specialpages {
+       display: inline;
+}
+
+body {
+       direction: ltr;
+       unicode-bidi: embed;
+       background-color: #ffffec;
+}
+
+body.ns-0 {
+       background-color: white;
+}
+
+/** RTL specific CSS starts here **/
+
+/**
+ * Lists:
+ * The following lines don't have a visible effect on non-Gecko browsers
+ * They fix a problem with Gecko browsers rendering lists to the right of
+ * left-floated objects in an RTL layout.
+ */
+/* @noflip */
+html > body.rtl div#article ul {
+       display: table;
+}
+
+/* @noflip */
+html > body.rtl div#bodyContent ul#filetoc {
+       display: block;
+}
+
+/* RTL specific CSS ends here **/
diff --git a/resources/src/mediawiki.legacy/protect.js b/resources/src/mediawiki.legacy/protect.js
new file mode 100644 (file)
index 0000000..dc142ca
--- /dev/null
@@ -0,0 +1,387 @@
+( function ( mw, $ ) {
+
+var ProtectionForm = window.ProtectionForm = {
+       existingMatch: false,
+
+       /**
+        * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
+        * on the protection form
+        *
+        * @param opts Object : parameters with members:
+        *     tableId              Identifier of the table containing UI bits
+        *     labelText            Text to use for the checkbox label
+        *     numTypes             The number of protection types
+        *     existingMatch        True if all the existing expiry times match
+        */
+       init: function ( opts ) {
+               var box, boxbody, row, cell, check, label;
+
+               if ( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) ) {
+                       return false;
+               }
+
+               box = document.getElementById( opts.tableId );
+               if ( !box ) {
+                       return false;
+               }
+
+               boxbody = box.getElementsByTagName( 'tbody' )[0];
+               row = document.createElement( 'tr' );
+               boxbody.insertBefore( row, boxbody.firstChild.nextSibling );
+
+               this.existingMatch = opts.existingMatch;
+
+               cell = document.createElement( 'td' );
+               row.appendChild( cell );
+               // If there is only one protection type, there is nothing to chain
+               if ( opts.numTypes > 1 ) {
+                       check = document.createElement( 'input' );
+                       check.id = 'mwProtectUnchained';
+                       check.type = 'checkbox';
+                       $( check ).click( function () {
+                               ProtectionForm.onChainClick();
+                       } );
+
+                       label = document.createElement( 'label' );
+                       label.htmlFor = 'mwProtectUnchained';
+                       label.appendChild( document.createTextNode( opts.labelText ) );
+
+                       cell.appendChild( check );
+                       cell.appendChild( document.createTextNode( ' ' ) );
+                       cell.appendChild( label );
+
+                       check.checked = !this.areAllTypesMatching();
+                       this.enableUnchainedInputs( check.checked );
+               }
+
+               $( '#mwProtect-reason' ).byteLimit( 180 );
+
+               this.updateCascadeCheckbox();
+
+               return true;
+       },
+
+       /**
+        * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
+        */
+       updateCascadeCheckbox: function () {
+               var i, lists, items, selected;
+
+               // For non-existent titles, there is no cascade option
+               if ( !document.getElementById( 'mwProtect-cascade' ) ) {
+                       return;
+               }
+               lists = this.getLevelSelectors();
+               for ( i = 0; i < lists.length; i++ ) {
+                       if ( lists[i].selectedIndex > -1 ) {
+                               items = lists[i].getElementsByTagName( 'option' );
+                               selected = items[ lists[i].selectedIndex ].value;
+                               if ( !this.isCascadeableLevel( selected ) ) {
+                                       document.getElementById( 'mwProtect-cascade' ).checked = false;
+                                       document.getElementById( 'mwProtect-cascade' ).disabled = true;
+                                       return;
+                               }
+                       }
+               }
+               document.getElementById( 'mwProtect-cascade' ).disabled = false;
+       },
+
+       /**
+        * Checks if a cerain protection level is cascadeable.
+        * @param level {String}
+        * @return {Boolean}
+        */
+       isCascadeableLevel: function (  level ) {
+               var cascadeLevels, len, i;
+
+               cascadeLevels = mw.config.get( 'wgCascadeableLevels' );
+               // cascadeLevels isn't defined on all pages
+               if ( cascadeLevels ) {
+                       for ( i = 0, len = cascadeLevels.length; i < len; i += 1 ) {
+                               if ( cascadeLevels[i] === level ) {
+                                       return true;
+                               }
+                       }
+               }
+               return false;
+       },
+
+       /**
+        * When protection levels are locked together, update the rest
+        * when one action's level changes
+        *
+        * @param source Element Level selector that changed
+        */
+       updateLevels: function ( source ) {
+               if ( !this.isUnchained() ) {
+                       this.setAllSelectors( source.selectedIndex );
+               }
+               this.updateCascadeCheckbox();
+       },
+
+       /**
+        * When protection levels are locked together, update the
+        * expiries when one changes
+        *
+        * @param source Element expiry input that changed
+        */
+
+       updateExpiry: function ( source ) {
+               var expiry, listId, list;
+
+               if ( !this.isUnchained() ) {
+                       expiry = source.value;
+                       this.forEachExpiryInput( function ( element ) {
+                               element.value = expiry;
+                       } );
+               }
+               listId = source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' );
+               list = document.getElementById( listId );
+               if ( list && list.value !== 'othertime' ) {
+                       if ( this.isUnchained() ) {
+                               list.value = 'othertime';
+                       } else {
+                               this.forEachExpirySelector( function ( element ) {
+                                       element.value = 'othertime';
+                               } );
+                       }
+               }
+       },
+
+       /**
+        * When protection levels are locked together, update the
+        * expiry lists when one changes and clear the custom inputs
+        *
+        * @param source Element expiry selector that changed
+        */
+       updateExpiryList: function ( source ) {
+               var expiry;
+               if ( !this.isUnchained() ) {
+                       expiry = source.value;
+                       this.forEachExpirySelector( function ( element ) {
+                               element.value = expiry;
+                       } );
+                       this.forEachExpiryInput( function ( element ) {
+                               element.value = '';
+                       } );
+               }
+       },
+
+       /**
+        * Update chain status and enable/disable various bits of the UI
+        * when the user changes the "unlock move permissions" checkbox
+        */
+       onChainClick: function () {
+               if ( this.isUnchained() ) {
+                       this.enableUnchainedInputs( true );
+               } else {
+                       this.setAllSelectors( this.getMaxLevel() );
+                       this.enableUnchainedInputs( false );
+               }
+               this.updateCascadeCheckbox();
+       },
+
+       /**
+        * Returns true if the named attribute in all objects in the given array are matching
+        */
+       matchAttribute: function ( objects, attrName ) {
+               var i, element, value;
+
+               // Check levels
+               value = null;
+               for ( i = 0; i < objects.length; i++ ) {
+                       element = objects[i];
+                       if ( value === null ) {
+                               value = element[attrName];
+                       } else {
+                               if ( value !== element[attrName] ) {
+                                       return false;
+                               }
+                       }
+               }
+               return true;
+       },
+
+       /**
+        * Are all actions protected at the same level, with the same expiry time?
+        *
+        * @return boolean
+        */
+       areAllTypesMatching: function () {
+               return this.existingMatch
+                       && this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
+                       && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
+                       && this.matchAttribute( this.getExpiryInputs(), 'value' );
+       },
+
+       /**
+        * Is protection chaining off?
+        *
+        * @return bool
+        */
+       isUnchained: function () {
+               var element = document.getElementById( 'mwProtectUnchained' );
+               return element
+                       ? element.checked
+                       : true; // No control, so we need to let the user set both levels
+       },
+
+       /**
+        * Find the highest protection level in any selector
+        */
+       getMaxLevel: function () {
+               var maxIndex = -1;
+               this.forEachLevelSelector( function ( element ) {
+                       if ( element.selectedIndex > maxIndex ) {
+                               maxIndex = element.selectedIndex;
+                       }
+               } );
+               return maxIndex;
+       },
+
+       /**
+        * Protect all actions at the specified level
+        *
+        * @param index int Protection level
+        */
+       setAllSelectors: function ( index ) {
+               this.forEachLevelSelector( function ( element ) {
+                       if ( element.selectedIndex !== index ) {
+                               element.selectedIndex = index;
+                       }
+               } );
+       },
+
+       /**
+        * Apply a callback to each protection selector
+        *
+        * @param func callable Callback function
+        */
+       forEachLevelSelector: function ( func ) {
+               var i, selectors;
+
+               selectors = this.getLevelSelectors();
+               for ( i = 0; i < selectors.length; i++ ) {
+                       func( selectors[i] );
+               }
+       },
+
+       /**
+        * Get a list of all protection selectors on the page
+        *
+        * @return Array
+        */
+       getLevelSelectors: function () {
+               var i, ours, all, element;
+
+               all = document.getElementsByTagName( 'select' );
+               ours = [];
+               for ( i = 0; i < all.length; i++ ) {
+                       element = all[i];
+                       if ( element.id.match( /^mwProtect-level-/ ) ) {
+                               ours[ours.length] = element;
+                       }
+               }
+               return ours;
+       },
+
+       /**
+        * Apply a callback to each expiry input
+        *
+        * @param func callable Callback function
+        */
+       forEachExpiryInput: function ( func ) {
+               var i, inputs;
+
+               inputs = this.getExpiryInputs();
+               for ( i = 0; i < inputs.length; i++ ) {
+                       func( inputs[i] );
+               }
+       },
+
+       /**
+        * Get a list of all expiry inputs on the page
+        *
+        * @return Array
+        */
+       getExpiryInputs: function () {
+               var i, all, element, ours;
+
+               all = document.getElementsByTagName( 'input' );
+               ours = [];
+               for ( i = 0; i < all.length; i++ ) {
+                       element = all[i];
+                       if ( element.name.match( /^mwProtect-expiry-/ ) ) {
+                               ours[ours.length] = element;
+                       }
+               }
+               return ours;
+       },
+
+       /**
+        * Apply a callback to each expiry selector list
+        * @param func callable Callback function
+        */
+       forEachExpirySelector: function ( func ) {
+               var i, inputs;
+
+               inputs = this.getExpirySelectors();
+               for ( i = 0; i < inputs.length; i++ ) {
+                       func( inputs[i] );
+               }
+       },
+
+       /**
+        * Get a list of all expiry selector lists on the page
+        *
+        * @return Array
+        */
+       getExpirySelectors: function () {
+               var i, all, ours, element;
+
+               all = document.getElementsByTagName( 'select' );
+               ours = [];
+               for ( i = 0; i < all.length; i++ ) {
+                       element = all[i];
+                       if ( element.id.match( /^mwProtectExpirySelection-/ ) ) {
+                               ours[ours.length] = element;
+                       }
+               }
+               return ours;
+       },
+
+       /**
+        * Enable/disable protection selectors and expiry inputs
+        *
+        * @param val boolean Enable?
+        */
+       enableUnchainedInputs: function ( val ) {
+               var first = true;
+
+               this.forEachLevelSelector( function ( element ) {
+                       if ( first ) {
+                               first = false;
+                       } else {
+                               element.disabled = !val;
+                       }
+               } );
+               first = true;
+               this.forEachExpiryInput( function ( element ) {
+                       if ( first ) {
+                               first = false;
+                       } else {
+                               element.disabled = !val;
+                       }
+               } );
+               first = true;
+               this.forEachExpirySelector( function ( element ) {
+                       if ( first ) {
+                               first = false;
+                       } else {
+                               element.disabled = !val;
+                       }
+               } );
+       }
+};
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.legacy/shared.css b/resources/src/mediawiki.legacy/shared.css
new file mode 100644 (file)
index 0000000..34f084a
--- /dev/null
@@ -0,0 +1,1197 @@
+/**
+ * CSS in this file is used by *all* skins (that have any CSS at all). Be
+ * careful what you put in here, since what looks good in one skin may not in
+ * another, but don't ignore the poor pre-Monobook users either.
+ */
+
+/* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
+
+/**
+ * These classes should be used for text depending on the content direction.
+ * Content stuff like editsection, ul/ol and TOC depend on this.
+ */
+.mw-content-ltr {
+       /* @noflip */
+       direction: ltr;
+}
+
+.mw-content-rtl {
+       /* @noflip */
+       direction: rtl;
+}
+
+/* Most input fields should be in site direction */
+.sitedir-ltr textarea,
+.sitedir-ltr input {
+       /* @noflip */
+       direction: ltr;
+}
+
+.sitedir-rtl textarea,
+.sitedir-rtl input {
+       /* @noflip */
+       direction: rtl;
+}
+
+/* User-Agent styles for new HTML5 elements */
+mark {
+       background-color: yellow;
+       color: black;
+}
+
+/* Helper for wbr element on IE 8+; in HTML5, but not supported by default as of IE 11. */
+/* Note canonical HTML5 styles recommend "content: \u200B", but this doesn't work as of IE 11. */
+wbr {
+       display: inline-block;
+}
+
+/* Input types that should follow user direction, like buttons */
+/* TODO: What about buttons in wikipage content ? */
+input[type="submit"],
+input[type="button"],
+input[type="reset"],
+input[type="file"] {
+       direction: ltr;
+}
+
+/* Override default values */
+textarea[dir="ltr"],
+input[dir="ltr"] {
+       /* @noflip */
+       direction: ltr;
+}
+
+textarea[dir="rtl"],
+input[dir="rtl"] {
+       /* @noflip */
+       direction: rtl;
+}
+
+/* Default style for semantic tags */
+abbr[title],
+.explain[title] {
+       border-bottom: 1px dotted;
+       cursor: help;
+}
+
+/* Colored watchlist and recent changes numbers */
+.mw-plusminus-pos {
+       color: #006400; /* dark green */
+}
+
+.mw-plusminus-neg {
+       color: #8b0000; /* dark red */
+}
+
+.mw-plusminus-null {
+       color: #aaa; /* gray */
+}
+
+/**
+ * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
+ * [[Special:Watchlist/edit]] and in category listings.
+ */
+.allpagesredirect,
+.redirect-in-category,
+.watchlistredir {
+       font-style: italic;
+}
+
+/* Comment and username portions of RC entries */
+span.comment {
+       font-style: italic;
+}
+
+span.changedby {
+       font-size: 95%;
+}
+
+/* Math */
+.texvc {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+img.tex {
+       vertical-align: middle;
+}
+
+span.texhtml {
+       font-family: serif;
+}
+
+/**
+ * Add a bit of margin space between the preview and the toolbar.
+ * This replaces the ugly <p><br /></p> we used to insert into the page source
+ */
+#wikiPreview.ontop {
+       margin-bottom: 1em;
+}
+
+/* Stop floats from intruding into edit area in previews */
+#editform,
+#toolbar,
+#wpTextbox1 {
+       clear: both;
+}
+
+#toolbar img {
+       cursor: pointer;
+}
+
+/**
+ * File description page
+ */
+
+div.mw-filepage-resolutioninfo {
+       font-size: smaller;
+}
+
+/**
+ * File histories
+ */
+h2#filehistory {
+       clear: both;
+}
+
+table.filehistory th,
+table.filehistory td {
+       vertical-align: top;
+}
+
+table.filehistory th {
+       text-align: left;
+}
+
+table.filehistory td.mw-imagepage-filesize,
+table.filehistory th.mw-imagepage-filesize {
+       white-space: nowrap;
+}
+
+table.filehistory td.filehistory-selected {
+       font-weight: bold;
+}
+
+/**
+ * Add a checkered background image on hover for file
+ * description pages. (bug 26470)
+ */
+.filehistory a img,
+#file img:hover {
+       /* @embed */
+       background: white url(images/checker.png) repeat;
+}
+
+/**
+ * rev_deleted stuff
+ */
+li span.deleted,
+span.history-deleted {
+       text-decoration: line-through;
+       color: #888;
+       font-style: italic;
+}
+
+/**
+ * Patrol stuff
+ */
+.not-patrolled {
+       background-color: #ffa;
+}
+
+.unpatrolled {
+       font-weight: bold;
+       color: red;
+}
+
+div.patrollink {
+       font-size: 75%;
+       text-align: right;
+}
+
+/**
+ * Forms
+ */
+td.mw-label {
+       text-align: right;
+}
+
+td.mw-input {
+       text-align: left;
+}
+
+td.mw-submit {
+       text-align: left;
+}
+
+td.mw-label {
+       vertical-align: top;
+}
+
+.prefsection td.mw-label {
+       width: 20%;
+}
+
+.prefsection table {
+       width: 100%;
+}
+
+.prefsection table.mw-htmlform-matrix {
+       width: auto;
+}
+
+.mw-icon-question {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/question.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
+       background-repeat: no-repeat;
+       background-size: 13px 13px;
+       display: inline-block;
+       height: 13px;
+       width: 13px;
+       margin-left: 4px;
+}
+
+.mw-icon-question:lang(ar),
+.mw-icon-question:lang(fa),
+.mw-icon-question:lang(ur) {
+       -webkit-transform: scaleX(-1);
+       -ms-transform: scaleX(-1);
+       transform: scaleX(-1);
+}
+
+td.mw-submit {
+       white-space: nowrap;
+}
+
+table.mw-htmlform-nolabel td.mw-label {
+       width: 1px;
+}
+
+tr.mw-htmlform-vertical-label td.mw-label {
+       text-align: left !important;
+}
+
+.mw-htmlform-invalid-input td.mw-input input {
+       border-color: red;
+}
+
+.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
+       display: inline;
+       margin-right: 1em;
+       white-space: nowrap;
+}
+
+.mw-htmlform-matrix td {
+       padding-left: 0.5em;
+       padding-right: 0.5em;
+}
+
+input#wpSummary {
+       width: 80%;
+       margin-bottom: 1em;
+}
+
+/**
+ * Image captions.
+ *
+ * This is only meant to provide the most basic of styles, visual settings shouldn't be added here.
+ */
+
+/* @noflip */
+.mw-content-ltr .thumbcaption {
+       text-align: left;
+}
+
+/* @noflip */
+.mw-content-ltr .magnify {
+       float: right;
+}
+
+/* @noflip */
+.mw-content-rtl .thumbcaption {
+       text-align: right;
+}
+
+/* @noflip */
+.mw-content-rtl .magnify {
+       float: left;
+}
+
+/**
+ * Categories
+ */
+#catlinks {
+       /**
+        * Overrides text justification (user preference)
+        * See bug 31990
+        */
+       text-align: left;
+}
+
+.catlinks ul {
+       display: inline;
+       margin: 0;
+       padding: 0;
+       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
+       vertical-align: middle !ie;
+}
+
+.catlinks li {
+       display: inline-block;
+       line-height: 1.25em;
+       border-left: 1px solid #AAA;
+       margin: 0.125em 0;
+       padding: 0 0.5em;
+       zoom: 1;
+       display: inline !ie;
+}
+
+.catlinks li:first-child {
+       padding-left: 0.25em;
+       border-left: none;
+}
+
+/* (bug 5346) make category redirects italic */
+.catlinks li a.mw-redirect {
+       font-style: italic;
+}
+
+/**
+ * Hidden categories
+ */
+.mw-hidden-cats-hidden {
+       display: none;
+}
+
+.catlinks-allhidden {
+       display: none;
+}
+
+/**
+ * Convenience links to edit block, delete and protect reasons
+ * and upload licenses
+ */
+p.mw-ipb-conveniencelinks,
+p.mw-protect-editreasons,
+p.mw-filedelete-editreasons,
+p.mw-delete-editreasons,
+p.mw-revdel-editreasons,
+p.mw-upload-editlicenses {
+       font-size: 90%;
+       text-align: right;
+}
+
+/* Page history styling */
+
+/* The auto-generated edit comments */
+.autocomment {
+       color: gray;
+}
+
+#pagehistory .history-user {
+       margin-left: 0.4em;
+       margin-right: 0.2em;
+}
+
+#pagehistory span.minor {
+       font-weight: bold;
+}
+
+#pagehistory li {
+       border: 1px solid white;
+}
+
+#pagehistory li.selected {
+       background-color: #f9f9f9;
+       border: 1px dashed #aaa;
+}
+
+.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
+       float: right;
+}
+
+/** Generic minor/bot/newpage styling (recent changes) */
+.newpage,
+.minoredit,
+.botedit {
+       font-weight: bold;
+}
+
+#shared-image-dup,
+#shared-image-conflict {
+       font-style: italic;
+}
+
+/**
+ * Recreating deleted page warning
+ * Reupload file warning
+ * Page protection warning
+ * incl. log entries for these warnings
+ */
+div.mw-warning-with-logexcerpt {
+       padding: 3px;
+       margin-bottom: 3px;
+       border: 2px solid #2F6FAB;
+       clear: both;
+}
+
+div.mw-warning-with-logexcerpt ul li {
+       font-size: 90%;
+}
+
+/* (show/hide) revision deletion links */
+span.mw-revdelundel-link,
+strong.mw-revdelundel-link {
+       font-size: 90%;
+}
+
+span.mw-revdelundel-hidden,
+input.mw-revdelundel-hidden {
+       visibility: hidden;
+}
+
+td.mw-revdel-checkbox,
+th.mw-revdel-checkbox {
+       padding-right: 10px;
+       text-align: center;
+}
+
+/* red links; see bug 36276 */
+a.new {
+       color: #BA0000;
+}
+
+/* feed links */
+a.feedlink {
+       /* SVG support using a transparent gradient to guarantee cross-browser
+        * compatibility (browsers able to understand gradient syntax support also SVG).
+        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+       background-image: url(images/feed-icon.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+       background-position: center left;
+       background-repeat: no-repeat;
+       background-size: 12px 12px;
+       padding-left: 16px;
+}
+
+/* Plainlinks - this can be used to switch
+ * off special external link styling */
+.plainlinks a {
+       background: none !important;
+       padding: 0 !important;
+}
+
+/* External URLs should always be treated as LTR (bug 4330) */
+/* @noflip */ .rtl a.external.free,
+.rtl a.external.autonumber {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+/**
+ * wikitable class for skinning normal tables
+ * keep in sync with commonPrint.css
+ */
+table.wikitable {
+       margin: 1em 0;
+       background-color: #f9f9f9;
+       border: 1px #aaa solid;
+       border-collapse: collapse;
+       color: black;
+}
+
+table.wikitable > tr > th,
+table.wikitable > tr > td,
+table.wikitable > * > tr > th,
+table.wikitable > * > tr > td {
+       border: 1px #aaa solid;
+       padding: 0.2em;
+}
+
+table.wikitable > tr > th,
+table.wikitable > * > tr > th {
+       background-color: #f2f2f2;
+       text-align: center;
+}
+
+table.wikitable > caption {
+       font-weight: bold;
+}
+
+/**
+ * Hide collapsable rows in a collapsed table.
+ *
+ * Used by ImagePage and the mediawiki.action.view.metadata module.
+ */
+table.collapsed tr.collapsable {
+       display: none;
+}
+
+/* success and error messages */
+.error,
+.warning,
+.success {
+       font-size: larger;
+}
+
+.error {
+       color: #cc0000;
+}
+
+.warning {
+       color: #705000;
+}
+
+.success {
+       color: #009000;
+}
+
+.errorbox,
+.warningbox,
+.successbox {
+       border: 1px solid;
+       padding: .5em 1em;
+       margin-bottom: 1em;
+       display: -moz-inline-block;
+       display: inline-block;
+       zoom: 1;
+       *display: inline;
+}
+
+.errorbox h2,
+.warningbox h2,
+.successbox h2 {
+       font-size: 1em;
+       color: inherit;
+       font-weight: bold;
+       display: inline;
+       margin: 0 .5em 0 0;
+       border: none;
+}
+
+.errorbox {
+       color: #cc0000;
+       border-color: #fac5c5;
+       background-color: #fae3e3;
+}
+
+.warningbox {
+       color: #705000;
+       border-color: #fde29b;
+       background-color: #fdf1d1;
+}
+
+.successbox {
+       color: #009000;
+       border-color: #b7fdb5;
+       background-color: #e1fddf;
+}
+
+/* general info/warning box for SP */
+.mw-infobox {
+       border: 2px solid #ff7f00;
+       margin: 0.5em;
+       clear: left;
+       overflow: hidden;
+}
+
+.mw-infobox-left {
+       margin: 7px;
+       float: left;
+       width: 35px;
+}
+
+.mw-infobox-right {
+       margin: 0.5em 0.5em 0.5em 49px;
+}
+
+/* Note on preview page */
+.previewnote {
+       color: #c00;
+       margin-bottom: 1em;
+}
+
+.previewnote p {
+       text-indent: 3em;
+       margin: 0.8em 0;
+}
+
+.visualClear {
+       clear: both;
+}
+
+/**
+ * Data table style
+ *
+ * Transparent table with suddle borders
+ * and blue row-highlighting.
+ */
+.mw-datatable {
+       border-collapse: collapse;
+}
+
+.mw-datatable,
+.mw-datatable td,
+.mw-datatable th {
+       border: 1px solid #aaaaaa;
+       padding: 0 0.15em 0 0.15em;
+}
+
+.mw-datatable th {
+       background-color: #ddddff;
+}
+
+.mw-datatable td {
+       background-color: #ffffff;
+}
+
+.mw-datatable tr:hover td {
+       background-color: #eeeeff;
+}
+
+/**
+ * TablePager tables generated by the TablePager PHP class
+ * in MediaWiki (e.g. Special:ListFiles).
+ */
+.TablePager {
+       min-width: 80%;
+}
+
+.TablePager_nav {
+       margin: 0 auto;
+}
+
+.TablePager_nav td {
+       padding: 3px;
+       text-align: center;
+}
+
+.TablePager_nav a {
+       text-decoration: none;
+}
+
+/* filetoc */
+ul#filetoc {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       background-color: #f9f9f9;
+       padding: 5px;
+       font-size: 95%;
+       margin-bottom: 0.5em;
+       margin-left: 0;
+       margin-right: 0;
+}
+
+#filetoc li {
+       display: inline;
+       list-style-type: none;
+       padding-right: 2em;
+}
+
+/* Classes for Exif data display */
+table.mw_metadata {
+       font-size: 0.8em;
+       margin-left: 0.5em;
+       margin-bottom: 0.5em;
+       width: 400px;
+}
+
+table.mw_metadata caption {
+       font-weight: bold;
+}
+
+table.mw_metadata th {
+       font-weight: normal;
+}
+
+table.mw_metadata td {
+       padding: 0.1em;
+}
+
+table.mw_metadata {
+       border: none;
+       border-collapse: collapse;
+}
+
+table.mw_metadata td,
+table.mw_metadata th {
+       text-align: center;
+       border: 1px solid #aaaaaa;
+       padding-left: 5px;
+       padding-right: 5px;
+}
+
+table.mw_metadata th {
+       background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+       background-color: #fcfcfc;
+}
+
+table.mw_metadata ul.metadata-langlist {
+       list-style-type: none;
+       list-style-image: none;
+       padding-right: 5px;
+       padding-left: 5px;
+       margin: 0;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+.mw-content-ltr ul,
+.mw-content-rtl .mw-content-ltr ul {
+       /* @noflip */
+       margin: 0.3em 0 0 1.6em;
+       padding: 0;
+}
+
+.mw-content-rtl ul,
+.mw-content-ltr .mw-content-rtl ul {
+       /* @noflip */
+       margin: 0.3em 1.6em 0 0;
+       padding: 0;
+}
+
+.mw-content-ltr ol,
+.mw-content-rtl .mw-content-ltr ol {
+       /* @noflip */
+       margin: 0.3em 0 0 3.2em;
+       padding: 0;
+}
+
+.mw-content-rtl ol,
+.mw-content-ltr .mw-content-rtl ol {
+       /* @noflip */
+       margin: 0.3em 3.2em 0 0;
+       padding: 0;
+}
+
+/* @noflip */
+.mw-content-ltr dd,
+.mw-content-rtl .mw-content-ltr dd {
+       margin-left: 1.6em;
+       margin-right: 0;
+}
+
+/* @noflip */
+.mw-content-rtl dd,
+.mw-content-ltr .mw-content-rtl dd {
+       margin-right: 1.6em;
+       margin-left: 0;
+}
+
+/* Galleries */
+/* These display attributes look nonsensical, but are needed to support IE and FF2 */
+/* Don't forget to update commonPrint.css */
+li.gallerybox {
+       vertical-align: top;
+       display: -moz-inline-box;
+       display: inline-block;
+}
+
+ul.gallery,
+li.gallerybox {
+       zoom: 1;
+       *display: inline;
+}
+
+ul.gallery {
+       margin: 2px;
+       padding: 2px;
+       display: block;
+}
+
+li.gallerycaption {
+       font-weight: bold;
+       text-align: center;
+       display: block;
+       word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+       text-align: center;
+       border: 1px solid #ccc;
+       background-color: #f9f9f9;
+       margin: 2px;
+}
+
+li.gallerybox div.thumb img {
+       display: block;
+       margin: 0 auto;
+}
+
+div.gallerytext {
+       overflow: hidden;
+       font-size: 94%;
+       padding: 2px 4px;
+       word-wrap: break-word;
+}
+
+/* new gallery stuff */
+ul.mw-gallery-nolines li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-nolines li.gallerybox div.gallerytext {
+       text-align: center;
+}
+
+/* height constrained gallery */
+
+ul.mw-gallery-packed li.gallerybox div.thumb,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb {
+       background-color: transparent;
+       border: none;
+}
+
+ul.mw-gallery-packed li.gallerybox div.thumb img,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
+       margin: 0 auto;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox,
+ul.mw-gallery-packed-overlay li.gallerybox {
+       position: relative;
+}
+
+ul.mw-gallery-packed-hover div.gallerytextwrapper {
+       overflow: hidden;
+       height: 0;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
+ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
+ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
+       position: absolute;
+       background: white;
+       background: rgba(255, 255, 255, 0.8);
+       padding: 5px 10px;
+       bottom: 0;
+       left: 0; /* Needed for IE */
+       height: auto;
+       font-weight: bold;
+       margin: 2px; /* correspond to style on div.thumb */
+}
+
+ul.mw-gallery-packed-hover,
+ul.mw-gallery-packed-overlay,
+ul.mw-gallery-packed {
+       text-align: center;
+}
+
+.mw-ajax-loader {
+       /* @embed */
+       background-image: url(images/ajax-loader.gif);
+       background-position: center center;
+       background-repeat: no-repeat;
+       padding: 16px;
+       position: relative;
+       top: -16px;
+}
+
+.mw-small-spinner {
+       padding: 10px !important;
+       margin-right: 0.6em;
+       /* @embed */
+       background-image: url(images/spinner.gif);
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+
+/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
+/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
+h1:lang(anp),
+h1:lang(as),
+h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
+h1:lang(bho),
+h1:lang(bn),
+h1:lang(gu),
+h1:lang(hi),
+h1:lang(kn),
+h1:lang(ks),
+h1:lang(ml),
+h1:lang(mr),
+h1:lang(my),
+h1:lang(mai),
+h1:lang(ne),
+h1:lang(new),
+h1:lang(or),
+h1:lang(pa),
+h1:lang(pi),
+h1:lang(sa),
+h1:lang(ta),
+h1:lang(te) {
+       line-height: 1.6em !important;
+}
+
+h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp),
+h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
+h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
+h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
+h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
+h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
+h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
+h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
+h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks),
+h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
+h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
+h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
+h2:lang(mai), h3:lang(mai), h4:lang(mai), h5:lang(mai), h6:lang(mai),
+h2:lang(ne), h3:lang(ne), h4:lang(ne), h5:lang(ne), h6:lang(ne),
+h2:lang(new), h3:lang(new), h4:lang(new), h5:lang(new), h6:lang(new),
+h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
+h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
+h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi),
+h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
+h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
+h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
+       line-height: 1.2em;
+}
+
+/* Localised ordered list numbering for some languages */
+ol:lang(bcc) li,
+ol:lang(bqi) li,
+ol:lang(fa) li,
+ol:lang(glk) li,
+ol:lang(kk-arab) li,
+ol:lang(mzn) li {
+       list-style-type: -moz-persian;
+       list-style-type: persian;
+}
+
+ol:lang(ckb) li {
+       list-style-type: -moz-arabic-indic;
+       list-style-type: arabic-indic;
+}
+
+ol:lang(hi) li,
+ol:lang(mr) li {
+       list-style-type: -moz-devanagari;
+       list-style-type: devanagari;
+}
+
+ol:lang(as) li,
+ol:lang(bn) li {
+       list-style-type: -moz-bengali;
+       list-style-type: bengali;
+}
+
+ol:lang(or) li {
+       list-style-type: -moz-oriya;
+       list-style-type: oriya;
+}
+
+#toc ul, .toc ul {
+       margin: .3em 0;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+/* @noflip */ .mw-content-ltr .toc ul,
+.mw-content-ltr #toc ul,
+.mw-content-rtl .mw-content-ltr .toc ul,
+.mw-content-rtl .mw-content-ltr #toc ul {
+       text-align: left;
+}
+
+/* @noflip */ .mw-content-rtl .toc ul,
+.mw-content-rtl #toc ul,
+.mw-content-ltr .mw-content-rtl .toc ul,
+.mw-content-ltr .mw-content-rtl #toc ul {
+       text-align: right;
+}
+
+/* @noflip */ .mw-content-ltr .toc ul ul,
+.mw-content-ltr #toc ul ul,
+.mw-content-rtl .mw-content-ltr .toc ul ul,
+.mw-content-rtl .mw-content-ltr #toc ul ul {
+       margin: 0 0 0 2em;
+}
+
+/* @noflip */ .mw-content-rtl .toc ul ul,
+.mw-content-rtl #toc ul ul,
+.mw-content-ltr .mw-content-rtl .toc ul ul,
+.mw-content-ltr .mw-content-rtl #toc ul ul {
+       margin: 0 2em 0 0;
+}
+
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+       direction: ltr;
+}
+
+/* tooltip styles */
+.mw-help-field-hint {
+       display: none;
+       margin-left: 2px;
+       margin-bottom: -8px;
+       padding: 0 0 0 15px;
+       /* @embed */
+       background-image: url(images/help-question.gif);
+       background-position: left center;
+       background-repeat: no-repeat;
+       cursor: pointer;
+       font-size: .8em;
+       text-decoration: underline;
+       color: #0645ad;
+}
+
+.mw-help-field-hint:hover {
+       /* @embed */
+       background-image: url(images/help-question-hover.gif);
+}
+
+.mw-help-field-data {
+       display: block;
+       background-color: #d6f3ff;
+       padding: 5px 8px 4px 8px;
+       border: 1px solid #5dc9f4;
+       margin-left: 20px;
+}
+
+#mw-clearyourcache,
+#mw-sitecsspreview,
+#mw-sitejspreview,
+#mw-usercsspreview,
+#mw-userjspreview {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+/* Correct user & content directionality when viewing a diff */
+.diff-currentversion-title,
+.diff {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+/* @noflip */ .diff-contentalign-right td {
+       direction: rtl;
+       unicode-bidi: embed;
+}
+
+/* @noflip */ .diff-contentalign-left td {
+       direction: ltr;
+       unicode-bidi: embed;
+}
+
+.diff-multi,
+.diff-otitle,
+.diff-ntitle,
+.diff-lineno {
+       direction: ltr !important;
+       unicode-bidi: embed;
+}
+
+#mw-revision-info,
+#mw-revision-info-current,
+#mw-revision-nav {
+       direction: ltr;
+       display: inline;
+}
+
+/* Images */
+
+/* @noflip */ div.tright,
+div.floatright,
+table.floatright {
+       clear: right;
+       float: right;
+}
+
+/* @noflip */ div.tleft,
+div.floatleft,
+table.floatleft {
+       float: left;
+       clear: left;
+}
+
+div.floatright,
+table.floatright,
+div.floatleft,
+table.floatleft {
+       position: relative;
+}
+
+/* bug 12205 */
+#mw-credits a {
+       unicode-bidi: embed;
+}
+
+/* Accessibility */
+.mw-jump,
+#jump-to-nav {
+       overflow: hidden;
+       height: 0;
+       zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
+}
+
+/* Print footer should be hidden by default in screen. */
+.printfooter {
+       display: none;
+}
+
+/* For developers */
+.xdebug-error {
+       position: absolute;
+       z-index: 99;
+}
+
+.mw-editsection,
+.toctoggle,
+#jump-to-nav {
+       -moz-user-select: none;
+       -webkit-user-select: none;
+       -ms-user-select: none;
+       user-select: none;
+}
+
+/* Display editsection links smaller and next to headings */
+.mw-editsection,
+.mw-editsection-like {
+       font-size: small;
+       font-weight: normal;
+       margin-left: 1em;
+       vertical-align: baseline;
+       /* Reset line-height; headings tend to have it set to larger values */
+       line-height: 1em;
+       /* As .mw-editsection is a <span> (inline element), it is treated as part */
+       /* of the heading content when selecting text by multiple clicks and thus */
+       /* selected together with heading content, despite the user-select: none; */
+       /* rule set above. This enforces non-selection without changing the look. */
+       display: inline-block;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+/* @noflip */
+.mw-content-ltr .mw-editsection,
+.mw-content-rtl .mw-content-ltr .mw-editsection {
+       margin-left: 1em;
+}
+
+/* @noflip */
+.mw-content-rtl .mw-editsection,
+.mw-content-ltr .mw-content-rtl .mw-editsection {
+       margin-right: 1em;
+}
+
+/* Prevent citations and subscripts from interfering with the line-height */
+sup,
+sub {
+       line-height: 1;
+}
diff --git a/resources/src/mediawiki.legacy/upload.js b/resources/src/mediawiki.legacy/upload.js
new file mode 100644 (file)
index 0000000..144bdf9
--- /dev/null
@@ -0,0 +1,246 @@
+/*jshint camelcase:false */
+( function ( mw, $ ) {
+       var ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
+               $license = $( '#wpLicense' ), uploadWarning, uploadLicense;
+
+       window.wgUploadWarningObj = uploadWarning = {
+               responseCache: { '': '&nbsp;' },
+               nameToCheck: '',
+               typing: false,
+               delay: 500, // ms
+               timeoutID: false,
+
+               keypress: function () {
+                       if ( !ajaxUploadDestCheck ) {
+                               return;
+                       }
+
+                       // Find file to upload
+                       if ( !$( '#wpDestFile' ).length || !$( '#wpDestFile-warning' ).length ) {
+                               return;
+                       }
+
+                       this.nameToCheck = $( '#wpDestFile' ).val();
+
+                       // Clear timer
+                       if ( this.timeoutID ) {
+                               clearTimeout( this.timeoutID );
+                       }
+                       // Check response cache
+                       if ( this.responseCache.hasOwnProperty( this.nameToCheck ) ) {
+                               this.setWarning( this.responseCache[this.nameToCheck] );
+                               return;
+                       }
+
+                       this.timeoutID = setTimeout( function () {
+                               uploadWarning.timeout();
+                       }, this.delay );
+               },
+
+               checkNow: function ( fname ) {
+                       if ( !ajaxUploadDestCheck ) {
+                               return;
+                       }
+                       if ( this.timeoutID ) {
+                               clearTimeout( this.timeoutID );
+                       }
+                       this.nameToCheck = fname;
+                       this.timeout();
+               },
+
+               timeout: function () {
+                       var $spinnerDestCheck;
+                       if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
+                               return;
+                       }
+                       $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' );
+
+                       ( new mw.Api() ).get( {
+                               action: 'query',
+                               titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
+                               prop: 'imageinfo',
+                               iiprop: 'uploadwarning',
+                               indexpageids: ''
+                       } ).done( function ( result ) {
+                               var resultOut = '';
+                               if ( result.query ) {
+                                       resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
+                               }
+                               $spinnerDestCheck.remove();
+                               uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
+                       } );
+               },
+
+               processResult: function ( result, fileName ) {
+                       this.setWarning( result.html );
+                       this.responseCache[fileName] = result.html;
+               },
+
+               setWarning: function ( warning ) {
+                       $( '#wpDestFile-warning' ).html( warning );
+
+                       // Set a value in the form indicating that the warning is acknowledged and
+                       // doesn't need to be redisplayed post-upload
+                       if ( !warning ) {
+                               $( '#wpDestFileWarningAck' ).val( '' );
+                       } else {
+                               $( '#wpDestFileWarningAck' ).val( '1' );
+                       }
+
+               }
+       };
+
+       uploadLicense = {
+
+               responseCache: { '': '' },
+
+               fetchPreview: function ( license ) {
+                       var $spinnerLicense;
+                       if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) {
+                               return;
+                       }
+                       if ( this.responseCache.hasOwnProperty( license ) ) {
+                               this.showPreview( this.responseCache[license] );
+                               return;
+                       }
+
+                       $spinnerLicense = $.createSpinner().insertAfter( '#wpLicense' );
+
+                       ( new mw.Api() ).get( {
+                               action: 'parse',
+                               text: '{{' + license + '}}',
+                               title: $( '#wpDestFile' ).val() || 'File:Sample.jpg',
+                               prop: 'text',
+                               pst: ''
+                       } ).done( function ( result ) {
+                               $spinnerLicense.remove();
+                               uploadLicense.processResult( result, license );
+                       } );
+               },
+
+               processResult: function ( result, license ) {
+                       this.responseCache[license] = result.parse.text['*'];
+                       this.showPreview( this.responseCache[license] );
+               },
+
+               showPreview: function ( preview ) {
+                       $( '#mw-license-preview' ).html( preview );
+               }
+
+       };
+
+       $( function () {
+               // Disable URL box if the URL copy upload source type is not selected
+               if ( !$( '#wpSourceTypeurl' ).prop( 'checked' ) ) {
+                       $( '#wpUploadFileURL' ).prop( 'disabled', true );
+               }
+
+               // AJAX wpDestFile warnings
+               if ( ajaxUploadDestCheck ) {
+                       // Insert an event handler that fetches upload warnings when wpDestFile
+                       // has been changed
+                       $( '#wpDestFile' ).change( function () {
+                               uploadWarning.checkNow( $( this ).val() );
+                       } );
+                       // Insert a row where the warnings will be displayed just below the
+                       // wpDestFile row
+                       $( '#mw-htmlform-description tbody' ).append(
+                               $( '<tr>' ).append(
+                                       $( '<td>' )
+                                               .attr( 'id', 'wpDestFile-warning' )
+                                               .attr( 'colspan', 2 )
+                               )
+                       );
+               }
+
+               if ( mw.config.get( 'wgAjaxLicensePreview' ) && $license.length ) {
+                       // License selector check
+                       $license.change( function () {
+                               // We might show a preview
+                               uploadLicense.fetchPreview( $license.val() );
+                       } );
+
+                       // License selector table row
+                       $license.closest( 'tr' ).after(
+                               $( '<tr>' ).append(
+                                       $( '<td>' ),
+                                       $( '<td>' ).attr( 'id', 'mw-license-preview' )
+                               )
+                       );
+               }
+
+               // fillDestFile setup
+               $.each( mw.config.get( 'wgUploadSourceIds' ), function ( index, sourceId ) {
+                       $( '#' + sourceId ).change( function () {
+                               var path, slash, backslash, fname;
+                               if ( !mw.config.get( 'wgUploadAutoFill' ) ) {
+                                       return;
+                               }
+                               // Remove any previously flagged errors
+                               $( '#mw-upload-permitted' ).attr( 'class', '' );
+                               $( '#mw-upload-prohibited' ).attr( 'class', '' );
+
+                               path = $( this ).val();
+                               // Find trailing part
+                               slash = path.lastIndexOf( '/' );
+                               backslash = path.lastIndexOf( '\\' );
+                               if ( slash === -1 && backslash === -1 ) {
+                                       fname = path;
+                               } else if ( slash > backslash ) {
+                                       fname = path.substring( slash + 1 );
+                               } else {
+                                       fname = path.substring( backslash + 1 );
+                               }
+
+                               // Clear the filename if it does not have a valid extension.
+                               // URLs are less likely to have a useful extension, so don't include them in the
+                               // extension check.
+                               if (
+                                       mw.config.get( 'wgStrictFileExtensions' ) &&
+                                       mw.config.get( 'wgFileExtensions' ) &&
+                                       $( this ).attr( 'id' ) !== 'wpUploadFileURL'
+                               ) {
+                                       if (
+                                               fname.lastIndexOf( '.' ) === -1 ||
+                                               $.inArray(
+                                                       fname.substr( fname.lastIndexOf( '.' ) + 1 ).toLowerCase(),
+                                                       $.map( mw.config.get( 'wgFileExtensions' ), function ( element ) {
+                                                               return element.toLowerCase();
+                                                       } )
+                                               ) === -1
+                                       ) {
+                                               // Not a valid extension
+                                               // Clear the upload and set mw-upload-permitted to error
+                                               $( this ).val( '' );
+                                               $( '#mw-upload-permitted' ).attr( 'class', 'error' );
+                                               $( '#mw-upload-prohibited' ).attr( 'class', 'error' );
+                                               // Clear wpDestFile as well
+                                               $( '#wpDestFile' ).val( '' );
+
+                                               return false;
+                                       }
+                               }
+
+                               // Replace spaces by underscores
+                               fname = fname.replace( / /g, '_' );
+                               // Capitalise first letter if needed
+                               if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
+                                       fname = fname.charAt( 0 ).toUpperCase().concat( fname.substring( 1 ) );
+                               }
+
+                               // Output result
+                               if ( $( '#wpDestFile' ).length ) {
+                                       // Call decodeURIComponent function to remove possible URL-encoded characters
+                                       // from the file name (bug 30390). Especially likely with upload-form-url.
+                                       // decodeURIComponent can throw an exception if input is invalid utf-8
+                                       try {
+                                               $( '#wpDestFile' ).val( decodeURIComponent( fname ) );
+                                       } catch ( err ) {
+                                               $( '#wpDestFile' ).val( fname );
+                                       }
+                                       uploadWarning.checkNow( fname );
+                               }
+                       } );
+               } );
+       } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.legacy/wikibits.js b/resources/src/mediawiki.legacy/wikibits.js
new file mode 100644 (file)
index 0000000..5c6e63b
--- /dev/null
@@ -0,0 +1,201 @@
+/**
+ * MediaWiki legacy wikibits
+ */
+( function ( mw, $ ) {
+       var msg,
+               win = window,
+               ua = navigator.userAgent.toLowerCase(),
+               onloadFuncts = [];
+
+/**
+ * User-agent sniffing.
+ *
+ * @deprecated since 1.17 Use jquery.client instead
+ */
+
+msg = 'Use feature detection or module jquery.client instead.';
+
+mw.log.deprecate( win, 'clientPC', ua, msg );
+
+// Ignored dummy values
+mw.log.deprecate( win, 'is_gecko', false, msg );
+mw.log.deprecate( win, 'is_chrome_mac', false, msg );
+mw.log.deprecate( win, 'is_chrome', false, msg );
+mw.log.deprecate( win, 'webkit_version', false, msg );
+mw.log.deprecate( win, 'is_safari_win', false, msg );
+mw.log.deprecate( win, 'is_safari', false, msg );
+mw.log.deprecate( win, 'webkit_match', false, msg );
+mw.log.deprecate( win, 'is_ff2', false, msg );
+mw.log.deprecate( win, 'ff2_bugs', false, msg );
+mw.log.deprecate( win, 'is_ff2_win', false, msg );
+mw.log.deprecate( win, 'is_ff2_x11', false, msg );
+mw.log.deprecate( win, 'opera95_bugs', false, msg );
+mw.log.deprecate( win, 'opera7_bugs', false, msg );
+mw.log.deprecate( win, 'opera6_bugs', false, msg );
+mw.log.deprecate( win, 'is_opera_95', false, msg );
+mw.log.deprecate( win, 'is_opera_preseven', false, msg );
+mw.log.deprecate( win, 'is_opera', false, msg );
+mw.log.deprecate( win, 'ie6_bugs', false, msg );
+
+/**
+ * DOM utilities for handling of events, text nodes and selecting elements
+ *
+ * @deprecated since 1.17 Use jQuery instead
+ */
+msg = 'Use jQuery instead.';
+
+// Ignored dummy values
+mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
+mw.log.deprecate( win, 'onloadFuncts', [], msg );
+mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
+mw.log.deprecate( win, 'changeText', $.noop, msg );
+mw.log.deprecate( win, 'killEvt', $.noop, msg );
+mw.log.deprecate( win, 'addHandler', $.noop, msg );
+mw.log.deprecate( win, 'hookEvent', $.noop, msg );
+mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
+mw.log.deprecate( win, 'removeHandler', $.noop, msg );
+mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
+mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
+
+// Run a function after the window onload event is fired
+mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
+       if ( onloadFuncts ) {
+               onloadFuncts.push(hookFunct);
+       } else {
+               // If func queue is gone the event has happened already,
+               // run immediately instead of queueing.
+               hookFunct();
+       }
+}, msg );
+
+$( win ).on( 'load', function () {
+       var i, functs;
+
+       // Don't run twice
+       if ( !onloadFuncts ) {
+               return;
+       }
+
+       // Deference and clear onloadFuncts before running any
+       // hooks to make sure we don't miss any addOnloadHook
+       // calls.
+       functs = onloadFuncts.slice();
+       onloadFuncts = undefined;
+
+       // Execute the queued functions
+       for ( i = 0; i < functs.length; i++ ) {
+               functs[i]();
+       }
+} );
+
+/**
+ * Toggle checkboxes with shift selection
+ *
+ * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
+ */
+msg = 'Use jquery.checkboxShiftClick instead.';
+mw.log.deprecate( win, 'checkboxes', [], msg );
+mw.log.deprecate( win, 'lastCheckbox', null, msg );
+mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
+mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
+mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
+
+/**
+ * Add a button to the default editor toolbar
+ *
+ * @deprecated since 1.17 Use mw.toolbar instead
+ */
+mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
+mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
+
+/**
+ * Spinner creation, injection and removal
+ *
+ * @deprecated since 1.18 Use jquery.spinner instead
+ */
+mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
+mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
+
+/**
+ * Escape utilities
+ *
+ * @deprecated since 1.18 Use mw.html instead
+ */
+mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
+mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
+
+/**
+ * Display a message to the user
+ *
+ * @deprecated since 1.17 Use mediawiki.notify instead
+ * @param {string|HTMLElement} message To be put inside the message box
+ */
+mw.log.deprecate( win, 'jsMsg', function ( message ) {
+       if ( !arguments.length || message === '' || message === null ) {
+               return true;
+       }
+       if ( typeof message !== 'object' ) {
+               message = $.parseHTML( message );
+       }
+       mw.notify( message, { autoHide: true, tag: 'legacy' } );
+       return true;
+}, 'Use mediawiki.notify instead.' );
+
+/**
+ * Misc. utilities
+ *
+ * @deprecated since 1.17 Use mediawiki.util instead
+ */
+msg = 'Use mediawiki.util instead.';
+mw.log.deprecate( win, 'updateTooltipAccessKeys', mw.util.updateTooltipAccessKeys, msg );
+mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
+mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
+msg = 'Use jquery.accessKeyLabel instead.';
+mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
+mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
+
+/**
+ * Wikipage import methods
+ */
+
+// included-scripts tracker
+win.loadedScripts = {};
+
+win.importScript = function ( page ) {
+       var uri = mw.config.get( 'wgScript' ) + '?title=' +
+               mw.util.wikiUrlencode( page ) +
+               '&action=raw&ctype=text/javascript';
+       return win.importScriptURI( uri );
+};
+
+win.importScriptURI = function ( url ) {
+       if ( win.loadedScripts[url] ) {
+               return null;
+       }
+       win.loadedScripts[url] = true;
+       var s = document.createElement( 'script' );
+       s.setAttribute( 'src', url );
+       s.setAttribute( 'type', 'text/javascript' );
+       document.getElementsByTagName( 'head' )[0].appendChild( s );
+       return s;
+};
+
+win.importStylesheet = function ( page ) {
+       var uri = mw.config.get( 'wgScript' ) + '?title=' +
+               mw.util.wikiUrlencode( page ) +
+               '&action=raw&ctype=text/css';
+       return win.importStylesheetURI( uri );
+};
+
+win.importStylesheetURI = function ( url, media ) {
+       var l = document.createElement( 'link' );
+       l.rel = 'stylesheet';
+       l.href = url;
+       if ( media ) {
+               l.media = media;
+       }
+       document.getElementsByTagName('head')[0].appendChild( l );
+       return l;
+};
+
+}( mediaWiki, jQuery ) );
deleted file mode 100644 (file)
index 6b9464a914398344a7ddcbd239be61441fa68fea..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/**
- * Remote Scripting Library
- * Copyright 2005 modernmethod, inc
- * Under the open source BSD license
- * http://www.modernmethod.com/sajax/
- */
-
-/*jshint camelcase:false */
-/*global alert */
-( function ( mw ) {
-
-/**
- * if sajax_debug_mode is true, this function outputs given the message into
- * the element with id = sajax_debug; if no such element exists in the document,
- * it is injected.
- */
-function debug( text ) {
-       if ( !window.sajax_debug_mode ) {
-               return false;
-       }
-
-       var b, m,
-               e = document.getElementById( 'sajax_debug' );
-
-       if ( !e ) {
-               e = document.createElement( 'p' );
-               e.className = 'sajax_debug';
-               e.id = 'sajax_debug';
-
-               b = document.getElementsByTagName( 'body' )[0];
-
-               if ( b.firstChild ) {
-                       b.insertBefore( e, b.firstChild );
-               } else {
-                       b.appendChild( e );
-               }
-       }
-
-       m = document.createElement( 'div' );
-       m.appendChild( document.createTextNode( text ) );
-
-       e.appendChild( m );
-
-       return true;
-}
-
-/**
- * Compatibility wrapper for creating a new XMLHttpRequest object.
- */
-function createXhr() {
-       debug( 'sajax_init_object() called..' );
-       var a;
-       try {
-               // Try the new style before ActiveX so we don't
-               // unnecessarily trigger warnings in IE 7 when
-               // set to prompt about ActiveX usage
-               a = new XMLHttpRequest();
-       } catch ( xhrE ) {
-               try {
-                       a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
-               } catch ( msXmlE ) {
-                       try {
-                               a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
-                       } catch ( msXhrE ) {
-                               a = null;
-                       }
-               }
-       }
-       if ( !a ) {
-               debug( 'Could not create connection object.' );
-       }
-
-       return a;
-}
-
-/**
- * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
- *   func_name - the name of the function to call. Must be registered in $wgAjaxExportList
- *   args - an array of arguments to that function
- *   target - the target that will handle the result of the call. If this is a function,
- *            if will be called with the XMLHttpRequest as a parameter; if it's an input
- *            element, its value will be set to the resultText; if it's another type of
- *            element, its innerHTML will be set to the resultText.
- *
- * Example:
- *    sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
- *
- * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
- * (1, 2, 3) as the parameter list, and will show the result in the element
- * with id = showFoo
- */
-function doAjaxRequest( func_name, args, target ) {
-       var i, x, uri, post_data;
-       uri = mw.util.wikiScript() + '?action=ajax';
-       if ( window.sajax_request_type === 'GET' ) {
-               if ( uri.indexOf( '?' ) === -1 ) {
-                       uri = uri + '?rs=' + encodeURIComponent( func_name );
-               } else {
-                       uri = uri + '&rs=' + encodeURIComponent( func_name );
-               }
-               for ( i = 0; i < args.length; i++ ) {
-                       uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
-               }
-               //uri = uri + '&rsrnd=' + new Date().getTime();
-               post_data = null;
-       } else {
-               post_data = 'rs=' + encodeURIComponent( func_name );
-               for ( i = 0; i < args.length; i++ ) {
-                       post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
-               }
-       }
-       x = createXhr();
-       if ( !x ) {
-               alert( 'AJAX not supported' );
-               return false;
-       }
-
-       try {
-               x.open( window.sajax_request_type, uri, true );
-       } catch ( e ) {
-               if ( location.hostname === 'localhost' ) {
-                       alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
-               }
-               throw e;
-       }
-       if ( window.sajax_request_type === 'POST' ) {
-               x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
-               x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
-       }
-       x.setRequestHeader( 'Pragma', 'cache=yes' );
-       x.setRequestHeader( 'Cache-Control', 'no-transform' );
-       x.onreadystatechange = function () {
-               if ( x.readyState !== 4 ) {
-                       return;
-               }
-
-               debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
-
-               //if ( x.status != 200 )
-               //      alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
-               //else
-
-               if ( typeof target === 'function' ) {
-                       target( x );
-               } else if ( typeof target === 'object' ) {
-                       if ( target.tagName === 'INPUT' ) {
-                               if ( x.status === 200 ) {
-                                       target.value = x.responseText;
-                               }
-                               //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
-                       } else {
-                               if ( x.status === 200 ) {
-                                       target.innerHTML = x.responseText;
-                               } else {
-                                       target.innerHTML = '<div class="error">Error: ' + x.status +
-                                               ' ' + x.statusText + ' (' + x.responseText + ')</div>';
-                               }
-                       }
-               } else {
-                       alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
-               }
-       };
-
-       debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
-       x.send( post_data );
-       debug( func_name + ' waiting..' );
-
-       return true;
-}
-
-/**
- * @return {boolean} Whether the browser supports AJAX
- */
-function wfSupportsAjax() {
-       var request = createXhr(),
-               supportsAjax = request ? true : false;
-
-       request = undefined;
-       return supportsAjax;
-}
-
-// Expose + Mark as deprecated
-var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
-
-// Variables
-mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
-mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
-// Methods
-mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
-mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
-mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
-mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
-
-}( mediaWiki ) );
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..6cf8d718503709f208b5fbecec35ab55ea3d9f13
--- /dev/null
@@ -0,0 +1 @@
+../../resources/src/mediawiki.legacy/ajax.js
\ No newline at end of file
diff --git a/skins/common/commonPrint.css b/skins/common/commonPrint.css
deleted file mode 100644 (file)
index dda17fb..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/**
- * MediaWiki Print style sheet for CSS2-capable browsers.
- * Copyright Gabriel Wicke, http://www.aulinx.de/
- *
- * Derived from the plone (http://plone.org/) styles
- * Copyright Alexander Limi
- */
-
-/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-
-/**
- * Hide all the elements irrelevant for printing
- */
-.noprint,
-div#jump-to-nav,
-.mw-jump,
-div.top,
-div#column-one,
-#colophon,
-.mw-editsection,
-.mw-editsection-like,
-.toctoggle,
-#toc.tochidden,
-div#f-poweredbyico,
-div#f-copyrightico,
-li#viewcount,
-li#about,
-li#disclaimer,
-li#mobileview,
-li#privacy,
-#footer-places,
-.mw-hidden-catlinks,
-tr.mw-metadata-show-hide-extended,
-span.mw-filepage-other-resolutions,
-#filetoc,
-.usermessage,
-.patrollink,
-#mw-navigation,
-#siteNotice {
-       display: none;
-}
-
-/**
- * Pagination
- */
-.wikitable, .thumb, img {
-       page-break-inside: avoid;
-}
-
-h2, h3, h4, h5, h6 {
-       page-break-after: avoid;
-}
-
-p {
-       widows: 3;
-       orphans: 3;
-}
-
-/**
- * Generic HTML elements
- */
-body {
-       background: white;
-       color: black;
-       margin: 0;
-       padding: 0;
-}
-
-ul {
-       list-style-type: square;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       font-weight: bold;
-}
-
-dt {
-       font-weight: bold;
-}
-
-p {
-       margin: 1em 0;
-       line-height: 1.2em;
-}
-
-pre, .mw-code {
-       border: 1pt dashed black;
-       white-space: pre;
-       font-size: 8pt;
-       overflow: auto;
-       padding: 1em 0;
-       background: white;
-       color: black;
-}
-
-/**
- * MediaWiki-specific elements
- */
-#globalWrapper {
-       width: 100% !important;
-       min-width: 0 !important;
-}
-
-#content {
-       background: white;
-       border: none !important;
-       padding: 0 !important;
-       margin: 0 !important;
-       direction: ltr;
-       color: black;
-}
-
-#column-content {
-       margin: 0 !important;
-}
-
-#column-content #content {
-       padding: 1em;
-       margin: 0 !important;
-}
-
-#toc {
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       display: -moz-inline-block;
-       display: inline-block;
-       display: table;
-       /* IE7 and earlier */
-       zoom: 1;
-       *display: inline;
-}
-
-#footer {
-       background: white;
-       color: black;
-       margin-top: 1em;
-       border-top: 1px solid #AAA;
-       direction: ltr;
-}
-
-img {
-       border: none;
-       vertical-align: middle;
-}
-
-/* math */
-span.texhtml {
-       font-family: serif;
-}
-
-/**
- * Links
- */
-a.stub,
-a.new {
-       color: #ba0000;
-       text-decoration: none;
-}
-
-a {
-       color: black !important;
-       background: none !important;
-       padding: 0 !important;
-}
-
-a:link, a:visited {
-       color: #520;
-       background: transparent;
-       text-decoration: underline;
-}
-
-/* Expand URLs for printing */
-#content a.external.text:after,
-#content a.external.autonumber:after {
-       content: " (" attr(href) ")";
-}
-
-/* Expand protocol-relative URLs for printing */
-#content a.external.text[href^='//']:after,
-#content a.external.autonumber[href^='//']:after {
-       content: " (https:" attr(href) ")";
-}
-
-/* MSIE/Win doesn't understand 'inherit' */
-a,
-a.external,
-a.new,
-a.stub {
-       color: black !important;
-       text-decoration: none !important;
-}
-
-/* Continue ... */
-a,
-a.external,
-a.new,
-a.stub {
-       color: inherit !important;
-       text-decoration: inherit !important;
-}
-
-/**
- * Floating divs
- */
-div.floatright {
-       float: right;
-       clear: right;
-       position: relative;
-       margin: 0.5em 0 0.8em 1.4em;
-}
-
-div.floatright p {
-       font-style: italic;
-}
-
-div.floatleft {
-       float: left;
-       clear: left;
-       position: relative;
-       margin: 0.5em 1.4em 0.8em 0;
-}
-
-div.floatleft p {
-       font-style: italic;
-}
-
-div.center {
-       text-align: center;
-}
-
-/**
- * Thumbnails
- */
-div.thumb {
-       border: none;
-       width: auto;
-       margin-top: 0.5em;
-       margin-bottom: 0.8em;
-       background-color: transparent;
-}
-
-div.thumbinner {
-       border: 1px solid #cccccc;
-       padding: 3px !important;
-       background-color: White;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbimage {
-       border: 1px solid #cccccc;
-}
-
-html .thumbcaption {
-       border: none;
-       text-align: left;
-       line-height: 1.4em;
-       padding: 3px !important;
-       font-size: 94%;
-}
-
-div.magnify {
-       display: none;
-}
-
-/* @noflip */
-div.tright {
-       float: right;
-       clear: right;
-       margin: 0.5em 0 0.8em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
-       float: left;
-       clear: left;
-       margin: 0.5em 1.4em 0.8em 0;
-}
-
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-/**
- * Galleries (see shared.css for more info)
- */
-li.gallerybox {
-       vertical-align: top;
-       display: inline-block;
-}
-
-ul.gallery, li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       margin: 2px;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
-/**
- * Diff rendering
- */
-table.diff {
-       background: white;
-}
-
-td.diff-otitle {
-       background: #ffffff;
-}
-
-td.diff-ntitle {
-       background: #ffffff;
-}
-
-td.diff-addedline {
-       background: #ccffcc;
-       font-size: smaller;
-       border: solid 2px black;
-}
-
-td.diff-deletedline {
-       background: #ffffaa;
-       font-size: smaller;
-       border: dotted 2px black;
-}
-
-td.diff-context {
-       background: #eeeeee;
-       font-size: smaller;
-}
-
-.diffchange {
-       color: silver;
-       font-weight: bold;
-       text-decoration: underline;
-}
-
-/**
- * Table rendering
- * As on shared.css but with white background.
- */
-table.wikitable,
-table.mw_metadata {
-       margin: 1em 0;
-       border: 1px #aaa solid;
-       background: white;
-       border-collapse: collapse;
-}
-
-table.wikitable > tr > th, table.wikitable > tr > td,
-table.wikitable > * > tr > th, table.wikitable > * > tr > td,
-.mw_metadata th, .mw_metadata td {
-       border: 1px #aaa solid;
-       padding: 0.2em;
-}
-
-table.wikitable > tr > th,
-table.wikitable > * > tr > th,
-.mw_metadata th {
-       text-align: center;
-       background: white;
-       font-weight: bold;
-}
-
-table.wikitable > caption,
-.mw_metadata caption {
-       font-weight: bold;
-}
-
-table.listing,
-table.listing td {
-       border: 1pt solid black;
-       border-collapse: collapse;
-}
-
-a.sortheader {
-       margin: 0 0.3em;
-}
-
-/**
- * Categories
- */
-.catlinks ul {
-       display: inline;
-       margin: 0;
-       padding: 0;
-       list-style: none;
-       list-style-type: none;
-       list-style-image: none;
-       vertical-align: middle !ie;
-}
-
-.catlinks li {
-       display: inline-block;
-       line-height: 1.15em;
-       padding: 0 .4em;
-       border-left: 1px solid #AAA;
-       margin: 0.1em 0;
-       zoom: 1;
-       display: inline !ie;
-}
-
-.catlinks li:first-child {
-       padding-left: .2em;
-       border-left: none;
-}
diff --git a/skins/common/images/Checker-16x16.png b/skins/common/images/Checker-16x16.png
deleted file mode 100644 (file)
index 3e9e3d0..0000000
Binary files a/skins/common/images/Checker-16x16.png and /dev/null differ
diff --git a/skins/common/images/ajax-loader.gif b/skins/common/images/ajax-loader.gif
deleted file mode 100644 (file)
index 72203fd..0000000
Binary files a/skins/common/images/ajax-loader.gif and /dev/null differ
diff --git a/skins/common/images/feed-icon.png b/skins/common/images/feed-icon.png
deleted file mode 100644 (file)
index 00f49f6..0000000
Binary files a/skins/common/images/feed-icon.png and /dev/null differ
diff --git a/skins/common/images/feed-icon.svg b/skins/common/images/feed-icon.svg
deleted file mode 100644 (file)
index 6e5f570..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
diff --git a/skins/common/images/help-question-hover.gif b/skins/common/images/help-question-hover.gif
deleted file mode 100644 (file)
index 515138d..0000000
Binary files a/skins/common/images/help-question-hover.gif and /dev/null differ
diff --git a/skins/common/images/help-question.gif b/skins/common/images/help-question.gif
deleted file mode 100644 (file)
index b4fc9c5..0000000
Binary files a/skins/common/images/help-question.gif and /dev/null differ
diff --git a/skins/common/images/question-small.png b/skins/common/images/question-small.png
deleted file mode 100644 (file)
index f7405d2..0000000
Binary files a/skins/common/images/question-small.png and /dev/null differ
diff --git a/skins/common/images/question.svg b/skins/common/images/question.svg
deleted file mode 100644 (file)
index 98fbe8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
diff --git a/skins/common/images/spinner.gif b/skins/common/images/spinner.gif
deleted file mode 100644 (file)
index 6146be4..0000000
Binary files a/skins/common/images/spinner.gif and /dev/null differ
diff --git a/skins/common/oldshared.css b/skins/common/oldshared.css
deleted file mode 100644 (file)
index a4e7544..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-/**
- * oldshared.css
- * This file contains CSS settings common to Wikistandard, Nostalgia and
- * CologneBlue, the old pre-Monobook skins
- */
-
-/* For clarity, explicitly state some recommendations from
- * http://www.w3.org/TR/CSS21/sample.html to make sure the editsection links scale right
- */
-
-h1 {
-       font-size: 2em;
-}
-
-h2 {
-       font-size: 1.5em;
-}
-
-h3 {
-       font-size: 1.17em;
-}
-
-h4 {
-       font-size: 1.11em;
-}
-
-h5 {
-       font-size: 1.05em;
-}
-
-h6 {
-       font-size: 1em;
-}
-
-h1, h2, h3, h4, h5, h6 {
-       font-weight: bolder;
-}
-
-/* Now the custom parts */
-
-#footer {
-       clear: both;
-}
-
-/* images */
-/* @noflip */
-div.floatright {
-       float: right;
-       clear: right;
-       margin: 0 0 1em 1em;
-}
-
-/* @noflip */
-div.floatright p {
-       font-style: italic;
-}
-
-/* @noflip */
-div.floatleft {
-       float: left;
-       clear: left;
-       margin: 0.3em 0.5em 0.5em 0;
-}
-
-/* @noflip */
-div.floatleft p {
-       font-style: italic;
-}
-
-/* table standards */
-table.rimage {
-       float: right;
-       margin-left: 1em;
-       margin-bottom: 1em;
-       text-align: center;
-       font-size: smaller;
-}
-
-/* thumbnails */
-div.thumb {
-       margin-bottom: .5em;
-       border-style: solid;
-       border-color: white;
-       width: auto;
-}
-
-div.thumbinner {
-       border: 1px solid #ccc;
-       padding: 3px;
-       background-color: #f9f9f9;
-       font-size: 94%;
-       text-align: center;
-       overflow: hidden;
-}
-
-html .thumbimage {
-       border: 1px solid #ccc;
-}
-
-html .thumbcaption {
-       border: none;
-       line-height: 1.4em;
-       padding: 3px;
-       font-size: 94%;
-       text-align: left;
-}
-
-div.magnify {
-       float: right;
-       margin-left: 3px;
-}
-
-div.magnify a {
-       display: block;
-       /* Hide the text… */
-       text-indent: 15px;
-       white-space: nowrap;
-       overflow: hidden;
-       /* â€¦and replace it with the image */
-       width: 15px;
-       height: 11px;
-       /* @embed */
-       background: url(images/magnify-clip-ltr.png) center center no-repeat;
-       /* Don't annoy people who copy-paste everything too much */
-       -moz-user-select: none;
-       -webkit-user-select: none;
-       -ms-user-select: none;
-       user-select: none;
-}
-
-/* Temporary WMF deployment hack, to be removed before 1.24 release */
-div.magnify img {
-       display: none;
-}
-
-/* @noflip */
-div.tright {
-       clear: right;
-       float: right;
-       border-width: .5em 0 .8em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
-       float: left;
-       clear: left;
-       margin-right: .5em;
-       border-width: .5em 1.4em .8em 0;
-}
-
-img.thumbborder {
-       border: 1px solid #dddddd;
-}
-
-/* Page history styling */
-/* the auto-generated edit comments */
-.autocomment {
-       color: #4b4b4b;
-}
-
-img {
-       border: none;
-}
-
-#toc,
-.toc {
-       border: 1px solid #bba;
-       background-color: #f7f8ff;
-       padding: 5px;
-       font-size: 95%;
-       text-align: center;
-       display: -moz-inline-block;
-       display: inline-block;
-       display: table;
-
-       /* IE7 and earlier */
-       zoom: 1;
-       *display: inline;
-
-       padding: 7px;
-}
-
-/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
-table#toc,
-table.toc {
-       border-collapse: collapse;
-}
-
-/* Remove additional paddings inside table-cells that are not present in <div>s */
-table#toc td,
-table.toc td {
-       padding: 0;
-}
-
-#toc h2,
-.toc h2 {
-       display: inline;
-       border: none;
-       padding: 0;
-       font-size: 100%;
-       font-weight: bold;
-}
-
-#toc ul,
-.toc ul {
-       list-style-type: none;
-       list-style-image: none;
-       padding: 0;
-       text-align: left;
-}
-
-#toc ul ul,
-.toc ul ul {
-       margin: 0 0 0 2em;
-}
-
-#toc .toctoggle,
-.toc .toctoggle {
-       font-size: 94%;
-}
-
-.error {
-       color: red;
-       font-size: larger;
-}
-
-/* preference page with js-genrated toc */
-#preftoc {
-       float: left;
-       margin: 1em 1em 1em 1em;
-       width: 13em;
-}
-
-#preftoc li {
-       border: 1px solid White;
-}
-
-#preftoc li.selected {
-       background-color: #f9f9f9;
-       border: 1px dashed #aaaaaa;
-}
-
-#preftoc a,
-#preftoc a:active {
-       display: block;
-       color: #005189;
-}
-
-.mw-prefs-buttons {
-       clear: left;
-       float: left;
-       margin-top: 1em;
-}
-
-div.htmlform-tip {
-       font-size: 94%;
-       margin-top: 0.4em;
-       color: #666;
-}
-
-fieldset.prefsection {
-       margin-top: 1em;
-}
-
-fieldset.operaprefsection {
-       margin-left: 15em;
-}
-
-/* emulate center */
-.center {
-       width: 100%;
-       text-align: center;
-}
-
-*.center * {
-       margin-left: auto;
-       margin-right: auto;
-}
-
-/* small for tables and similar */
-.small {
-       font-size: 94%;
-}
-
-table.small {
-       font-size: 100%;
-}
-
-/* use this instead of #toc for page content */
-.toccolours {
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-}
-
-#siteNotice {
-       border: 1px solid #aaaaaa;
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-
-.redirectText {
-       font-size: 150%;
-       margin: 5px;
-}
-
-.sharedUploadNotice {
-       font-style: italic;
-}
-
-span.unpatrolled {
-       font-weight: bold;
-       color: red;
-}
-
-span.updatedmarker {
-       color: black;
-       background-color: #00FF00;
-}
-
-div.gallerybox {
-       width: 150px;
-}
-
-span.comment {
-       font-style: italic;
-}
-
-span.changedby {
-       font-size: 95%;
-}
-
-.previewnote {
-       text-align: center;
-       color: #cc0000;
-}
-
-.editExternally {
-       border-style: solid;
-       border-width: 1px;
-       border-color: gray;
-       background: #ffffff;
-       padding: 3px;
-       margin-top: 0.5em;
-       float: left;
-       font-size: small;
-       text-align: center;
-}
-
-.editExternallyHelp {
-       font-style: italic;
-       color: gray;
-}
-
-li span.deleted {
-       text-decoration: line-through;
-       color: #888;
-       font-style: italic;
-}
-
-/* Classes for Exif data display */
-table.mw_metadata {
-       margin-left: 0.5em;
-}
-
-table.mw_metadata caption {
-       font-weight: bold;
-}
-
-table.mw_metadata th {
-       font-weight: normal;
-}
-
-table.mw_metadata td {
-       padding: 0.1em;
-}
-
-table.mw_metadata {
-       border: none;
-       border-collapse: collapse;
-}
-
-table.mw_metadata td,
-table.mw_metadata th {
-       border: 1px solid #aaaaaa;
-       padding-left: 4px;
-       padding-right: 4px;
-}
-
-table.mw_metadata th {
-       background-color: #f9f9f9;
-}
-
-table.mw_metadata td {
-       background-color: #fcfcfc;
-}
-
-table.mw_metadata td.spacer {
-       background: inherit;
-       border-top: none;
-       border-bottom: none;
-}
-
-table.collapsed tr.collapsable {
-       display: none;
-}
-
-.visualClear {
-       clear: both;
-}
-
-/* Allmessages table */
-#allmessagestable th {
-       background-color: #b2b2ff;
-}
-
-#allmessagestable tr.orig {
-       background-color: #ffe2e2;
-}
-
-#allmessagestable tr.new {
-       background-color: #e2ffe2;
-}
-
-#allmessagestable tr.def {
-       background-color: #f0f0ff;
-}
-
-#jump-to-nav {
-       display: none;
-}
-
-div.multipageimagenavbox {
-       border: solid 1px silver;
-       padding: 4px;
-       margin: 1em;
-       background: #f0f0f0;
-}
-
-div.multipageimagenavbox div.thumb {
-       border: none;
-       margin-left: 2em;
-       margin-right: 2em;
-}
-
-div.multipageimagenavbox hr {
-       margin: 6px;
-}
-
-table.multipageimage td {
-       text-align: center;
-}
-
-/*
-  Table pager (e.g. Special:Imagelist)
-  - remove underlines from the navigation link
-  - collapse borders
-  - set the borders to outsets (similar to Special:Allmessages)
-  - remove line wrapping for all td and th, set background color
-  - restore line wrapping for the last two table cells (description and size)
-*/
-.TablePager_nav a {
-       text-decoration: none;
-}
-
-.TablePager {
-       border-collapse: collapse;
-}
-
-.TablePager,
-.TablePager td,
-.TablePager th {
-       border: 0.15em solid #777777;
-       padding: 0 0.15em 0 0.15em;
-}
-
-.TablePager th {
-       background-color: #eeeeff;
-}
-
-.TablePager td {
-       background-color: #ffffff;
-}
-
-.TablePager tr:hover td {
-       background-color: #eeeeff;
-}
-
-.templatesUsed {
-       margin-top: 1em;
-}
-
-.MediaTransformError {
-       border: thin solid #777;
-       background-color: #ccc;
-       padding: 0.1em;
-}
-
-.MediaTransformError td {
-       text-align: center;
-       vertical-align: middle;
-       font-size: 90%;
-}
-
-form#specialpages {
-       display: inline;
-}
-
-body {
-       direction: ltr;
-       unicode-bidi: embed;
-       background-color: #ffffec;
-}
-
-body.ns-0 {
-       background-color: white;
-}
-
-/** RTL specific CSS starts here **/
-
-/**
- * Lists:
- * The following lines don't have a visible effect on non-Gecko browsers
- * They fix a problem with Gecko browsers rendering lists to the right of
- * left-floated objects in an RTL layout.
- */
-/* @noflip */
-html > body.rtl div#article ul {
-       display: table;
-}
-
-/* @noflip */
-html > body.rtl div#bodyContent ul#filetoc {
-       display: block;
-}
-
-/* RTL specific CSS ends here **/
diff --git a/skins/common/protect.js b/skins/common/protect.js
deleted file mode 100644 (file)
index dc142ca..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-( function ( mw, $ ) {
-
-var ProtectionForm = window.ProtectionForm = {
-       existingMatch: false,
-
-       /**
-        * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
-        * on the protection form
-        *
-        * @param opts Object : parameters with members:
-        *     tableId              Identifier of the table containing UI bits
-        *     labelText            Text to use for the checkbox label
-        *     numTypes             The number of protection types
-        *     existingMatch        True if all the existing expiry times match
-        */
-       init: function ( opts ) {
-               var box, boxbody, row, cell, check, label;
-
-               if ( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) ) {
-                       return false;
-               }
-
-               box = document.getElementById( opts.tableId );
-               if ( !box ) {
-                       return false;
-               }
-
-               boxbody = box.getElementsByTagName( 'tbody' )[0];
-               row = document.createElement( 'tr' );
-               boxbody.insertBefore( row, boxbody.firstChild.nextSibling );
-
-               this.existingMatch = opts.existingMatch;
-
-               cell = document.createElement( 'td' );
-               row.appendChild( cell );
-               // If there is only one protection type, there is nothing to chain
-               if ( opts.numTypes > 1 ) {
-                       check = document.createElement( 'input' );
-                       check.id = 'mwProtectUnchained';
-                       check.type = 'checkbox';
-                       $( check ).click( function () {
-                               ProtectionForm.onChainClick();
-                       } );
-
-                       label = document.createElement( 'label' );
-                       label.htmlFor = 'mwProtectUnchained';
-                       label.appendChild( document.createTextNode( opts.labelText ) );
-
-                       cell.appendChild( check );
-                       cell.appendChild( document.createTextNode( ' ' ) );
-                       cell.appendChild( label );
-
-                       check.checked = !this.areAllTypesMatching();
-                       this.enableUnchainedInputs( check.checked );
-               }
-
-               $( '#mwProtect-reason' ).byteLimit( 180 );
-
-               this.updateCascadeCheckbox();
-
-               return true;
-       },
-
-       /**
-        * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
-        */
-       updateCascadeCheckbox: function () {
-               var i, lists, items, selected;
-
-               // For non-existent titles, there is no cascade option
-               if ( !document.getElementById( 'mwProtect-cascade' ) ) {
-                       return;
-               }
-               lists = this.getLevelSelectors();
-               for ( i = 0; i < lists.length; i++ ) {
-                       if ( lists[i].selectedIndex > -1 ) {
-                               items = lists[i].getElementsByTagName( 'option' );
-                               selected = items[ lists[i].selectedIndex ].value;
-                               if ( !this.isCascadeableLevel( selected ) ) {
-                                       document.getElementById( 'mwProtect-cascade' ).checked = false;
-                                       document.getElementById( 'mwProtect-cascade' ).disabled = true;
-                                       return;
-                               }
-                       }
-               }
-               document.getElementById( 'mwProtect-cascade' ).disabled = false;
-       },
-
-       /**
-        * Checks if a cerain protection level is cascadeable.
-        * @param level {String}
-        * @return {Boolean}
-        */
-       isCascadeableLevel: function (  level ) {
-               var cascadeLevels, len, i;
-
-               cascadeLevels = mw.config.get( 'wgCascadeableLevels' );
-               // cascadeLevels isn't defined on all pages
-               if ( cascadeLevels ) {
-                       for ( i = 0, len = cascadeLevels.length; i < len; i += 1 ) {
-                               if ( cascadeLevels[i] === level ) {
-                                       return true;
-                               }
-                       }
-               }
-               return false;
-       },
-
-       /**
-        * When protection levels are locked together, update the rest
-        * when one action's level changes
-        *
-        * @param source Element Level selector that changed
-        */
-       updateLevels: function ( source ) {
-               if ( !this.isUnchained() ) {
-                       this.setAllSelectors( source.selectedIndex );
-               }
-               this.updateCascadeCheckbox();
-       },
-
-       /**
-        * When protection levels are locked together, update the
-        * expiries when one changes
-        *
-        * @param source Element expiry input that changed
-        */
-
-       updateExpiry: function ( source ) {
-               var expiry, listId, list;
-
-               if ( !this.isUnchained() ) {
-                       expiry = source.value;
-                       this.forEachExpiryInput( function ( element ) {
-                               element.value = expiry;
-                       } );
-               }
-               listId = source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' );
-               list = document.getElementById( listId );
-               if ( list && list.value !== 'othertime' ) {
-                       if ( this.isUnchained() ) {
-                               list.value = 'othertime';
-                       } else {
-                               this.forEachExpirySelector( function ( element ) {
-                                       element.value = 'othertime';
-                               } );
-                       }
-               }
-       },
-
-       /**
-        * When protection levels are locked together, update the
-        * expiry lists when one changes and clear the custom inputs
-        *
-        * @param source Element expiry selector that changed
-        */
-       updateExpiryList: function ( source ) {
-               var expiry;
-               if ( !this.isUnchained() ) {
-                       expiry = source.value;
-                       this.forEachExpirySelector( function ( element ) {
-                               element.value = expiry;
-                       } );
-                       this.forEachExpiryInput( function ( element ) {
-                               element.value = '';
-                       } );
-               }
-       },
-
-       /**
-        * Update chain status and enable/disable various bits of the UI
-        * when the user changes the "unlock move permissions" checkbox
-        */
-       onChainClick: function () {
-               if ( this.isUnchained() ) {
-                       this.enableUnchainedInputs( true );
-               } else {
-                       this.setAllSelectors( this.getMaxLevel() );
-                       this.enableUnchainedInputs( false );
-               }
-               this.updateCascadeCheckbox();
-       },
-
-       /**
-        * Returns true if the named attribute in all objects in the given array are matching
-        */
-       matchAttribute: function ( objects, attrName ) {
-               var i, element, value;
-
-               // Check levels
-               value = null;
-               for ( i = 0; i < objects.length; i++ ) {
-                       element = objects[i];
-                       if ( value === null ) {
-                               value = element[attrName];
-                       } else {
-                               if ( value !== element[attrName] ) {
-                                       return false;
-                               }
-                       }
-               }
-               return true;
-       },
-
-       /**
-        * Are all actions protected at the same level, with the same expiry time?
-        *
-        * @return boolean
-        */
-       areAllTypesMatching: function () {
-               return this.existingMatch
-                       && this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
-                       && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
-                       && this.matchAttribute( this.getExpiryInputs(), 'value' );
-       },
-
-       /**
-        * Is protection chaining off?
-        *
-        * @return bool
-        */
-       isUnchained: function () {
-               var element = document.getElementById( 'mwProtectUnchained' );
-               return element
-                       ? element.checked
-                       : true; // No control, so we need to let the user set both levels
-       },
-
-       /**
-        * Find the highest protection level in any selector
-        */
-       getMaxLevel: function () {
-               var maxIndex = -1;
-               this.forEachLevelSelector( function ( element ) {
-                       if ( element.selectedIndex > maxIndex ) {
-                               maxIndex = element.selectedIndex;
-                       }
-               } );
-               return maxIndex;
-       },
-
-       /**
-        * Protect all actions at the specified level
-        *
-        * @param index int Protection level
-        */
-       setAllSelectors: function ( index ) {
-               this.forEachLevelSelector( function ( element ) {
-                       if ( element.selectedIndex !== index ) {
-                               element.selectedIndex = index;
-                       }
-               } );
-       },
-
-       /**
-        * Apply a callback to each protection selector
-        *
-        * @param func callable Callback function
-        */
-       forEachLevelSelector: function ( func ) {
-               var i, selectors;
-
-               selectors = this.getLevelSelectors();
-               for ( i = 0; i < selectors.length; i++ ) {
-                       func( selectors[i] );
-               }
-       },
-
-       /**
-        * Get a list of all protection selectors on the page
-        *
-        * @return Array
-        */
-       getLevelSelectors: function () {
-               var i, ours, all, element;
-
-               all = document.getElementsByTagName( 'select' );
-               ours = [];
-               for ( i = 0; i < all.length; i++ ) {
-                       element = all[i];
-                       if ( element.id.match( /^mwProtect-level-/ ) ) {
-                               ours[ours.length] = element;
-                       }
-               }
-               return ours;
-       },
-
-       /**
-        * Apply a callback to each expiry input
-        *
-        * @param func callable Callback function
-        */
-       forEachExpiryInput: function ( func ) {
-               var i, inputs;
-
-               inputs = this.getExpiryInputs();
-               for ( i = 0; i < inputs.length; i++ ) {
-                       func( inputs[i] );
-               }
-       },
-
-       /**
-        * Get a list of all expiry inputs on the page
-        *
-        * @return Array
-        */
-       getExpiryInputs: function () {
-               var i, all, element, ours;
-
-               all = document.getElementsByTagName( 'input' );
-               ours = [];
-               for ( i = 0; i < all.length; i++ ) {
-                       element = all[i];
-                       if ( element.name.match( /^mwProtect-expiry-/ ) ) {
-                               ours[ours.length] = element;
-                       }
-               }
-               return ours;
-       },
-
-       /**
-        * Apply a callback to each expiry selector list
-        * @param func callable Callback function
-        */
-       forEachExpirySelector: function ( func ) {
-               var i, inputs;
-
-               inputs = this.getExpirySelectors();
-               for ( i = 0; i < inputs.length; i++ ) {
-                       func( inputs[i] );
-               }
-       },
-
-       /**
-        * Get a list of all expiry selector lists on the page
-        *
-        * @return Array
-        */
-       getExpirySelectors: function () {
-               var i, all, ours, element;
-
-               all = document.getElementsByTagName( 'select' );
-               ours = [];
-               for ( i = 0; i < all.length; i++ ) {
-                       element = all[i];
-                       if ( element.id.match( /^mwProtectExpirySelection-/ ) ) {
-                               ours[ours.length] = element;
-                       }
-               }
-               return ours;
-       },
-
-       /**
-        * Enable/disable protection selectors and expiry inputs
-        *
-        * @param val boolean Enable?
-        */
-       enableUnchainedInputs: function ( val ) {
-               var first = true;
-
-               this.forEachLevelSelector( function ( element ) {
-                       if ( first ) {
-                               first = false;
-                       } else {
-                               element.disabled = !val;
-                       }
-               } );
-               first = true;
-               this.forEachExpiryInput( function ( element ) {
-                       if ( first ) {
-                               first = false;
-                       } else {
-                               element.disabled = !val;
-                       }
-               } );
-               first = true;
-               this.forEachExpirySelector( function ( element ) {
-                       if ( first ) {
-                               first = false;
-                       } else {
-                               element.disabled = !val;
-                       }
-               } );
-       }
-};
-
-}( mediaWiki, jQuery ) );
diff --git a/skins/common/shared.css b/skins/common/shared.css
deleted file mode 100644 (file)
index af5d82c..0000000
+++ /dev/null
@@ -1,1197 +0,0 @@
-/**
- * CSS in this file is used by *all* skins (that have any CSS at all). Be
- * careful what you put in here, since what looks good in one skin may not in
- * another, but don't ignore the poor pre-Monobook users either.
- */
-
-/* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
-
-/**
- * These classes should be used for text depending on the content direction.
- * Content stuff like editsection, ul/ol and TOC depend on this.
- */
-.mw-content-ltr {
-       /* @noflip */
-       direction: ltr;
-}
-
-.mw-content-rtl {
-       /* @noflip */
-       direction: rtl;
-}
-
-/* Most input fields should be in site direction */
-.sitedir-ltr textarea,
-.sitedir-ltr input {
-       /* @noflip */
-       direction: ltr;
-}
-
-.sitedir-rtl textarea,
-.sitedir-rtl input {
-       /* @noflip */
-       direction: rtl;
-}
-
-/* User-Agent styles for new HTML5 elements */
-mark {
-       background-color: yellow;
-       color: black;
-}
-
-/* Helper for wbr element on IE 8+; in HTML5, but not supported by default as of IE 11. */
-/* Note canonical HTML5 styles recommend "content: \u200B", but this doesn't work as of IE 11. */
-wbr {
-       display: inline-block;
-}
-
-/* Input types that should follow user direction, like buttons */
-/* TODO: What about buttons in wikipage content ? */
-input[type="submit"],
-input[type="button"],
-input[type="reset"],
-input[type="file"] {
-       direction: ltr;
-}
-
-/* Override default values */
-textarea[dir="ltr"],
-input[dir="ltr"] {
-       /* @noflip */
-       direction: ltr;
-}
-
-textarea[dir="rtl"],
-input[dir="rtl"] {
-       /* @noflip */
-       direction: rtl;
-}
-
-/* Default style for semantic tags */
-abbr[title],
-.explain[title] {
-       border-bottom: 1px dotted;
-       cursor: help;
-}
-
-/* Colored watchlist and recent changes numbers */
-.mw-plusminus-pos {
-       color: #006400; /* dark green */
-}
-
-.mw-plusminus-neg {
-       color: #8b0000; /* dark red */
-}
-
-.mw-plusminus-null {
-       color: #aaa; /* gray */
-}
-
-/**
- * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
- * [[Special:Watchlist/edit]] and in category listings.
- */
-.allpagesredirect,
-.redirect-in-category,
-.watchlistredir {
-       font-style: italic;
-}
-
-/* Comment and username portions of RC entries */
-span.comment {
-       font-style: italic;
-}
-
-span.changedby {
-       font-size: 95%;
-}
-
-/* Math */
-.texvc {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-img.tex {
-       vertical-align: middle;
-}
-
-span.texhtml {
-       font-family: serif;
-}
-
-/**
- * Add a bit of margin space between the preview and the toolbar.
- * This replaces the ugly <p><br /></p> we used to insert into the page source
- */
-#wikiPreview.ontop {
-       margin-bottom: 1em;
-}
-
-/* Stop floats from intruding into edit area in previews */
-#editform,
-#toolbar,
-#wpTextbox1 {
-       clear: both;
-}
-
-#toolbar img {
-       cursor: pointer;
-}
-
-/**
- * File description page
- */
-
-div.mw-filepage-resolutioninfo {
-       font-size: smaller;
-}
-
-/**
- * File histories
- */
-h2#filehistory {
-       clear: both;
-}
-
-table.filehistory th,
-table.filehistory td {
-       vertical-align: top;
-}
-
-table.filehistory th {
-       text-align: left;
-}
-
-table.filehistory td.mw-imagepage-filesize,
-table.filehistory th.mw-imagepage-filesize {
-       white-space: nowrap;
-}
-
-table.filehistory td.filehistory-selected {
-       font-weight: bold;
-}
-
-/**
- * Add a checkered background image on hover for file
- * description pages. (bug 26470)
- */
-.filehistory a img,
-#file img:hover {
-       /* @embed */
-       background: white url(images/Checker-16x16.png) repeat;
-}
-
-/**
- * rev_deleted stuff
- */
-li span.deleted,
-span.history-deleted {
-       text-decoration: line-through;
-       color: #888;
-       font-style: italic;
-}
-
-/**
- * Patrol stuff
- */
-.not-patrolled {
-       background-color: #ffa;
-}
-
-.unpatrolled {
-       font-weight: bold;
-       color: red;
-}
-
-div.patrollink {
-       font-size: 75%;
-       text-align: right;
-}
-
-/**
- * Forms
- */
-td.mw-label {
-       text-align: right;
-}
-
-td.mw-input {
-       text-align: left;
-}
-
-td.mw-submit {
-       text-align: left;
-}
-
-td.mw-label {
-       vertical-align: top;
-}
-
-.prefsection td.mw-label {
-       width: 20%;
-}
-
-.prefsection table {
-       width: 100%;
-}
-
-.prefsection table.mw-htmlform-matrix {
-       width: auto;
-}
-
-.mw-icon-question {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(images/question-small.png);
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/question.svg);
-       background-repeat: no-repeat;
-       background-size: 13px 13px;
-       display: inline-block;
-       height: 13px;
-       width: 13px;
-       margin-left: 4px;
-}
-
-.mw-icon-question:lang(ar),
-.mw-icon-question:lang(fa),
-.mw-icon-question:lang(ur) {
-       -webkit-transform: scaleX(-1);
-       -ms-transform: scaleX(-1);
-       transform: scaleX(-1);
-}
-
-td.mw-submit {
-       white-space: nowrap;
-}
-
-table.mw-htmlform-nolabel td.mw-label {
-       width: 1px;
-}
-
-tr.mw-htmlform-vertical-label td.mw-label {
-       text-align: left !important;
-}
-
-.mw-htmlform-invalid-input td.mw-input input {
-       border-color: red;
-}
-
-.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
-       display: inline;
-       margin-right: 1em;
-       white-space: nowrap;
-}
-
-.mw-htmlform-matrix td {
-       padding-left: 0.5em;
-       padding-right: 0.5em;
-}
-
-input#wpSummary {
-       width: 80%;
-       margin-bottom: 1em;
-}
-
-/**
- * Image captions.
- *
- * This is only meant to provide the most basic of styles, visual settings shouldn't be added here.
- */
-
-/* @noflip */
-.mw-content-ltr .thumbcaption {
-       text-align: left;
-}
-
-/* @noflip */
-.mw-content-ltr .magnify {
-       float: right;
-}
-
-/* @noflip */
-.mw-content-rtl .thumbcaption {
-       text-align: right;
-}
-
-/* @noflip */
-.mw-content-rtl .magnify {
-       float: left;
-}
-
-/**
- * Categories
- */
-#catlinks {
-       /**
-        * Overrides text justification (user preference)
-        * See bug 31990
-        */
-       text-align: left;
-}
-
-.catlinks ul {
-       display: inline;
-       margin: 0;
-       padding: 0;
-       list-style: none;
-       list-style-type: none;
-       list-style-image: none;
-       vertical-align: middle !ie;
-}
-
-.catlinks li {
-       display: inline-block;
-       line-height: 1.25em;
-       border-left: 1px solid #AAA;
-       margin: 0.125em 0;
-       padding: 0 0.5em;
-       zoom: 1;
-       display: inline !ie;
-}
-
-.catlinks li:first-child {
-       padding-left: 0.25em;
-       border-left: none;
-}
-
-/* (bug 5346) make category redirects italic */
-.catlinks li a.mw-redirect {
-       font-style: italic;
-}
-
-/**
- * Hidden categories
- */
-.mw-hidden-cats-hidden {
-       display: none;
-}
-
-.catlinks-allhidden {
-       display: none;
-}
-
-/**
- * Convenience links to edit block, delete and protect reasons
- * and upload licenses
- */
-p.mw-ipb-conveniencelinks,
-p.mw-protect-editreasons,
-p.mw-filedelete-editreasons,
-p.mw-delete-editreasons,
-p.mw-revdel-editreasons,
-p.mw-upload-editlicenses {
-       font-size: 90%;
-       text-align: right;
-}
-
-/* Page history styling */
-
-/* The auto-generated edit comments */
-.autocomment {
-       color: gray;
-}
-
-#pagehistory .history-user {
-       margin-left: 0.4em;
-       margin-right: 0.2em;
-}
-
-#pagehistory span.minor {
-       font-weight: bold;
-}
-
-#pagehistory li {
-       border: 1px solid white;
-}
-
-#pagehistory li.selected {
-       background-color: #f9f9f9;
-       border: 1px dashed #aaa;
-}
-
-.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
-       float: right;
-}
-
-/** Generic minor/bot/newpage styling (recent changes) */
-.newpage,
-.minoredit,
-.botedit {
-       font-weight: bold;
-}
-
-#shared-image-dup,
-#shared-image-conflict {
-       font-style: italic;
-}
-
-/**
- * Recreating deleted page warning
- * Reupload file warning
- * Page protection warning
- * incl. log entries for these warnings
- */
-div.mw-warning-with-logexcerpt {
-       padding: 3px;
-       margin-bottom: 3px;
-       border: 2px solid #2F6FAB;
-       clear: both;
-}
-
-div.mw-warning-with-logexcerpt ul li {
-       font-size: 90%;
-}
-
-/* (show/hide) revision deletion links */
-span.mw-revdelundel-link,
-strong.mw-revdelundel-link {
-       font-size: 90%;
-}
-
-span.mw-revdelundel-hidden,
-input.mw-revdelundel-hidden {
-       visibility: hidden;
-}
-
-td.mw-revdel-checkbox,
-th.mw-revdel-checkbox {
-       padding-right: 10px;
-       text-align: center;
-}
-
-/* red links; see bug 36276 */
-a.new {
-       color: #BA0000;
-}
-
-/* feed links */
-a.feedlink {
-       /* SVG support using a transparent gradient to guarantee cross-browser
-        * compatibility (browsers able to understand gradient syntax support also SVG).
-        * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
-       background-image: url(images/feed-icon.png);
-       /* @embed */
-       background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
-       /* @embed */
-       background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
-       background-position: center left;
-       background-repeat: no-repeat;
-       background-size: 12px 12px;
-       padding-left: 16px;
-}
-
-/* Plainlinks - this can be used to switch
- * off special external link styling */
-.plainlinks a {
-       background: none !important;
-       padding: 0 !important;
-}
-
-/* External URLs should always be treated as LTR (bug 4330) */
-/* @noflip */ .rtl a.external.free,
-.rtl a.external.autonumber {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-/**
- * wikitable class for skinning normal tables
- * keep in sync with commonPrint.css
- */
-table.wikitable {
-       margin: 1em 0;
-       background-color: #f9f9f9;
-       border: 1px #aaa solid;
-       border-collapse: collapse;
-       color: black;
-}
-
-table.wikitable > tr > th,
-table.wikitable > tr > td,
-table.wikitable > * > tr > th,
-table.wikitable > * > tr > td {
-       border: 1px #aaa solid;
-       padding: 0.2em;
-}
-
-table.wikitable > tr > th,
-table.wikitable > * > tr > th {
-       background-color: #f2f2f2;
-       text-align: center;
-}
-
-table.wikitable > caption {
-       font-weight: bold;
-}
-
-/**
- * Hide collapsable rows in a collapsed table.
- *
- * Used by ImagePage and the mediawiki.action.view.metadata module.
- */
-table.collapsed tr.collapsable {
-       display: none;
-}
-
-/* success and error messages */
-.error,
-.warning,
-.success {
-       font-size: larger;
-}
-
-.error {
-       color: #cc0000;
-}
-
-.warning {
-       color: #705000;
-}
-
-.success {
-       color: #009000;
-}
-
-.errorbox,
-.warningbox,
-.successbox {
-       border: 1px solid;
-       padding: .5em 1em;
-       margin-bottom: 1em;
-       display: -moz-inline-block;
-       display: inline-block;
-       zoom: 1;
-       *display: inline;
-}
-
-.errorbox h2,
-.warningbox h2,
-.successbox h2 {
-       font-size: 1em;
-       color: inherit;
-       font-weight: bold;
-       display: inline;
-       margin: 0 .5em 0 0;
-       border: none;
-}
-
-.errorbox {
-       color: #cc0000;
-       border-color: #fac5c5;
-       background-color: #fae3e3;
-}
-
-.warningbox {
-       color: #705000;
-       border-color: #fde29b;
-       background-color: #fdf1d1;
-}
-
-.successbox {
-       color: #009000;
-       border-color: #b7fdb5;
-       background-color: #e1fddf;
-}
-
-/* general info/warning box for SP */
-.mw-infobox {
-       border: 2px solid #ff7f00;
-       margin: 0.5em;
-       clear: left;
-       overflow: hidden;
-}
-
-.mw-infobox-left {
-       margin: 7px;
-       float: left;
-       width: 35px;
-}
-
-.mw-infobox-right {
-       margin: 0.5em 0.5em 0.5em 49px;
-}
-
-/* Note on preview page */
-.previewnote {
-       color: #c00;
-       margin-bottom: 1em;
-}
-
-.previewnote p {
-       text-indent: 3em;
-       margin: 0.8em 0;
-}
-
-.visualClear {
-       clear: both;
-}
-
-/**
- * Data table style
- *
- * Transparent table with suddle borders
- * and blue row-highlighting.
- */
-.mw-datatable {
-       border-collapse: collapse;
-}
-
-.mw-datatable,
-.mw-datatable td,
-.mw-datatable th {
-       border: 1px solid #aaaaaa;
-       padding: 0 0.15em 0 0.15em;
-}
-
-.mw-datatable th {
-       background-color: #ddddff;
-}
-
-.mw-datatable td {
-       background-color: #ffffff;
-}
-
-.mw-datatable tr:hover td {
-       background-color: #eeeeff;
-}
-
-/**
- * TablePager tables generated by the TablePager PHP class
- * in MediaWiki (e.g. Special:ListFiles).
- */
-.TablePager {
-       min-width: 80%;
-}
-
-.TablePager_nav {
-       margin: 0 auto;
-}
-
-.TablePager_nav td {
-       padding: 3px;
-       text-align: center;
-}
-
-.TablePager_nav a {
-       text-decoration: none;
-}
-
-/* filetoc */
-ul#filetoc {
-       text-align: center;
-       border: 1px solid #aaaaaa;
-       background-color: #f9f9f9;
-       padding: 5px;
-       font-size: 95%;
-       margin-bottom: 0.5em;
-       margin-left: 0;
-       margin-right: 0;
-}
-
-#filetoc li {
-       display: inline;
-       list-style-type: none;
-       padding-right: 2em;
-}
-
-/* Classes for Exif data display */
-table.mw_metadata {
-       font-size: 0.8em;
-       margin-left: 0.5em;
-       margin-bottom: 0.5em;
-       width: 400px;
-}
-
-table.mw_metadata caption {
-       font-weight: bold;
-}
-
-table.mw_metadata th {
-       font-weight: normal;
-}
-
-table.mw_metadata td {
-       padding: 0.1em;
-}
-
-table.mw_metadata {
-       border: none;
-       border-collapse: collapse;
-}
-
-table.mw_metadata td,
-table.mw_metadata th {
-       text-align: center;
-       border: 1px solid #aaaaaa;
-       padding-left: 5px;
-       padding-right: 5px;
-}
-
-table.mw_metadata th {
-       background-color: #f9f9f9;
-}
-
-table.mw_metadata td {
-       background-color: #fcfcfc;
-}
-
-table.mw_metadata ul.metadata-langlist {
-       list-style-type: none;
-       list-style-image: none;
-       padding-right: 5px;
-       padding-left: 5px;
-       margin: 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-.mw-content-ltr ul,
-.mw-content-rtl .mw-content-ltr ul {
-       /* @noflip */
-       margin: 0.3em 0 0 1.6em;
-       padding: 0;
-}
-
-.mw-content-rtl ul,
-.mw-content-ltr .mw-content-rtl ul {
-       /* @noflip */
-       margin: 0.3em 1.6em 0 0;
-       padding: 0;
-}
-
-.mw-content-ltr ol,
-.mw-content-rtl .mw-content-ltr ol {
-       /* @noflip */
-       margin: 0.3em 0 0 3.2em;
-       padding: 0;
-}
-
-.mw-content-rtl ol,
-.mw-content-ltr .mw-content-rtl ol {
-       /* @noflip */
-       margin: 0.3em 3.2em 0 0;
-       padding: 0;
-}
-
-/* @noflip */
-.mw-content-ltr dd,
-.mw-content-rtl .mw-content-ltr dd {
-       margin-left: 1.6em;
-       margin-right: 0;
-}
-
-/* @noflip */
-.mw-content-rtl dd,
-.mw-content-ltr .mw-content-rtl dd {
-       margin-right: 1.6em;
-       margin-left: 0;
-}
-
-/* Galleries */
-/* These display attributes look nonsensical, but are needed to support IE and FF2 */
-/* Don't forget to update commonPrint.css */
-li.gallerybox {
-       vertical-align: top;
-       display: -moz-inline-box;
-       display: inline-block;
-}
-
-ul.gallery,
-li.gallerybox {
-       zoom: 1;
-       *display: inline;
-}
-
-ul.gallery {
-       margin: 2px;
-       padding: 2px;
-       display: block;
-}
-
-li.gallerycaption {
-       font-weight: bold;
-       text-align: center;
-       display: block;
-       word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
-       text-align: center;
-       border: 1px solid #ccc;
-       background-color: #f9f9f9;
-       margin: 2px;
-}
-
-li.gallerybox div.thumb img {
-       display: block;
-       margin: 0 auto;
-}
-
-div.gallerytext {
-       overflow: hidden;
-       font-size: 94%;
-       padding: 2px 4px;
-       word-wrap: break-word;
-}
-
-/* new gallery stuff */
-ul.mw-gallery-nolines li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-nolines li.gallerybox div.gallerytext {
-       text-align: center;
-}
-
-/* height constrained gallery */
-
-ul.mw-gallery-packed li.gallerybox div.thumb,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb {
-       background-color: transparent;
-       border: none;
-}
-
-ul.mw-gallery-packed li.gallerybox div.thumb img,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
-       margin: 0 auto;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox,
-ul.mw-gallery-packed-overlay li.gallerybox {
-       position: relative;
-}
-
-ul.mw-gallery-packed-hover div.gallerytextwrapper {
-       overflow: hidden;
-       height: 0;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
-ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
-ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
-       position: absolute;
-       background: white;
-       background: rgba(255, 255, 255, 0.8);
-       padding: 5px 10px;
-       bottom: 0;
-       left: 0; /* Needed for IE */
-       height: auto;
-       font-weight: bold;
-       margin: 2px; /* correspond to style on div.thumb */
-}
-
-ul.mw-gallery-packed-hover,
-ul.mw-gallery-packed-overlay,
-ul.mw-gallery-packed {
-       text-align: center;
-}
-
-.mw-ajax-loader {
-       /* @embed */
-       background-image: url(images/ajax-loader.gif);
-       background-position: center center;
-       background-repeat: no-repeat;
-       padding: 16px;
-       position: relative;
-       top: -16px;
-}
-
-.mw-small-spinner {
-       padding: 10px !important;
-       margin-right: 0.6em;
-       /* @embed */
-       background-image: url(images/spinner.gif);
-       background-position: center center;
-       background-repeat: no-repeat;
-}
-
-/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
-/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
-h1:lang(anp),
-h1:lang(as),
-h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
-h1:lang(bho),
-h1:lang(bn),
-h1:lang(gu),
-h1:lang(hi),
-h1:lang(kn),
-h1:lang(ks),
-h1:lang(ml),
-h1:lang(mr),
-h1:lang(my),
-h1:lang(mai),
-h1:lang(ne),
-h1:lang(new),
-h1:lang(or),
-h1:lang(pa),
-h1:lang(pi),
-h1:lang(sa),
-h1:lang(ta),
-h1:lang(te) {
-       line-height: 1.6em !important;
-}
-
-h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp),
-h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
-h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
-h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
-h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
-h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
-h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
-h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
-h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks),
-h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
-h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
-h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
-h2:lang(mai), h3:lang(mai), h4:lang(mai), h5:lang(mai), h6:lang(mai),
-h2:lang(ne), h3:lang(ne), h4:lang(ne), h5:lang(ne), h6:lang(ne),
-h2:lang(new), h3:lang(new), h4:lang(new), h5:lang(new), h6:lang(new),
-h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
-h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
-h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi),
-h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
-h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
-h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
-       line-height: 1.2em;
-}
-
-/* Localised ordered list numbering for some languages */
-ol:lang(bcc) li,
-ol:lang(bqi) li,
-ol:lang(fa) li,
-ol:lang(glk) li,
-ol:lang(kk-arab) li,
-ol:lang(mzn) li {
-       list-style-type: -moz-persian;
-       list-style-type: persian;
-}
-
-ol:lang(ckb) li {
-       list-style-type: -moz-arabic-indic;
-       list-style-type: arabic-indic;
-}
-
-ol:lang(hi) li,
-ol:lang(mr) li {
-       list-style-type: -moz-devanagari;
-       list-style-type: devanagari;
-}
-
-ol:lang(as) li,
-ol:lang(bn) li {
-       list-style-type: -moz-bengali;
-       list-style-type: bengali;
-}
-
-ol:lang(or) li {
-       list-style-type: -moz-oriya;
-       list-style-type: oriya;
-}
-
-#toc ul, .toc ul {
-       margin: .3em 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-/* @noflip */ .mw-content-ltr .toc ul,
-.mw-content-ltr #toc ul,
-.mw-content-rtl .mw-content-ltr .toc ul,
-.mw-content-rtl .mw-content-ltr #toc ul {
-       text-align: left;
-}
-
-/* @noflip */ .mw-content-rtl .toc ul,
-.mw-content-rtl #toc ul,
-.mw-content-ltr .mw-content-rtl .toc ul,
-.mw-content-ltr .mw-content-rtl #toc ul {
-       text-align: right;
-}
-
-/* @noflip */ .mw-content-ltr .toc ul ul,
-.mw-content-ltr #toc ul ul,
-.mw-content-rtl .mw-content-ltr .toc ul ul,
-.mw-content-rtl .mw-content-ltr #toc ul ul {
-       margin: 0 0 0 2em;
-}
-
-/* @noflip */ .mw-content-rtl .toc ul ul,
-.mw-content-rtl #toc ul ul,
-.mw-content-ltr .mw-content-rtl .toc ul ul,
-.mw-content-ltr .mw-content-rtl #toc ul ul {
-       margin: 0 2em 0 0;
-}
-
-#toc #toctitle,
-.toc #toctitle,
-#toc .toctitle,
-.toc .toctitle {
-       direction: ltr;
-}
-
-/* tooltip styles */
-.mw-help-field-hint {
-       display: none;
-       margin-left: 2px;
-       margin-bottom: -8px;
-       padding: 0 0 0 15px;
-       /* @embed */
-       background-image: url(images/help-question.gif);
-       background-position: left center;
-       background-repeat: no-repeat;
-       cursor: pointer;
-       font-size: .8em;
-       text-decoration: underline;
-       color: #0645ad;
-}
-
-.mw-help-field-hint:hover {
-       /* @embed */
-       background-image: url(images/help-question-hover.gif);
-}
-
-.mw-help-field-data {
-       display: block;
-       background-color: #d6f3ff;
-       padding: 5px 8px 4px 8px;
-       border: 1px solid #5dc9f4;
-       margin-left: 20px;
-}
-
-#mw-clearyourcache,
-#mw-sitecsspreview,
-#mw-sitejspreview,
-#mw-usercsspreview,
-#mw-userjspreview {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-/* Correct user & content directionality when viewing a diff */
-.diff-currentversion-title,
-.diff {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-/* @noflip */ .diff-contentalign-right td {
-       direction: rtl;
-       unicode-bidi: embed;
-}
-
-/* @noflip */ .diff-contentalign-left td {
-       direction: ltr;
-       unicode-bidi: embed;
-}
-
-.diff-multi,
-.diff-otitle,
-.diff-ntitle,
-.diff-lineno {
-       direction: ltr !important;
-       unicode-bidi: embed;
-}
-
-#mw-revision-info,
-#mw-revision-info-current,
-#mw-revision-nav {
-       direction: ltr;
-       display: inline;
-}
-
-/* Images */
-
-/* @noflip */ div.tright,
-div.floatright,
-table.floatright {
-       clear: right;
-       float: right;
-}
-
-/* @noflip */ div.tleft,
-div.floatleft,
-table.floatleft {
-       float: left;
-       clear: left;
-}
-
-div.floatright,
-table.floatright,
-div.floatleft,
-table.floatleft {
-       position: relative;
-}
-
-/* bug 12205 */
-#mw-credits a {
-       unicode-bidi: embed;
-}
-
-/* Accessibility */
-.mw-jump,
-#jump-to-nav {
-       overflow: hidden;
-       height: 0;
-       zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
-}
-
-/* Print footer should be hidden by default in screen. */
-.printfooter {
-       display: none;
-}
-
-/* For developers */
-.xdebug-error {
-       position: absolute;
-       z-index: 99;
-}
-
-.mw-editsection,
-.toctoggle,
-#jump-to-nav {
-       -moz-user-select: none;
-       -webkit-user-select: none;
-       -ms-user-select: none;
-       user-select: none;
-}
-
-/* Display editsection links smaller and next to headings */
-.mw-editsection,
-.mw-editsection-like {
-       font-size: small;
-       font-weight: normal;
-       margin-left: 1em;
-       vertical-align: baseline;
-       /* Reset line-height; headings tend to have it set to larger values */
-       line-height: 1em;
-       /* As .mw-editsection is a <span> (inline element), it is treated as part */
-       /* of the heading content when selecting text by multiple clicks and thus */
-       /* selected together with heading content, despite the user-select: none; */
-       /* rule set above. This enforces non-selection without changing the look. */
-       display: inline-block;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-/* @noflip */
-.mw-content-ltr .mw-editsection,
-.mw-content-rtl .mw-content-ltr .mw-editsection {
-       margin-left: 1em;
-}
-
-/* @noflip */
-.mw-content-rtl .mw-editsection,
-.mw-content-ltr .mw-content-rtl .mw-editsection {
-       margin-right: 1em;
-}
-
-/* Prevent citations and subscripts from interfering with the line-height */
-sup,
-sub {
-       line-height: 1;
-}
diff --git a/skins/common/upload.js b/skins/common/upload.js
deleted file mode 100644 (file)
index 144bdf9..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*jshint camelcase:false */
-( function ( mw, $ ) {
-       var ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
-               $license = $( '#wpLicense' ), uploadWarning, uploadLicense;
-
-       window.wgUploadWarningObj = uploadWarning = {
-               responseCache: { '': '&nbsp;' },
-               nameToCheck: '',
-               typing: false,
-               delay: 500, // ms
-               timeoutID: false,
-
-               keypress: function () {
-                       if ( !ajaxUploadDestCheck ) {
-                               return;
-                       }
-
-                       // Find file to upload
-                       if ( !$( '#wpDestFile' ).length || !$( '#wpDestFile-warning' ).length ) {
-                               return;
-                       }
-
-                       this.nameToCheck = $( '#wpDestFile' ).val();
-
-                       // Clear timer
-                       if ( this.timeoutID ) {
-                               clearTimeout( this.timeoutID );
-                       }
-                       // Check response cache
-                       if ( this.responseCache.hasOwnProperty( this.nameToCheck ) ) {
-                               this.setWarning( this.responseCache[this.nameToCheck] );
-                               return;
-                       }
-
-                       this.timeoutID = setTimeout( function () {
-                               uploadWarning.timeout();
-                       }, this.delay );
-               },
-
-               checkNow: function ( fname ) {
-                       if ( !ajaxUploadDestCheck ) {
-                               return;
-                       }
-                       if ( this.timeoutID ) {
-                               clearTimeout( this.timeoutID );
-                       }
-                       this.nameToCheck = fname;
-                       this.timeout();
-               },
-
-               timeout: function () {
-                       var $spinnerDestCheck;
-                       if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
-                               return;
-                       }
-                       $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' );
-
-                       ( new mw.Api() ).get( {
-                               action: 'query',
-                               titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
-                               prop: 'imageinfo',
-                               iiprop: 'uploadwarning',
-                               indexpageids: ''
-                       } ).done( function ( result ) {
-                               var resultOut = '';
-                               if ( result.query ) {
-                                       resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
-                               }
-                               $spinnerDestCheck.remove();
-                               uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
-                       } );
-               },
-
-               processResult: function ( result, fileName ) {
-                       this.setWarning( result.html );
-                       this.responseCache[fileName] = result.html;
-               },
-
-               setWarning: function ( warning ) {
-                       $( '#wpDestFile-warning' ).html( warning );
-
-                       // Set a value in the form indicating that the warning is acknowledged and
-                       // doesn't need to be redisplayed post-upload
-                       if ( !warning ) {
-                               $( '#wpDestFileWarningAck' ).val( '' );
-                       } else {
-                               $( '#wpDestFileWarningAck' ).val( '1' );
-                       }
-
-               }
-       };
-
-       uploadLicense = {
-
-               responseCache: { '': '' },
-
-               fetchPreview: function ( license ) {
-                       var $spinnerLicense;
-                       if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) {
-                               return;
-                       }
-                       if ( this.responseCache.hasOwnProperty( license ) ) {
-                               this.showPreview( this.responseCache[license] );
-                               return;
-                       }
-
-                       $spinnerLicense = $.createSpinner().insertAfter( '#wpLicense' );
-
-                       ( new mw.Api() ).get( {
-                               action: 'parse',
-                               text: '{{' + license + '}}',
-                               title: $( '#wpDestFile' ).val() || 'File:Sample.jpg',
-                               prop: 'text',
-                               pst: ''
-                       } ).done( function ( result ) {
-                               $spinnerLicense.remove();
-                               uploadLicense.processResult( result, license );
-                       } );
-               },
-
-               processResult: function ( result, license ) {
-                       this.responseCache[license] = result.parse.text['*'];
-                       this.showPreview( this.responseCache[license] );
-               },
-
-               showPreview: function ( preview ) {
-                       $( '#mw-license-preview' ).html( preview );
-               }
-
-       };
-
-       $( function () {
-               // Disable URL box if the URL copy upload source type is not selected
-               if ( !$( '#wpSourceTypeurl' ).prop( 'checked' ) ) {
-                       $( '#wpUploadFileURL' ).prop( 'disabled', true );
-               }
-
-               // AJAX wpDestFile warnings
-               if ( ajaxUploadDestCheck ) {
-                       // Insert an event handler that fetches upload warnings when wpDestFile
-                       // has been changed
-                       $( '#wpDestFile' ).change( function () {
-                               uploadWarning.checkNow( $( this ).val() );
-                       } );
-                       // Insert a row where the warnings will be displayed just below the
-                       // wpDestFile row
-                       $( '#mw-htmlform-description tbody' ).append(
-                               $( '<tr>' ).append(
-                                       $( '<td>' )
-                                               .attr( 'id', 'wpDestFile-warning' )
-                                               .attr( 'colspan', 2 )
-                               )
-                       );
-               }
-
-               if ( mw.config.get( 'wgAjaxLicensePreview' ) && $license.length ) {
-                       // License selector check
-                       $license.change( function () {
-                               // We might show a preview
-                               uploadLicense.fetchPreview( $license.val() );
-                       } );
-
-                       // License selector table row
-                       $license.closest( 'tr' ).after(
-                               $( '<tr>' ).append(
-                                       $( '<td>' ),
-                                       $( '<td>' ).attr( 'id', 'mw-license-preview' )
-                               )
-                       );
-               }
-
-               // fillDestFile setup
-               $.each( mw.config.get( 'wgUploadSourceIds' ), function ( index, sourceId ) {
-                       $( '#' + sourceId ).change( function () {
-                               var path, slash, backslash, fname;
-                               if ( !mw.config.get( 'wgUploadAutoFill' ) ) {
-                                       return;
-                               }
-                               // Remove any previously flagged errors
-                               $( '#mw-upload-permitted' ).attr( 'class', '' );
-                               $( '#mw-upload-prohibited' ).attr( 'class', '' );
-
-                               path = $( this ).val();
-                               // Find trailing part
-                               slash = path.lastIndexOf( '/' );
-                               backslash = path.lastIndexOf( '\\' );
-                               if ( slash === -1 && backslash === -1 ) {
-                                       fname = path;
-                               } else if ( slash > backslash ) {
-                                       fname = path.substring( slash + 1 );
-                               } else {
-                                       fname = path.substring( backslash + 1 );
-                               }
-
-                               // Clear the filename if it does not have a valid extension.
-                               // URLs are less likely to have a useful extension, so don't include them in the
-                               // extension check.
-                               if (
-                                       mw.config.get( 'wgStrictFileExtensions' ) &&
-                                       mw.config.get( 'wgFileExtensions' ) &&
-                                       $( this ).attr( 'id' ) !== 'wpUploadFileURL'
-                               ) {
-                                       if (
-                                               fname.lastIndexOf( '.' ) === -1 ||
-                                               $.inArray(
-                                                       fname.substr( fname.lastIndexOf( '.' ) + 1 ).toLowerCase(),
-                                                       $.map( mw.config.get( 'wgFileExtensions' ), function ( element ) {
-                                                               return element.toLowerCase();
-                                                       } )
-                                               ) === -1
-                                       ) {
-                                               // Not a valid extension
-                                               // Clear the upload and set mw-upload-permitted to error
-                                               $( this ).val( '' );
-                                               $( '#mw-upload-permitted' ).attr( 'class', 'error' );
-                                               $( '#mw-upload-prohibited' ).attr( 'class', 'error' );
-                                               // Clear wpDestFile as well
-                                               $( '#wpDestFile' ).val( '' );
-
-                                               return false;
-                                       }
-                               }
-
-                               // Replace spaces by underscores
-                               fname = fname.replace( / /g, '_' );
-                               // Capitalise first letter if needed
-                               if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
-                                       fname = fname.charAt( 0 ).toUpperCase().concat( fname.substring( 1 ) );
-                               }
-
-                               // Output result
-                               if ( $( '#wpDestFile' ).length ) {
-                                       // Call decodeURIComponent function to remove possible URL-encoded characters
-                                       // from the file name (bug 30390). Especially likely with upload-form-url.
-                                       // decodeURIComponent can throw an exception if input is invalid utf-8
-                                       try {
-                                               $( '#wpDestFile' ).val( decodeURIComponent( fname ) );
-                                       } catch ( err ) {
-                                               $( '#wpDestFile' ).val( fname );
-                                       }
-                                       uploadWarning.checkNow( fname );
-                               }
-                       } );
-               } );
-       } );
-}( mediaWiki, jQuery ) );
deleted file mode 100644 (file)
index 5c6e63b9ee9285c2de3d2ab68b8d42e6302a4d75..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- * MediaWiki legacy wikibits
- */
-( function ( mw, $ ) {
-       var msg,
-               win = window,
-               ua = navigator.userAgent.toLowerCase(),
-               onloadFuncts = [];
-
-/**
- * User-agent sniffing.
- *
- * @deprecated since 1.17 Use jquery.client instead
- */
-
-msg = 'Use feature detection or module jquery.client instead.';
-
-mw.log.deprecate( win, 'clientPC', ua, msg );
-
-// Ignored dummy values
-mw.log.deprecate( win, 'is_gecko', false, msg );
-mw.log.deprecate( win, 'is_chrome_mac', false, msg );
-mw.log.deprecate( win, 'is_chrome', false, msg );
-mw.log.deprecate( win, 'webkit_version', false, msg );
-mw.log.deprecate( win, 'is_safari_win', false, msg );
-mw.log.deprecate( win, 'is_safari', false, msg );
-mw.log.deprecate( win, 'webkit_match', false, msg );
-mw.log.deprecate( win, 'is_ff2', false, msg );
-mw.log.deprecate( win, 'ff2_bugs', false, msg );
-mw.log.deprecate( win, 'is_ff2_win', false, msg );
-mw.log.deprecate( win, 'is_ff2_x11', false, msg );
-mw.log.deprecate( win, 'opera95_bugs', false, msg );
-mw.log.deprecate( win, 'opera7_bugs', false, msg );
-mw.log.deprecate( win, 'opera6_bugs', false, msg );
-mw.log.deprecate( win, 'is_opera_95', false, msg );
-mw.log.deprecate( win, 'is_opera_preseven', false, msg );
-mw.log.deprecate( win, 'is_opera', false, msg );
-mw.log.deprecate( win, 'ie6_bugs', false, msg );
-
-/**
- * DOM utilities for handling of events, text nodes and selecting elements
- *
- * @deprecated since 1.17 Use jQuery instead
- */
-msg = 'Use jQuery instead.';
-
-// Ignored dummy values
-mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
-mw.log.deprecate( win, 'onloadFuncts', [], msg );
-mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
-mw.log.deprecate( win, 'changeText', $.noop, msg );
-mw.log.deprecate( win, 'killEvt', $.noop, msg );
-mw.log.deprecate( win, 'addHandler', $.noop, msg );
-mw.log.deprecate( win, 'hookEvent', $.noop, msg );
-mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
-mw.log.deprecate( win, 'removeHandler', $.noop, msg );
-mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
-mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
-
-// Run a function after the window onload event is fired
-mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
-       if ( onloadFuncts ) {
-               onloadFuncts.push(hookFunct);
-       } else {
-               // If func queue is gone the event has happened already,
-               // run immediately instead of queueing.
-               hookFunct();
-       }
-}, msg );
-
-$( win ).on( 'load', function () {
-       var i, functs;
-
-       // Don't run twice
-       if ( !onloadFuncts ) {
-               return;
-       }
-
-       // Deference and clear onloadFuncts before running any
-       // hooks to make sure we don't miss any addOnloadHook
-       // calls.
-       functs = onloadFuncts.slice();
-       onloadFuncts = undefined;
-
-       // Execute the queued functions
-       for ( i = 0; i < functs.length; i++ ) {
-               functs[i]();
-       }
-} );
-
-/**
- * Toggle checkboxes with shift selection
- *
- * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
- */
-msg = 'Use jquery.checkboxShiftClick instead.';
-mw.log.deprecate( win, 'checkboxes', [], msg );
-mw.log.deprecate( win, 'lastCheckbox', null, msg );
-mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
-mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
-mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
-
-/**
- * Add a button to the default editor toolbar
- *
- * @deprecated since 1.17 Use mw.toolbar instead
- */
-mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
-mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
-
-/**
- * Spinner creation, injection and removal
- *
- * @deprecated since 1.18 Use jquery.spinner instead
- */
-mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
-mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
-
-/**
- * Escape utilities
- *
- * @deprecated since 1.18 Use mw.html instead
- */
-mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
-mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
-
-/**
- * Display a message to the user
- *
- * @deprecated since 1.17 Use mediawiki.notify instead
- * @param {string|HTMLElement} message To be put inside the message box
- */
-mw.log.deprecate( win, 'jsMsg', function ( message ) {
-       if ( !arguments.length || message === '' || message === null ) {
-               return true;
-       }
-       if ( typeof message !== 'object' ) {
-               message = $.parseHTML( message );
-       }
-       mw.notify( message, { autoHide: true, tag: 'legacy' } );
-       return true;
-}, 'Use mediawiki.notify instead.' );
-
-/**
- * Misc. utilities
- *
- * @deprecated since 1.17 Use mediawiki.util instead
- */
-msg = 'Use mediawiki.util instead.';
-mw.log.deprecate( win, 'updateTooltipAccessKeys', mw.util.updateTooltipAccessKeys, msg );
-mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
-mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
-msg = 'Use jquery.accessKeyLabel instead.';
-mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
-mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
-
-/**
- * Wikipage import methods
- */
-
-// included-scripts tracker
-win.loadedScripts = {};
-
-win.importScript = function ( page ) {
-       var uri = mw.config.get( 'wgScript' ) + '?title=' +
-               mw.util.wikiUrlencode( page ) +
-               '&action=raw&ctype=text/javascript';
-       return win.importScriptURI( uri );
-};
-
-win.importScriptURI = function ( url ) {
-       if ( win.loadedScripts[url] ) {
-               return null;
-       }
-       win.loadedScripts[url] = true;
-       var s = document.createElement( 'script' );
-       s.setAttribute( 'src', url );
-       s.setAttribute( 'type', 'text/javascript' );
-       document.getElementsByTagName( 'head' )[0].appendChild( s );
-       return s;
-};
-
-win.importStylesheet = function ( page ) {
-       var uri = mw.config.get( 'wgScript' ) + '?title=' +
-               mw.util.wikiUrlencode( page ) +
-               '&action=raw&ctype=text/css';
-       return win.importStylesheetURI( uri );
-};
-
-win.importStylesheetURI = function ( url, media ) {
-       var l = document.createElement( 'link' );
-       l.rel = 'stylesheet';
-       l.href = url;
-       if ( media ) {
-               l.media = media;
-       }
-       document.getElementsByTagName('head')[0].appendChild( l );
-       return l;
-};
-
-}( mediaWiki, jQuery ) );
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..c86af5b4cafc2d01d733615599ae1d66fe042639
--- /dev/null
@@ -0,0 +1 @@
+../../resources/src/mediawiki.legacy/wikibits.js
\ No newline at end of file