1.2.0 (development dependency).
* Updated nikic/php-parser from 2.1.0 to 3.1.3
(development dependency).
+* Updated wikimedia/ip-set from 1.1.0 to 1.2.0.
+* Updated wikimedia/relpath from 2.0.0 to 2.1.1.
+* Updated wikimedia/running-stat from 1.1.0 to 1.2.0.
+* Updated wikimedia/wrappedstring from 2.2.0 to 2.3.0.
* …
==== New external libraries ====
"wikimedia/cldr-plural-rule-parser": "1.0.0",
"wikimedia/composer-merge-plugin": "1.4.1",
"wikimedia/html-formatter": "1.0.1",
- "wikimedia/ip-set": "1.1.0",
+ "wikimedia/ip-set": "1.2.0",
"wikimedia/php-session-serializer": "1.0.4",
"wikimedia/purtle": "1.0.6",
- "wikimedia/relpath": "2.0.0",
+ "wikimedia/relpath": "2.1.1",
"wikimedia/remex-html": "1.0.2",
- "wikimedia/running-stat": "1.1.0",
+ "wikimedia/running-stat": "1.2.1",
"wikimedia/scoped-callback": "1.0.0",
"wikimedia/utfnormal": "1.1.0",
"wikimedia/timestamp": "1.0.0",
"wikimedia/wait-condition-loop": "1.0.1",
- "wikimedia/wrappedstring": "2.2.0",
+ "wikimedia/wrappedstring": "2.3.0",
"zordius/lightncandy": "0.23"
},
"require-dev": {
*/
public function register( $name, $callback ) {
if ( !is_callable( $callback ) && !( $callback instanceof Config ) ) {
- throw new InvalidArgumentException( 'Invalid callback provided' );
+ if ( is_array( $callback ) ) {
+ $callback = '[ ' . implode( ', ', $callback ) . ' ]';
+ } elseif ( is_object( $callback ) ) {
+ $callback = 'instanceof ' . get_class( $callback );
+ }
+ throw new InvalidArgumentException( 'Invalid callback \'' . $callback . '\' provided' );
}
unset( $this->configs[$name] );
<?php
/** Ingush (ГӀалгӀай)
- *
- * To improve a translation please visit https://translatewiki.net
- *
- * @ingroup Language
- * @file
- *
- */
+*
+* To improve a translation please visit https://translatewiki.net
+*
+* @ingroup Language
+* @file
+*
+*/
$fallback = 'ru';
+
+$namespaceNames = [
+ NS_MEDIA => 'Медиа',
+ NS_SPECIAL => 'Гӏулакха',
+ NS_MAIN => '',
+ NS_TALK => 'Ювцар',
+ NS_USER => 'Доакъашхо',
+ NS_USER_TALK => 'Доакъашхочун_дувцар',
+ NS_PROJECT_TALK => '$1_ювцар',
+ NS_FILE => 'Файл',
+ NS_FILE_TALK => 'Файл_ювцар',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_ювцар',
+ NS_TEMPLATE => 'Ло',
+ NS_TEMPLATE_TALK => 'Ло_бувцар',
+ NS_HELP => 'Новкъостал',
+ NS_HELP_TALK => 'Новкъостал_дувцар',
+ NS_CATEGORY => 'ОагӀат',
+ NS_CATEGORY_TALK => 'ОагӀат_ювцар',
+];
// If title is empty, user input is invalid, the API call will produce details about why
titles: title ? title.getPrefixedText() : this.nameToCheck,
prop: 'imageinfo',
- iiprop: 'uploadwarning'
+ iiprop: 'uploadwarning',
+ errorformat: 'html',
+ errorlang: mw.config.get( 'wgUserLanguage' )
} ).done( function ( result ) {
var
resultOut = '',
if ( page.imageinfo ) {
resultOut = page.imageinfo[ 0 ].html;
} else if ( page.invalidreason ) {
- resultOut = mw.html.escape( page.invalidreason );
+ resultOut = page.invalidreason.html;
}
uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
} ).always( function () {
} );
}
uri.query = q;
+
+ // Decode uri.fragment, otherwise it gets double-encoded when serializing
+ if ( uri.fragment !== undefined ) {
+ uri.fragment = Uri.decode( uri.fragment );
+ }
},
/**
$factory->register( 'invalid', 'Invalid callback' );
}
+ /**
+ * @covers ConfigFactory::register
+ */
+ public function testRegisterInvalidInstance() {
+ $factory = new ConfigFactory();
+ $this->setExpectedException( InvalidArgumentException::class );
+ $factory->register( 'invalidInstance', new stdClass );
+ }
+
/**
* @covers ConfigFactory::register
*/
uri = uriBase.clone();
uri.fragment = 'frag';
assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php#frag', 'add a fragment' );
+ uri.fragment = 'café';
+ assert.equal( uri.toString(), 'http://en.wiki.local/w/api.php#caf%C3%A9', 'fragment is url-encoded' );
uri = uriBase.clone();
uri.host = 'fr.wiki.local';
QUnit.test( 'Advanced URL', function ( assert ) {
var uri, queryString, relativePath;
- uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top' );
+ uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#caf%C3%A9' );
assert.deepEqual(
{
port: '81',
path: '/dir/dir.2/index.htm',
query: { q1: '0', test1: null, test2: 'value (escaped)' },
- fragment: 'top'
+ fragment: 'café'
},
'basic object properties'
);
relativePath = uri.getRelativePath();
assert.ok( relativePath.indexOf( uri.path ) >= 0, 'path in relative path' );
assert.ok( relativePath.indexOf( uri.getQueryString() ) >= 0, 'query string in relative path' );
- assert.ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragment in relative path' );
+ assert.ok( relativePath.indexOf( mw.Uri.encode( uri.fragment ) ) >= 0, 'escaped fragment in relative path' );
} );
QUnit.test( 'Parse a uri with an @ symbol in the path and query', function ( assert ) {