Add mediawiki.language/languages/nl.js and mediawiki.language/languages/pt.js
[lhc/web/wiklou.git] / resources / Resources.php
index fbcfd91..062f256 100644 (file)
@@ -2,67 +2,79 @@
 
 return array(
 
-       /* Special resources who have their own classes */
+       /* Special modules who have their own classes */
 
        'site' => array( 'class' => 'ResourceLoaderSiteModule' ),
        'noscript' => array( 'class' => 'ResourceLoaderNoscriptModule' ),
        'startup' => array( 'class' => 'ResourceLoaderStartUpModule' ),
        'user' => array( 'class' => 'ResourceLoaderUserModule' ),
-       'user.options' => array( 'class' => 'ResourceLoaderUserOptionsModule' ),
        'user.groups' => array( 'class' => 'ResourceLoaderUserGroupsModule' ),
+       'user.options' => array( 'class' => 'ResourceLoaderUserOptionsModule' ),
+       'user.tokens' => array( 'class' => 'ResourceLoaderUserTokensModule' ),
+       'filepage' => array( 'class' => 'ResourceLoaderFilePageModule' ),
 
        /* Skins */
 
        'skins.vector' => array(
-               'styles' => array( 'vector/screen.css' => array( 'media' => 'screen' ) ),
+               'styles' => array(
+                       'common/commonElements.css' => array( 'media' => 'screen' ),
+                       'common/commonContent.css' => array( 'media' => 'screen' ),
+                       'common/commonInterface.css' => array( 'media' => 'screen' ),
+                       'vector/screen.css' => array( 'media' => 'screen' ),
+               ),
                'scripts' => 'vector/vector.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.monobook' => array(
                'styles' => array(
+                       'common/commonElements.css' => array( 'media' => 'screen' ),
+                       'common/commonContent.css' => array( 'media' => 'screen' ),
+                       'common/commonInterface.css' => array( 'media' => 'screen' ),
                        'monobook/main.css' => array( 'media' => 'screen' ),
                ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.simple' => array(
                'styles' => array( 'simple/main.css' => array( 'media' => 'screen' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.chick' => array(
                'styles' => array( 'chick/main.css' => array( 'media' => 'screen,handheld' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.modern' => array(
-               'styles' => array( 'modern/main.css' => array( 'media' => 'screen' ),
-                                  'modern/print.css' => array( 'media' => 'print' ) ),
+               'styles' => array(
+                       'modern/main.css' => array( 'media' => 'screen' ),
+                       'modern/print.css' => array( 'media' => 'print' ),
+               ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.cologneblue' => array(
-               'styles' => array( 'common/cologneblue.css' => array( 'media' => 'screen' ) ),
+               'styles' => array( 'cologneblue/screen.css' => array( 'media' => 'screen' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.nostalgia' => array(
-               'styles' => array( 'common/nostalgia.css' => array( 'media' => 'screen' ) ),
+               'styles' => array( 'nostalgia/screen.css' => array( 'media' => 'screen' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'skins.standard' => array(
                'styles' => array( 'common/wikistandard.css' => array( 'media' => 'screen' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
 
        /* jQuery */
 
        'jquery' => array(
                'scripts' => 'resources/jquery/jquery.js',
-               'debugRaw' => false
+               'debugRaw' => false,
        ),
 
        /* jQuery Plugins */
@@ -77,8 +89,12 @@ return array(
                'scripts' => 'resources/jquery/jquery.autoEllipsis.js',
                'dependencies' => 'jquery.highlightText',
        ),
+       'jquery.byteLength' => array(
+               'scripts' => 'resources/jquery/jquery.byteLength.js',
+       ),
        'jquery.byteLimit' => array(
                'scripts' => 'resources/jquery/jquery.byteLimit.js',
+               'dependencies' => 'jquery.byteLength',
        ),
        'jquery.checkboxShiftClick' => array(
                'scripts' => 'resources/jquery/jquery.checkboxShiftClick.js',
@@ -104,10 +120,14 @@ return array(
        ),
        'jquery.expandableField' => array(
                'scripts' => 'resources/jquery/jquery.expandableField.js',
+               'dependencies' => 'jquery.delayedBind',
        ),
        'jquery.form' => array(
                'scripts' => 'resources/jquery/jquery.form.js',
        ),
+       'jquery.getAttrs' => array(
+               'scripts' => 'resources/jquery/jquery.getAttrs.js',
+       ),
        'jquery.highlightText' => array(
                'scripts' => 'resources/jquery/jquery.highlightText.js',
        ),
@@ -132,13 +152,31 @@ return array(
                'styles' => 'resources/jquery/jquery.makeCollapsible.css',
                'messages' => array( 'collapsible-expand', 'collapsible-collapse' ),
        ),
+       'jquery.mockjax' => array(
+               'scripts' => 'resources/jquery/jquery.mockjax.js',
+       ),
+       'jquery.mwExtension' => array(
+               'scripts' => 'resources/jquery/jquery.mwExtension.js',
+       ),
+       'jquery.mw-jump' => array(
+               'scripts' => 'resources/jquery/jquery.mw-jump.js',
+       ),
        'jquery.qunit' => array(
                'scripts' => 'resources/jquery/jquery.qunit.js',
                'styles' => 'resources/jquery/jquery.qunit.css',
+               'position' => 'top',
+       ),
+       'jquery.qunit.completenessTest' => array(
+               'scripts' => 'resources/jquery/jquery.qunit.completenessTest.js',
+       ),
+       'jquery.spinner' => array(
+               'scripts' => 'resources/jquery/jquery.spinner.js',
+               'styles' => 'resources/jquery/jquery.spinner.css',
        ),
        'jquery.suggestions' => array(
                'scripts' => 'resources/jquery/jquery.suggestions.js',
                'styles' => 'resources/jquery/jquery.suggestions.css',
+               'dependencies' => 'jquery.autoEllipsis',
        ),
        'jquery.tabIndex' => array(
                'scripts' => 'resources/jquery/jquery.tabIndex.js',
@@ -150,6 +188,12 @@ return array(
        'jquery.textSelection' => array(
                'scripts' => 'resources/jquery/jquery.textSelection.js',
        ),
+       'jquery.xmldom' => array(
+               'scripts' => 'resources/jquery/jquery.xmldom.js',
+       ),
+
+       /* jQuery Tipsy */
+
        'jquery.tipsy' => array(
                'scripts' => 'resources/jquery.tipsy/jquery.tipsy.js',
                'styles' => 'resources/jquery.tipsy/jquery.tipsy.css',
@@ -171,27 +215,33 @@ return array(
                        ),
                ),
                'dependencies' => 'jquery',
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.widget' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.widget.js',
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.mouse' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.mouse.js',
                'dependencies' => 'jquery.ui.widget',
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.position' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.position.js',
+               'group' => 'jquery.ui',
        ),
        // Interactions
        'jquery.ui.draggable' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.draggable.js',
                'dependencies' => array( 'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget' ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.droppable' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.droppable.js',
                'dependencies' => array(
                        'jquery.ui.core', 'jquery.ui.mouse', 'jquery.ui.widget', 'jquery.ui.draggable',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.resizable' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.resizable.js',
@@ -200,6 +250,7 @@ return array(
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.resizable.css',
                ),
                'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.selectable' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.selectable.js',
@@ -208,10 +259,12 @@ return array(
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.selectable.css',
                ),
                'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.sortable' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.sortable.js',
                'dependencies' => array( 'jquery.ui.core', 'jquery.ui.widget', 'jquery.ui.mouse' ),
+               'group' => 'jquery.ui',
        ),
        // Widgets
        'jquery.ui.accordion' => array(
@@ -221,6 +274,7 @@ return array(
                        'default' => 'resources/jquery.ui/themes/default/jquery.ui.accordion.css',
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.accordion.css',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.autocomplete' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.autocomplete.js',
@@ -229,6 +283,7 @@ return array(
                        'default' => 'resources/jquery.ui/themes/default/jquery.ui.autocomplete.css',
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.autocomplete.css',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.button' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.button.js',
@@ -237,6 +292,7 @@ return array(
                        'default' => 'resources/jquery.ui/themes/default/jquery.ui.button.css',
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.button.css',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.datepicker' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.datepicker.js',
@@ -299,6 +355,7 @@ return array(
                        'zh-hk' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-zh-HK.js',
                        'zh-tw' => 'resources/jquery.ui/i18n/jquery.ui.datepicker-zh-TW.js',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.dialog' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.dialog.js',
@@ -315,6 +372,7 @@ return array(
                        'default' => 'resources/jquery.ui/themes/default/jquery.ui.dialog.css',
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.dialog.css',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.progressbar' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.progressbar.js',
@@ -323,6 +381,7 @@ return array(
                        'default' => 'resources/jquery.ui/themes/default/jquery.ui.progressbar.css',
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.progressbar.css',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.slider' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.slider.js',
@@ -331,6 +390,7 @@ return array(
                        'default' => 'resources/jquery.ui/themes/default/jquery.ui.slider.css',
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.slider.css',
                ),
+               'group' => 'jquery.ui',
        ),
        'jquery.ui.tabs' => array(
                'scripts' => 'resources/jquery.ui/jquery.ui.tabs.js',
@@ -339,59 +399,73 @@ return array(
                        'default' => 'resources/jquery.ui/themes/default/jquery.ui.tabs.css',
                        'vector' => 'resources/jquery.ui/themes/vector/jquery.ui.tabs.css',
                ),
+               'group' => 'jquery.ui',
        ),
        // Effects
        'jquery.effects.core' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.core.js',
                'dependencies' => 'jquery',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.blind' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.blind.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.bounce' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.bounce.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.clip' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.clip.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.drop' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.drop.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.explode' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.explode.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.fold' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.fold.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.highlight' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.highlight.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.pulsate' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.pulsate.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.scale' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.scale.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.shake' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.shake.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.slide' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.slide.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
        'jquery.effects.transfer' => array(
                'scripts' => 'resources/jquery.effects/jquery.effects.transfer.js',
                'dependencies' => 'jquery.effects.core',
+               'group' => 'jquery.ui',
        ),
 
        /* MediaWiki */
@@ -404,27 +478,22 @@ return array(
        'mediawiki.htmlform' => array(
                'scripts' => 'resources/mediawiki/mediawiki.htmlform.js',
        ),
-       'mediawiki.util' => array(
-               'scripts' => 'resources/mediawiki.util/mediawiki.util.js',
+       'mediawiki.Title' => array(
+               'scripts' => 'resources/mediawiki/mediawiki.Title.js',
+               'dependencies' => 'mediawiki.util',
+       ),
+       'mediawiki.Uri' => array( 
+               'scripts' => 'resources/mediawiki/mediawiki.Uri.js',
+       ),
+       'mediawiki.user' => array(
+               'scripts' => 'resources/mediawiki/mediawiki.user.js',
                'dependencies' => array(
-                       'jquery.checkboxShiftClick',
-                       'jquery.client',
                        'jquery.cookie',
-                       'jquery.messageBox',
-                       'jquery.makeCollapsible',
-                       'jquery.placeholder',
-                       'jquery.tablesorter',
                ),
-               'debugScripts' => 'resources/mediawiki.util/mediawiki.util.test.js',
-       ),
-       'mediawiki.util.jpegmeta' => array(
-               'scripts' => 'resources/mediawiki.util/mediawiki.util.jpegmeta.js',
-       ),
-       'mediawiki.action.history' => array(
-               'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js',
-               'dependencies' => 'jquery.ui.button',
-               'group' => 'mediawiki.action.history',
        ),
+
+       /* MediaWiki Action */
+
        'mediawiki.action.edit' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.edit.js',
                'dependencies' => array(
@@ -432,56 +501,44 @@ return array(
                        'jquery.byteLimit',
                ),
        ),
-       'mediawiki.action.view.rightClickEdit' => array(
-               'scripts' => 'resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
+       'mediawiki.action.history' => array(
+               'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js',
+               'dependencies' => 'jquery.ui.button',
+               'group' => 'mediawiki.action.history',
        ),
-       'mediawiki.action.view.metadata' => array(
-               'scripts' => 'resources/mediawiki.action/mediawiki.action.view.metadata.js',
-               'messages' => array( 'metadata-expand', 'metadata-collapse' ),
+       'mediawiki.action.history.diff' => array(
+               'styles' => 'resources/mediawiki.action/mediawiki.action.history.diff.css',
+               'group' => 'mediawiki.action.history',
        ),
-       'mediawiki.action.watch.ajax' => array(
-               'scripts' => 'resources/mediawiki.action/mediawiki.action.watch.ajax.js',
+       'mediawiki.action.view.dblClickEdit' => array(
+               'scripts' => 'resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js',
                'dependencies' => 'mediawiki.util',
        ),
-
-       /* Special pages */
-
-       'mediawiki.special' => array(
-               'styles' => 'resources/mediawiki.special/mediawiki.special.css',
-       ),
-       'mediawiki.special.preferences' => array(
-               'scripts' => 'resources/mediawiki.special/mediawiki.special.preferences.js',
-               'styles' => 'resources/mediawiki.special/mediawiki.special.preferences.css',
-               'messages' => array( 'email-address-validity-valid', 'email-address-validity-invalid' ),
-       ),
-       'mediawiki.special.changeslist' => array(
-               'styles' => 'resources/mediawiki.special/mediawiki.special.changeslist.css',
-               'dependencies' => array( 'jquery.makeCollapsible' ),
-       ),
-       'mediawiki.special.search' => array(
-               'scripts' => 'resources/mediawiki.special/mediawiki.special.search.js',
-       ),
-       'mediawiki.special.block' => array(
-               'scripts' => 'resources/mediawiki.special/mediawiki.special.block.js',
+       'mediawiki.action.view.metadata' => array(
+               'scripts' => 'resources/mediawiki.action/mediawiki.action.view.metadata.js',
+               'messages' => array(
+                       'metadata-expand',
+                       'metadata-collapse',
+               ),
        ),
-       'mediawiki.special.movePage' => array(
-               'scripts' => 'resources/mediawiki.special/mediawiki.special.movePage.js',
-               'dependencies' => 'jquery.byteLimit',
+       'mediawiki.action.view.rightClickEdit' => array(
+               'scripts' => 'resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
        ),
-       'mediawiki.special.upload' => array(
-               // @TODO: merge in remainder of mediawiki.legacy.upload
-               'scripts' => 'resources/mediawiki.special/mediawiki.special.upload.js',
+       'mediawiki.action.watch.ajax' => array(
+               'scripts' => 'resources/mediawiki.action/mediawiki.action.watch.ajax.js',
                'messages' => array(
-                       'widthheight',
-                       'size-bytes',
-                       'size-kilobytes',
-                       'size-megabytes',
-                       'size-gigabytes',
-                       'largefileserver',
+                       'watch',
+                       'unwatch',
+                       'watching',
+                       'unwatching',
+                       'tooltip-ca-watch',
+                       'tooltip-ca-unwatch',
+                       'watcherrortext',
                ),
-               'dependencies' => array( 'mediawiki.util.jpegmeta' ),
        ),
 
+       /* MediaWiki Language */
+
        'mediawiki.language' => array(
                'scripts' => 'resources/mediawiki.language/mediawiki.language.js',
                'languageScripts' => array(
@@ -513,8 +570,10 @@ return array(
                        'mk' => 'resources/mediawiki.language/languages/mk.js',
                        'mo' => 'resources/mediawiki.language/languages/mo.js',
                        'mt' => 'resources/mediawiki.language/languages/mt.js',
+                       'nl' => 'resources/mediawiki.language/languages/nl.js',
                        'nso' => 'resources/mediawiki.language/languages/nso.js',
                        'pl' => 'resources/mediawiki.language/languages/pl.js',
+                       'pt' => 'resources/mediawiki.language/languages/pt.js',
                        'pt-br' => 'resources/mediawiki.language/languages/pt-br.js',
                        'ro' => 'resources/mediawiki.language/languages/ro.js',
                        'ru' => 'resources/mediawiki.language/languages/ru.js',
@@ -533,110 +592,164 @@ return array(
                ),
        ),
 
-       /* mediawiki Legacy */
+       /* MediaWiki Libs */
+
+       'mediawiki.libs.jpegmeta' => array(
+               'scripts' => 'resources/mediawiki.libs/mediawiki.libs.jpegmeta.js',
+       ),
+
+       /* MediaWiki Page */
+
+       'mediawiki.util' => array(
+               'scripts' => 'resources/mediawiki/mediawiki.util.js',
+               'dependencies' => array(
+                       'jquery.client',
+                       'jquery.cookie',
+                       'jquery.messageBox',
+                       'jquery.mwExtension',
+               ),
+       ),
+       'mediawiki.page.ready' => array(
+               'scripts' => 'resources/mediawiki.page/mediawiki.page.ready.js',
+               'dependencies' => array(
+                       'jquery.checkboxShiftClick',
+                       'jquery.makeCollapsible',
+                       'jquery.placeholder',
+                       'jquery.mw-jump',
+                       'mediawiki.util',
+               ),
+       ),
+       'mediawiki.page.startup' => array(
+               'scripts' => 'resources/mediawiki.page/mediawiki.page.startup.js',
+               'dependencies' => array(
+                       'jquery.client',
+               ),
+               'position' => 'top',
+       ),
+       
+
+       /* MediaWiki Special pages */
+
+       'mediawiki.special' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.js',
+               'styles' => 'resources/mediawiki.special/mediawiki.special.css',
+       ),
+       'mediawiki.special.preferences' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.preferences.js',
+               'styles' => 'resources/mediawiki.special/mediawiki.special.preferences.css',
+               'messages' => array( 'email-address-validity-valid', 'email-address-validity-invalid' ),
+       ),
+       'mediawiki.special.changeslist' => array(
+               'styles' => 'resources/mediawiki.special/mediawiki.special.changeslist.css',
+               'dependencies' => array( 'jquery.makeCollapsible' ),
+       ),
+       'mediawiki.special.search' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.search.js',
+               'styles'  => 'resources/mediawiki.special/mediawiki.special.search.css',
+       ),
+       'mediawiki.special.block' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.block.js',
+       ),
+       'mediawiki.special.undelete' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.undelete.js',
+       ),
+       'mediawiki.special.movePage' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.movePage.js',
+               'dependencies' => 'jquery.byteLimit',
+       ),
+       'mediawiki.special.recentchanges' => array(
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.recentchanges.js',
+               'dependencies' => array( 'mediawiki.special' ),
+               'position' => 'top',
+       ),
+       'mediawiki.special.upload' => array(
+               // @TODO: merge in remainder of mediawiki.legacy.upload
+               'scripts' => 'resources/mediawiki.special/mediawiki.special.upload.js',
+               'messages' => array(
+                       'widthheight',
+                       'size-bytes',
+                       'size-kilobytes',
+                       'size-megabytes',
+                       'size-gigabytes',
+                       'largefileserver',
+               ),
+               'dependencies' => array( 'mediawiki.libs.jpegmeta' ),
+       ),
+
+       /* MediaWiki Legacy */
 
        'mediawiki.legacy.ajax' => array(
                'scripts' => 'common/ajax.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
-               'messages' => array(
-                       'watch',
-                       'unwatch',
-                       'watching',
-                       'unwatching',
-                       'tooltip-ca-watch',
-                       'tooltip-ca-unwatch',
-               ),
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => 'mediawiki.legacy.wikibits',
        ),
        'mediawiki.legacy.commonPrint' => array(
                'styles' => array( 'common/commonPrint.css' => array( 'media' => 'print' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'mediawiki.legacy.config' => array(
                'scripts' => 'common/config.js',
                'styles' => array( 'common/config.css', 'common/config-cc.css' ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
-               'dependencies' => 'mediawiki.legacy.wikibits',
-       ),
-       'mediawiki.legacy.diff' => array(
-               'scripts' => 'common/diff.js',
-               'styles' => 'common/diff.css',
-               'group' => 'mediawiki.action.history',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
-               'dependencies' => 'mediawiki.legacy.wikibits',
-               'position' => 'top',
-       ),
-       'mediawiki.legacy.edit' => array(
-               'scripts' => 'common/edit.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => 'mediawiki.legacy.wikibits',
        ),
        'mediawiki.legacy.IEFixes' => array(
                'scripts' => 'common/IEFixes.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => 'mediawiki.legacy.wikibits',
        ),
        'mediawiki.legacy.mwsuggest' => array(
                'scripts' => 'common/mwsuggest.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => array( 'mediawiki.legacy.wikibits', 'jquery.client' ),
                'messages' => array( 'search-mwsuggest-enabled', 'search-mwsuggest-disabled' ),
        ),
        'mediawiki.legacy.preview' => array(
                'scripts' => 'common/preview.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => 'mediawiki.legacy.wikibits',
        ),
        'mediawiki.legacy.protect' => array(
                'scripts' => 'common/protect.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => array(
                        'mediawiki.legacy.wikibits',
                        'jquery.byteLimit',
                ),
        ),
-       'mediawiki.legacy.search' => array(
-               'scripts' => 'common/search.js',
-               'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
-               'styles' => 'common/search.css',
-               'dependencies' => 'mediawiki.legacy.wikibits',
-       ),
        'mediawiki.legacy.shared' => array(
                'styles' => array( 'common/shared.css' => array( 'media' => 'screen' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'mediawiki.legacy.oldshared' => array(
                'styles' => array( 'common/oldshared.css' => array( 'media' => 'screen' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
        'mediawiki.legacy.upload' => array(
                'scripts' => 'common/upload.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => 'mediawiki.legacy.wikibits',
        ),
        'mediawiki.legacy.wikibits' => array(
                'scripts' => 'common/wikibits.js',
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
                'dependencies' => 'mediawiki.language',
                'messages' => array( 'showtoc', 'hidetoc' ),
        ),
        'mediawiki.legacy.wikiprintable' => array(
                'styles' => array( 'common/wikiprintable.css' => array( 'media' => 'print' ) ),
                'remoteBasePath' => $GLOBALS['wgStylePath'],
-               'localBasePath' => "{$GLOBALS['IP']}/skins",
+               'localBasePath' => $GLOBALS['wgStyleDirectory'],
        ),
 );