From 91e194556c52d2f354344f930419eef2dd6267f0 Mon Sep 17 00:00:00 2001
From: Pierre Schmitz
Date: Wed, 4 Sep 2013 05:51:59 +0200
Subject: Update to MediaWiki 1.21.2
---
.../includes/content/ContentHandlerTest.php | 424 ++++++++++++++++++++
tests/phpunit/includes/content/CssContentTest.php | 81 ++++
.../includes/content/JavaScriptContentTest.php | 273 +++++++++++++
tests/phpunit/includes/content/TextContentTest.php | 431 +++++++++++++++++++++
.../content/WikitextContentHandlerTest.php | 185 +++++++++
.../includes/content/WikitextContentTest.php | 386 ++++++++++++++++++
6 files changed, 1780 insertions(+)
create mode 100644 tests/phpunit/includes/content/ContentHandlerTest.php
create mode 100644 tests/phpunit/includes/content/CssContentTest.php
create mode 100644 tests/phpunit/includes/content/JavaScriptContentTest.php
create mode 100644 tests/phpunit/includes/content/TextContentTest.php
create mode 100644 tests/phpunit/includes/content/WikitextContentHandlerTest.php
create mode 100644 tests/phpunit/includes/content/WikitextContentTest.php
(limited to 'tests/phpunit/includes/content')
diff --git a/tests/phpunit/includes/content/ContentHandlerTest.php b/tests/phpunit/includes/content/ContentHandlerTest.php
new file mode 100644
index 00000000..19ceadd5
--- /dev/null
+++ b/tests/phpunit/includes/content/ContentHandlerTest.php
@@ -0,0 +1,424 @@
+setMwGlobals( array(
+ 'wgExtraNamespaces' => array(
+ 12312 => 'Dummy',
+ 12313 => 'Dummy_talk',
+ ),
+ // The below tests assume that namespaces not mentioned here (Help, User, MediaWiki, ..)
+ // default to CONTENT_MODEL_WIKITEXT.
+ 'wgNamespaceContentModels' => array(
+ 12312 => 'testing',
+ ),
+ 'wgContentHandlers' => array(
+ CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler',
+ CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler',
+ CONTENT_MODEL_CSS => 'CssContentHandler',
+ CONTENT_MODEL_TEXT => 'TextContentHandler',
+ 'testing' => 'DummyContentHandlerForTesting',
+ ),
+ ) );
+
+ // Reset namespace cache
+ MWNamespace::getCanonicalNamespaces( true );
+ $wgContLang->resetNamespaces();
+ }
+
+ public function tearDown() {
+ global $wgContLang;
+
+ // Reset namespace cache
+ MWNamespace::getCanonicalNamespaces( true );
+ $wgContLang->resetNamespaces();
+
+ parent::tearDown();
+ }
+
+ public static function dataGetDefaultModelFor() {
+ return array(
+ array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ),
+ array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ),
+ array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
+ array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
+ array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
+ array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
+ array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
+ array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
+ array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+ array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetDefaultModelFor
+ */
+ public function testGetDefaultModelFor( $title, $expectedModelId ) {
+ $title = Title::newFromText( $title );
+ $this->assertEquals( $expectedModelId, ContentHandler::getDefaultModelFor( $title ) );
+ }
+
+ /**
+ * @dataProvider dataGetDefaultModelFor
+ */
+ public function testGetForTitle( $title, $expectedContentModel ) {
+ $title = Title::newFromText( $title );
+ $handler = ContentHandler::getForTitle( $title );
+ $this->assertEquals( $expectedContentModel, $handler->getModelID() );
+ }
+
+ public static function dataGetLocalizedName() {
+ return array(
+ array( null, null ),
+ array( "xyzzy", null ),
+
+ // XXX: depends on content language
+ array( CONTENT_MODEL_JAVASCRIPT, '/javascript/i' ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetLocalizedName
+ */
+ public function testGetLocalizedName( $id, $expected ) {
+ $name = ContentHandler::getLocalizedName( $id );
+
+ if ( $expected ) {
+ $this->assertNotNull( $name, "no name found for content model $id" );
+ $this->assertTrue( preg_match( $expected, $name ) > 0,
+ "content model name for #$id did not match pattern $expected"
+ );
+ } else {
+ $this->assertEquals( $id, $name, "localization of unknown model $id should have "
+ . "fallen back to use the model id directly."
+ );
+ }
+ }
+
+ public static function dataGetPageLanguage() {
+ global $wgLanguageCode;
+
+ return array(
+ array( "Main", $wgLanguageCode ),
+ array( "Dummy:Foo", $wgLanguageCode ),
+ array( "MediaWiki:common.js", 'en' ),
+ array( "User:Foo/common.js", 'en' ),
+ array( "MediaWiki:common.css", 'en' ),
+ array( "User:Foo/common.css", 'en' ),
+ array( "User:Foo", $wgLanguageCode ),
+
+ array( CONTENT_MODEL_JAVASCRIPT, 'javascript' ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetPageLanguage
+ */
+ public function testGetPageLanguage( $title, $expected ) {
+ if ( is_string( $title ) ) {
+ $title = Title::newFromText( $title );
+ }
+
+ $expected = wfGetLangObj( $expected );
+
+ $handler = ContentHandler::getForTitle( $title );
+ $lang = $handler->getPageLanguage( $title );
+
+ $this->assertEquals( $expected->getCode(), $lang->getCode() );
+ }
+
+ public function testGetContentText_Null() {
+ global $wgContentHandlerTextFallback;
+
+ $content = null;
+
+ $wgContentHandlerTextFallback = 'fail';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( '', $text );
+
+ $wgContentHandlerTextFallback = 'serialize';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( '', $text );
+
+ $wgContentHandlerTextFallback = 'ignore';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( '', $text );
+ }
+
+ public function testGetContentText_TextContent() {
+ global $wgContentHandlerTextFallback;
+
+ $content = new WikitextContent( "hello world" );
+
+ $wgContentHandlerTextFallback = 'fail';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->getNativeData(), $text );
+
+ $wgContentHandlerTextFallback = 'serialize';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->serialize(), $text );
+
+ $wgContentHandlerTextFallback = 'ignore';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->getNativeData(), $text );
+ }
+
+ public function testGetContentText_NonTextContent() {
+ global $wgContentHandlerTextFallback;
+
+ $content = new DummyContentForTesting( "hello world" );
+
+ $wgContentHandlerTextFallback = 'fail';
+
+ try {
+ $text = ContentHandler::getContentText( $content );
+
+ $this->fail( "ContentHandler::getContentText should have thrown an exception for non-text Content object" );
+ } catch ( MWException $ex ) {
+ // as expected
+ }
+
+ $wgContentHandlerTextFallback = 'serialize';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->serialize(), $text );
+
+ $wgContentHandlerTextFallback = 'ignore';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertNull( $text );
+ }
+
+ /*
+ public static function makeContent( $text, Title $title, $modelId = null, $format = null ) {}
+ */
+
+ public static function dataMakeContent() {
+ return array(
+ array( 'hallo', 'Help:Test', null, null, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
+ array( 'hallo', 'MediaWiki:Test.js', null, null, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
+ array( serialize( 'hallo' ), 'Dummy:Test', null, null, "testing", 'hallo', false ),
+
+ array( 'hallo', 'Help:Test', null, CONTENT_FORMAT_WIKITEXT, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
+ array( 'hallo', 'MediaWiki:Test.js', null, CONTENT_FORMAT_JAVASCRIPT, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
+ array( serialize( 'hallo' ), 'Dummy:Test', null, "testing", "testing", 'hallo', false ),
+
+ array( 'hallo', 'Help:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
+ array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
+ array( serialize( 'hallo' ), 'Dummy:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, serialize( 'hallo' ), false ),
+
+ array( 'hallo', 'Help:Test', CONTENT_MODEL_WIKITEXT, "testing", null, null, true ),
+ array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, "testing", null, null, true ),
+ array( 'hallo', 'Dummy:Test', CONTENT_MODEL_JAVASCRIPT, "testing", null, null, true ),
+ );
+ }
+
+ /**
+ * @dataProvider dataMakeContent
+ */
+ public function testMakeContent( $data, $title, $modelId, $format, $expectedModelId, $expectedNativeData, $shouldFail ) {
+ $title = Title::newFromText( $title );
+
+ try {
+ $content = ContentHandler::makeContent( $data, $title, $modelId, $format );
+
+ if ( $shouldFail ) {
+ $this->fail( "ContentHandler::makeContent should have failed!" );
+ }
+
+ $this->assertEquals( $expectedModelId, $content->getModel(), 'bad model id' );
+ $this->assertEquals( $expectedNativeData, $content->getNativeData(), 'bads native data' );
+ } catch ( MWException $ex ) {
+ if ( !$shouldFail ) {
+ $this->fail( "ContentHandler::makeContent failed unexpectedly: " . $ex->getMessage() );
+ }
+ else {
+ // dummy, so we don't get the "test did not perform any assertions" message.
+ $this->assertTrue( true );
+ }
+ }
+ }
+
+ /*
+ public function testSupportsSections() {
+ $this->markTestIncomplete( "not yet implemented" );
+ }
+ */
+
+ public function testRunLegacyHooks() {
+ Hooks::register( 'testRunLegacyHooks', __CLASS__ . '::dummyHookHandler' );
+
+ $content = new WikitextContent( 'test text' );
+ $ok = ContentHandler::runLegacyHooks( 'testRunLegacyHooks', array( 'foo', &$content, 'bar' ), false );
+
+ $this->assertTrue( $ok, "runLegacyHooks should have returned true" );
+ $this->assertEquals( "TEST TEXT", $content->getNativeData() );
+ }
+
+ public static function dummyHookHandler( $foo, &$text, $bar ) {
+ if ( $text === null || $text === false ) {
+ return false;
+ }
+
+ $text = strtoupper( $text );
+
+ return true;
+ }
+}
+
+class DummyContentHandlerForTesting extends ContentHandler {
+
+ public function __construct( $dataModel ) {
+ parent::__construct( $dataModel, array( "testing" ) );
+ }
+
+ /**
+ * Serializes Content object of the type supported by this ContentHandler.
+ *
+ * @param Content $content the Content object to serialize
+ * @param null $format the desired serialization format
+ * @return String serialized form of the content
+ */
+ public function serializeContent( Content $content, $format = null ) {
+ return $content->serialize();
+ }
+
+ /**
+ * Unserializes a Content object of the type supported by this ContentHandler.
+ *
+ * @param $blob String serialized form of the content
+ * @param null $format the format used for serialization
+ * @return Content the Content object created by deserializing $blob
+ */
+ public function unserializeContent( $blob, $format = null ) {
+ $d = unserialize( $blob );
+ return new DummyContentForTesting( $d );
+ }
+
+ /**
+ * Creates an empty Content object of the type supported by this ContentHandler.
+ *
+ */
+ public function makeEmptyContent() {
+ return new DummyContentForTesting( '' );
+ }
+}
+
+class DummyContentForTesting extends AbstractContent {
+
+ public function __construct( $data ) {
+ parent::__construct( "testing" );
+
+ $this->data = $data;
+ }
+
+ public function serialize( $format = null ) {
+ return serialize( $this->data );
+ }
+
+ /**
+ * @return String a string representing the content in a way useful for building a full text search index.
+ * If no useful representation exists, this method returns an empty string.
+ */
+ public function getTextForSearchIndex() {
+ return '';
+ }
+
+ /**
+ * @return String the wikitext to include when another page includes this content, or false if the content is not
+ * includable in a wikitext page.
+ */
+ public function getWikitextForTransclusion() {
+ return false;
+ }
+
+ /**
+ * Returns a textual representation of the content suitable for use in edit summaries and log messages.
+ *
+ * @param int $maxlength Maximum length of the summary text.
+ * @return string The summary text.
+ */
+ public function getTextForSummary( $maxlength = 250 ) {
+ return '';
+ }
+
+ /**
+ * Returns native represenation of the data. Interpretation depends on the data model used,
+ * as given by getDataModel().
+ *
+ * @return mixed the native representation of the content. Could be a string, a nested array
+ * structure, an object, a binary blob... anything, really.
+ */
+ public function getNativeData() {
+ return $this->data;
+ }
+
+ /**
+ * returns the content's nominal size in bogo-bytes.
+ *
+ * @return int
+ */
+ public function getSize() {
+ return strlen( $this->data );
+ }
+
+ /**
+ * Return a copy of this Content object. The following must be true for the object returned
+ * if $copy = $original->copy()
+ *
+ * * get_class($original) === get_class($copy)
+ * * $original->getModel() === $copy->getModel()
+ * * $original->equals( $copy )
+ *
+ * If and only if the Content object is imutable, the copy() method can and should
+ * return $this. That is, $copy === $original may be true, but only for imutable content
+ * objects.
+ *
+ * @return Content. A copy of this object.
+ */
+ public function copy() {
+ return $this;
+ }
+
+ /**
+ * Returns true if this content is countable as a "real" wiki page, provided
+ * that it's also in a countable location (e.g. a current revision in the main namespace).
+ *
+ * @param boolean $hasLinks if it is known whether this content contains links, provide this information here,
+ * to avoid redundant parsing to find out.
+ * @return boolean
+ */
+ public function isCountable( $hasLinks = null ) {
+ return false;
+ }
+
+ /**
+ * @param Title $title
+ * @param null $revId
+ * @param null|ParserOptions $options
+ * @param boolean $generateHtml whether to generate Html (default: true). If false,
+ * the result of calling getText() on the ParserOutput object returned by
+ * this method is undefined.
+ *
+ * @return ParserOutput
+ */
+ public function getParserOutput( Title $title, $revId = null, ParserOptions $options = null, $generateHtml = true ) {
+ return new ParserOutput( $this->getNativeData() );
+ }
+}
diff --git a/tests/phpunit/includes/content/CssContentTest.php b/tests/phpunit/includes/content/CssContentTest.php
new file mode 100644
index 00000000..8f53dd3e
--- /dev/null
+++ b/tests/phpunit/includes/content/CssContentTest.php
@@ -0,0 +1,81 @@
+setName( '127.0.0.1' );
+
+ $this->setMwGlobals( array(
+ 'wgUser' => $user,
+ 'wgTextModelsToParse' => array(
+ CONTENT_MODEL_CSS,
+ )
+ ) );
+ }
+
+ public function newContent( $text ) {
+ return new CssContent( $text );
+ }
+
+ public static function dataGetParserOutput() {
+ return array(
+ array(
+ 'MediaWiki:Test.css',
+ null,
+ "hello \n",
+ "\nhello <world>\n\n
"
+ ),
+ array(
+ 'MediaWiki:Test.css',
+ null,
+ "/* hello [[world]] */\n",
+ "\n/* hello [[world]] */\n\n
",
+ array(
+ 'Links' => array(
+ array( 'World' => 0 )
+ )
+ )
+ ),
+
+ // TODO: more...?
+ );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( CONTENT_MODEL_CSS, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( CONTENT_MODEL_CSS, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataEquals() {
+ return array(
+ array( new CssContent( 'hallo' ), null, false ),
+ array( new CssContent( 'hallo' ), new CssContent( 'hallo' ), true ),
+ array( new CssContent( 'hallo' ), new WikitextContent( 'hallo' ), false ),
+ array( new CssContent( 'hallo' ), new CssContent( 'HALLO' ), false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataEquals
+ */
+ public function testEquals( Content $a, Content $b = null, $equal = false ) {
+ $this->assertEquals( $equal, $a->equals( $b ) );
+ }
+
+}
diff --git a/tests/phpunit/includes/content/JavaScriptContentTest.php b/tests/phpunit/includes/content/JavaScriptContentTest.php
new file mode 100644
index 00000000..2d693feb
--- /dev/null
+++ b/tests/phpunit/includes/content/JavaScriptContentTest.php
@@ -0,0 +1,273 @@
+\n",
+ "\nhello <world>\n\n
"
+ ),
+ array(
+ 'MediaWiki:Test.js',
+ null,
+ "hello(); // [[world]]\n",
+ "\nhello(); // [[world]]\n\n
",
+ array(
+ 'Links' => array(
+ array( 'World' => 0 )
+ )
+ )
+ ),
+
+ // TODO: more...?
+ );
+ }
+
+ // XXX: Unused function
+ public static function dataGetSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ '0',
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '2',
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '8',
+ null
+ ),
+ );
+ }
+
+ // XXX: Unused function
+ public static function dataReplaceSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ '0',
+ 'No more',
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '',
+ 'No more',
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '2',
+ "== TEST ==\nmore fun",
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '8',
+ 'No more',
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ 'new',
+ 'No more',
+ 'New',
+ null
+ ),
+ );
+ }
+
+ public function testAddSectionHeader() {
+ $content = $this->newContent( 'hello world' );
+ $c = $content->addSectionHeader( 'test' );
+
+ $this->assertTrue( $content->equals( $c ) );
+ }
+
+ // XXX: currently, preSaveTransform is applied to scripts. this may change or become optional.
+ public static function dataPreSaveTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
+ ),
+ array( 'hello \'\'this\'\' is ~~~',
+ 'hello \'\'this\'\' is ~~~',
+ ),
+ array( " Foo \n ",
+ " Foo",
+ ),
+ );
+ }
+
+ public static function dataPreloadTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ 'hello this is ~~~',
+ ),
+ array( 'hello \'\'this\'\' is foobar',
+ 'hello \'\'this\'\' is foobar',
+ ),
+ );
+ }
+
+ public static function dataGetRedirectTarget() {
+ return array(
+ array( '#REDIRECT [[Test]]',
+ null,
+ ),
+ array( '#REDIRECT Test',
+ null,
+ ),
+ array( '* #REDIRECT [[Test]]',
+ null,
+ ),
+ );
+ }
+
+ /**
+ * @todo: test needs database!
+ */
+ /*
+ public function getRedirectChain() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectArray( $text );
+ }
+ */
+
+ /**
+ * @todo: test needs database!
+ */
+ /*
+ public function getUltimateRedirectTarget() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectRecurse( $text );
+ }
+ */
+
+ public static function dataIsCountable() {
+ return array(
+ array( '',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo, bar',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo',
+ null,
+ 'link',
+ false
+ ),
+ array( 'Foo [[bar]]',
+ null,
+ 'link',
+ false
+ ),
+ array( 'Foo',
+ true,
+ 'link',
+ false
+ ),
+ array( 'Foo [[bar]]',
+ false,
+ 'link',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'any',
+ true
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'comma',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'link',
+ false
+ ),
+ );
+ }
+
+ public static function dataGetTextForSummary() {
+ return array(
+ array( "hello\nworld.",
+ 16,
+ 'hello world.',
+ ),
+ array( 'hello world.',
+ 8,
+ 'hello...',
+ ),
+ array( '[[hello world]].',
+ 8,
+ '[[hel...',
+ ),
+ );
+ }
+
+ public function testMatchMagicWord() {
+ $mw = MagicWord::get( "staticredirect" );
+
+ $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
+ $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word, since it's not wikitext" );
+ }
+
+ public function testUpdateRedirect() {
+ $target = Title::newFromText( "testUpdateRedirect_target" );
+
+ $content = $this->newContent( "#REDIRECT [[Someplace]]" );
+ $newContent = $content->updateRedirect( $target );
+
+ $this->assertTrue( $content->equals( $newContent ), "content should be unchanged since it's not wikitext" );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataEquals() {
+ return array(
+ array( new JavaScriptContent( "hallo" ), null, false ),
+ array( new JavaScriptContent( "hallo" ), new JavaScriptContent( "hallo" ), true ),
+ array( new JavaScriptContent( "hallo" ), new CssContent( "hallo" ), false ),
+ array( new JavaScriptContent( "hallo" ), new JavaScriptContent( "HALLO" ), false ),
+ );
+ }
+
+}
diff --git a/tests/phpunit/includes/content/TextContentTest.php b/tests/phpunit/includes/content/TextContentTest.php
new file mode 100644
index 00000000..382f71a8
--- /dev/null
+++ b/tests/phpunit/includes/content/TextContentTest.php
@@ -0,0 +1,431 @@
+setName( '127.0.0.1' );
+
+ $this->setMwGlobals( array(
+ 'wgUser' => $user,
+ 'wgTextModelsToParse' => array(
+ CONTENT_MODEL_WIKITEXT,
+ CONTENT_MODEL_CSS,
+ CONTENT_MODEL_JAVASCRIPT,
+ ),
+ 'wgUseTidy' => false,
+ 'wgAlwaysUseTidy' => false,
+ ) );
+
+ $this->context = new RequestContext( new FauxRequest() );
+ $this->context->setTitle( Title::newFromText( 'Test' ) );
+ $this->context->setUser( $user );
+ }
+
+ public function newContent( $text ) {
+ return new TextContent( $text );
+ }
+
+ public static function dataGetParserOutput() {
+ return array(
+ array(
+ 'TextContentTest_testGetParserOutput',
+ CONTENT_MODEL_TEXT,
+ "hello ''world'' & [[stuff]]\n", "hello ''world'' & [[stuff]]",
+ array(
+ 'Links' => array()
+ )
+ ),
+ // TODO: more...?
+ );
+ }
+
+ /**
+ * @dataProvider dataGetParserOutput
+ */
+ public function testGetParserOutput( $title, $model, $text, $expectedHtml, $expectedFields = null ) {
+ $title = Title::newFromText( $title );
+ $content = ContentHandler::makeContent( $text, $title, $model );
+
+ $po = $content->getParserOutput( $title );
+
+ $html = $po->getText();
+ $html = preg_replace( '##sm', '', $html ); // strip comments
+
+ $this->assertEquals( $expectedHtml, trim( $html ) );
+
+ if ( $expectedFields ) {
+ foreach ( $expectedFields as $field => $exp ) {
+ $f = 'get' . ucfirst( $field );
+ $v = call_user_func( array( $po, $f ) );
+
+ if ( is_array( $exp ) ) {
+ $this->assertArrayEquals( $exp, $v );
+ } else {
+ $this->assertEquals( $exp, $v );
+ }
+ }
+ }
+
+ // TODO: assert more properties
+ }
+
+ public static function dataPreSaveTransform() {
+ return array(
+ array(
+ #0: no signature resolution
+ 'hello this is ~~~',
+ 'hello this is ~~~',
+ ),
+ array(
+ #1: rtrim
+ " Foo \n ",
+ ' Foo',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataPreSaveTransform
+ */
+ public function testPreSaveTransform( $text, $expected ) {
+ global $wgContLang;
+
+ $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+
+ $content = $this->newContent( $text );
+ $content = $content->preSaveTransform( $this->context->getTitle(), $this->context->getUser(), $options );
+
+ $this->assertEquals( $expected, $content->getNativeData() );
+ }
+
+ public static function dataPreloadTransform() {
+ return array(
+ array(
+ 'hello this is ~~~',
+ 'hello this is ~~~',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataPreloadTransform
+ */
+ public function testPreloadTransform( $text, $expected ) {
+ global $wgContLang;
+ $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+
+ $content = $this->newContent( $text );
+ $content = $content->preloadTransform( $this->context->getTitle(), $options );
+
+ $this->assertEquals( $expected, $content->getNativeData() );
+ }
+
+ public static function dataGetRedirectTarget() {
+ return array(
+ array( '#REDIRECT [[Test]]',
+ null,
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetRedirectTarget
+ */
+ public function testGetRedirectTarget( $text, $expected ) {
+ $content = $this->newContent( $text );
+ $t = $content->getRedirectTarget();
+
+ if ( is_null( $expected ) ) {
+ $this->assertNull( $t, "text should not have generated a redirect target: $text" );
+ } else {
+ $this->assertEquals( $expected, $t->getPrefixedText() );
+ }
+ }
+
+ /**
+ * @dataProvider dataGetRedirectTarget
+ */
+ public function testIsRedirect( $text, $expected ) {
+ $content = $this->newContent( $text );
+
+ $this->assertEquals( !is_null( $expected ), $content->isRedirect() );
+ }
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getRedirectChain() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectArray( $text );
+ }
+ */
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getUltimateRedirectTarget() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectRecurse( $text );
+ }
+ */
+
+ public static function dataIsCountable() {
+ return array(
+ array( '',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo, bar',
+ null,
+ 'comma',
+ false
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataIsCountable
+ * @group Database
+ */
+ public function testIsCountable( $text, $hasLinks, $mode, $expected ) {
+ global $wgArticleCountMethod;
+
+ $old = $wgArticleCountMethod;
+ $wgArticleCountMethod = $mode;
+
+ $content = $this->newContent( $text );
+
+ $v = $content->isCountable( $hasLinks, $this->context->getTitle() );
+ $wgArticleCountMethod = $old;
+
+ $this->assertEquals( $expected, $v, 'isCountable() returned unexpected value ' . var_export( $v, true )
+ . ' instead of ' . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
+ }
+
+ public static function dataGetTextForSummary() {
+ return array(
+ array( "hello\nworld.",
+ 16,
+ 'hello world.',
+ ),
+ array( 'hello world.',
+ 8,
+ 'hello...',
+ ),
+ array( '[[hello world]].',
+ 8,
+ '[[hel...',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetTextForSummary
+ */
+ public function testGetTextForSummary( $text, $maxlength, $expected ) {
+ $content = $this->newContent( $text );
+
+ $this->assertEquals( $expected, $content->getTextForSummary( $maxlength ) );
+ }
+
+ public function testGetTextForSearchIndex() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 'hello world.', $content->getTextForSearchIndex() );
+ }
+
+ public function testCopy() {
+ $content = $this->newContent( 'hello world.' );
+ $copy = $content->copy();
+
+ $this->assertTrue( $content->equals( $copy ), 'copy must be equal to original' );
+ $this->assertEquals( 'hello world.', $copy->getNativeData() );
+ }
+
+ public function testGetSize() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 12, $content->getSize() );
+ }
+
+ public function testGetNativeData() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 'hello world.', $content->getNativeData() );
+ }
+
+ public function testGetWikitextForTransclusion() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 'hello world.', $content->getWikitextForTransclusion() );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_TEXT, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_TEXT, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataIsEmpty() {
+ return array(
+ array( '', true ),
+ array( ' ', false ),
+ array( '0', false ),
+ array( 'hallo welt.', false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataIsEmpty
+ */
+ public function testIsEmpty( $text, $empty ) {
+ $content = $this->newContent( $text );
+
+ $this->assertEquals( $empty, $content->isEmpty() );
+ }
+
+ public static function dataEquals() {
+ return array(
+ array( new TextContent( "hallo" ), null, false ),
+ array( new TextContent( "hallo" ), new TextContent( "hallo" ), true ),
+ array( new TextContent( "hallo" ), new JavaScriptContent( "hallo" ), false ),
+ array( new TextContent( "hallo" ), new WikitextContent( "hallo" ), false ),
+ array( new TextContent( "hallo" ), new TextContent( "HALLO" ), false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataEquals
+ */
+ public function testEquals( Content $a, Content $b = null, $equal = false ) {
+ $this->assertEquals( $equal, $a->equals( $b ) );
+ }
+
+ public static function dataGetDeletionUpdates() {
+ return array(
+ array( "TextContentTest_testGetSecondaryDataUpdates_1",
+ CONTENT_MODEL_TEXT, "hello ''world''\n",
+ array()
+ ),
+ array( "TextContentTest_testGetSecondaryDataUpdates_2",
+ CONTENT_MODEL_TEXT, "hello [[world test 21344]]\n",
+ array()
+ ),
+ // TODO: more...?
+ );
+ }
+
+ /**
+ * @dataProvider dataGetDeletionUpdates
+ */
+ public function testDeletionUpdates( $title, $model, $text, $expectedStuff ) {
+ $ns = $this->getDefaultWikitextNS();
+ $title = Title::newFromText( $title, $ns );
+
+ $content = ContentHandler::makeContent( $text, $title, $model );
+
+ $page = WikiPage::factory( $title );
+ $page->doEditContent( $content, '' );
+
+ $updates = $content->getDeletionUpdates( $page );
+
+ // make updates accessible by class name
+ foreach ( $updates as $update ) {
+ $class = get_class( $update );
+ $updates[$class] = $update;
+ }
+
+ if ( !$expectedStuff ) {
+ $this->assertTrue( true ); // make phpunit happy
+ return;
+ }
+
+ foreach ( $expectedStuff as $class => $fieldValues ) {
+ $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
+
+ $update = $updates[$class];
+
+ foreach ( $fieldValues as $field => $value ) {
+ $v = $update->$field; #if the field doesn't exist, just crash and burn
+ $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
+ }
+ }
+
+ $page->doDeleteArticle( '' );
+ }
+
+ public static function provideConvert() {
+ return array(
+ array( // #0
+ 'Hallo Welt',
+ CONTENT_MODEL_WIKITEXT,
+ 'lossless',
+ 'Hallo Welt'
+ ),
+ array( // #1
+ 'Hallo Welt',
+ CONTENT_MODEL_WIKITEXT,
+ 'lossless',
+ 'Hallo Welt'
+ ),
+ array( // #1
+ 'Hallo Welt',
+ CONTENT_MODEL_CSS,
+ 'lossless',
+ 'Hallo Welt'
+ ),
+ array( // #1
+ 'Hallo Welt',
+ CONTENT_MODEL_JAVASCRIPT,
+ 'lossless',
+ 'Hallo Welt'
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider provideConvert
+ */
+ public function testConvert( $text, $model, $lossy, $expectedNative ) {
+ $content = $this->newContent( $text );
+
+ $converted = $content->convert( $model, $lossy );
+
+ if ( $expectedNative === false ) {
+ $this->assertFalse( $converted, "conversion to $model was expected to fail!" );
+ } else {
+ $this->assertInstanceOf( 'Content', $converted );
+ $this->assertEquals( $expectedNative, $converted->getNativeData() );
+ }
+ }
+
+}
diff --git a/tests/phpunit/includes/content/WikitextContentHandlerTest.php b/tests/phpunit/includes/content/WikitextContentHandlerTest.php
new file mode 100644
index 00000000..0f6a968b
--- /dev/null
+++ b/tests/phpunit/includes/content/WikitextContentHandlerTest.php
@@ -0,0 +1,185 @@
+handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
+ }
+
+ public function testSerializeContent() {
+ $content = new WikitextContent( 'hello world' );
+
+ $this->assertEquals( 'hello world', $this->handler->serializeContent( $content ) );
+ $this->assertEquals( 'hello world', $this->handler->serializeContent( $content, CONTENT_FORMAT_WIKITEXT ) );
+
+ try {
+ $this->handler->serializeContent( $content, 'dummy/foo' );
+ $this->fail( "serializeContent() should have failed on unknown format" );
+ } catch ( MWException $e ) {
+ // ok, as expected
+ }
+ }
+
+ public function testUnserializeContent() {
+ $content = $this->handler->unserializeContent( 'hello world' );
+ $this->assertEquals( 'hello world', $content->getNativeData() );
+
+ $content = $this->handler->unserializeContent( 'hello world', CONTENT_FORMAT_WIKITEXT );
+ $this->assertEquals( 'hello world', $content->getNativeData() );
+
+ try {
+ $this->handler->unserializeContent( 'hello world', 'dummy/foo' );
+ $this->fail( "unserializeContent() should have failed on unknown format" );
+ } catch ( MWException $e ) {
+ // ok, as expected
+ }
+ }
+
+ public function testMakeEmptyContent() {
+ $content = $this->handler->makeEmptyContent();
+
+ $this->assertTrue( $content->isEmpty() );
+ $this->assertEquals( '', $content->getNativeData() );
+ }
+
+ public static function dataIsSupportedFormat() {
+ return array(
+ array( null, true ),
+ array( CONTENT_FORMAT_WIKITEXT, true ),
+ array( 99887766, false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataIsSupportedFormat
+ */
+ public function testIsSupportedFormat( $format, $supported ) {
+ $this->assertEquals( $supported, $this->handler->isSupportedFormat( $format ) );
+ }
+
+ public static function dataMerge3() {
+ return array(
+ array(
+ "first paragraph
+
+ second paragraph\n",
+
+ "FIRST paragraph
+
+ second paragraph\n",
+
+ "first paragraph
+
+ SECOND paragraph\n",
+
+ "FIRST paragraph
+
+ SECOND paragraph\n",
+ ),
+
+ array( "first paragraph
+ second paragraph\n",
+
+ "Bla bla\n",
+
+ "Blubberdibla\n",
+
+ false,
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataMerge3
+ */
+ public function testMerge3( $old, $mine, $yours, $expected ) {
+ $this->checkHasDiff3();
+
+ // test merge
+ $oldContent = new WikitextContent( $old );
+ $myContent = new WikitextContent( $mine );
+ $yourContent = new WikitextContent( $yours );
+
+ $merged = $this->handler->merge3( $oldContent, $myContent, $yourContent );
+
+ $this->assertEquals( $expected, $merged ? $merged->getNativeData() : $merged );
+ }
+
+ public static function dataGetAutosummary() {
+ return array(
+ array(
+ 'Hello there, world!',
+ '#REDIRECT [[Foo]]',
+ 0,
+ '/^Redirected page .*Foo/'
+ ),
+
+ array(
+ null,
+ 'Hello world!',
+ EDIT_NEW,
+ '/^Created page .*Hello/'
+ ),
+
+ array(
+ 'Hello there, world!',
+ '',
+ 0,
+ '/^Blanked/'
+ ),
+
+ array(
+ 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
+ labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
+ ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
+ 'Hello world!',
+ 0,
+ '/^Replaced .*Hello/'
+ ),
+
+ array(
+ 'foo',
+ 'bar',
+ 0,
+ '/^$/'
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetAutosummary
+ */
+ public function testGetAutosummary( $old, $new, $flags, $expected ) {
+ $oldContent = is_null( $old ) ? null : new WikitextContent( $old );
+ $newContent = is_null( $new ) ? null : new WikitextContent( $new );
+
+ $summary = $this->handler->getAutosummary( $oldContent, $newContent, $flags );
+
+ $this->assertTrue( (bool)preg_match( $expected, $summary ), "Autosummary didn't match expected pattern $expected: $summary" );
+ }
+
+ /**
+ * @todo Text case requires database, should be done by a test class in the Database group
+ */
+ /*
+ public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {}
+ */
+
+ /**
+ * @todo Text case requires database, should be done by a test class in the Database group
+ */
+ /*
+ public function testGetUndoContent( Revision $current, Revision $undo, Revision $undoafter = null ) {}
+ */
+
+}
diff --git a/tests/phpunit/includes/content/WikitextContentTest.php b/tests/phpunit/includes/content/WikitextContentTest.php
new file mode 100644
index 00000000..c9eecf7f
--- /dev/null
+++ b/tests/phpunit/includes/content/WikitextContentTest.php
@@ -0,0 +1,386 @@
+hello world\n
"
+ ),
+ // TODO: more...?
+ );
+ }
+
+ public static function dataGetSecondaryDataUpdates() {
+ return array(
+ array( "WikitextContentTest_testGetSecondaryDataUpdates_1",
+ CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
+ array(
+ 'LinksUpdate' => array(
+ 'mRecursive' => true,
+ 'mLinks' => array()
+ )
+ )
+ ),
+ array( "WikitextContentTest_testGetSecondaryDataUpdates_2",
+ CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
+ array(
+ 'LinksUpdate' => array(
+ 'mRecursive' => true,
+ 'mLinks' => array(
+ array( 'World_test_21344' => 0 )
+ )
+ )
+ )
+ ),
+ // TODO: more...?
+ );
+ }
+
+ /**
+ * @dataProvider dataGetSecondaryDataUpdates
+ * @group Database
+ */
+ public function testGetSecondaryDataUpdates( $title, $model, $text, $expectedStuff ) {
+ $ns = $this->getDefaultWikitextNS();
+ $title = Title::newFromText( $title, $ns );
+
+ $content = ContentHandler::makeContent( $text, $title, $model );
+
+ $page = WikiPage::factory( $title );
+ $page->doEditContent( $content, '' );
+
+ $updates = $content->getSecondaryDataUpdates( $title );
+
+ // make updates accessible by class name
+ foreach ( $updates as $update ) {
+ $class = get_class( $update );
+ $updates[$class] = $update;
+ }
+
+ foreach ( $expectedStuff as $class => $fieldValues ) {
+ $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
+
+ $update = $updates[$class];
+
+ foreach ( $fieldValues as $field => $value ) {
+ $v = $update->$field; #if the field doesn't exist, just crash and burn
+ $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
+ }
+ }
+
+ $page->doDeleteArticle( '' );
+ }
+
+ public static function dataGetSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ "0",
+ "Intro"
+ ),
+ array( WikitextContentTest::$sections,
+ "2",
+ "== test ==
+just a test"
+ ),
+ array( WikitextContentTest::$sections,
+ "8",
+ false
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetSection
+ */
+ public function testGetSection( $text, $sectionId, $expectedText ) {
+ $content = $this->newContent( $text );
+
+ $sectionContent = $content->getSection( $sectionId );
+ if ( is_object( $sectionContent ) ) {
+ $sectionText = $sectionContent->getNativeData();
+ } else {
+ $sectionText = $sectionContent;
+ }
+
+ $this->assertEquals( $expectedText, $sectionText );
+ }
+
+ public static function dataReplaceSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ "0",
+ "No more",
+ null,
+ trim( preg_replace( '/^Intro/sm', 'No more', WikitextContentTest::$sections ) )
+ ),
+ array( WikitextContentTest::$sections,
+ "",
+ "No more",
+ null,
+ "No more"
+ ),
+ array( WikitextContentTest::$sections,
+ "2",
+ "== TEST ==\nmore fun",
+ null,
+ trim( preg_replace( '/^== test ==.*== foo ==/sm', "== TEST ==\nmore fun\n\n== foo ==", WikitextContentTest::$sections ) )
+ ),
+ array( WikitextContentTest::$sections,
+ "8",
+ "No more",
+ null,
+ WikitextContentTest::$sections
+ ),
+ array( WikitextContentTest::$sections,
+ "new",
+ "No more",
+ "New",
+ trim( WikitextContentTest::$sections ) . "\n\n\n== New ==\n\nNo more"
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataReplaceSection
+ */
+ public function testReplaceSection( $text, $section, $with, $sectionTitle, $expected ) {
+ $content = $this->newContent( $text );
+ $c = $content->replaceSection( $section, $this->newContent( $with ), $sectionTitle );
+
+ $this->assertEquals( $expected, is_null( $c ) ? null : $c->getNativeData() );
+ }
+
+ public function testAddSectionHeader() {
+ $content = $this->newContent( 'hello world' );
+ $content = $content->addSectionHeader( 'test' );
+
+ $this->assertEquals( "== test ==\n\nhello world", $content->getNativeData() );
+ }
+
+ public static function dataPreSaveTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
+ ),
+ array( 'hello \'\'this\'\' is ~~~',
+ 'hello \'\'this\'\' is ~~~',
+ ),
+ array( // rtrim
+ " Foo \n ",
+ " Foo",
+ ),
+ );
+ }
+
+ public static function dataPreloadTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ "hello this is ~~~",
+ ),
+ array( 'hello \'\'this\'\' is foobar',
+ 'hello \'\'this\'\' is bar',
+ ),
+ );
+ }
+
+ public static function dataGetRedirectTarget() {
+ return array(
+ array( '#REDIRECT [[Test]]',
+ 'Test',
+ ),
+ array( '#REDIRECT Test',
+ null,
+ ),
+ array( '* #REDIRECT [[Test]]',
+ null,
+ ),
+ );
+ }
+
+ public static function dataGetTextForSummary() {
+ return array(
+ array( "hello\nworld.",
+ 16,
+ 'hello world.',
+ ),
+ array( 'hello world.',
+ 8,
+ 'hello...',
+ ),
+ array( '[[hello world]].',
+ 8,
+ 'hel...',
+ ),
+ );
+ }
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getRedirectChain() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectArray( $text );
+ }
+ */
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getUltimateRedirectTarget() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectRecurse( $text );
+ }
+ */
+
+ public static function dataIsCountable() {
+ return array(
+ array( '',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo, bar',
+ null,
+ 'comma',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'link',
+ false
+ ),
+ array( 'Foo [[bar]]',
+ null,
+ 'link',
+ true
+ ),
+ array( 'Foo',
+ true,
+ 'link',
+ true
+ ),
+ array( 'Foo [[bar]]',
+ false,
+ 'link',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'any',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'comma',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'link',
+ false
+ ),
+ );
+ }
+
+ public function testMatchMagicWord() {
+ $mw = MagicWord::get( "staticredirect" );
+
+ $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
+ $this->assertTrue( $content->matchMagicWord( $mw ), "should have matched magic word" );
+
+ $content = $this->newContent( "#REDIRECT [[FOO]]" );
+ $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word" );
+ }
+
+ public function testUpdateRedirect() {
+ $target = Title::newFromText( "testUpdateRedirect_target" );
+
+ // test with non-redirect page
+ $content = $this->newContent( "hello world." );
+ $newContent = $content->updateRedirect( $target );
+
+ $this->assertTrue( $content->equals( $newContent ), "content should be unchanged" );
+
+ // test with actual redirect
+ $content = $this->newContent( "#REDIRECT [[Someplace]]" );
+ $newContent = $content->updateRedirect( $target );
+
+ $this->assertFalse( $content->equals( $newContent ), "content should have changed" );
+ $this->assertTrue( $newContent->isRedirect(), "new content should be a redirect" );
+
+ $this->assertEquals( $target->getFullText(), $newContent->getRedirectTarget()->getFullText() );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataEquals() {
+ return array(
+ array( new WikitextContent( "hallo" ), null, false ),
+ array( new WikitextContent( "hallo" ), new WikitextContent( "hallo" ), true ),
+ array( new WikitextContent( "hallo" ), new JavaScriptContent( "hallo" ), false ),
+ array( new WikitextContent( "hallo" ), new TextContent( "hallo" ), false ),
+ array( new WikitextContent( "hallo" ), new WikitextContent( "HALLO" ), false ),
+ );
+ }
+
+ public static function dataGetDeletionUpdates() {
+ return array(
+ array( "WikitextContentTest_testGetSecondaryDataUpdates_1",
+ CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
+ array( 'LinksDeletionUpdate' => array() )
+ ),
+ array( "WikitextContentTest_testGetSecondaryDataUpdates_2",
+ CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
+ array( 'LinksDeletionUpdate' => array() )
+ ),
+ // @todo: more...?
+ );
+ }
+}
--
cgit v1.2.3-54-g00ecf
From 4ac9fa081a7c045f6a9f1cfc529d82423f485b2e Mon Sep 17 00:00:00 2001
From: Pierre Schmitz
Date: Sun, 8 Dec 2013 09:55:49 +0100
Subject: Update to MediaWiki 1.22.0
---
.gitreview | 2 +-
.jshintignore | 8 +-
.jshintrc | 34 +-
COPYING | 38 +
CREDITS | 18 +-
HISTORY | 335 +-
README | 143 +-
README.mediawiki | 123 +-
RELEASE-NOTES-1.21 | 443 -
RELEASE-NOTES-1.22 | 610 ++
UPGRADE | 15 -
api.php | 12 +-
composer-example.json | 11 +
composer.json | 30 -
docs/hooks.txt | 190 +-
docs/maintenance.txt | 4 +-
docs/php-memcached/Documentation | 2 +-
docs/scripts.txt | 10 -
docs/skin.txt | 68 +-
docs/title.txt | 8 +-
docs/uidesign/child-selector-emu.html | 3 +-
docs/uidesign/design.html | 7 +-
docs/uidesign/mediawiki.action.history.diff.html | 7 +-
docs/uidesign/monospace.html | 5 +-
docs/uidesign/table-layout.html | 3 +-
docs/upload.txt | 2 -
extensions/Cite/.jshintignore | 1 +
extensions/Cite/.jshintrc | 34 +
extensions/Cite/Cite.i18n.php | 1281 +--
extensions/Cite/Cite.php | 44 +-
extensions/Cite/Cite_body.php | 27 +-
extensions/Cite/SpecialCite.alias.php | 13 +-
extensions/Cite/SpecialCite.i18n.php | 584 +-
extensions/Cite/SpecialCite.php | 6 +-
extensions/Cite/citeCatTreeParserTests.txt | 27 -
extensions/Cite/citeParserTests.txt | 36 +-
extensions/Cite/modules/ext.cite.css | 16 +
extensions/Cite/modules/ext.cite.js | 38 +
extensions/Cite/modules/ext.cite.popups.js | 13 +
extensions/Cite/modules/ext.cite/ext.cite.js | 12 -
extensions/Cite/modules/ext.rtlcite.css | 6 +
.../Cite/modules/ext.rtlcite/ext.rtlcite.css | 6 -
extensions/Cite/modules/ext.specialcite.css | 14 +
.../modules/ext.specialcite/ext.specialcite.css | 14 -
extensions/ConfirmEdit/ApiFancyCaptchaReload.php | 2 +-
extensions/ConfirmEdit/Asirra.class.php | 2 +-
extensions/ConfirmEdit/Asirra.i18n.php | 315 +-
extensions/ConfirmEdit/Captcha.php | 88 +-
extensions/ConfirmEdit/ConfirmEdit.alias.php | 8 +-
extensions/ConfirmEdit/ConfirmEdit.i18n.php | 440 +-
extensions/ConfirmEdit/FancyCaptcha.i18n.php | 932 +-
extensions/ConfirmEdit/FancyCaptcha.php | 11 +
extensions/ConfirmEdit/MathCaptcha.class.php | 2 +-
extensions/ConfirmEdit/QuestyCaptcha.i18n.php | 634 +-
extensions/ConfirmEdit/ReCaptcha.i18n.php | 422 +-
extensions/ConfirmEdit/blacklist | 40 +
extensions/ConfirmEdit/captcha.py | 14 +-
.../resources/ext.confirmEdit.asirra.js | 7 +-
extensions/FluxBBAuthPlugin.php | 7 +-
extensions/Gadgets/ApiQueryGadgets.php | 4 +
extensions/Gadgets/GadgetHooks.php | 257 +
extensions/Gadgets/Gadgets.alias.php | 13 +-
extensions/Gadgets/Gadgets.i18n.php | 348 +-
extensions/Gadgets/Gadgets.php | 4 +-
extensions/Gadgets/Gadgets_body.php | 264 +-
extensions/Gadgets/README | 2 +-
extensions/ImageMap/ImageMap.i18n.php | 65 +-
extensions/ImageMap/ImageMap.php | 16 +
extensions/ImageMap/ImageMap_body.php | 6 +-
extensions/InputBox/InputBox.i18n.php | 88 +-
extensions/Interwiki/Interwiki.alias.php | 11 +
extensions/Interwiki/Interwiki.i18n.php | 355 +-
extensions/Interwiki/Interwiki.php | 13 +-
extensions/Interwiki/Interwiki_body.php | 90 +-
.../LocalisationUpdate.class.php | 16 +-
.../LocalisationUpdate/LocalisationUpdate.i18n.php | 13 +-
.../LocalisationUpdate/LocalisationUpdate.php | 6 +-
extensions/Nuke/Nuke.alias.php | 8 +-
extensions/Nuke/Nuke.i18n.php | 308 +-
.../ParserFunctions/ParserFunctions.i18n.magic.php | 190 +-
.../ParserFunctions/ParserFunctions.i18n.php | 131 +-
.../ParserFunctions/ParserFunctions_body.php | 6 +-
extensions/PdfHandler/PdfHandler.i18n.php | 53 +-
extensions/PdfHandler/PdfHandler_body.php | 2 +-
extensions/Poem/Poem.i18n.php | 14 +-
extensions/README | 2 +-
extensions/Renameuser/README | 2 +-
extensions/Renameuser/Renameuser.alias.php | 17 +-
extensions/Renameuser/Renameuser.i18n.php | 275 +-
extensions/Renameuser/RenameuserSQL.php | 2 +-
extensions/SimpleAntiSpam/SimpleAntiSpam.i18n.php | 37 +-
extensions/SpamBlacklist/README | 31 +-
extensions/SpamBlacklist/SpamBlacklist.i18n.php | 670 +-
extensions/SpamBlacklist/SpamBlacklist.php | 33 +-
extensions/SpamBlacklist/SpamBlacklistHooks.php | 125 +-
extensions/SpamBlacklist/SpamBlacklist_body.php | 90 +-
.../SyntaxHighlight_GeSHi.class.php | 48 +-
.../SyntaxHighlight_GeSHi.i18n.php | 35 +-
.../SyntaxHighlight_GeSHi.php | 5 +-
extensions/SyntaxHighlight_GeSHi/geshi/geshi.php | 2 +-
.../SyntaxHighlight_GeSHi/geshi/geshi/haskell.php | 10 +-
extensions/TitleBlacklist/TitleBlacklist.i18n.php | 137 +-
extensions/TitleBlacklist/TitleBlacklist.list.php | 20 +-
extensions/TitleBlacklist/TitleBlacklist.php | 4 +
.../tests/ApiQueryTitleBlacklistTest.php | 22 +
extensions/TitleBlacklist/tests/testSource | 1 +
extensions/Vector/.gitreview | 5 -
extensions/Vector/README | 17 -
extensions/Vector/Vector.hooks.php | 174 -
extensions/Vector/Vector.i18n.php | 2467 -----
extensions/Vector/Vector.php | 129 -
.../Vector/modules/ext.vector.collapsibleNav.css | 92 -
.../Vector/modules/ext.vector.collapsibleNav.js | 253 -
.../Vector/modules/ext.vector.collapsibleTabs.js | 29 -
.../Vector/modules/ext.vector.expandableSearch.css | 11 -
.../Vector/modules/ext.vector.expandableSearch.js | 72 -
.../Vector/modules/ext.vector.footerCleanup.css | 72 -
.../Vector/modules/ext.vector.footerCleanup.js | 31 -
.../Vector/modules/ext.vector.sectionEditLinks.css | 19 -
.../Vector/modules/ext.vector.sectionEditLinks.js | 66 -
extensions/Vector/modules/images/closed-ltr.png | Bin 143 -> 0 bytes
extensions/Vector/modules/images/closed-rtl.png | Bin 145 -> 0 bytes
extensions/Vector/modules/images/edit-faded.png | Bin 425 -> 0 bytes
extensions/Vector/modules/images/edit.png | Bin 428 -> 0 bytes
extensions/Vector/modules/images/open.png | Bin 145 -> 0 bytes
extensions/Vector/modules/images/portal-break.png | Bin 203 -> 0 bytes
.../Vector/modules/jquery.collapsibleTabs.js | 206 -
.../Vector/modules/jquery.footerCollapsibleList.js | 44 -
extensions/Vector/switchExperimentPrefs.php | 63 -
extensions/WikiEditor/.jshintignore | 2 +
extensions/WikiEditor/.jshintrc | 32 +-
extensions/WikiEditor/WikiEditor.hooks.php | 8 +-
extensions/WikiEditor/WikiEditor.i18n.php | 2031 +++--
extensions/WikiEditor/WikiEditor.php | 1 +
extensions/WikiEditor/modules/ext.wikiEditor.css | 9 +-
.../WikiEditor/modules/ext.wikiEditor.dialogs.js | 7 +-
.../WikiEditor/modules/ext.wikiEditor.highlight.js | 3 +-
extensions/WikiEditor/modules/ext.wikiEditor.js | 3 +-
.../WikiEditor/modules/ext.wikiEditor.preview.js | 3 +-
.../modules/ext.wikiEditor.previewDialog.js | 3 +-
.../WikiEditor/modules/ext.wikiEditor.publish.js | 3 +-
.../modules/ext.wikiEditor.templateEditor.js | 19 +-
.../WikiEditor/modules/ext.wikiEditor.templates.js | 19 +-
.../modules/ext.wikiEditor.tests.toolbar.js | 16 +-
.../WikiEditor/modules/ext.wikiEditor.toc.js | 3 +-
.../modules/ext.wikiEditor.toolbar.hideSig.js | 4 +-
.../WikiEditor/modules/ext.wikiEditor.toolbar.js | 3 +-
.../images/dialogs/insert-disambiguation.png | Bin 0 -> 831 bytes
.../WikiEditor/modules/jquery.wikiEditor.css | 3 -
.../modules/jquery.wikiEditor.dialogs.config.css | 8 +-
.../modules/jquery.wikiEditor.dialogs.config.js | 124 +-
.../modules/jquery.wikiEditor.dialogs.js | 34 +-
.../modules/jquery.wikiEditor.highlight.js | 41 +-
.../WikiEditor/modules/jquery.wikiEditor.iframe.js | 202 +-
extensions/WikiEditor/modules/jquery.wikiEditor.js | 44 +-
.../modules/jquery.wikiEditor.preview.js | 15 +-
.../modules/jquery.wikiEditor.previewDialog.js | 15 +-
.../modules/jquery.wikiEditor.publish.js | 13 +-
.../modules/jquery.wikiEditor.templateEditor.js | 137 +-
.../modules/jquery.wikiEditor.templates.js | 51 +-
.../WikiEditor/modules/jquery.wikiEditor.toc.js | 136 +-
.../modules/jquery.wikiEditor.toolbar.config.js | 10 +-
.../modules/jquery.wikiEditor.toolbar.js | 98 +-
img_auth.php | 8 +-
includes/Action.php | 57 +-
includes/AjaxDispatcher.php | 10 +-
includes/AjaxResponse.php | 2 +-
includes/ArrayUtils.php | 2 +-
includes/Article.php | 147 +-
includes/AuthPlugin.php | 13 +
includes/AutoLoader.php | 147 +-
includes/Autopromote.php | 5 +-
includes/Block.php | 308 +-
includes/CallableUpdate.php | 30 +
includes/Category.php | 3 +-
includes/CategoryPage.php | 8 +-
includes/CategoryViewer.php | 60 +-
includes/Cdb.php | 4 +-
includes/Cdb_PHP.php | 16 +-
includes/ChangeTags.php | 75 +-
includes/ChangesFeed.php | 37 +-
includes/ChangesList.php | 1304 ---
includes/Collation.php | 22 +-
includes/ConfEditor.php | 55 +-
includes/Cookie.php | 7 +-
includes/CryptRand.php | 497 -
includes/DataUpdate.php | 4 +-
includes/DefaultSettings.php | 1309 ++-
includes/DeferredUpdates.php | 12 +-
includes/Defines.php | 11 +-
includes/EditPage.php | 290 +-
includes/Exception.php | 275 +-
includes/Export.php | 33 +-
includes/ExternalEdit.php | 132 -
includes/ExternalUser.php | 309 -
includes/Fallback.php | 28 +-
includes/Feed.php | 26 +-
includes/FeedUtils.php | 27 +-
includes/FileDeleteForm.php | 36 +-
includes/ForkController.php | 4 +-
includes/FormOptions.php | 163 +-
includes/GitInfo.php | 39 +-
includes/GlobalFunctions.php | 675 +-
includes/HTMLForm.php | 541 +-
includes/HashRing.php | 142 +
includes/HistoryBlob.php | 35 +-
includes/Hooks.php | 282 +-
includes/Html.php | 179 +-
includes/HtmlFormatter.php | 356 +
includes/HttpFunctions.php | 118 +-
includes/IP.php | 32 +-
includes/ImageGallery.php | 416 -
includes/ImagePage.php | 49 +-
includes/ImageQueryPage.php | 25 +-
includes/Import.php | 135 +-
includes/Init.php | 150 +-
includes/Licenses.php | 2 +-
includes/LinkFilter.php | 4 +-
includes/Linker.php | 103 +-
includes/LinksUpdate.php | 154 +-
includes/MWCryptRand.php | 497 +
includes/MWFunction.php | 34 +-
includes/MagicWord.php | 23 +-
includes/MappedIterator.php | 88 +-
includes/Message.php | 212 +-
includes/Metadata.php | 28 +-
includes/MimeMagic.php | 88 +-
includes/Namespace.php | 6 +-
includes/OutputHandler.php | 80 +-
includes/OutputPage.php | 476 +-
includes/PHPVersionError.php | 12 +-
includes/PageQueryPage.php | 5 +-
includes/Pager.php | 140 +-
includes/PathRouter.php | 10 +-
includes/PoolCounter.php | 221 +-
includes/Preferences.php | 541 +-
includes/PrefixSearch.php | 40 +-
includes/ProtectionForm.php | 110 +-
includes/ProxyTools.php | 40 -
includes/QueryPage.php | 92 +-
includes/RecentChange.php | 840 --
includes/Revision.php | 265 +-
includes/RevisionList.php | 5 +-
includes/Sanitizer.php | 361 +-
includes/ScopedCallback.php | 41 +-
includes/SeleniumWebSettings.php | 221 -
includes/Setup.php | 153 +-
includes/SiteConfiguration.php | 58 +-
includes/SiteStats.php | 126 +-
includes/Skin.php | 202 +-
includes/SkinLegacy.php | 882 --
includes/SkinTemplate.php | 346 +-
includes/SpecialPage.php | 160 +-
includes/SpecialPageFactory.php | 15 +-
includes/SqlDataUpdate.php | 2 +-
includes/StatCounter.php | 150 +
includes/Status.php | 91 +-
includes/StreamFile.php | 1 +
includes/StringUtils.php | 135 +-
includes/StubObject.php | 25 +-
includes/Timestamp.php | 267 +-
includes/Title.php | 528 +-
includes/UIDGenerator.php | 35 +-
includes/User.php | 1151 ++-
includes/UserArray.php | 2 +-
includes/UserMailer.php | 53 +-
includes/UserRightsProxy.php | 10 +-
includes/WatchedItem.php | 65 +-
includes/WebRequest.php | 187 +-
includes/WebResponse.php | 121 +-
includes/WebStart.php | 52 +-
includes/Wiki.php | 145 +-
includes/WikiError.php | 2 +-
includes/WikiFilePage.php | 4 +
includes/WikiMap.php | 20 +-
includes/WikiPage.php | 632 +-
includes/Xml.php | 221 +-
includes/XmlTypeCheck.php | 86 +-
includes/ZhClient.php | 6 +-
includes/ZipDirectoryReader.php | 2 +-
includes/actions/CreditsAction.php | 15 +-
includes/actions/EditAction.php | 14 +-
includes/actions/HistoryAction.php | 51 +-
includes/actions/InfoAction.php | 69 +-
includes/actions/PurgeAction.php | 4 +-
includes/actions/RawAction.php | 29 +-
includes/actions/WatchAction.php | 62 +-
includes/api/ApiBase.php | 119 +-
includes/api/ApiBlock.php | 2 +-
includes/api/ApiComparePages.php | 8 +-
includes/api/ApiCreateAccount.php | 52 +-
includes/api/ApiDelete.php | 3 +-
includes/api/ApiEditPage.php | 59 +-
includes/api/ApiExpandTemplates.php | 4 +-
includes/api/ApiFeedContributions.php | 15 +-
includes/api/ApiFeedWatchlist.php | 90 +-
includes/api/ApiFormatBase.php | 8 +-
includes/api/ApiFormatJson.php | 24 +-
includes/api/ApiFormatWddx.php | 75 +-
includes/api/ApiFormatXml.php | 137 +-
includes/api/ApiImageRotate.php | 32 +-
includes/api/ApiImport.php | 6 +-
includes/api/ApiMain.php | 36 +-
includes/api/ApiMove.php | 4 +-
includes/api/ApiOpenSearch.php | 21 +-
includes/api/ApiOptions.php | 8 +-
includes/api/ApiPageSet.php | 18 +-
includes/api/ApiParamInfo.php | 6 +-
includes/api/ApiParse.php | 157 +-
includes/api/ApiPatrol.php | 46 +-
includes/api/ApiProtect.php | 3 +-
includes/api/ApiPurge.php | 29 +-
includes/api/ApiQuery.php | 10 +-
includes/api/ApiQueryAllCategories.php | 4 +-
includes/api/ApiQueryAllImages.php | 4 +-
includes/api/ApiQueryAllLinks.php | 116 +-
includes/api/ApiQueryAllMessages.php | 2 +-
includes/api/ApiQueryAllPages.php | 7 +-
includes/api/ApiQueryAllUsers.php | 4 +-
includes/api/ApiQueryBacklinks.php | 15 +-
includes/api/ApiQueryBase.php | 4 +-
includes/api/ApiQueryBlocks.php | 61 +-
includes/api/ApiQueryCategories.php | 5 +-
includes/api/ApiQueryCategoryMembers.php | 6 +-
includes/api/ApiQueryDeletedrevs.php | 6 +-
includes/api/ApiQueryDuplicateFiles.php | 23 +-
includes/api/ApiQueryExtLinksUsage.php | 6 +-
includes/api/ApiQueryExternalLinks.php | 8 +-
includes/api/ApiQueryFileRepoInfo.php | 115 +
includes/api/ApiQueryFilearchive.php | 8 +-
includes/api/ApiQueryIWBacklinks.php | 4 +
includes/api/ApiQueryIWLinks.php | 13 +-
includes/api/ApiQueryImageInfo.php | 80 +-
includes/api/ApiQueryInfo.php | 20 +-
includes/api/ApiQueryLangBacklinks.php | 9 +-
includes/api/ApiQueryLangLinks.php | 17 +-
includes/api/ApiQueryLogEvents.php | 24 +-
includes/api/ApiQueryORM.php | 4 +-
includes/api/ApiQueryPagesWithProp.php | 2 +-
includes/api/ApiQueryProtectedTitles.php | 2 +-
includes/api/ApiQueryQueryPage.php | 19 +-
includes/api/ApiQueryRandom.php | 4 +
includes/api/ApiQueryRecentChanges.php | 43 +-
includes/api/ApiQueryRevisions.php | 29 +-
includes/api/ApiQuerySearch.php | 39 +-
includes/api/ApiQuerySiteinfo.php | 62 +-
includes/api/ApiQueryTags.php | 7 +-
includes/api/ApiQueryUserContributions.php | 21 +-
includes/api/ApiQueryUserInfo.php | 20 +-
includes/api/ApiQueryUsers.php | 6 +-
includes/api/ApiQueryWatchlist.php | 95 +-
includes/api/ApiQueryWatchlistRaw.php | 4 +
includes/api/ApiRsd.php | 2 +-
includes/api/ApiSetNotificationTimestamp.php | 7 +-
includes/api/ApiUpload.php | 84 +-
includes/api/ApiUserrights.php | 7 +-
includes/api/ApiWatch.php | 11 +-
includes/cache/BacklinkCache.php | 134 +-
includes/cache/CacheDependency.php | 2 +-
includes/cache/FileCacheBase.php | 6 +-
includes/cache/GenderCache.php | 14 +-
includes/cache/HTMLCacheUpdate.php | 11 +-
includes/cache/HTMLFileCache.php | 4 +-
includes/cache/LinkBatch.php | 4 +-
includes/cache/LinkCache.php | 68 +-
includes/cache/LocalisationCache.php | 96 +-
includes/cache/MessageCache.php | 729 +-
includes/cache/ResourceFileCache.php | 2 +-
includes/cache/SquidUpdate.php | 197 +-
includes/cache/UserCache.php | 13 +
includes/changes/ChangesList.php | 552 ++
includes/changes/EnhancedChangesList.php | 662 ++
includes/changes/OldChangesList.php | 130 +
includes/changes/RCCacheEntry.php | 35 +
includes/changes/RecentChange.php | 846 ++
includes/clientpool/RedisConnectionPool.php | 90 +-
includes/content/Content.php | 14 +-
includes/content/ContentHandler.php | 19 +-
includes/content/CssContent.php | 2 +-
includes/content/JavaScriptContent.php | 2 +-
includes/content/TextContent.php | 2 +-
includes/content/WikitextContent.php | 3 +-
includes/content/WikitextContentHandler.php | 19 +-
includes/context/ContextSource.php | 2 +-
includes/context/DerivativeContext.php | 25 +-
includes/context/IContextSource.php | 2 +-
includes/context/RequestContext.php | 19 +-
includes/db/ChronologyProtector.php | 106 +
includes/db/CloneDatabase.php | 18 +-
includes/db/Database.php | 517 +-
includes/db/DatabaseError.php | 202 +-
includes/db/DatabaseMssql.php | 190 +-
includes/db/DatabaseMysql.php | 933 +-
includes/db/DatabaseMysqlBase.php | 1154 +++
includes/db/DatabaseMysqli.php | 194 +
includes/db/DatabaseOracle.php | 92 +-
includes/db/DatabasePostgres.php | 98 +-
includes/db/DatabaseSqlite.php | 49 +-
includes/db/DatabaseUtility.php | 3 +-
includes/db/IORMRow.php | 24 +-
includes/db/LBFactory.php | 94 +-
includes/db/LBFactory_Multi.php | 6 +-
includes/db/LoadBalancer.php | 104 +-
includes/db/LoadMonitor.php | 27 +-
includes/db/ORMRow.php | 182 +-
includes/db/ORMTable.php | 211 +-
includes/debug/Debug.php | 74 +-
includes/diff/DairikiDiff.php | 40 +-
includes/diff/DifferenceEngine.php | 205 +-
includes/extauth/Hardcoded.php | 84 -
includes/extauth/MediaWiki.php | 168 -
includes/extauth/vB.php | 146 -
includes/externalstore/ExternalStore.php | 57 +-
includes/externalstore/ExternalStoreDB.php | 142 +-
includes/externalstore/ExternalStoreMedium.php | 19 +
includes/externalstore/ExternalStoreMwstore.php | 23 +
includes/filebackend/FSFile.php | 29 +-
includes/filebackend/FSFileBackend.php | 117 +-
includes/filebackend/FileBackend.php | 143 +-
includes/filebackend/FileBackendGroup.php | 28 +-
includes/filebackend/FileBackendMultiWrite.php | 179 +-
includes/filebackend/FileBackendStore.php | 576 +-
includes/filebackend/FileOp.php | 193 +-
includes/filebackend/FileOpBatch.php | 6 +-
includes/filebackend/README | 2 +-
includes/filebackend/SwiftFileBackend.php | 262 +-
includes/filebackend/TempFSFile.php | 6 +-
includes/filebackend/filejournal/DBFileJournal.php | 10 +-
includes/filebackend/lockmanager/DBLockManager.php | 37 +-
includes/filebackend/lockmanager/LockManager.php | 125 +-
.../filebackend/lockmanager/LockManagerGroup.php | 4 +-
.../filebackend/lockmanager/MemcLockManager.php | 41 +-
.../filebackend/lockmanager/QuorumLockManager.php | 140 +-
.../filebackend/lockmanager/RedisLockManager.php | 288 +
includes/filebackend/lockmanager/ScopedLock.php | 44 +-
includes/filerepo/FSRepo.php | 14 +-
includes/filerepo/FileRepo.php | 108 +-
includes/filerepo/ForeignAPIRepo.php | 226 +-
includes/filerepo/ForeignDBRepo.php | 5 +-
includes/filerepo/LocalRepo.php | 42 +-
includes/filerepo/RepoGroup.php | 12 +-
includes/filerepo/file/ArchivedFile.php | 23 +-
includes/filerepo/file/File.php | 37 +-
includes/filerepo/file/ForeignAPIFile.php | 49 +-
includes/filerepo/file/ForeignDBFile.php | 5 +-
includes/filerepo/file/LocalFile.php | 234 +-
includes/filerepo/file/OldLocalFile.php | 3 +-
includes/gallery/ImageGalleryBase.php | 331 +
includes/gallery/NolinesImageGallery.php | 38 +
includes/gallery/PackedImageGallery.php | 105 +
includes/gallery/PackedOverlayImageGallery.php | 60 +
includes/gallery/TraditionalImageGallery.php | 328 +
includes/installer/CliInstaller.php | 9 +-
includes/installer/DatabaseInstaller.php | 64 +-
includes/installer/DatabaseUpdater.php | 156 +-
includes/installer/InstallDocFormatter.php | 12 +-
includes/installer/Installer.i18n.php | 1959 ++--
includes/installer/Installer.php | 298 +-
includes/installer/LocalSettingsGenerator.php | 59 +-
includes/installer/MysqlInstaller.php | 135 +-
includes/installer/MysqlUpdater.php | 516 +-
includes/installer/OracleInstaller.php | 61 +-
includes/installer/OracleUpdater.php | 72 +-
includes/installer/PhpBugTests.php | 2 +
includes/installer/PostgresInstaller.php | 62 +-
includes/installer/PostgresUpdater.php | 575 +-
includes/installer/SqliteInstaller.php | 38 +-
includes/installer/SqliteUpdater.php | 121 +-
includes/installer/WebInstaller.php | 208 +-
includes/installer/WebInstallerOutput.php | 112 +-
includes/installer/WebInstallerPage.php | 259 +-
includes/job/Job.php | 56 +-
includes/job/JobQueue.php | 355 +-
includes/job/JobQueueAggregator.php | 139 -
includes/job/JobQueueAggregatorMemc.php | 117 -
includes/job/JobQueueAggregatorRedis.php | 165 -
includes/job/JobQueueDB.php | 688 +-
includes/job/JobQueueFederated.php | 473 +
includes/job/JobQueueGroup.php | 90 +-
includes/job/JobQueueRedis.php | 856 ++
includes/job/aggregator/JobQueueAggregator.php | 156 +
includes/job/aggregator/JobQueueAggregatorMemc.php | 124 +
.../job/aggregator/JobQueueAggregatorRedis.php | 193 +
includes/job/jobs/AssembleUploadChunksJob.php | 19 +-
includes/job/jobs/DoubleRedirectJob.php | 29 +-
includes/job/jobs/DuplicateJob.php | 2 +-
includes/job/jobs/EnotifNotifyJob.php | 2 +-
includes/job/jobs/HTMLCacheUpdateJob.php | 25 +-
includes/job/jobs/NullJob.php | 16 +
includes/job/jobs/PublishStashedFileJob.php | 22 +-
includes/job/jobs/RefreshLinksJob.php | 28 +-
includes/job/jobs/UploadFromUrlJob.php | 7 +-
includes/json/FormatJson.php | 217 +-
includes/json/Services_JSON.php | 882 --
includes/libs/CSSJanus.php | 72 +-
includes/libs/CSSMin.php | 47 +-
includes/libs/HttpStatus.php | 2 +-
includes/libs/lessc.inc.php | 3742 ++++++++
includes/limit.sh | 9 +-
includes/logging/DeleteLogFormatter.php | 196 +
includes/logging/LogEntry.php | 55 +-
includes/logging/LogEventsList.php | 82 +-
includes/logging/LogFormatter.php | 412 +-
includes/logging/LogPage.php | 62 +-
includes/logging/LogPager.php | 77 +-
includes/logging/MoveLogFormatter.php | 82 +
includes/logging/NewUsersLogFormatter.php | 65 +
includes/logging/PatrolLog.php | 7 +
includes/logging/PatrolLogFormatter.php | 63 +
includes/logging/RightsLogFormatter.php | 112 +
includes/media/BMP.php | 6 +-
includes/media/Bitmap.php | 47 +-
includes/media/BitmapMetadataHandler.php | 24 +-
includes/media/DjVu.php | 21 +-
includes/media/DjVuImage.php | 44 +-
includes/media/Exif.php | 76 +-
includes/media/ExifBitmap.php | 8 +-
includes/media/FormatMetadata.php | 101 +-
includes/media/GIF.php | 8 +-
includes/media/GIFMetadataExtractor.php | 46 +-
includes/media/IPTC.php | 8 +-
includes/media/ImageHandler.php | 23 +-
includes/media/Jpeg.php | 20 +-
includes/media/JpegMetadataExtractor.php | 22 +-
includes/media/MediaHandler.php | 149 +-
includes/media/MediaTransformOutput.php | 53 +-
includes/media/PNG.php | 13 +-
includes/media/PNGMetadataExtractor.php | 30 +-
includes/media/SVG.php | 92 +-
includes/media/SVGMetadataExtractor.php | 64 +-
includes/media/Tiff.php | 2 +-
includes/media/XCF.php | 6 +-
includes/media/XMP.php | 26 +-
includes/media/XMPInfo.php | 6 +-
includes/media/XMPValidate.php | 12 +-
includes/mime.info | 4 +
includes/mime.types | 5 +
includes/normal/README | 10 +-
includes/normal/RandomTest.php | 6 +-
includes/normal/UtfNormal.php | 4 +-
includes/normal/UtfNormalTest.php | 8 +-
includes/normal/UtfNormalTest2.php | 2 +-
includes/normal/UtfNormalUtil.php | 8 +-
includes/objectcache/BagOStuff.php | 8 +-
includes/objectcache/MemcachedBagOStuff.php | 2 +-
includes/objectcache/MemcachedClient.php | 24 +-
includes/objectcache/MemcachedPeclBagOStuff.php | 14 +-
includes/objectcache/MultiWriteBagOStuff.php | 2 +-
includes/objectcache/ObjectCache.php | 14 +-
includes/objectcache/ObjectCacheSessionHandler.php | 2 +-
includes/objectcache/RedisBagOStuff.php | 40 +-
includes/objectcache/SqlBagOStuff.php | 22 +-
includes/parser/CacheTime.php | 2 +-
includes/parser/CoreLinkFunctions.php | 92 -
includes/parser/CoreParserFunctions.php | 197 +-
includes/parser/CoreTagHooks.php | 2 +-
includes/parser/DateFormatter.php | 24 +-
includes/parser/LinkHolderArray.php | 216 +-
includes/parser/Parser.php | 848 +-
includes/parser/ParserCache.php | 20 +-
includes/parser/ParserOptions.php | 21 +-
includes/parser/ParserOutput.php | 111 +-
includes/parser/Parser_DiffTest.php | 2 +-
includes/parser/Parser_LinkHooks.php | 326 -
includes/parser/Preprocessor_DOM.php | 99 +-
includes/parser/Preprocessor_Hash.php | 61 +-
includes/parser/Tidy.php | 11 +-
includes/profiler/Profiler.php | 264 +-
includes/profiler/ProfilerSimple.php | 5 +-
includes/profiler/ProfilerSimpleText.php | 12 +-
includes/profiler/ProfilerSimpleTrace.php | 2 +
includes/profiler/ProfilerSimpleUDP.php | 12 +-
includes/profiler/ProfilerStub.php | 2 +
includes/rcfeed/IRCColourfulRCFeedFormatter.php | 99 +
includes/rcfeed/JSONRCFeedFormatter.php | 90 +
includes/rcfeed/RCFeedEngine.php | 12 +
includes/rcfeed/RCFeedFormatter.php | 13 +
includes/rcfeed/RedisPubSubFeedEngine.php | 41 +
includes/rcfeed/UDPRCFeedEngine.php | 10 +
includes/resourceloader/ResourceLoader.php | 181 +-
includes/resourceloader/ResourceLoaderContext.php | 2 +-
.../resourceloader/ResourceLoaderFileModule.php | 176 +-
.../resourceloader/ResourceLoaderLESSFunctions.php | 67 +
.../ResourceLoaderLanguageDataModule.php | 31 +-
includes/resourceloader/ResourceLoaderModule.php | 102 +-
.../resourceloader/ResourceLoaderSiteModule.php | 23 +-
.../resourceloader/ResourceLoaderStartUpModule.php | 10 +-
.../ResourceLoaderUserCSSPrefsModule.php | 67 +-
.../ResourceLoaderUserGroupsModule.php | 15 +-
.../resourceloader/ResourceLoaderUserModule.php | 21 +-
.../ResourceLoaderUserOptionsModule.php | 4 +-
.../ResourceLoaderUserTokensModule.php | 9 +-
.../resourceloader/ResourceLoaderWikiModule.php | 4 +-
includes/revisiondelete/RevisionDelete.php | 86 +-
.../revisiondelete/RevisionDeleteAbstracts.php | 50 +-
includes/revisiondelete/RevisionDeleteUser.php | 2 +-
includes/revisiondelete/RevisionDeleter.php | 149 +-
includes/search/SearchEngine.php | 169 +-
includes/search/SearchMssql.php | 6 +-
includes/search/SearchMySQL.php | 66 +-
includes/search/SearchOracle.php | 86 +-
includes/search/SearchPostgres.php | 43 +-
includes/search/SearchSqlite.php | 39 +-
includes/search/SearchUpdate.php | 123 +-
includes/site/MediaWikiSite.php | 8 +-
includes/site/SiteSQLStore.php | 52 +-
includes/specials/SpecialActiveusers.php | 74 +-
includes/specials/SpecialAllmessages.php | 143 +-
includes/specials/SpecialAllpages.php | 174 +-
includes/specials/SpecialAncientpages.php | 22 +-
includes/specials/SpecialBlankpage.php | 1 +
includes/specials/SpecialBlock.php | 49 +-
includes/specials/SpecialBlockList.php | 52 +-
includes/specials/SpecialBlockme.php | 66 -
includes/specials/SpecialBooksources.php | 49 +-
includes/specials/SpecialBrokenRedirects.php | 12 +-
includes/specials/SpecialCachedPage.php | 1 -
includes/specials/SpecialCategories.php | 38 +-
includes/specials/SpecialChangeEmail.php | 67 +-
includes/specials/SpecialChangePassword.php | 134 +-
includes/specials/SpecialComparePages.php | 11 +-
includes/specials/SpecialConfirmemail.php | 101 +-
includes/specials/SpecialContributions.php | 380 +-
includes/specials/SpecialDeadendpages.php | 25 +-
includes/specials/SpecialDeletedContributions.php | 179 +-
includes/specials/SpecialDisambiguations.php | 165 -
includes/specials/SpecialDoubleRedirects.php | 31 +-
includes/specials/SpecialEditWatchlist.php | 174 +-
includes/specials/SpecialEmailuser.php | 82 +-
includes/specials/SpecialExport.php | 143 +-
includes/specials/SpecialFewestrevisions.php | 53 +-
includes/specials/SpecialFileDuplicateSearch.php | 51 +-
includes/specials/SpecialFilepath.php | 62 +-
includes/specials/SpecialImport.php | 245 +-
includes/specials/SpecialJavaScriptTest.php | 56 +-
includes/specials/SpecialLinkSearch.php | 71 +-
includes/specials/SpecialListfiles.php | 301 +-
includes/specials/SpecialListgrouprights.php | 51 +-
includes/specials/SpecialListredirects.php | 34 +-
includes/specials/SpecialListusers.php | 113 +-
includes/specials/SpecialLog.php | 79 +-
includes/specials/SpecialLonelypages.php | 48 +-
includes/specials/SpecialLongpages.php | 1 -
includes/specials/SpecialMIMEsearch.php | 97 +-
includes/specials/SpecialMergeHistory.php | 118 +-
includes/specials/SpecialMostcategories.php | 48 +-
includes/specials/SpecialMostimages.php | 19 +-
includes/specials/SpecialMostinterwikis.php | 32 +-
includes/specials/SpecialMostlinked.php | 69 +-
includes/specials/SpecialMostlinkedcategories.php | 32 +-
includes/specials/SpecialMostlinkedtemplates.php | 39 +-
includes/specials/SpecialMovepage.php | 263 +-
includes/specials/SpecialNewimages.php | 40 +-
includes/specials/SpecialNewpages.php | 156 +-
includes/specials/SpecialPagesWithProp.php | 32 +-
includes/specials/SpecialPasswordReset.php | 94 +-
includes/specials/SpecialPopularpages.php | 34 +-
includes/specials/SpecialPreferences.php | 26 +-
includes/specials/SpecialPrefixindex.php | 147 +-
includes/specials/SpecialProtectedpages.php | 169 +-
includes/specials/SpecialProtectedtitles.php | 80 +-
includes/specials/SpecialRandomInCategory.php | 291 +
includes/specials/SpecialRandompage.php | 31 +-
includes/specials/SpecialRandomredirect.php | 1 -
includes/specials/SpecialRecentchanges.php | 410 +-
includes/specials/SpecialRecentchangeslinked.php | 63 +-
includes/specials/SpecialRedirect.php | 235 +
includes/specials/SpecialResetTokens.php | 145 +
includes/specials/SpecialRevisiondelete.php | 170 +-
includes/specials/SpecialSearch.php | 198 +-
includes/specials/SpecialShortpages.php | 18 +-
includes/specials/SpecialSpecialpages.php | 17 +-
includes/specials/SpecialStatistics.php | 37 +-
includes/specials/SpecialTags.php | 69 +-
includes/specials/SpecialUnblock.php | 22 +-
.../specials/SpecialUncategorizedcategories.php | 6 +-
includes/specials/SpecialUncategorizedimages.php | 2 +-
includes/specials/SpecialUncategorizedpages.php | 13 +-
includes/specials/SpecialUndelete.php | 680 +-
includes/specials/SpecialUnusedcategories.php | 15 +-
includes/specials/SpecialUnusedimages.php | 16 +-
includes/specials/SpecialUnusedtemplates.php | 16 +-
includes/specials/SpecialUnwatchedpages.php | 16 +-
includes/specials/SpecialUpload.php | 126 +-
includes/specials/SpecialUploadStash.php | 29 +-
includes/specials/SpecialUserlogin.php | 369 +-
includes/specials/SpecialUserrights.php | 162 +-
includes/specials/SpecialVersion.php | 203 +-
includes/specials/SpecialWantedcategories.php | 18 +-
includes/specials/SpecialWantedfiles.php | 16 +-
includes/specials/SpecialWantedtemplates.php | 14 +-
includes/specials/SpecialWatchlist.php | 192 +-
includes/specials/SpecialWhatlinkshere.php | 69 +-
includes/specials/SpecialWithoutinterwiki.php | 28 +-
includes/templates/NoLocalSettings.php | 14 +-
includes/templates/Usercreate.php | 445 +-
includes/templates/Userlogin.php | 278 +-
includes/tidy.conf | 2 +-
includes/upload/UploadBase.php | 202 +-
includes/upload/UploadFromChunks.php | 26 +-
includes/upload/UploadFromFile.php | 2 +-
includes/upload/UploadFromStash.php | 6 +-
includes/upload/UploadFromUrl.php | 49 +-
includes/upload/UploadStash.php | 29 +-
index.php | 16 +-
languages/Language.php | 500 +-
languages/LanguageConverter.php | 84 +-
languages/Names.php | 46 +-
languages/classes/LanguageAz.php | 2 +-
languages/classes/LanguageBe_tarask.php | 12 +-
languages/classes/LanguageCu.php | 27 +-
languages/classes/LanguageEo.php | 70 +-
languages/classes/LanguageEs.php | 42 +
languages/classes/LanguageFi.php | 6 +-
languages/classes/LanguageGa.php | 21 +-
languages/classes/LanguageGan.php | 47 +-
languages/classes/LanguageGv.php | 4 +-
languages/classes/LanguageHi.php | 44 -
languages/classes/LanguageHr.php | 8 +-
languages/classes/LanguageHy.php | 12 +-
languages/classes/LanguageIu.php | 20 +-
languages/classes/LanguageKaa.php | 6 +-
languages/classes/LanguageKk.php | 52 +-
languages/classes/LanguageKk_cyrl.php | 62 +-
languages/classes/LanguageKsh.php | 20 +-
languages/classes/LanguageKu.php | 64 +-
languages/classes/LanguageLa.php | 90 +-
languages/classes/LanguageMg.php | 44 -
languages/classes/LanguageMk.php | 49 -
languages/classes/LanguageMt.php | 48 -
languages/classes/LanguageNso.php | 44 -
languages/classes/LanguageOs.php | 38 +-
languages/classes/LanguagePl.php | 25 -
languages/classes/LanguageSh.php | 58 -
languages/classes/LanguageShi.php | 36 +-
languages/classes/LanguageSk.php | 49 -
languages/classes/LanguageSl.php | 27 +-
languages/classes/LanguageSr.php | 40 +-
languages/classes/LanguageSr_ec.php | 8 +-
languages/classes/LanguageSr_el.php | 8 +-
languages/classes/LanguageTg.php | 4 +-
languages/classes/LanguageTi.php | 44 -
languages/classes/LanguageTl.php | 44 -
languages/classes/LanguageTr.php | 4 +-
languages/classes/LanguageTyv.php | 2 +-
languages/classes/LanguageUk.php | 37 +-
languages/classes/LanguageUz.php | 10 +-
languages/classes/LanguageWa.php | 42 +-
languages/classes/LanguageZh.php | 58 +-
languages/classes/LanguageZh_hans.php | 2 +
languages/data/plurals-mediawiki.xml | 7 +
languages/data/plurals.xml | 2 +-
languages/messages/MessagesAce.php | 49 +-
languages/messages/MessagesAeb.php | 26 +-
languages/messages/MessagesAf.php | 234 +-
languages/messages/MessagesAln.php | 43 +-
languages/messages/MessagesAm.php | 66 +-
languages/messages/MessagesAn.php | 86 +-
languages/messages/MessagesAng.php | 51 +-
languages/messages/MessagesAr.php | 260 +-
languages/messages/MessagesArc.php | 48 +-
languages/messages/MessagesArn.php | 10 +-
languages/messages/MessagesAry.php | 62 +-
languages/messages/MessagesArz.php | 81 +-
languages/messages/MessagesAs.php | 171 +-
languages/messages/MessagesAst.php | 288 +-
languages/messages/MessagesAvk.php | 49 +-
languages/messages/MessagesAy.php | 1 +
languages/messages/MessagesAz.php | 83 +-
languages/messages/MessagesAzb.php | 173 +-
languages/messages/MessagesBa.php | 260 +-
languages/messages/MessagesBar.php | 36 +-
languages/messages/MessagesBbc.php | 12 +
languages/messages/MessagesBbc_latn.php | 734 ++
languages/messages/MessagesBcc.php | 64 +-
languages/messages/MessagesBcl.php | 250 +-
languages/messages/MessagesBe.php | 98 +-
languages/messages/MessagesBe_tarask.php | 268 +-
languages/messages/MessagesBg.php | 184 +-
languages/messages/MessagesBho.php | 86 +-
languages/messages/MessagesBi.php | 23 +-
languages/messages/MessagesBjn.php | 64 +-
languages/messages/MessagesBn.php | 255 +-
languages/messages/MessagesBo.php | 5 +-
languages/messages/MessagesBpy.php | 42 +-
languages/messages/MessagesBqi.php | 2 -
languages/messages/MessagesBr.php | 239 +-
languages/messages/MessagesBrh.php | 2 -
languages/messages/MessagesBs.php | 211 +-
languages/messages/MessagesBug.php | 3 -
languages/messages/MessagesBxr.php | 72 +
languages/messages/MessagesCa.php | 257 +-
languages/messages/MessagesCbk_zam.php | 2 +-
languages/messages/MessagesCdo.php | 71 +-
languages/messages/MessagesCe.php | 266 +-
languages/messages/MessagesCeb.php | 29 +-
languages/messages/MessagesCh.php | 16 +-
languages/messages/MessagesChr.php | 1 +
languages/messages/MessagesCkb.php | 150 +-
languages/messages/MessagesCo.php | 5 +-
languages/messages/MessagesCps.php | 19 +-
languages/messages/MessagesCrh_cyrl.php | 49 +-
languages/messages/MessagesCrh_latn.php | 49 +-
languages/messages/MessagesCs.php | 269 +-
languages/messages/MessagesCsb.php | 17 +-
languages/messages/MessagesCu.php | 57 +-
languages/messages/MessagesCv.php | 35 +-
languages/messages/MessagesCy.php | 269 +-
languages/messages/MessagesDa.php | 306 +-
languages/messages/MessagesDe.php | 278 +-
languages/messages/MessagesDe_at.php | 12 +-
languages/messages/MessagesDe_ch.php | 72 +-
languages/messages/MessagesDe_formal.php | 73 +-
languages/messages/MessagesDiq.php | 384 +-
languages/messages/MessagesDsb.php | 91 +-
languages/messages/MessagesDtp.php | 35 +-
languages/messages/MessagesDv.php | 86 +-
languages/messages/MessagesEe.php | 3 -
languages/messages/MessagesEgl.php | 14 +-
languages/messages/MessagesEl.php | 238 +-
languages/messages/MessagesEml.php | 6 +-
languages/messages/MessagesEn.php | 690 +-
languages/messages/MessagesEn_ca.php | 33 +-
languages/messages/MessagesEn_gb.php | 56 +-
languages/messages/MessagesEo.php | 184 +-
languages/messages/MessagesEs.php | 278 +-
languages/messages/MessagesEt.php | 270 +-
languages/messages/MessagesEu.php | 147 +-
languages/messages/MessagesExt.php | 55 +-
languages/messages/MessagesFa.php | 262 +-
languages/messages/MessagesFi.php | 261 +-
languages/messages/MessagesFit.php | 1 -
languages/messages/MessagesFj.php | 2 +-
languages/messages/MessagesFo.php | 199 +-
languages/messages/MessagesFr.php | 274 +-
languages/messages/MessagesFrc.php | 2 -
languages/messages/MessagesFrp.php | 145 +-
languages/messages/MessagesFrr.php | 239 +-
languages/messages/MessagesFur.php | 34 +-
languages/messages/MessagesFy.php | 49 +-
languages/messages/MessagesGa.php | 62 +-
languages/messages/MessagesGag.php | 10 +-
languages/messages/MessagesGan_hans.php | 53 +-
languages/messages/MessagesGan_hant.php | 53 +-
languages/messages/MessagesGd.php | 47 +-
languages/messages/MessagesGl.php | 275 +-
languages/messages/MessagesGn.php | 5 -
languages/messages/MessagesGrc.php | 51 +-
languages/messages/MessagesGsw.php | 70 +-
languages/messages/MessagesGu.php | 221 +-
languages/messages/MessagesGv.php | 21 +-
languages/messages/MessagesHa.php | 2 -
languages/messages/MessagesHak.php | 98 +-
languages/messages/MessagesHaw.php | 9 +-
languages/messages/MessagesHe.php | 275 +-
languages/messages/MessagesHi.php | 222 +-
languages/messages/MessagesHif_latn.php | 196 +-
languages/messages/MessagesHil.php | 43 +-
languages/messages/MessagesHr.php | 171 +-
languages/messages/MessagesHsb.php | 176 +-
languages/messages/MessagesHt.php | 25 +-
languages/messages/MessagesHu.php | 170 +-
languages/messages/MessagesHy.php | 103 +-
languages/messages/MessagesIa.php | 283 +-
languages/messages/MessagesId.php | 269 +-
languages/messages/MessagesIe.php | 22 +-
languages/messages/MessagesIg.php | 29 +-
languages/messages/MessagesIk.php | 21 +-
languages/messages/MessagesIke_cans.php | 4 +-
languages/messages/MessagesIke_latn.php | 4 +-
languages/messages/MessagesIlo.php | 252 +-
languages/messages/MessagesInh.php | 22 +-
languages/messages/MessagesIo.php | 20 +-
languages/messages/MessagesIs.php | 152 +-
languages/messages/MessagesIt.php | 264 +-
languages/messages/MessagesJa.php | 278 +-
languages/messages/MessagesJam.php | 20 +-
languages/messages/MessagesJut.php | 5 -
languages/messages/MessagesJv.php | 82 +-
languages/messages/MessagesKa.php | 214 +-
languages/messages/MessagesKaa.php | 45 +-
languages/messages/MessagesKab.php | 73 +-
languages/messages/MessagesKbd_cyrl.php | 22 +-
languages/messages/MessagesKg.php | 13 +
languages/messages/MessagesKhw.php | 27 +-
languages/messages/MessagesKiu.php | 43 +-
languages/messages/MessagesKk_arab.php | 71 +-
languages/messages/MessagesKk_cyrl.php | 189 +-
languages/messages/MessagesKk_latn.php | 71 +-
languages/messages/MessagesKm.php | 190 +-
languages/messages/MessagesKn.php | 70 +-
languages/messages/MessagesKo.php | 291 +-
languages/messages/MessagesKoi.php | 5 +-
languages/messages/MessagesKrc.php | 196 +-
languages/messages/MessagesKrj.php | 11 +-
languages/messages/MessagesKs.php | 49 +-
languages/messages/MessagesKs_arab.php | 8 -
languages/messages/MessagesKs_deva.php | 7 -
languages/messages/MessagesKsh.php | 217 +-
languages/messages/MessagesKu_latn.php | 59 +-
languages/messages/MessagesKw.php | 164 +-
languages/messages/MessagesKy.php | 80 +-
languages/messages/MessagesLa.php | 242 +-
languages/messages/MessagesLad.php | 24 +-
languages/messages/MessagesLb.php | 253 +-
languages/messages/MessagesLbe.php | 2 +-
languages/messages/MessagesLez.php | 52 +-
languages/messages/MessagesLfn.php | 24 +-
languages/messages/MessagesLg.php | 28 +-
languages/messages/MessagesLi.php | 71 +-
languages/messages/MessagesLij.php | 50 +-
languages/messages/MessagesLiv.php | 6 +-
languages/messages/MessagesLmo.php | 12 +-
languages/messages/MessagesLn.php | 5 +-
languages/messages/MessagesLo.php | 22 +-
languages/messages/MessagesLoz.php | 17 +-
languages/messages/MessagesLt.php | 172 +-
languages/messages/MessagesLtg.php | 10 +-
languages/messages/MessagesLus.php | 37 +-
languages/messages/MessagesLv.php | 166 +-
languages/messages/MessagesLzh.php | 108 +-
languages/messages/MessagesMai.php | 70 +-
languages/messages/MessagesMap_bms.php | 120 +-
languages/messages/MessagesMdf.php | 58 +-
languages/messages/MessagesMg.php | 201 +-
languages/messages/MessagesMhr.php | 22 +-
languages/messages/MessagesMin.php | 211 +-
languages/messages/MessagesMk.php | 282 +-
languages/messages/MessagesMl.php | 264 +-
languages/messages/MessagesMn.php | 66 +-
languages/messages/MessagesMr.php | 258 +-
languages/messages/MessagesMrj.php | 2 -
languages/messages/MessagesMs.php | 269 +-
languages/messages/MessagesMt.php | 133 +-
languages/messages/MessagesMwl.php | 22 +-
languages/messages/MessagesMy.php | 41 +-
languages/messages/MessagesMyv.php | 40 +-
languages/messages/MessagesMzn.php | 28 +-
languages/messages/MessagesNa.php | 2 +-
languages/messages/MessagesNah.php | 21 +-
languages/messages/MessagesNan.php | 30 +-
languages/messages/MessagesNap.php | 36 +-
languages/messages/MessagesNb.php | 249 +-
languages/messages/MessagesNds.php | 61 +-
languages/messages/MessagesNds_nl.php | 264 +-
languages/messages/MessagesNe.php | 186 +-
languages/messages/MessagesNew.php | 9 +-
languages/messages/MessagesNiu.php | 3 +
languages/messages/MessagesNl.php | 286 +-
languages/messages/MessagesNl_informal.php | 361 +-
languages/messages/MessagesNn.php | 212 +-
languages/messages/MessagesNov.php | 2 +-
languages/messages/MessagesNso.php | 14 +-
languages/messages/MessagesNv.php | 2 +-
languages/messages/MessagesNy.php | 12 +-
languages/messages/MessagesOc.php | 250 +-
languages/messages/MessagesOr.php | 122 +-
languages/messages/MessagesOs.php | 79 +-
languages/messages/MessagesPa.php | 181 +-
languages/messages/MessagesPag.php | 7 +-
languages/messages/MessagesPam.php | 53 +-
languages/messages/MessagesPap.php | 9 +-
languages/messages/MessagesPcd.php | 12 +-
languages/messages/MessagesPdc.php | 15 +-
languages/messages/MessagesPdt.php | 10 -
languages/messages/MessagesPfl.php | 56 +-
languages/messages/MessagesPi.php | 95 +-
languages/messages/MessagesPl.php | 273 +-
languages/messages/MessagesPms.php | 268 +-
languages/messages/MessagesPnb.php | 67 +-
languages/messages/MessagesPnt.php | 20 +-
languages/messages/MessagesPrg.php | 61 +-
languages/messages/MessagesPs.php | 102 +-
languages/messages/MessagesPt.php | 239 +-
languages/messages/MessagesPt_br.php | 263 +-
languages/messages/MessagesQqq.php | 660 +-
languages/messages/MessagesQu.php | 243 +-
languages/messages/MessagesQug.php | 7 +-
languages/messages/MessagesRgn.php | 2 -
languages/messages/MessagesRm.php | 68 +-
languages/messages/MessagesRo.php | 269 +-
languages/messages/MessagesRoa_tara.php | 261 +-
languages/messages/MessagesRu.php | 300 +-
languages/messages/MessagesRue.php | 234 +-
languages/messages/MessagesRup.php | 123 +-
languages/messages/MessagesSa.php | 84 +-
languages/messages/MessagesSah.php | 219 +-
languages/messages/MessagesSat.php | 35 +-
languages/messages/MessagesSc.php | 35 +-
languages/messages/MessagesScn.php | 110 +-
languages/messages/MessagesSco.php | 25 +-
languages/messages/MessagesSd.php | 9 +-
languages/messages/MessagesSdc.php | 49 +-
languages/messages/MessagesSe.php | 56 +-
languages/messages/MessagesSei.php | 27 +-
languages/messages/MessagesSg.php | 1 +
languages/messages/MessagesSgs.php | 31 +-
languages/messages/MessagesSh.php | 177 +-
languages/messages/MessagesShi.php | 33 +-
languages/messages/MessagesSi.php | 125 +-
languages/messages/MessagesSk.php | 223 +-
languages/messages/MessagesSl.php | 255 +-
languages/messages/MessagesSli.php | 46 +-
languages/messages/MessagesSm.php | 2 +-
languages/messages/MessagesSma.php | 2 +-
languages/messages/MessagesSn.php | 3 +
languages/messages/MessagesSo.php | 52 +-
languages/messages/MessagesSq.php | 100 +-
languages/messages/MessagesSr_ec.php | 208 +-
languages/messages/MessagesSr_el.php | 152 +-
languages/messages/MessagesSrn.php | 18 +-
languages/messages/MessagesSt.php | 2 +-
languages/messages/MessagesStq.php | 64 +-
languages/messages/MessagesSu.php | 59 +-
languages/messages/MessagesSv.php | 278 +-
languages/messages/MessagesSw.php | 84 +-
languages/messages/MessagesSzl.php | 58 +-
languages/messages/MessagesTa.php | 148 +-
languages/messages/MessagesTcy.php | 10 +-
languages/messages/MessagesTe.php | 135 +-
languages/messages/MessagesTet.php | 12 +-
languages/messages/MessagesTg_cyrl.php | 57 +-
languages/messages/MessagesTg_latn.php | 52 +-
languages/messages/MessagesTh.php | 237 +-
languages/messages/MessagesTk.php | 65 +-
languages/messages/MessagesTl.php | 113 +-
languages/messages/MessagesTly.php | 13 +-
languages/messages/MessagesTn.php | 3 +
languages/messages/MessagesTo.php | 16 +-
languages/messages/MessagesTpi.php | 17 +-
languages/messages/MessagesTr.php | 225 +-
languages/messages/MessagesTru.php | 12 +-
languages/messages/MessagesTs.php | 20 +-
languages/messages/MessagesTt_cyrl.php | 85 +-
languages/messages/MessagesTt_latn.php | 52 +-
languages/messages/MessagesTyv.php | 120 +-
languages/messages/MessagesUdm.php | 20 +-
languages/messages/MessagesUg_arab.php | 109 +-
languages/messages/MessagesUk.php | 278 +-
languages/messages/MessagesUr.php | 100 +-
languages/messages/MessagesUz.php | 71 +-
languages/messages/MessagesVe.php | 10 +-
languages/messages/MessagesVec.php | 166 +-
languages/messages/MessagesVep.php | 51 +-
languages/messages/MessagesVi.php | 326 +-
languages/messages/MessagesVls.php | 6 +-
languages/messages/MessagesVmf.php | 111 +-
languages/messages/MessagesVo.php | 107 +-
languages/messages/MessagesVot.php | 16 +-
languages/messages/MessagesVro.php | 53 +-
languages/messages/MessagesWa.php | 52 +-
languages/messages/MessagesWar.php | 156 +-
languages/messages/MessagesWo.php | 56 +-
languages/messages/MessagesWuu.php | 118 +-
languages/messages/MessagesXal.php | 32 +-
languages/messages/MessagesXh.php | 3 +
languages/messages/MessagesXmf.php | 9 +-
languages/messages/MessagesYi.php | 248 +-
languages/messages/MessagesYo.php | 127 +-
languages/messages/MessagesYue.php | 95 +-
languages/messages/MessagesZea.php | 33 +-
languages/messages/MessagesZh_hans.php | 269 +-
languages/messages/MessagesZh_hant.php | 283 +-
languages/messages/MessagesZh_tw.php | 7 +-
languages/messages/MessagesZu.php | 47 +-
languages/utils/CLDRPluralRuleEvaluator.php | 10 +-
load.php | 8 +-
maintenance/Doxyfile | 15 +-
maintenance/Maintenance.php | 70 +-
maintenance/archives/patch-archive-ar_id.sql | 8 +
maintenance/archives/patch-change_tag.sql | 17 -
maintenance/archives/patch-eu_local_id.sql | 3 -
maintenance/archives/patch-external_user.sql | 9 -
maintenance/archives/patch-externallinks-el_id.sql | 8 +
.../patch-iwl_prefix_title_from-non-unique.sql | 5 +
.../archives/patch-iwlinks-from-title-index.sql | 4 +
maintenance/archives/patch-kill-iwl_pft.sql | 7 -
maintenance/archives/patch-tag_summary.sql | 12 +
maintenance/archives/patch-valid_tag.sql | 4 +
maintenance/archives/upgradeLogging.php | 2 +-
maintenance/attachLatest.php | 4 +-
maintenance/backup.inc | 40 +-
maintenance/backupPrefetch.inc | 8 +-
maintenance/backupTextPass.inc | 68 +-
maintenance/benchmarks/Benchmarker.php | 10 +-
maintenance/benchmarks/README | 7 +
maintenance/benchmarks/bench_HTTP_HTTPS.php | 4 +-
maintenance/benchmarks/bench_delete_truncate.php | 4 +-
maintenance/benchmarks/bench_if_switch.php | 4 +-
maintenance/benchmarks/bench_strtr_str_replace.php | 4 +-
maintenance/benchmarks/bench_utf8_title_check.php | 6 +-
maintenance/benchmarks/bench_wfBaseConvert.php | 4 +-
maintenance/benchmarks/bench_wfIsWindows.php | 4 +-
maintenance/benchmarks/benchmarkHooks.php | 4 +-
maintenance/benchmarks/benchmarkPurge.php | 4 +-
maintenance/cdb.php | 16 +-
maintenance/changePassword.php | 4 +-
maintenance/checkBadRedirects.php | 4 +-
maintenance/checkImages.php | 4 +-
maintenance/checkLess.php | 72 +
maintenance/checkSyntax.php | 15 +-
maintenance/checkUsernames.php | 34 +-
maintenance/cleanupAncientTables.php | 12 +-
maintenance/cleanupCaps.php | 4 +-
maintenance/cleanupImages.php | 4 +-
maintenance/cleanupPreferences.php | 6 +-
maintenance/cleanupRemovedModules.php | 10 +-
maintenance/cleanupSpam.php | 4 +-
maintenance/cleanupTable.inc | 20 +-
maintenance/cleanupTitles.php | 57 +-
maintenance/cleanupUploadStash.php | 18 +-
maintenance/cleanupWatchlist.php | 8 +-
maintenance/clearCacheStats.php | 4 +-
maintenance/clearInterwikiCache.php | 4 +-
maintenance/commandLine.inc | 4 +-
maintenance/compareParsers.php | 11 +-
maintenance/convertLinks.php | 15 +-
maintenance/convertUserOptions.php | 4 +-
maintenance/copyFileBackend.php | 221 +-
maintenance/copyJobQueue.php | 99 +
maintenance/createAndPromote.php | 20 +-
maintenance/deleteArchivedFiles.inc | 2 +-
maintenance/deleteArchivedFiles.php | 6 +-
maintenance/deleteArchivedRevisions.php | 6 +-
maintenance/deleteBatch.php | 4 +-
maintenance/deleteDefaultMessages.php | 6 +-
maintenance/deleteEqualMessages.php | 15 +-
maintenance/deleteImageMemcached.php | 10 +-
maintenance/deleteOldRevisions.php | 4 +-
maintenance/deleteOrphanedRevisions.php | 10 +-
maintenance/deleteRevision.php | 4 +-
maintenance/deleteSelfExternals.php | 8 +-
maintenance/dev/includes/router.php | 16 +-
maintenance/dictionary/mediawiki.dic | 4556 ++++++++++
maintenance/doMaintenance.php | 45 +-
maintenance/dumpBackup.php | 12 +-
maintenance/dumpIterator.php | 28 +-
maintenance/dumpLinks.php | 11 +-
maintenance/dumpSisterSites.php | 11 +-
maintenance/dumpTextPass.php | 4 +-
maintenance/dumpUploads.php | 4 +-
maintenance/edit.php | 7 +-
maintenance/eraseArchivedFile.php | 119 +
maintenance/eval.php | 2 +-
maintenance/fetchText.php | 10 +-
maintenance/fileOpPerfTest.php | 26 +-
maintenance/findHooks.php | 4 +-
maintenance/fixDoubleRedirects.php | 4 +-
maintenance/fixExtLinksProtocolRelative.php | 4 +-
maintenance/fixSlaveDesync.php | 12 +-
maintenance/fixTimestamps.php | 4 +-
maintenance/fixUserRegistration.php | 4 +-
maintenance/formatInstallDoc.php | 4 +-
maintenance/fuzz-tester.php | 47 +-
maintenance/generateSitemap.php | 40 +-
maintenance/getConfiguration.php | 143 +-
maintenance/getLagTimes.php | 6 +-
maintenance/getSlaveServer.php | 4 +-
maintenance/getText.php | 4 +-
maintenance/hiphop/compiler.conf | 5 -
maintenance/hiphop/extra-files | 34 -
maintenance/hiphop/make | 311 -
maintenance/hiphop/run-server | 61 +-
maintenance/hiphop/server.conf | 4 +-
maintenance/importDump.php | 26 +-
maintenance/importImages.inc | 4 +-
maintenance/importImages.php | 81 +-
maintenance/importSiteScripts.php | 4 +-
maintenance/importTextFile.php | 22 +-
maintenance/initEditCount.php | 4 +-
maintenance/initSiteStats.php | 6 +-
maintenance/install.php | 12 +-
maintenance/jsduck/MetaTags.rb | 16 +
maintenance/jsduck/categories.json | 25 +-
maintenance/jsduck/config.json | 15 +-
maintenance/jsduck/eg-iframe.html | 86 +-
maintenance/jsduck/external.js | 18 +
maintenance/jsparse.php | 12 +-
maintenance/lag.php | 4 +-
maintenance/language/StatOutputs.php | 12 +-
maintenance/language/alltrans.php | 4 +-
maintenance/language/checkDupeMessages.php | 34 +-
maintenance/language/checkExtensions.php | 8 +-
maintenance/language/checkLanguage.inc | 210 +-
maintenance/language/checkLanguage.php | 6 +-
maintenance/language/countMessages.php | 6 +-
maintenance/language/date-formats.php | 4 +-
maintenance/language/digit2html.php | 6 +-
maintenance/language/dumpMessages.php | 4 +-
maintenance/language/generateCollationData.php | 8 +-
maintenance/language/generateNormalizerData.php | 6 +-
maintenance/language/langmemusage.php | 9 +-
maintenance/language/languages.inc | 34 +-
maintenance/language/messageTypes.inc | 41 +-
maintenance/language/messages.inc | 289 +-
maintenance/language/rebuildLanguage.php | 12 +-
maintenance/language/transstat.php | 8 +-
maintenance/language/validate.php | 6 +-
maintenance/language/writeMessagesArray.inc | 67 +-
maintenance/mcc.php | 8 +-
maintenance/mctest.php | 21 +-
maintenance/mergeMessageFileList.php | 86 +-
maintenance/migrateUserGroup.php | 4 +-
maintenance/minify.php | 4 +-
maintenance/moveBatch.php | 4 +-
maintenance/mssql/tables.sql | 15 +-
maintenance/mwdoc-filter.php | 2 +-
maintenance/mwdocgen.php | 320 +-
maintenance/mwjsduck-gen | 23 +-
maintenance/namespaceDupes.php | 16 +-
maintenance/nextJobDB.php | 4 +-
maintenance/nukeNS.php | 8 +-
maintenance/nukePage.php | 6 +-
maintenance/oracle/alterSharedConstraints.php | 16 +-
.../oracle/archives/patch-archive-ar_id.sql | 6 +
.../oracle/archives/patch-externallinks-el_id.sql | 4 +
maintenance/oracle/tables.sql | 24 +-
maintenance/orphans.php | 8 +-
maintenance/parse.php | 12 +-
maintenance/patchSql.php | 4 +-
maintenance/populateCategory.php | 4 +-
maintenance/populateFilearchiveSha1.php | 8 +-
maintenance/populateImageSha1.php | 4 +-
maintenance/populateLogSearch.php | 25 +-
maintenance/populateLogUsertext.php | 4 +-
maintenance/populateParentId.php | 7 +-
maintenance/populateRevisionLength.php | 24 +-
maintenance/populateRevisionSha1.php | 10 +-
.../postgres/archives/patch-external_user.sql | 6 -
.../postgres/archives/patch-kill-iwl_pft.sql | 7 -
maintenance/postgres/archives/patch-profiling.sql | 3 +-
.../postgres/archives/patch-rename-iwl_prefix.sql | 2 +-
maintenance/postgres/tables.sql | 20 +-
maintenance/preprocessDump.php | 9 +-
maintenance/preprocessorFuzzTest.php | 4 +-
maintenance/protect.php | 6 +-
maintenance/proxyCheck.php | 70 -
maintenance/pruneFileCache.php | 4 +-
maintenance/purgeChangedFiles.php | 255 +
maintenance/purgeChangedPages.php | 191 +
maintenance/purgeDeletedFiles.php | 96 -
maintenance/purgeList.php | 16 +-
maintenance/purgeOldText.inc | 18 +-
maintenance/purgeOldText.php | 4 +-
maintenance/purgeParserCache.php | 4 +-
maintenance/reassignEdits.php | 6 +-
maintenance/rebuildFileCache.php | 7 +-
maintenance/rebuildImages.php | 4 +-
maintenance/rebuildLocalisationCache.php | 22 +-
maintenance/rebuildall.php | 8 +-
maintenance/rebuildmessages.php | 7 +-
maintenance/rebuildrecentchanges.php | 22 +-
maintenance/rebuildtextindex.php | 9 +-
maintenance/refreshFileHeaders.php | 4 +-
maintenance/refreshImageMetadata.php | 14 +-
maintenance/refreshLinks.php | 19 +-
maintenance/removeUnusedAccounts.php | 9 +-
maintenance/renameDbPrefix.php | 4 +-
maintenance/renderDump.php | 18 +-
maintenance/resetUserTokens.php | 70 +-
maintenance/rollbackEdits.php | 4 +-
maintenance/runBatchedQuery.php | 7 +-
maintenance/runJobs.php | 54 +-
maintenance/showCacheStats.php | 4 +-
maintenance/showJobs.php | 26 +-
maintenance/showSiteStats.php | 7 +-
maintenance/sql.php | 46 +-
maintenance/sqlite.inc | 11 +-
maintenance/sqlite.php | 4 +-
maintenance/sqlite/archives/initial-indexes.sql | 49 +
.../sqlite/archives/patch-archive-ar_id.sql | 39 +
.../sqlite/archives/patch-externallinks-el_id.sql | 19 +
maintenance/sqlite/archives/patch-kill-iwl_pft.sql | 7 -
.../sqlite/archives/patch-rename-iwl_prefix.sql | 2 +-
maintenance/storage/checkStorage.php | 18 +-
maintenance/storage/compressOld.php | 35 +-
maintenance/storage/dumpRev.php | 6 +-
maintenance/storage/fixBug20757.php | 4 +-
maintenance/storage/moveToExternal.php | 6 +-
maintenance/storage/orphanStats.php | 4 +-
maintenance/storage/recompressTracked.php | 4 +-
maintenance/storage/resolveStubs.php | 2 +-
maintenance/storage/storageTypeStats.php | 4 +-
maintenance/storage/testCompression.php | 2 +-
maintenance/storage/trackBlobs.php | 2 +-
maintenance/syncFileBackend.php | 13 +-
maintenance/tables.sql | 35 +-
maintenance/tidyUpBug37714.php | 49 +
maintenance/undelete.php | 4 +-
maintenance/update.php | 29 +-
maintenance/updateArticleCount.php | 4 +-
maintenance/updateCollation.php | 8 +-
maintenance/updateDoubleWidthSearch.php | 4 +-
maintenance/updateRestrictions.php | 4 +-
maintenance/updateSearchIndex.php | 11 +-
maintenance/updateSpecialPages.php | 77 +-
maintenance/userDupes.inc | 67 +-
maintenance/userOptions.inc | 28 +-
maintenance/userOptions.php | 2 +-
maintenance/waitForSlave.php | 4 +-
mw-config/index.php | 6 +-
opensearch_desc.php | 2 +-
profileinfo.php | 9 +-
redirect.php | 36 -
redirect.php5 | 24 -
redirect.phtml | 3 -
resources/Resources.php | 220 +-
resources/Resources.php.orig | 968 --
resources/jquery.chosen/LICENSE | 24 +
resources/jquery.chosen/chosen-sprite.png | Bin 0 -> 646 bytes
resources/jquery.chosen/chosen-sprite@2x.png | Bin 0 -> 871 bytes
resources/jquery.chosen/chosen.css | 440 +
resources/jquery.chosen/chosen.jquery.js | 1103 +++
resources/jquery.tipsy/images/tipsy.png | Bin 175 -> 133 bytes
.../default/images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 180 -> 87 bytes
.../default/images/ui-bg_flat_75_ffffff_40x100.png | Bin 178 -> 87 bytes
.../default/images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 120 -> 115 bytes
.../default/images/ui-bg_glass_65_ffffff_1x400.png | Bin 105 -> 99 bytes
.../default/images/ui-bg_glass_75_dadada_1x400.png | Bin 111 -> 111 bytes
.../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 101 -> 86 bytes
.../default/images/ui-icons_222222_256x240.png | Bin 4369 -> 3702 bytes
.../default/images/ui-icons_2e83ff_256x240.png | Bin 4369 -> 3702 bytes
.../default/images/ui-icons_454545_256x240.png | Bin 4369 -> 3702 bytes
.../default/images/ui-icons_888888_256x240.png | Bin 4369 -> 3702 bytes
.../default/images/ui-icons_cd0a0a_256x240.png | Bin 4369 -> 3702 bytes
.../vector/images/button-blue-hover-large.png | Bin 260 -> 0 bytes
.../themes/vector/images/button-blue-hover.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-blue-large.png | Bin 265 -> 0 bytes
.../jquery.ui/themes/vector/images/button-blue.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-disabled-blue.png | Bin 84 -> 0 bytes
.../themes/vector/images/button-disabled-green.png | Bin 149 -> 0 bytes
.../themes/vector/images/button-disabled-red.png | Bin 84 -> 0 bytes
.../themes/vector/images/button-disabled.png | Bin 84 -> 0 bytes
.../themes/vector/images/button-down-blue.png | Bin 130 -> 0 bytes
.../themes/vector/images/button-down-green.png | Bin 141 -> 0 bytes
.../themes/vector/images/button-down-red.png | Bin 130 -> 0 bytes
.../jquery.ui/themes/vector/images/button-down.png | Bin 130 -> 0 bytes
.../vector/images/button-green-hover-large.png | Bin 265 -> 0 bytes
.../themes/vector/images/button-green-hover.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-green-large.png | Bin 265 -> 0 bytes
.../themes/vector/images/button-green.png | Bin 175 -> 0 bytes
.../vector/images/button-large-disabled-green.png | Bin 277 -> 0 bytes
.../vector/images/button-large-off-green.png | Bin 282 -> 0 bytes
.../themes/vector/images/button-off-blue.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-off-green.png | Bin 149 -> 0 bytes
.../themes/vector/images/button-off-red.png | Bin 175 -> 0 bytes
.../jquery.ui/themes/vector/images/button-off.png | Bin 152 -> 0 bytes
.../vector/images/button-orange-hover-large.png | Bin 265 -> 0 bytes
.../themes/vector/images/button-orange-hover.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-orange-large.png | Bin 265 -> 0 bytes
.../themes/vector/images/button-orange.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-over-blue.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-over-green.png | Bin 149 -> 0 bytes
.../themes/vector/images/button-over-red.png | Bin 174 -> 0 bytes
.../jquery.ui/themes/vector/images/button-over.png | Bin 155 -> 0 bytes
.../vector/images/button-red-hover-large.png | Bin 260 -> 0 bytes
.../themes/vector/images/button-red-hover.png | Bin 175 -> 0 bytes
.../themes/vector/images/button-red-large.png | Bin 265 -> 0 bytes
.../jquery.ui/themes/vector/images/button-red.png | Bin 175 -> 0 bytes
.../themes/vector/images/titlebar-fade.png | Bin 188 -> 81 bytes
.../jquery.ui/themes/vector/jquery.ui.button.css | 368 +-
.../images/jquery.arrowSteps.divider-ltr.png | Bin 135 -> 126 bytes
.../images/jquery.arrowSteps.divider-rtl.png | Bin 139 -> 127 bytes
.../jquery/images/jquery.arrowSteps.head-ltr.png | Bin 390 -> 303 bytes
.../jquery/images/jquery.arrowSteps.head-rtl.png | Bin 365 -> 311 bytes
.../jquery/images/jquery.arrowSteps.tail-ltr.png | Bin 223 -> 222 bytes
resources/jquery/images/marker.png | Bin 652 -> 472 bytes
resources/jquery/images/mask.png | Bin 2020 -> 1795 bytes
resources/jquery/jquery.badge.css | 9 +-
resources/jquery/jquery.byteLength.js | 12 +
resources/jquery/jquery.byteLimit.js | 3 +-
resources/jquery/jquery.checkboxShiftClick.js | 16 +-
resources/jquery/jquery.client.js | 100 +-
resources/jquery/jquery.makeCollapsible.js | 231 +-
resources/jquery/jquery.placeholder.js | 9 +-
resources/jquery/jquery.spinner.css | 2 +-
resources/jquery/jquery.spinner.js | 47 +-
resources/jquery/jquery.suggestions.js | 4 +-
resources/jquery/jquery.tablesorter.js | 180 +-
resources/jquery/jquery.textSelection.js | 4 +-
.../mediawiki.action/images/green-checkmark.png | Bin 0 -> 681 bytes
.../mediawiki.action.edit.collapsibleFooter.css | 17 +
.../mediawiki.action.edit.collapsibleFooter.js | 54 +
.../mediawiki.action.edit.editWarning.js | 56 +
.../mediawiki.action/mediawiki.action.edit.js | 167 +-
.../mediawiki.action.edit.preview.js | 53 +-
.../mediawiki.action.edit.styles.css | 44 +
.../mediawiki.action/mediawiki.action.history.js | 2 +-
.../mediawiki.action.view.postEdit.css | 77 +
.../mediawiki.action.view.postEdit.js | 75 +-
.../mediawiki.action.view.rightClickEdit.js | 4 +-
resources/mediawiki.api/mediawiki.api.category.js | 35 +-
resources/mediawiki.api/mediawiki.api.edit.js | 65 +-
resources/mediawiki.api/mediawiki.api.js | 88 +-
resources/mediawiki.api/mediawiki.api.login.js | 54 +
resources/mediawiki.api/mediawiki.api.parse.js | 12 +-
resources/mediawiki.api/mediawiki.api.watch.js | 12 +-
resources/mediawiki.language/mediawiki.language.js | 23 +
.../mediawiki.language.months.js | 54 +
resources/mediawiki.less/mediawiki.mixins.less | 46 +
.../mediawiki.libs/mediawiki.libs.jpegmeta.js | 2 +-
resources/mediawiki.page/mediawiki.page.gallery.js | 248 +
.../mediawiki.page.image.pagination.js | 51 +
.../mediawiki.page/mediawiki.page.patrol.ajax.js | 2 +-
resources/mediawiki.page/mediawiki.page.ready.js | 38 +-
resources/mediawiki.page/mediawiki.page.startup.js | 23 +-
.../mediawiki.page/mediawiki.page.watch.ajax.js | 6 +-
.../images/arrow-collapsed-ltr.png | Bin 206 -> 0 bytes
.../images/arrow-collapsed-rtl.png | Bin 205 -> 0 bytes
.../mediawiki.special/images/arrow-expanded.png | Bin 205 -> 0 bytes
.../images/glyph-people-large.png | Bin 0 -> 1663 bytes
.../mediawiki.special/images/icon-contributors.png | Bin 0 -> 1169 bytes
resources/mediawiki.special/images/icon-edits.png | Bin 0 -> 780 bytes
resources/mediawiki.special/images/icon-lock.png | Bin 0 -> 172 bytes
resources/mediawiki.special/images/icon-pages.png | Bin 0 -> 528 bytes
.../mediawiki.special/mediawiki.special.block.js | 2 +-
.../mediawiki.special.changeemail.js | 2 +-
.../mediawiki.special.changeslist.css | 57 -
.../mediawiki.special.changeslist.enhanced.css | 66 +
.../mediawiki.special.createAccount.css | 89 +
.../mediawiki.special.createAccount.js | 112 +
.../mediawiki.special.movePage.js | 2 +-
.../mediawiki.special.pagesWithProp.css | 4 +
.../mediawiki.special.preferences.js | 2 +-
.../mediawiki.special.recentchanges.js | 2 +-
.../mediawiki.special/mediawiki.special.search.js | 2 +-
.../mediawiki.special.undelete.js | 2 +-
.../mediawiki.special/mediawiki.special.upload.js | 4 +-
.../mediawiki.special.userLogin.css | 39 +
.../mediawiki.special.userLogin.signup.js | 10 -
.../mediawiki.special/mediawiki.special.vforms.css | 46 +
resources/mediawiki.ui/mediawiki.ui.default.css | 272 +
resources/mediawiki.ui/mediawiki.ui.vector.css | 414 +
resources/mediawiki.ui/sourcefiles/Makefile | 24 +
resources/mediawiki.ui/sourcefiles/config.rb | 27 +
.../sourcefiles/scss/components/_default.scss | 3 +
.../sourcefiles/scss/components/_utilities.scss | 17 +
.../sourcefiles/scss/components/_vector.scss | 4 +
.../scss/components/default/_buttons.scss | 69 +
.../scss/components/default/_forms.scss | 114 +
.../scss/components/vector/_buttons.scss | 19 +
.../scss/components/vector/_containers.scss | 5 +
.../sourcefiles/scss/components/vector/_forms.scss | 7 +
.../sourcefiles/scss/mediawiki.ui.default.scss | 16 +
.../sourcefiles/scss/mediawiki.ui.vector.scss | 15 +
.../mediawiki.ui/sourcefiles/scss/mixins/_all.scss | 4 +
.../sourcefiles/scss/mixins/_effects.scss | 62 +
.../sourcefiles/scss/mixins/_forms.scss | 66 +
.../sourcefiles/scss/mixins/_type.scss | 6 +
.../sourcefiles/scss/mixins/_utilities.scss | 19 +
.../sourcefiles/scss/settings/_all.scss | 2 +
.../sourcefiles/scss/settings/_colors.scss | 17 +
.../sourcefiles/scss/settings/_typography.scss | 5 +
resources/mediawiki/images/arrow-collapsed-ltr.png | Bin 0 -> 133 bytes
resources/mediawiki/images/arrow-collapsed-rtl.png | Bin 0 -> 136 bytes
resources/mediawiki/images/arrow-expanded.png | Bin 0 -> 134 bytes
resources/mediawiki/mediawiki.Title.js | 574 +-
resources/mediawiki/mediawiki.Uri.js | 4 +-
resources/mediawiki/mediawiki.debug.js | 2 +-
resources/mediawiki/mediawiki.htmlform.js | 70 +-
resources/mediawiki/mediawiki.icon.css | 15 +
resources/mediawiki/mediawiki.inspect.js | 204 +
resources/mediawiki/mediawiki.jqueryMsg.js | 335 +-
resources/mediawiki/mediawiki.js | 496 +-
resources/mediawiki/mediawiki.log.js | 65 +-
resources/mediawiki/mediawiki.notification.css | 16 +-
resources/mediawiki/mediawiki.notification.js | 25 +-
resources/mediawiki/mediawiki.notify.js | 13 +-
resources/mediawiki/mediawiki.searchSuggest.js | 48 +-
resources/mediawiki/mediawiki.user.js | 253 +-
resources/mediawiki/mediawiki.util.js | 204 +-
resources/startup.js | 42 +-
serialized/serialize.php | 4 +-
skins/ArchLinux.php | 120 +-
skins/Chick.php | 47 -
skins/CologneBlue.php | 47 +-
skins/Modern.php | 55 +-
skins/MonoBook.php | 120 +-
skins/MySkin.php | 35 -
skins/Nostalgia.php | 147 -
skins/Simple.php | 58 -
skins/Standard.php | 294 -
skins/Vector.php | 194 +-
skins/archlinux/IE60Fixes.css | 9 -
skins/archlinux/Opera6Fixes.css | 20 -
skins/archlinux/Opera7Fixes.css | 21 -
skins/archlinux/Opera9Fixes.css | 11 -
skins/archlinux/external-ltr.png | Bin 143 -> 141 bytes
skins/archlinux/external-rtl.png | Bin 141 -> 141 bytes
skins/archlinux/main.css | 26 +-
skins/archlinux/wiki-indexed.png | Bin 8008 -> 8007 bytes
skins/chick/IE60Fixes.css | 79 -
skins/chick/main.css | 368 -
skins/cologneblue/print.css | 6 +
skins/cologneblue/screen.css | 19 +-
skins/common/IEFixes.js | 82 +-
skins/common/ajax.js | 121 +-
skins/common/commonContent.css | 49 +-
skins/common/commonElements.css | 26 +-
skins/common/commonPrint.css | 7 +-
skins/common/config.css | 8 +-
skins/common/config.js | 14 +-
skins/common/images/Arr_u.png | Bin 207 -> 207 bytes
skins/common/images/ar/button_headline.png | Bin 487 -> 484 bytes
skins/common/images/ar/button_nowiki.png | Bin 875 -> 874 bytes
skins/common/images/arrow_disabled_left_25.png | Bin 301 -> 301 bytes
skins/common/images/arrow_disabled_right_25.png | Bin 307 -> 307 bytes
skins/common/images/arrow_right_25.png | Bin 341 -> 337 bytes
skins/common/images/button_hr.png | Bin 222 -> 200 bytes
skins/common/images/button_nowiki.png | Bin 322 -> 322 bytes
skins/common/images/button_sig.png | Bin 926 -> 920 bytes
skins/common/images/button_template.png | Bin 188 -> 178 bytes
skins/common/images/critical-32.png | Bin 1763 -> 1758 bytes
skins/common/images/fa/button_nowiki.png | Bin 875 -> 874 bytes
skins/common/images/feed-icon.png | Bin 557 -> 542 bytes
skins/common/images/icons/fileicon-psd.png | Bin 10376 -> 7756 bytes
skins/common/images/magnify-clip-rtl.png | Bin 208 -> 149 bytes
skins/common/images/question-small.png | Bin 0 -> 316 bytes
skins/common/images/question.svg | 12 +
skins/common/images/tick-32.png | Bin 1137 -> 1103 bytes
skins/common/images/warning-32.png | Bin 1301 -> 1299 bytes
skins/common/oldshared.css | 42 +-
skins/common/protect.js | 236 +-
skins/common/shared.css | 196 +-
skins/common/upload.js | 322 +-
skins/common/wikibits.js | 745 +-
skins/common/wikiprintable.css | 59 -
skins/modern/external.png | Bin 143 -> 141 bytes
skins/modern/main.css | 43 +-
skins/modern/print.css | 2 +-
skins/monobook/IE60Fixes.css | 9 -
skins/monobook/Opera6Fixes.css | 20 -
skins/monobook/Opera7Fixes.css | 21 -
skins/monobook/Opera9Fixes.css | 11 -
skins/monobook/external-ltr.png | Bin 143 -> 141 bytes
skins/monobook/external-rtl.png | Bin 141 -> 141 bytes
skins/monobook/main.css | 26 +-
skins/monobook/wiki-indexed.png | Bin 8008 -> 8007 bytes
skins/myskin/main.css | 1 -
skins/nostalgia/screen.css | 56 -
skins/simple/discussionitem_icon.gif | Bin 549 -> 0 bytes
skins/simple/external.png | Bin 143 -> 0 bytes
skins/simple/file_icon.gif | Bin 323 -> 0 bytes
skins/simple/link_icon.gif | Bin 342 -> 0 bytes
skins/simple/lock_icon.gif | Bin 321 -> 0 bytes
skins/simple/mail_icon.gif | Bin 321 -> 0 bytes
skins/simple/main.css | 427 -
skins/standard/main.css | 188 -
skins/vector/beta/screen.less | 75 +
skins/vector/beta/variables.less | 37 +
skins/vector/collapsibleNav.js | 121 +
skins/vector/collapsibleNav.less | 91 +
skins/vector/collapsibleTabs.js | 210 +
skins/vector/externalLinks.less | 75 +
skins/vector/images/arrow-collapsed-ltr.png | Bin 0 -> 143 bytes
skins/vector/images/arrow-collapsed-ltr.svg | 37 +
skins/vector/images/arrow-collapsed-rtl.png | Bin 0 -> 145 bytes
skins/vector/images/arrow-collapsed-rtl.svg | 37 +
skins/vector/images/arrow-down-focus-icon.svg | 37 +
skins/vector/images/arrow-down-icon.svg | 37 +
skins/vector/images/arrow-expanded.png | Bin 0 -> 145 bytes
skins/vector/images/arrow-expanded.svg | 37 +
skins/vector/images/edit-icon.png | Bin 277 -> 276 bytes
skins/vector/images/external-link-ltr-icon.png | Bin 143 -> 141 bytes
skins/vector/images/external-link-rtl-icon.png | Bin 141 -> 141 bytes
skins/vector/images/mail-icon.png | Bin 197 -> 197 bytes
skins/vector/images/news-icon.png | Bin 180 -> 180 bytes
skins/vector/images/page-fade.png | Bin 115 -> 115 bytes
skins/vector/images/portal-break-ltr.png | Bin 169 -> 168 bytes
skins/vector/images/preferences-break.png | Bin 205 -> 103 bytes
skins/vector/images/tab-break.png | Bin 125 -> 125 bytes
skins/vector/images/talk-icon.png | Bin 173 -> 173 bytes
skins/vector/images/user-icon.svg | 424 +
skins/vector/images/video-icon.png | Bin 162 -> 162 bytes
skins/vector/screen-hd.css | 28 -
skins/vector/screen-hd.less | 28 +
skins/vector/screen.css | 915 --
skins/vector/screen.less | 791 ++
skins/vector/styles-beta.less | 13 +
skins/vector/styles.less | 11 +
skins/vector/variables.less | 37 +
skins/vector/vector.js | 52 +-
tests/RunSeleniumTests.php | 258 -
tests/TestsAutoLoader.php | 30 +-
tests/parser/ParserTestResult.php | 42 +
tests/parser/parserTest.inc | 274 +-
tests/parser/parserTests.txt | 9493 +++++++++++++++-----
.../parser/preprocess/All_system_messages.expected | 21 -
tests/parser/preprocess/All_system_messages.txt | 21 -
tests/parserTests.php | 8 +-
tests/phpunit/AutoLoaderTest.php | 51 -
tests/phpunit/MediaWikiLangTestCase.php | 4 +
tests/phpunit/MediaWikiPHPUnitCommand.php | 22 +-
tests/phpunit/MediaWikiPHPUnitTestListener.php | 114 +
tests/phpunit/MediaWikiTestCase.php | 32 +-
tests/phpunit/StructureTest.php | 63 -
tests/phpunit/bootstrap.php | 19 +-
tests/phpunit/data/db/sqlite/tables-1.16.sql | 5 -
tests/phpunit/data/db/sqlite/tables-1.17.sql | 5 -
tests/phpunit/data/db/sqlite/tables-1.18.sql | 5 -
.../data/less/common/test.common.mixins.less | 5 +
tests/phpunit/data/less/module/dependency.less | 3 +
tests/phpunit/data/less/module/styles.css | 6 +
tests/phpunit/data/less/module/styles.less | 6 +
tests/phpunit/data/xmp/7.result.php | 18 +-
tests/phpunit/includes/ArticleTablesTest.php | 7 +-
tests/phpunit/includes/ArticleTest.php | 12 +-
tests/phpunit/includes/BlockTest.php | 143 +-
tests/phpunit/includes/CdbTest.php | 2 +-
tests/phpunit/includes/CollationTest.php | 8 +-
tests/phpunit/includes/DiffHistoryBlobTest.php | 9 +-
tests/phpunit/includes/EditPageTest.php | 93 +-
tests/phpunit/includes/ExternalStoreTest.php | 2 +-
tests/phpunit/includes/ExtraParserTest.php | 27 +-
tests/phpunit/includes/FallbackTest.php | 73 +
tests/phpunit/includes/FauxRequestTest.php | 15 +
tests/phpunit/includes/FauxResponseTest.php | 9 +-
.../includes/FormOptionsInitializationTest.php | 1 -
.../includes/GlobalFunctions/GlobalTest.php | 201 +-
.../includes/GlobalFunctions/GlobalWithDBTest.php | 6 +-
.../includes/GlobalFunctions/wfAssembleUrlTest.php | 7 +-
.../includes/GlobalFunctions/wfBCP47Test.php | 20 +-
.../includes/GlobalFunctions/wfBaseConvertTest.php | 3 +-
.../includes/GlobalFunctions/wfBaseNameTest.php | 6 +-
.../includes/GlobalFunctions/wfExpandUrlTest.php | 20 +-
.../includes/GlobalFunctions/wfGetCallerTest.php | 15 +-
.../includes/GlobalFunctions/wfParseUrlTest.php | 9 +-
.../GlobalFunctions/wfRemoveDotSegmentsTest.php | 6 +-
.../GlobalFunctions/wfShorthandToIntegerTest.php | 8 +-
.../includes/GlobalFunctions/wfTimestampTest.php | 19 +-
.../includes/GlobalFunctions/wfUrlencodeTest.php | 11 +-
tests/phpunit/includes/HTMLCheckMatrixTest.php | 102 +
tests/phpunit/includes/HashRingTest.php | 53 +
tests/phpunit/includes/HooksTest.php | 171 +-
tests/phpunit/includes/HtmlFormatterTest.php | 81 +
tests/phpunit/includes/HtmlTest.php | 65 +-
tests/phpunit/includes/HttpTest.php | 11 +-
tests/phpunit/includes/IPTest.php | 78 +-
tests/phpunit/includes/JsonTest.php | 27 -
tests/phpunit/includes/LanguageConverterTest.php | 35 +-
tests/phpunit/includes/LicensesTest.php | 2 +-
tests/phpunit/includes/LinkerTest.php | 4 +-
tests/phpunit/includes/LinksUpdateTest.php | 23 +-
tests/phpunit/includes/LocalFileTest.php | 22 +-
tests/phpunit/includes/MWExceptionHandlerTest.php | 73 +
tests/phpunit/includes/MWFunctionTest.php | 47 +-
tests/phpunit/includes/MWNamespaceTest.php | 21 +-
tests/phpunit/includes/MessageTest.php | 78 +-
tests/phpunit/includes/OutputPageTest.php | 73 +-
tests/phpunit/includes/PathRouterTest.php | 36 +-
tests/phpunit/includes/PreferencesTest.php | 23 +-
tests/phpunit/includes/Providers.php | 44 -
tests/phpunit/includes/RecentChangeTest.php | 34 +-
tests/phpunit/includes/RequestContextTest.php | 8 +-
tests/phpunit/includes/ResourceLoaderTest.php | 62 +-
tests/phpunit/includes/RevisionStorageTest.php | 16 +-
.../RevisionStorageTest_ContentHandlerUseDB.php | 20 +-
tests/phpunit/includes/RevisionTest.php | 78 +-
tests/phpunit/includes/SampleTest.php | 4 +-
tests/phpunit/includes/SanitizerTest.php | 114 +-
.../includes/SanitizerValidateEmailTest.php | 35 +-
.../phpunit/includes/SeleniumConfigurationTest.php | 222 -
tests/phpunit/includes/SiteConfigurationTest.php | 39 +-
tests/phpunit/includes/StringUtilsTest.php | 166 +-
tests/phpunit/includes/TemplateCategoriesTest.php | 24 +-
tests/phpunit/includes/TestUser.php | 7 +-
tests/phpunit/includes/TimeAdjustTest.php | 40 +-
tests/phpunit/includes/TimestampTest.php | 264 +-
tests/phpunit/includes/TitleMethodsTest.php | 20 +-
tests/phpunit/includes/TitlePermissionTest.php | 142 +-
tests/phpunit/includes/TitleTest.php | 194 +-
tests/phpunit/includes/UIDGeneratorTest.php | 22 +
tests/phpunit/includes/UserMailerTest.php | 14 +
tests/phpunit/includes/UserTest.php | 20 +
tests/phpunit/includes/WebRequestTest.php | 114 +-
tests/phpunit/includes/WikiPageTest.php | 68 +-
.../includes/WikiPageTest_ContentHandlerUseDB.php | 25 +-
tests/phpunit/includes/XmlJsTest.php | 25 +-
tests/phpunit/includes/XmlSelectTest.php | 39 +-
tests/phpunit/includes/XmlTest.php | 132 +-
tests/phpunit/includes/XmlTypeCheckTest.php | 30 +
tests/phpunit/includes/ZipDirectoryReaderTest.php | 27 +-
.../includes/api/ApiAccountCreationTest.php | 56 +-
tests/phpunit/includes/api/ApiBlockTest.php | 21 +-
tests/phpunit/includes/api/ApiEditPageTest.php | 107 +-
tests/phpunit/includes/api/ApiOptionsTest.php | 38 +-
tests/phpunit/includes/api/ApiParseTest.php | 5 +-
tests/phpunit/includes/api/ApiPurgeTest.php | 3 +-
tests/phpunit/includes/api/ApiTest.php | 47 +-
tests/phpunit/includes/api/ApiTestCase.php | 40 +-
tests/phpunit/includes/api/ApiTestCaseUpload.php | 4 +-
tests/phpunit/includes/api/ApiUploadTest.php | 42 +-
tests/phpunit/includes/api/ApiWatchTest.php | 55 +-
.../phpunit/includes/api/RandomImageGenerator.php | 13 +-
.../includes/api/format/ApiFormatPhpTest.php | 4 +-
.../phpunit/includes/api/generateRandomImages.php | 6 +-
.../includes/api/query/ApiQueryBasicTest.php | 77 +-
.../includes/api/query/ApiQueryContinue2Test.php | 14 +-
.../includes/api/query/ApiQueryContinueTest.php | 198 +-
.../api/query/ApiQueryContinueTestBase.php | 62 +-
.../includes/api/query/ApiQueryRevisionsTest.php | 2 +-
tests/phpunit/includes/api/query/ApiQueryTest.php | 7 +-
.../includes/api/query/ApiQueryTestBase.php | 15 +-
tests/phpunit/includes/cache/GenderCacheTest.php | 9 +-
tests/phpunit/includes/cache/MessageCacheTest.php | 128 +
.../phpunit/includes/cache/ProcessCacheLRUTest.php | 24 +-
.../includes/content/ContentHandlerTest.php | 99 +-
tests/phpunit/includes/content/CssContentTest.php | 8 +-
.../includes/content/JavaScriptContentTest.php | 20 +-
tests/phpunit/includes/content/TextContentTest.php | 43 +-
.../content/WikitextContentHandlerTest.php | 44 +-
.../includes/content/WikitextContentTest.php | 24 +-
.../phpunit/includes/db/DatabaseMysqlBaseTest.php | 209 +
tests/phpunit/includes/db/DatabaseSQLTest.php | 633 +-
tests/phpunit/includes/db/DatabaseSqliteTest.php | 46 +-
tests/phpunit/includes/db/DatabaseTest.php | 62 +-
tests/phpunit/includes/db/DatabaseTestHelper.php | 166 +
tests/phpunit/includes/db/ORMRowTest.php | 1 +
tests/phpunit/includes/db/ORMTableTest.php | 2 +-
tests/phpunit/includes/db/TestORMRowTest.php | 52 +-
tests/phpunit/includes/debug/MWDebugTest.php | 8 +-
.../includes/filebackend/FileBackendTest.php | 251 +-
tests/phpunit/includes/filerepo/FileRepoTest.php | 25 +-
tests/phpunit/includes/filerepo/StoreBatchTest.php | 13 +-
.../includes/installer/InstallDocFormatterTest.php | 7 +-
.../includes/installer/OracleInstallerTest.php | 48 +
tests/phpunit/includes/jobqueue/JobQueueTest.php | 129 +-
tests/phpunit/includes/json/FormatJsonTest.php | 161 +
tests/phpunit/includes/json/ServicesJsonTest.php | 93 -
tests/phpunit/includes/libs/CSSJanusTest.php | 72 +-
tests/phpunit/includes/libs/CSSMinTest.php | 12 +-
.../includes/libs/GenericArrayObjectTest.php | 3 +-
tests/phpunit/includes/libs/IEUrlExtensionTest.php | 30 +-
.../includes/libs/JavaScriptMinifierTest.php | 8 +-
.../includes/media/BitmapMetadataHandlerTest.php | 29 +-
tests/phpunit/includes/media/BitmapScalingTest.php | 47 +-
tests/phpunit/includes/media/ExifBitmapTest.php | 53 +-
tests/phpunit/includes/media/ExifRotationTest.php | 49 +-
tests/phpunit/includes/media/ExifTest.php | 12 +-
tests/phpunit/includes/media/FakeDimensionFile.php | 28 +
.../phpunit/includes/media/FormatMetadataTest.php | 11 +-
.../includes/media/GIFMetadataExtractorTest.php | 1 +
tests/phpunit/includes/media/GIFTest.php | 16 +
tests/phpunit/includes/media/IPTCTest.php | 31 +-
.../includes/media/JpegMetadataExtractorTest.php | 5 +-
tests/phpunit/includes/media/JpegTest.php | 10 +-
tests/phpunit/includes/media/MediaHandlerTest.php | 7 +-
.../includes/media/PNGMetadataExtractorTest.php | 32 +-
tests/phpunit/includes/media/PNGTest.php | 16 +
.../includes/media/SVGMetadataExtractorTest.php | 9 +-
tests/phpunit/includes/media/TiffTest.php | 20 +-
tests/phpunit/includes/media/XMPTest.php | 17 +-
tests/phpunit/includes/media/XMPValidateTest.php | 5 +-
tests/phpunit/includes/normal/CleanUpTest.php | 32 +-
.../phpunit/includes/objectcache/BagOStuffTest.php | 13 +-
.../phpunit/includes/parser/MagicVariableTest.php | 107 +-
.../includes/parser/MediaWikiParserTest.php | 108 +-
tests/phpunit/includes/parser/NewParserTest.php | 347 +-
.../phpunit/includes/parser/ParserMethodsTest.php | 48 +-
tests/phpunit/includes/parser/ParserOutputTest.php | 12 +-
.../phpunit/includes/parser/ParserPreloadTest.php | 18 +-
tests/phpunit/includes/parser/PreprocessorTest.php | 38 +-
tests/phpunit/includes/parser/TagHooksTest.php | 8 +-
tests/phpunit/includes/parser/TidyTest.php | 44 +
tests/phpunit/includes/search/SearchEngineTest.php | 14 +-
tests/phpunit/includes/search/SearchUpdateTest.php | 15 +-
tests/phpunit/includes/site/MediaWikiSiteTest.php | 5 +-
tests/phpunit/includes/site/SiteListTest.php | 9 +-
tests/phpunit/includes/site/SiteSQLStoreTest.php | 13 +-
tests/phpunit/includes/site/SiteTest.php | 33 +-
tests/phpunit/includes/site/TestSites.php | 1 -
.../includes/specials/QueryAllSpecialPagesTest.php | 2 +-
.../includes/specials/SpecialPreferencesTest.php | 60 +
.../includes/specials/SpecialRecentchangesTest.php | 2 -
.../includes/specials/SpecialSearchTest.php | 9 +-
tests/phpunit/includes/upload/UploadBaseTest.php | 147 +
.../phpunit/includes/upload/UploadFromUrlTest.php | 18 +-
tests/phpunit/includes/upload/UploadStashTest.php | 3 +-
tests/phpunit/includes/upload/UploadTest.php | 144 -
tests/phpunit/install-phpunit.sh | 2 +-
tests/phpunit/languages/LanguageAmTest.php | 18 +-
tests/phpunit/languages/LanguageArTest.php | 29 +-
tests/phpunit/languages/LanguageBeTest.php | 18 +-
tests/phpunit/languages/LanguageBe_taraskTest.php | 59 +-
tests/phpunit/languages/LanguageBhoTest.php | 19 +-
tests/phpunit/languages/LanguageBsTest.php | 19 +-
.../phpunit/languages/LanguageClassesTestCase.php | 58 +-
tests/phpunit/languages/LanguageCsTest.php | 19 +-
tests/phpunit/languages/LanguageCuTest.php | 31 +-
tests/phpunit/languages/LanguageCyTest.php | 19 +-
tests/phpunit/languages/LanguageDsbTest.php | 19 +-
tests/phpunit/languages/LanguageFrTest.php | 19 +-
tests/phpunit/languages/LanguageGaTest.php | 19 +-
tests/phpunit/languages/LanguageGdTest.php | 39 +-
tests/phpunit/languages/LanguageGvTest.php | 21 +-
tests/phpunit/languages/LanguageHeTest.php | 119 +-
tests/phpunit/languages/LanguageHiTest.php | 19 +-
tests/phpunit/languages/LanguageHrTest.php | 19 +-
tests/phpunit/languages/LanguageHsbTest.php | 19 +-
tests/phpunit/languages/LanguageHuTest.php | 19 +-
tests/phpunit/languages/LanguageHyTest.php | 20 +-
tests/phpunit/languages/LanguageKshTest.php | 19 +-
tests/phpunit/languages/LanguageLnTest.php | 19 +-
tests/phpunit/languages/LanguageLtTest.php | 38 +-
tests/phpunit/languages/LanguageLvTest.php | 19 +-
tests/phpunit/languages/LanguageMgTest.php | 19 +-
tests/phpunit/languages/LanguageMkTest.php | 21 +-
tests/phpunit/languages/LanguageMlTest.php | 11 +-
tests/phpunit/languages/LanguageMoTest.php | 18 +-
tests/phpunit/languages/LanguageMtTest.php | 59 +-
tests/phpunit/languages/LanguageNlTest.php | 6 +-
tests/phpunit/languages/LanguageNsoTest.php | 22 +-
tests/phpunit/languages/LanguagePlTest.php | 59 +-
tests/phpunit/languages/LanguageRoTest.php | 18 +-
tests/phpunit/languages/LanguageRuTest.php | 44 +-
tests/phpunit/languages/LanguageSeTest.php | 27 +-
tests/phpunit/languages/LanguageSgsTest.php | 27 +-
tests/phpunit/languages/LanguageShTest.php | 30 +-
tests/phpunit/languages/LanguageSkTest.php | 18 +-
tests/phpunit/languages/LanguageSlTest.php | 22 +-
tests/phpunit/languages/LanguageSmaTest.php | 27 +-
tests/phpunit/languages/LanguageSrTest.php | 84 +-
tests/phpunit/languages/LanguageTest.php | 311 +-
tests/phpunit/languages/LanguageTiTest.php | 22 +-
tests/phpunit/languages/LanguageTlTest.php | 22 +-
tests/phpunit/languages/LanguageTrTest.php | 5 +-
tests/phpunit/languages/LanguageUkTest.php | 35 +-
tests/phpunit/languages/LanguageUzTest.php | 28 +-
tests/phpunit/languages/LanguageWaTest.php | 22 +-
.../utils/CLDRPluralRuleEvaluatorTest.php | 2 +-
tests/phpunit/maintenance/DumpTestCase.php | 26 +-
tests/phpunit/maintenance/MaintenanceTest.php | 6 +-
tests/phpunit/maintenance/backupPrefetchTest.php | 3 -
tests/phpunit/maintenance/backupTextPassTest.php | 7 +-
tests/phpunit/maintenance/backup_LogTest.php | 4 +-
tests/phpunit/maintenance/backup_PageTest.php | 6 +-
tests/phpunit/maintenance/fetchTextTest.php | 2 -
tests/phpunit/maintenance/getSlaveServerTest.php | 2 -
tests/phpunit/mocks/filebackend/MockFSFile.php | 69 +
.../phpunit/mocks/filebackend/MockFileBackend.php | 122 +
tests/phpunit/mocks/media/MockBitmapHandler.php | 92 +
tests/phpunit/phpunit.php | 24 +-
tests/phpunit/resources/ResourcesTest.php | 128 -
tests/phpunit/skins/SideBarTest.php | 75 +-
tests/phpunit/structure/AutoLoaderTest.php | 56 +
tests/phpunit/structure/ResourcesTest.php | 131 +
tests/phpunit/structure/StructureTest.php | 63 +
tests/phpunit/suite.xml | 27 +-
tests/phpunit/suites/ExtensionsParserTestSuite.php | 8 +
tests/phpunit/suites/UploadFromUrlTestSuite.php | 13 +-
tests/qunit/QUnitTestResources.php | 4 +-
tests/qunit/data/generateJqueryMsgData.php | 4 +-
tests/qunit/data/load.mock.php | 3 +-
tests/qunit/data/testrunner.js | 29 +-
.../resources/jquery/jquery.byteLength.test.js | 24 +-
.../resources/jquery/jquery.byteLimit.test.js | 120 +-
.../suites/resources/jquery/jquery.client.test.js | 283 +-
.../resources/jquery/jquery.localize.test.js | 10 +-
.../jquery/jquery.makeCollapsible.test.js | 287 +
.../resources/jquery/jquery.tablesorter.test.js | 166 +-
.../resources/jquery/jquery.textSelection.test.js | 7 -
.../mediawiki.special.recentchanges.test.js | 2 +-
.../resources/mediawiki/mediawiki.Title.test.js | 268 +-
.../mediawiki/mediawiki.jqueryMsg.test.js | 337 +-
.../suites/resources/mediawiki/mediawiki.test.js | 171 +-
.../resources/mediawiki/mediawiki.user.test.js | 6 +-
.../resources/mediawiki/mediawiki.util.test.js | 91 +-
tests/qunit/suites/resources/startup.test.js | 129 +
tests/selenium/Selenium.php | 191 -
tests/selenium/SeleniumConfig.php | 80 -
tests/selenium/SeleniumLoader.php | 9 -
tests/selenium/SeleniumServerManager.php | 252 -
tests/selenium/SeleniumTestCase.php | 127 -
tests/selenium/SeleniumTestConsoleLogger.php | 25 -
tests/selenium/SeleniumTestConstants.php | 24 -
tests/selenium/SeleniumTestHTMLLogger.php | 36 -
tests/selenium/SeleniumTestListener.php | 65 -
tests/selenium/SeleniumTestSuite.php | 57 -
tests/selenium/data/SimpleSeleniumTestDB.sql | 1453 ---
tests/selenium/data/SimpleSeleniumTestImages.zip | Bin 21993 -> 0 bytes
tests/selenium/data/Wikipedia-logo-v2-de.png | Bin 21479 -> 0 bytes
.../data/mediawiki118_fresh_installation.sql | 1543 ----
.../MediaWikiButtonsAvailabilityTestCase.php | 90 -
.../MediaWikiDifferentDatabaseAccountTestCase.php | 73 -
.../MediaWikiDifferntDatabasePrefixTestCase.php | 88 -
...ediaWikiErrorsConnectToDatabasePageTestCase.php | 131 -
.../installer/MediaWikiErrorsNamepageTestCase.php | 119 -
.../installer/MediaWikiHelpFieldHintTestCase.php | 128 -
.../MediaWikiInstallationCommonFunction.php | 259 -
.../installer/MediaWikiInstallationConfig.php | 45 -
.../installer/MediaWikiInstallationMessage.php | 53 -
.../installer/MediaWikiInstallationVariables.php | 73 -
.../installer/MediaWikiInstallerTestSuite.php | 49 -
.../installer/MediaWikiMySQLDataBaseTestCase.php | 71 -
.../MediaWikiMySQLiteDataBaseTestCase.php | 73 -
.../MediaWikiOnAlreadyInstalledTestCase.php | 65 -
.../MediaWikiRestartInstallationTestCase.php | 104 -
.../MediaWikiRightFrameworkLinksTestCase.php | 83 -
.../MediaWikiUpgradeExistingDatabaseTestCase.php | 111 -
.../installer/MediaWikiUserInterfaceTestCase.php | 494 -
tests/selenium/installer/README.txt | 32 -
tests/selenium/selenium_settings.ini.sample | 32 -
tests/selenium/selenium_settings_grid.ini.sample | 16 -
.../suites/AddContentToNewPageTestCase.php | 173 -
tests/selenium/suites/AddNewPageTestCase.php | 59 -
tests/selenium/suites/CreateAccountTestCase.php | 109 -
tests/selenium/suites/DeletePageAdminTestCase.php | 82 -
tests/selenium/suites/EmailPasswordTestCase.php | 74 -
tests/selenium/suites/MediaWikiEditorConfig.php | 41 -
tests/selenium/suites/MediaWikiEditorTestSuite.php | 19 -
tests/selenium/suites/MediaWikiExtraTestSuite.php | 21 -
.../selenium/suites/MediawikiCoreSmokeTestCase.php | 70 -
.../suites/MediawikiCoreSmokeTestSuite.php | 19 -
tests/selenium/suites/MovePageTestCase.php | 111 -
tests/selenium/suites/MyContributionsTestCase.php | 59 -
tests/selenium/suites/MyWatchListTestCase.php | 51 -
tests/selenium/suites/PageDeleteTestSuite.php | 15 -
tests/selenium/suites/PageSearchTestCase.php | 98 -
tests/selenium/suites/PreviewPageTestCase.php | 48 -
tests/selenium/suites/SavePageTestCase.php | 53 -
tests/selenium/suites/SimpleSeleniumConfig.php | 30 -
tests/selenium/suites/SimpleSeleniumTestCase.php | 39 -
tests/selenium/suites/SimpleSeleniumTestSuite.php | 26 -
tests/selenium/suites/UserPreferencesTestCase.php | 170 -
tests/testHelpers.inc | 33 +-
thumb.php | 198 +-
thumb_handler.php | 2 +-
wiki.phtml | 2 +-
1928 files changed, 103628 insertions(+), 71618 deletions(-)
mode change 100644 => 120000 README.mediawiki
delete mode 100644 RELEASE-NOTES-1.21
create mode 100644 RELEASE-NOTES-1.22
create mode 100644 composer-example.json
delete mode 100644 composer.json
delete mode 100644 docs/upload.txt
create mode 100644 extensions/Cite/.jshintignore
create mode 100644 extensions/Cite/.jshintrc
delete mode 100644 extensions/Cite/citeCatTreeParserTests.txt
create mode 100644 extensions/Cite/modules/ext.cite.css
create mode 100644 extensions/Cite/modules/ext.cite.js
create mode 100644 extensions/Cite/modules/ext.cite.popups.js
delete mode 100644 extensions/Cite/modules/ext.cite/ext.cite.js
create mode 100644 extensions/Cite/modules/ext.rtlcite.css
delete mode 100644 extensions/Cite/modules/ext.rtlcite/ext.rtlcite.css
create mode 100644 extensions/Cite/modules/ext.specialcite.css
delete mode 100644 extensions/Cite/modules/ext.specialcite/ext.specialcite.css
create mode 100644 extensions/ConfirmEdit/blacklist
create mode 100644 extensions/Gadgets/GadgetHooks.php
delete mode 100644 extensions/Vector/.gitreview
delete mode 100644 extensions/Vector/README
delete mode 100644 extensions/Vector/Vector.hooks.php
delete mode 100644 extensions/Vector/Vector.i18n.php
delete mode 100644 extensions/Vector/Vector.php
delete mode 100644 extensions/Vector/modules/ext.vector.collapsibleNav.css
delete mode 100644 extensions/Vector/modules/ext.vector.collapsibleNav.js
delete mode 100644 extensions/Vector/modules/ext.vector.collapsibleTabs.js
delete mode 100644 extensions/Vector/modules/ext.vector.expandableSearch.css
delete mode 100644 extensions/Vector/modules/ext.vector.expandableSearch.js
delete mode 100644 extensions/Vector/modules/ext.vector.footerCleanup.css
delete mode 100644 extensions/Vector/modules/ext.vector.footerCleanup.js
delete mode 100644 extensions/Vector/modules/ext.vector.sectionEditLinks.css
delete mode 100644 extensions/Vector/modules/ext.vector.sectionEditLinks.js
delete mode 100644 extensions/Vector/modules/images/closed-ltr.png
delete mode 100644 extensions/Vector/modules/images/closed-rtl.png
delete mode 100644 extensions/Vector/modules/images/edit-faded.png
delete mode 100644 extensions/Vector/modules/images/edit.png
delete mode 100644 extensions/Vector/modules/images/open.png
delete mode 100644 extensions/Vector/modules/images/portal-break.png
delete mode 100644 extensions/Vector/modules/jquery.collapsibleTabs.js
delete mode 100644 extensions/Vector/modules/jquery.footerCollapsibleList.js
delete mode 100644 extensions/Vector/switchExperimentPrefs.php
create mode 100644 extensions/WikiEditor/modules/images/dialogs/insert-disambiguation.png
create mode 100644 includes/CallableUpdate.php
delete mode 100644 includes/ChangesList.php
delete mode 100644 includes/CryptRand.php
delete mode 100644 includes/ExternalEdit.php
delete mode 100644 includes/ExternalUser.php
create mode 100644 includes/HashRing.php
create mode 100644 includes/HtmlFormatter.php
delete mode 100644 includes/ImageGallery.php
create mode 100644 includes/MWCryptRand.php
delete mode 100644 includes/RecentChange.php
delete mode 100644 includes/SeleniumWebSettings.php
delete mode 100644 includes/SkinLegacy.php
create mode 100644 includes/StatCounter.php
create mode 100644 includes/api/ApiQueryFileRepoInfo.php
create mode 100644 includes/changes/ChangesList.php
create mode 100644 includes/changes/EnhancedChangesList.php
create mode 100644 includes/changes/OldChangesList.php
create mode 100644 includes/changes/RCCacheEntry.php
create mode 100644 includes/changes/RecentChange.php
create mode 100644 includes/db/ChronologyProtector.php
create mode 100644 includes/db/DatabaseMysqlBase.php
create mode 100644 includes/db/DatabaseMysqli.php
delete mode 100644 includes/extauth/Hardcoded.php
delete mode 100644 includes/extauth/MediaWiki.php
delete mode 100644 includes/extauth/vB.php
create mode 100644 includes/filebackend/lockmanager/RedisLockManager.php
create mode 100644 includes/gallery/ImageGalleryBase.php
create mode 100644 includes/gallery/NolinesImageGallery.php
create mode 100644 includes/gallery/PackedImageGallery.php
create mode 100644 includes/gallery/PackedOverlayImageGallery.php
create mode 100644 includes/gallery/TraditionalImageGallery.php
delete mode 100644 includes/job/JobQueueAggregator.php
delete mode 100644 includes/job/JobQueueAggregatorMemc.php
delete mode 100644 includes/job/JobQueueAggregatorRedis.php
create mode 100644 includes/job/JobQueueFederated.php
create mode 100644 includes/job/JobQueueRedis.php
create mode 100644 includes/job/aggregator/JobQueueAggregator.php
create mode 100644 includes/job/aggregator/JobQueueAggregatorMemc.php
create mode 100644 includes/job/aggregator/JobQueueAggregatorRedis.php
delete mode 100644 includes/json/Services_JSON.php
create mode 100644 includes/libs/lessc.inc.php
create mode 100644 includes/logging/DeleteLogFormatter.php
create mode 100644 includes/logging/MoveLogFormatter.php
create mode 100644 includes/logging/NewUsersLogFormatter.php
create mode 100644 includes/logging/PatrolLogFormatter.php
create mode 100644 includes/logging/RightsLogFormatter.php
delete mode 100644 includes/parser/CoreLinkFunctions.php
delete mode 100644 includes/parser/Parser_LinkHooks.php
create mode 100644 includes/rcfeed/IRCColourfulRCFeedFormatter.php
create mode 100644 includes/rcfeed/JSONRCFeedFormatter.php
create mode 100644 includes/rcfeed/RCFeedEngine.php
create mode 100644 includes/rcfeed/RCFeedFormatter.php
create mode 100644 includes/rcfeed/RedisPubSubFeedEngine.php
create mode 100644 includes/rcfeed/UDPRCFeedEngine.php
create mode 100644 includes/resourceloader/ResourceLoaderLESSFunctions.php
delete mode 100644 includes/specials/SpecialBlockme.php
delete mode 100644 includes/specials/SpecialDisambiguations.php
create mode 100644 includes/specials/SpecialRandomInCategory.php
create mode 100644 includes/specials/SpecialRedirect.php
create mode 100644 includes/specials/SpecialResetTokens.php
create mode 100644 languages/classes/LanguageEs.php
delete mode 100644 languages/classes/LanguageHi.php
delete mode 100644 languages/classes/LanguageMg.php
delete mode 100644 languages/classes/LanguageMk.php
delete mode 100644 languages/classes/LanguageMt.php
delete mode 100644 languages/classes/LanguageNso.php
delete mode 100644 languages/classes/LanguageSh.php
delete mode 100644 languages/classes/LanguageSk.php
delete mode 100644 languages/classes/LanguageTi.php
delete mode 100644 languages/classes/LanguageTl.php
create mode 100644 languages/messages/MessagesBbc.php
create mode 100644 languages/messages/MessagesBbc_latn.php
create mode 100644 languages/messages/MessagesBxr.php
create mode 100644 maintenance/archives/patch-archive-ar_id.sql
delete mode 100644 maintenance/archives/patch-eu_local_id.sql
delete mode 100644 maintenance/archives/patch-external_user.sql
create mode 100644 maintenance/archives/patch-externallinks-el_id.sql
create mode 100644 maintenance/archives/patch-iwl_prefix_title_from-non-unique.sql
create mode 100644 maintenance/archives/patch-iwlinks-from-title-index.sql
delete mode 100644 maintenance/archives/patch-kill-iwl_pft.sql
create mode 100644 maintenance/archives/patch-tag_summary.sql
create mode 100644 maintenance/archives/patch-valid_tag.sql
create mode 100644 maintenance/benchmarks/README
create mode 100644 maintenance/checkLess.php
create mode 100644 maintenance/copyJobQueue.php
create mode 100644 maintenance/dictionary/mediawiki.dic
create mode 100644 maintenance/eraseArchivedFile.php
delete mode 100644 maintenance/hiphop/compiler.conf
delete mode 100644 maintenance/hiphop/extra-files
delete mode 100644 maintenance/hiphop/make
create mode 100644 maintenance/oracle/archives/patch-archive-ar_id.sql
create mode 100644 maintenance/oracle/archives/patch-externallinks-el_id.sql
delete mode 100644 maintenance/postgres/archives/patch-external_user.sql
delete mode 100644 maintenance/postgres/archives/patch-kill-iwl_pft.sql
delete mode 100644 maintenance/proxyCheck.php
create mode 100644 maintenance/purgeChangedFiles.php
create mode 100644 maintenance/purgeChangedPages.php
delete mode 100644 maintenance/purgeDeletedFiles.php
create mode 100644 maintenance/sqlite/archives/patch-archive-ar_id.sql
create mode 100644 maintenance/sqlite/archives/patch-externallinks-el_id.sql
delete mode 100644 maintenance/sqlite/archives/patch-kill-iwl_pft.sql
create mode 100644 maintenance/tidyUpBug37714.php
delete mode 100644 redirect.php
delete mode 100644 redirect.php5
delete mode 100644 redirect.phtml
delete mode 100644 resources/Resources.php.orig
create mode 100644 resources/jquery.chosen/LICENSE
create mode 100644 resources/jquery.chosen/chosen-sprite.png
create mode 100644 resources/jquery.chosen/chosen-sprite@2x.png
create mode 100644 resources/jquery.chosen/chosen.css
create mode 100644 resources/jquery.chosen/chosen.jquery.js
delete mode 100644 resources/jquery.ui/themes/vector/images/button-blue-hover-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-blue-hover.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-blue-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-blue.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-disabled-blue.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-disabled-green.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-disabled-red.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-disabled.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-down-blue.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-down-green.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-down-red.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-down.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-green-hover-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-green-hover.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-green-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-green.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-large-disabled-green.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-large-off-green.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-off-blue.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-off-green.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-off-red.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-off.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-orange-hover-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-orange-hover.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-orange-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-orange.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-over-blue.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-over-green.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-over-red.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-over.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-red-hover-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-red-hover.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-red-large.png
delete mode 100644 resources/jquery.ui/themes/vector/images/button-red.png
create mode 100644 resources/mediawiki.action/images/green-checkmark.png
create mode 100644 resources/mediawiki.action/mediawiki.action.edit.collapsibleFooter.css
create mode 100644 resources/mediawiki.action/mediawiki.action.edit.collapsibleFooter.js
create mode 100644 resources/mediawiki.action/mediawiki.action.edit.editWarning.js
create mode 100644 resources/mediawiki.action/mediawiki.action.edit.styles.css
create mode 100644 resources/mediawiki.action/mediawiki.action.view.postEdit.css
create mode 100644 resources/mediawiki.api/mediawiki.api.login.js
create mode 100644 resources/mediawiki.language/mediawiki.language.months.js
create mode 100644 resources/mediawiki.less/mediawiki.mixins.less
create mode 100644 resources/mediawiki.page/mediawiki.page.gallery.js
create mode 100644 resources/mediawiki.page/mediawiki.page.image.pagination.js
delete mode 100644 resources/mediawiki.special/images/arrow-collapsed-ltr.png
delete mode 100644 resources/mediawiki.special/images/arrow-collapsed-rtl.png
delete mode 100644 resources/mediawiki.special/images/arrow-expanded.png
create mode 100644 resources/mediawiki.special/images/glyph-people-large.png
create mode 100644 resources/mediawiki.special/images/icon-contributors.png
create mode 100644 resources/mediawiki.special/images/icon-edits.png
create mode 100644 resources/mediawiki.special/images/icon-lock.png
create mode 100644 resources/mediawiki.special/images/icon-pages.png
create mode 100644 resources/mediawiki.special/mediawiki.special.changeslist.enhanced.css
create mode 100644 resources/mediawiki.special/mediawiki.special.createAccount.css
create mode 100644 resources/mediawiki.special/mediawiki.special.createAccount.js
create mode 100644 resources/mediawiki.special/mediawiki.special.pagesWithProp.css
create mode 100644 resources/mediawiki.special/mediawiki.special.userLogin.css
delete mode 100644 resources/mediawiki.special/mediawiki.special.userLogin.signup.js
create mode 100644 resources/mediawiki.special/mediawiki.special.vforms.css
create mode 100644 resources/mediawiki.ui/mediawiki.ui.default.css
create mode 100644 resources/mediawiki.ui/mediawiki.ui.vector.css
create mode 100644 resources/mediawiki.ui/sourcefiles/Makefile
create mode 100644 resources/mediawiki.ui/sourcefiles/config.rb
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/_default.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/_utilities.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/_vector.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/default/_buttons.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/default/_forms.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/vector/_buttons.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/vector/_containers.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/components/vector/_forms.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.default.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/mediawiki.ui.vector.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/mixins/_all.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/mixins/_effects.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/mixins/_forms.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/mixins/_type.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/mixins/_utilities.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/settings/_all.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/settings/_colors.scss
create mode 100644 resources/mediawiki.ui/sourcefiles/scss/settings/_typography.scss
create mode 100644 resources/mediawiki/images/arrow-collapsed-ltr.png
create mode 100644 resources/mediawiki/images/arrow-collapsed-rtl.png
create mode 100644 resources/mediawiki/images/arrow-expanded.png
create mode 100644 resources/mediawiki/mediawiki.icon.css
create mode 100644 resources/mediawiki/mediawiki.inspect.js
delete mode 100644 skins/Chick.php
delete mode 100644 skins/MySkin.php
delete mode 100644 skins/Nostalgia.php
delete mode 100644 skins/Simple.php
delete mode 100644 skins/Standard.php
delete mode 100644 skins/archlinux/Opera6Fixes.css
delete mode 100644 skins/archlinux/Opera7Fixes.css
delete mode 100644 skins/archlinux/Opera9Fixes.css
delete mode 100644 skins/chick/IE60Fixes.css
delete mode 100644 skins/chick/main.css
create mode 100644 skins/cologneblue/print.css
create mode 100644 skins/common/images/question-small.png
create mode 100644 skins/common/images/question.svg
delete mode 100644 skins/common/wikiprintable.css
delete mode 100644 skins/monobook/Opera6Fixes.css
delete mode 100644 skins/monobook/Opera7Fixes.css
delete mode 100644 skins/monobook/Opera9Fixes.css
delete mode 100644 skins/myskin/main.css
delete mode 100644 skins/nostalgia/screen.css
delete mode 100644 skins/simple/discussionitem_icon.gif
delete mode 100644 skins/simple/external.png
delete mode 100644 skins/simple/file_icon.gif
delete mode 100644 skins/simple/link_icon.gif
delete mode 100644 skins/simple/lock_icon.gif
delete mode 100644 skins/simple/mail_icon.gif
delete mode 100644 skins/simple/main.css
delete mode 100644 skins/standard/main.css
create mode 100644 skins/vector/beta/screen.less
create mode 100644 skins/vector/beta/variables.less
create mode 100644 skins/vector/collapsibleNav.js
create mode 100644 skins/vector/collapsibleNav.less
create mode 100644 skins/vector/collapsibleTabs.js
create mode 100644 skins/vector/externalLinks.less
create mode 100644 skins/vector/images/arrow-collapsed-ltr.png
create mode 100644 skins/vector/images/arrow-collapsed-ltr.svg
create mode 100644 skins/vector/images/arrow-collapsed-rtl.png
create mode 100644 skins/vector/images/arrow-collapsed-rtl.svg
create mode 100644 skins/vector/images/arrow-down-focus-icon.svg
create mode 100644 skins/vector/images/arrow-down-icon.svg
create mode 100644 skins/vector/images/arrow-expanded.png
create mode 100644 skins/vector/images/arrow-expanded.svg
create mode 100644 skins/vector/images/user-icon.svg
delete mode 100644 skins/vector/screen-hd.css
create mode 100644 skins/vector/screen-hd.less
delete mode 100644 skins/vector/screen.css
create mode 100644 skins/vector/screen.less
create mode 100644 skins/vector/styles-beta.less
create mode 100644 skins/vector/styles.less
create mode 100644 skins/vector/variables.less
delete mode 100644 tests/RunSeleniumTests.php
create mode 100644 tests/parser/ParserTestResult.php
delete mode 100644 tests/phpunit/AutoLoaderTest.php
create mode 100644 tests/phpunit/MediaWikiPHPUnitTestListener.php
delete mode 100644 tests/phpunit/StructureTest.php
create mode 100644 tests/phpunit/data/less/common/test.common.mixins.less
create mode 100644 tests/phpunit/data/less/module/dependency.less
create mode 100644 tests/phpunit/data/less/module/styles.css
create mode 100644 tests/phpunit/data/less/module/styles.less
create mode 100644 tests/phpunit/includes/FallbackTest.php
create mode 100644 tests/phpunit/includes/FauxRequestTest.php
create mode 100644 tests/phpunit/includes/HTMLCheckMatrixTest.php
create mode 100644 tests/phpunit/includes/HashRingTest.php
create mode 100644 tests/phpunit/includes/HtmlFormatterTest.php
delete mode 100644 tests/phpunit/includes/JsonTest.php
create mode 100644 tests/phpunit/includes/MWExceptionHandlerTest.php
delete mode 100644 tests/phpunit/includes/Providers.php
delete mode 100644 tests/phpunit/includes/SeleniumConfigurationTest.php
create mode 100644 tests/phpunit/includes/UserMailerTest.php
create mode 100644 tests/phpunit/includes/XmlTypeCheckTest.php
create mode 100644 tests/phpunit/includes/cache/MessageCacheTest.php
create mode 100644 tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
create mode 100644 tests/phpunit/includes/db/DatabaseTestHelper.php
create mode 100644 tests/phpunit/includes/installer/OracleInstallerTest.php
create mode 100644 tests/phpunit/includes/json/FormatJsonTest.php
delete mode 100644 tests/phpunit/includes/json/ServicesJsonTest.php
create mode 100644 tests/phpunit/includes/media/FakeDimensionFile.php
create mode 100644 tests/phpunit/includes/parser/TidyTest.php
create mode 100644 tests/phpunit/includes/specials/SpecialPreferencesTest.php
create mode 100644 tests/phpunit/includes/upload/UploadBaseTest.php
delete mode 100644 tests/phpunit/includes/upload/UploadTest.php
create mode 100644 tests/phpunit/mocks/filebackend/MockFSFile.php
create mode 100644 tests/phpunit/mocks/filebackend/MockFileBackend.php
create mode 100644 tests/phpunit/mocks/media/MockBitmapHandler.php
delete mode 100644 tests/phpunit/resources/ResourcesTest.php
create mode 100644 tests/phpunit/structure/AutoLoaderTest.php
create mode 100644 tests/phpunit/structure/ResourcesTest.php
create mode 100644 tests/phpunit/structure/StructureTest.php
create mode 100644 tests/phpunit/suites/ExtensionsParserTestSuite.php
create mode 100644 tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js
create mode 100644 tests/qunit/suites/resources/startup.test.js
delete mode 100644 tests/selenium/Selenium.php
delete mode 100644 tests/selenium/SeleniumConfig.php
delete mode 100644 tests/selenium/SeleniumLoader.php
delete mode 100644 tests/selenium/SeleniumServerManager.php
delete mode 100644 tests/selenium/SeleniumTestCase.php
delete mode 100644 tests/selenium/SeleniumTestConsoleLogger.php
delete mode 100644 tests/selenium/SeleniumTestConstants.php
delete mode 100644 tests/selenium/SeleniumTestHTMLLogger.php
delete mode 100644 tests/selenium/SeleniumTestListener.php
delete mode 100644 tests/selenium/SeleniumTestSuite.php
delete mode 100644 tests/selenium/data/SimpleSeleniumTestDB.sql
delete mode 100644 tests/selenium/data/SimpleSeleniumTestImages.zip
delete mode 100644 tests/selenium/data/Wikipedia-logo-v2-de.png
delete mode 100644 tests/selenium/data/mediawiki118_fresh_installation.sql
delete mode 100644 tests/selenium/installer/MediaWikiButtonsAvailabilityTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiDifferentDatabaseAccountTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiDifferntDatabasePrefixTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiErrorsConnectToDatabasePageTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiErrorsNamepageTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiHelpFieldHintTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiInstallationCommonFunction.php
delete mode 100644 tests/selenium/installer/MediaWikiInstallationConfig.php
delete mode 100644 tests/selenium/installer/MediaWikiInstallationMessage.php
delete mode 100644 tests/selenium/installer/MediaWikiInstallationVariables.php
delete mode 100644 tests/selenium/installer/MediaWikiInstallerTestSuite.php
delete mode 100644 tests/selenium/installer/MediaWikiMySQLDataBaseTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiMySQLiteDataBaseTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiOnAlreadyInstalledTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiRestartInstallationTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiRightFrameworkLinksTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiUpgradeExistingDatabaseTestCase.php
delete mode 100644 tests/selenium/installer/MediaWikiUserInterfaceTestCase.php
delete mode 100644 tests/selenium/installer/README.txt
delete mode 100644 tests/selenium/selenium_settings.ini.sample
delete mode 100644 tests/selenium/selenium_settings_grid.ini.sample
delete mode 100644 tests/selenium/suites/AddContentToNewPageTestCase.php
delete mode 100644 tests/selenium/suites/AddNewPageTestCase.php
delete mode 100644 tests/selenium/suites/CreateAccountTestCase.php
delete mode 100644 tests/selenium/suites/DeletePageAdminTestCase.php
delete mode 100644 tests/selenium/suites/EmailPasswordTestCase.php
delete mode 100644 tests/selenium/suites/MediaWikiEditorConfig.php
delete mode 100644 tests/selenium/suites/MediaWikiEditorTestSuite.php
delete mode 100644 tests/selenium/suites/MediaWikiExtraTestSuite.php
delete mode 100644 tests/selenium/suites/MediawikiCoreSmokeTestCase.php
delete mode 100644 tests/selenium/suites/MediawikiCoreSmokeTestSuite.php
delete mode 100644 tests/selenium/suites/MovePageTestCase.php
delete mode 100644 tests/selenium/suites/MyContributionsTestCase.php
delete mode 100644 tests/selenium/suites/MyWatchListTestCase.php
delete mode 100644 tests/selenium/suites/PageDeleteTestSuite.php
delete mode 100644 tests/selenium/suites/PageSearchTestCase.php
delete mode 100644 tests/selenium/suites/PreviewPageTestCase.php
delete mode 100644 tests/selenium/suites/SavePageTestCase.php
delete mode 100644 tests/selenium/suites/SimpleSeleniumConfig.php
delete mode 100644 tests/selenium/suites/SimpleSeleniumTestCase.php
delete mode 100644 tests/selenium/suites/SimpleSeleniumTestSuite.php
delete mode 100644 tests/selenium/suites/UserPreferencesTestCase.php
(limited to 'tests/phpunit/includes/content')
diff --git a/.gitreview b/.gitreview
index 65dbc270..0ec44b83 100644
--- a/.gitreview
+++ b/.gitreview
@@ -2,5 +2,5 @@
host=gerrit.wikimedia.org
port=29418
project=mediawiki/core.git
-defaultbranch=REL1_21
+defaultbranch=master
defaultrebase=0
diff --git a/.jshintignore b/.jshintignore
index 3869deb9..f740f137 100644
--- a/.jshintignore
+++ b/.jshintignore
@@ -1,3 +1,7 @@
+# Generated documentation
+docs/html/
+docs/js/
+
# third-party libs
extensions/
node_modules/
@@ -19,9 +23,7 @@ resources/jquery.effects/
resources/jquery.tipsy/
resources/jquery.ui/
resources/mediawiki.libs/
-
-# legacy scripts
-skins/common/
+resources/jquery.chosen/chosen.jquery.js
# github.com/jshint/jshint/issues/729
tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js
diff --git a/.jshintrc b/.jshintrc
index 7fa138d4..c4e265a4 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -1,15 +1,10 @@
{
- "predef": [
- "mediaWiki",
- "jQuery",
- "QUnit"
- ],
+ /* Common */
- "bitwise": true,
+ // Enforcing
"camelcase": true,
"curly": true,
"eqeqeq": true,
- "forin": false,
"immed": true,
"latedef": true,
"newcap": true,
@@ -17,18 +12,31 @@
"noempty": true,
"nonew": true,
"quotmark": "single",
- "regexp": false,
+ "trailing": true,
"undef": true,
"unused": true,
- "strict": false,
- "trailing": true,
+ // Legacy
+ "onevar": true,
+
+ /* Local */
+ // Enforcing
+ "bitwise": true,
+ "forin": false,
+ "regexp": false,
+ "strict": false,
+ // Relaxing
"laxbreak": true,
"smarttabs": true,
"multistr": true,
-
+ // Environment
"browser": true,
-
+ // Legacy
"nomen": true,
- "onevar": true
+
+ "predef": [
+ "mediaWiki",
+ "jQuery",
+ "QUnit"
+ ]
}
diff --git a/COPYING b/COPYING
index 019694a9..c3bed284 100644
--- a/COPYING
+++ b/COPYING
@@ -1,3 +1,41 @@
+== License and copyright information ==
+
+=== License ===
+
+MediaWiki is licensed under the terms of the GNU General Public License,
+version 2 or later. Derivative works and later versions of the code must be
+free software licensed under the same or a compatible license. This includes
+"extensions" that use MediaWiki functions or variables; see
+http://www.gnu.org/licenses/gpl-faq.html#GPLAndPlugins for details.
+
+For the full text of version 2 of the license, see
+https://www.gnu.org/licenses/gpl-2.0.html or '''GNU General Public License'''
+below.
+
+=== Copyright owners ===
+
+MediaWiki contributors, including those listed in the CREDITS file, hold the
+copyright to this work.
+
+=== Additional license information ===
+
+Some components of MediaWiki imported from other projects may be under other
+Free and Open Source, or Free Culture, licenses. Specific details of their
+licensing information can be found in those components.
+
+Sections of code written exclusively by Lee Crocker or Erik Moeller are also
+released into the public domain, which does not impair the obligations of users
+under the GPL for use of the whole code or other sections thereof.
+
+MediaWiki uses the following Creative Commons icons to illustrate links to the
+CC licenses:
+
+* skins/common/images/cc-by-nc-sa.png
+* skins/common/images/cc-by-sa.png
+
+These icons are trademarked, and used subject to the CC trademark license,
+available at http://creativecommons.org/policies#trademark
+
== GNU GENERAL PUBLIC LICENSE ==
Version 2, June 1991
diff --git a/CREDITS b/CREDITS
index 9c49a9b4..54aca716 100644
--- a/CREDITS
+++ b/CREDITS
@@ -1,4 +1,4 @@
-MediaWiki 1.21 is a collaborative project released under the
+MediaWiki 1.22 is a collaborative project released under the
GNU General Public License v2. We would like to recognize the
following names for their contribution to the product.
@@ -22,6 +22,7 @@ following names for their contribution to the product.
* church of emacs
* Daniel Friesen
* Daniel Kinzler
+* Daniel Renfro
* Danny B.
* David McCabe
* Derk-Jan Hartman
@@ -80,7 +81,7 @@ following names for their contribution to the product.
* Thomas Bleher
* Tim Starling
* Timo Tijhof
-* Tom Gries
+* Thomas Gries
* Trevor Parscal
* Victor Vasiliev
* Yesid Carrillo
@@ -122,6 +123,7 @@ following names for their contribution to the product.
* David Baumgarten
* Denny Vrandecic
* Dévai Tamás
+* Ebrahim Byagowi
* Edward Z. Yang
* Elvis Stansvik
* Erwin Dokter
@@ -143,6 +145,7 @@ following names for their contribution to the product.
* Jimmy Xu
* Jonathan Wiltshire
* John N
+* JuneHyeon Bae
* Jure Kajzer
* Karun Dambiec
* Katie Filbert
@@ -159,7 +162,7 @@ following names for their contribution to the product.
* Manuel Menal
* Marcin Cieślak
* Marcus Buck
-* Mark A. Pelletier
+* Marc-André Pelletier
* Mark Hershberger
* Mark Holmquist
* Marooned
@@ -234,10 +237,5 @@ following names for their contribution to the product.
* Zachary Hauri
== Translators ==
-* Anders Wegge Jakobsen
-* Hk kng
-* Hojjat
-* Meno25
-* Rotem Liss
-* Shinjiman
-* [https://translatewiki.net/wiki/Special:ListUsers/translator Translatewiki.net Translators]
+
+* [https://translatewiki.net/wiki/Translating:MediaWiki/Credits Translators on translatewiki.net and others]
diff --git a/HISTORY b/HISTORY
index 02ba8d89..45eab2e9 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,4 +1,337 @@
-Change notes from older releases. For current info see RELEASE-NOTES-1.21.
+Change notes from older releases. For current info see RELEASE-NOTES-1.22.
+
+== MediaWiki 1.21 ==
+
+MediaWiki 1.21 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.21 ===
+* (bug 29374) $wgVectorUseSimpleSearch is now enabled by default.
+* Deprecated $wgAllowRealName is removed. Use $wgHiddenPrefs[] = 'realname'
+ instead.
+* (bug 39957) Added $wgUnwatchedPageThreshold, specifying minimum count
+ of page watchers required for the number to be accessible to users
+ without the unwatchedpages permission.
+* $wgBug34832TransitionalRollback has been removed.
+* (bug 29472) $wgUseDynamicDates has been removed and its functionality
+ disabled.
+
+=== New features in 1.21 ===
+* (bug 38110) Schema changes (adding or dropping tables, indices and
+ fields) can be now be done separately from from other changes that
+ update.php makes. This is useful in environments that use database
+ permissions to restrict schema changes but allow the DB user that
+ MediaWiki normally runs as to perform other changes that update.php
+ makes. Schema changes can be run separately. See the file UPGRADE
+ for more information.
+* (bug 34876) jquery.makeCollapsible has been improved in performance.
+* Added ContentHandler facility to allow extensions to support other content
+ than wikitext. See docs/contenthandler.txt for details.
+* New feature was developed for showing high-DPI thumbnails for high-DPI mobile
+ and desktop displays (configurable with $wgResponsiveImages).
+* Added new backend to represent and store information about sites and site
+ specific configuration.
+* jQuery upgraded from 1.8.2 to 1.8.3.
+* jQuery UI upgraded from 1.8.23 to 1.8.24.
+* Added separate fa_sha1 field to filearchive table. This allows sha1
+ searches with the api in miser mode for deleted files.
+* Add initial and programmatic sorting for tablesorter.
+* Add the event "sortEnd.tablesorter", triggered after sorting has completed.
+* The Job system was refactored to allow for different backing stores for
+ queues as well as cross-wiki access to queues, among other things. The schema
+ for the DB queue was changed to support better concurrency and reduce
+ deadlock errors.
+* Added ApiQueryORM class to facilitate creation of query API modules based on
+ tables that have a corresponding ORMTable class.
+* (bug 40876) Icon for PSD (Adobe Photoshop) file types.
+* (bug 40641) Implemented Special:Version/Credits with a list of contributors.
+* (bug 7851) Implemented one-click AJAX patrolling.
+* The ,