WikidataBuilder has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/321854

Change subject: New Wikidata Build - 2016-11-16T10:00:01+0000
......................................................................

New Wikidata Build - 2016-11-16T10:00:01+0000

Change-Id: Id767f51c773654d8fcf445603d3f4a9c90d6dda3
---
M composer.lock
M extensions/ArticlePlaceholder/.jshintrc
M extensions/ArticlePlaceholder/README.md
M extensions/ArticlePlaceholder/extension.json
M extensions/ArticlePlaceholder/i18n/ast.json
M extensions/ArticlePlaceholder/i18n/de.json
M extensions/ArticlePlaceholder/i18n/en.json
M extensions/ArticlePlaceholder/i18n/qqq.json
M extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
A 
extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.css
A 
extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.js
M 
extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.newEmptyArticle.js
A 
extensions/ArticlePlaceholder/modules/ext.articleplaceholder.translateArticle/ext.articleplaceholder.translateArticle.js
M 
extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
M extensions/Wikibase/lib/i18n/ar.json
M extensions/Wikibase/lib/i18n/be-tarask.json
M 
extensions/Wikibase/lib/includes/Formatters/BinaryOptionDispatchingSnakFormatter.php
M 
extensions/Wikibase/lib/tests/phpunit/Formatters/BinaryOptionDispatchingSnakFormatterTest.php
M extensions/Wikibase/repo/i18n/ast.json
M extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTest.php
M extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTestCase.php
M extensions/Wikibase/repo/tests/phpunit/includes/Api/WikibaseApiTestCase.php
M extensions/Wikibase/tests/browser/features/authority_control_gadget.feature
M vendor/composer/autoload_classmap.php
M vendor/composer/installed.json
25 files changed, 299 insertions(+), 110 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/54/321854/1

diff --git a/composer.lock b/composer.lock
index 04e6522..fda3006 100644
--- a/composer.lock
+++ b/composer.lock
@@ -797,12 +797,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-                "reference": "769b04978d11696e3315592a5d8fe9ebe4df3bd3"
+                "reference": "d8bf846eb0cdc496c8a64b5a9bb044ca73fa953f"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/769b04978d11696e3315592a5d8fe9ebe4df3bd3";,
-                "reference": "769b04978d11696e3315592a5d8fe9ebe4df3bd3",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/d8bf846eb0cdc496c8a64b5a9bb044ca73fa953f";,
+                "reference": "d8bf846eb0cdc496c8a64b5a9bb044ca73fa953f",
                 "shasum": ""
             },
             "require-dev": {
@@ -827,7 +827,7 @@
             ],
             "description": "Provides a special page with Wikibase information 
about a certain topic, with invitation to create an article for the topic",
             "homepage": 
"https://www.mediawiki.org/wiki/Extension:ArticlePlaceholder";,
-            "time": "2016-11-14 21:48:06"
+            "time": "2016-11-15 21:48:45"
         },
         {
             "name": "propertysuggester/property-suggester",
@@ -1585,12 +1585,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "311f9625f71ad3f7d0c046edb0016d03ec1eb7cd"
+                "reference": "8102a7c30464e59b6ca965d358b069ccf67b07f2"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/311f9625f71ad3f7d0c046edb0016d03ec1eb7cd";,
-                "reference": "311f9625f71ad3f7d0c046edb0016d03ec1eb7cd",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/8102a7c30464e59b6ca965d358b069ccf67b07f2";,
+                "reference": "8102a7c30464e59b6ca965d358b069ccf67b07f2",
                 "shasum": ""
             },
             "require": {
@@ -1664,7 +1664,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2016-11-15 09:38:24"
+            "time": "2016-11-15 23:22:19"
         },
         {
             "name": "wikibase/wikimedia-badges",
diff --git a/extensions/ArticlePlaceholder/.jshintrc 
b/extensions/ArticlePlaceholder/.jshintrc
index d123347..3110352 100644
--- a/extensions/ArticlePlaceholder/.jshintrc
+++ b/extensions/ArticlePlaceholder/.jshintrc
@@ -17,6 +17,7 @@
                "$": false,
                "jQuery": false,
                "mediaWiki": false,
+               "module": true,
                "OO": false
        }
 }
diff --git a/extensions/ArticlePlaceholder/README.md 
b/extensions/ArticlePlaceholder/README.md
index 2489529..de57b14 100644
--- a/extensions/ArticlePlaceholder/README.md
+++ b/extensions/ArticlePlaceholder/README.md
@@ -16,6 +16,7 @@
 * Wikibase Client, connected to a Wikibase Repo
 * Scribunto for the display of the content
 * Cite for the display of the references on a placeholder page
+* ContentTranslation (optional) for creating new articles based on existing 
ones in other languages
 
 ### Configuration
 ```
diff --git a/extensions/ArticlePlaceholder/extension.json 
b/extensions/ArticlePlaceholder/extension.json
index 110cffa..3ae4b35 100644
--- a/extensions/ArticlePlaceholder/extension.json
+++ b/extensions/ArticlePlaceholder/extension.json
@@ -24,8 +24,10 @@
                "ext.articleplaceholder.createArticle": {
                        "position": "bottom",
                        "scripts": [
+                               
"ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.js",
                                
"ext.articleplaceholder.createArticle/ext.articleplaceholder.newEmptyArticle.js"
                        ],
+                       "styles": 
"ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.css",
                        "dependencies": [
                                "oojs-ui",
                                "mediawiki.api",
@@ -40,6 +42,16 @@
                                "cancel"
                        ]
                },
+               "ext.articleplaceholder.translateArticle": {
+                       "position": "bottom",
+                       "scripts": 
"ext.articleplaceholder.translateArticle/ext.articleplaceholder.translateArticle.js",
+                       "dependencies": [
+                               "ext.articleplaceholder.createArticle"
+                       ],
+                       "messages": [
+                               
"articleplaceholder-abouttopic-translate-article-label"
+                       ]
+               },
                "ext.articleplaceholder.defaultDisplay": {
                        "styles": {
                                "0": 
"ext.articleplaceholder.defaultDisplay/ext.articleplaceholder.defaultDisplay.css",
diff --git a/extensions/ArticlePlaceholder/i18n/ast.json 
b/extensions/ArticlePlaceholder/i18n/ast.json
index 5fd095a..796bb79 100644
--- a/extensions/ArticlePlaceholder/i18n/ast.json
+++ b/extensions/ArticlePlaceholder/i18n/ast.json
@@ -11,7 +11,7 @@
        "articleplaceholder-abouttopic-entityid": "Escribe un ID d'elementu 
como Q12345",
        "articleplaceholder-abouttopic-submit": "crear",
        "articleplaceholder-abouttopic-no-entity-error": "Esta nun ye una id 
d'elementu válida.",
-       "articleplaceholder-abouttopic-create-article": "Crear un artículu 
nuevu col títulu",
+       "articleplaceholder-abouttopic-create-article-title": "Crear un 
artículu nuevu",
        "articleplaceholder-abouttopic-create-article-label": "Títulu 
d'artículu",
        "articleplaceholder-abouttopic-create-article-mandatory": "El títulu 
del artículu ye obligatoriu.",
        "articleplaceholder-abouttopic-create-article-button": "Crear un 
artículu",
diff --git a/extensions/ArticlePlaceholder/i18n/de.json 
b/extensions/ArticlePlaceholder/i18n/de.json
index edec5c2..b415677 100644
--- a/extensions/ArticlePlaceholder/i18n/de.json
+++ b/extensions/ArticlePlaceholder/i18n/de.json
@@ -15,6 +15,8 @@
        "articleplaceholder-abouttopic-create-article-label": "Artikeltitel",
        "articleplaceholder-abouttopic-create-article-mandatory": "Der 
Artikeltitel ist verpflichtend.",
        "articleplaceholder-abouttopic-create-article-button": "Einen Artikel 
erstellen",
+       "articleplaceholder-abouttopic-translate-article-label": 
"Quellsprache:",
+       "articleplaceholder-abouttopic-translate-article-button": "Artikel 
übersetzen",
        "articleplaceholder-abouttopic-create-article-submit-button": 
"Übermitteln",
        "articleplaceholder-abouttopic-article-exists-error": "Ein Artikel mit 
diesem Namen ist bereits vorhanden",
        "articleplaceholder-abouttopic-lua-entity": "Objekt",
diff --git a/extensions/ArticlePlaceholder/i18n/en.json 
b/extensions/ArticlePlaceholder/i18n/en.json
index c124b80..daf7912 100644
--- a/extensions/ArticlePlaceholder/i18n/en.json
+++ b/extensions/ArticlePlaceholder/i18n/en.json
@@ -15,6 +15,8 @@
        "articleplaceholder-abouttopic-create-article-label": "Article title",
        "articleplaceholder-abouttopic-create-article-mandatory": "The title of 
the article is mandatory.",
        "articleplaceholder-abouttopic-create-article-button": "Create an 
article",
+       "articleplaceholder-abouttopic-translate-article-label": "Source 
language:",
+       "articleplaceholder-abouttopic-translate-article-button": "Translate 
article",
        "articleplaceholder-abouttopic-create-article-submit-button": "Submit",
        "articleplaceholder-abouttopic-article-exists-error": "An article with 
this name already exists",
        "articleplaceholder-abouttopic-lua-entity": "Entity",
diff --git a/extensions/ArticlePlaceholder/i18n/qqq.json 
b/extensions/ArticlePlaceholder/i18n/qqq.json
index 66c2775..bc07dc7 100644
--- a/extensions/ArticlePlaceholder/i18n/qqq.json
+++ b/extensions/ArticlePlaceholder/i18n/qqq.json
@@ -18,6 +18,8 @@
        "articleplaceholder-abouttopic-create-article-label": "Label of the 
article page title input in the 'Create article' popup.",
        "articleplaceholder-abouttopic-create-article-mandatory": "Used as an 
error message in the 'Create article', if the article title wasn't supplied.",
        "articleplaceholder-abouttopic-create-article-button": "Label on create 
article button",
+       "articleplaceholder-abouttopic-translate-article-label": "Label of the 
source language input in the 'Translate article' popup.",
+       "articleplaceholder-abouttopic-translate-article-button": "Label of the 
Translate button to start translating the article/item.",
        "articleplaceholder-abouttopic-create-article-submit-button": "Label on 
submit button\n{{Identical|Submit}}",
        "articleplaceholder-abouttopic-article-exists-error": "Error to 
indicate the given article title already exists",
        "articleplaceholder-abouttopic-lua-entity": "Header of the entity 
section\n{{Identical|Entity}}",
diff --git a/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php 
b/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
index 83350ef..e992e17 100644
--- a/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
+++ b/extensions/ArticlePlaceholder/includes/AboutTopicRenderer.php
@@ -2,11 +2,13 @@
 
 namespace ArticlePlaceholder;
 
+use ExtensionRegistry;
 use Html;
 use Language;
 use OOUI;
 use SiteLookup;
 use SpecialPage;
+use Title;
 use User;
 use OutputPage;
 use Wikibase\DataModel\Entity\ItemId;
@@ -102,7 +104,7 @@
                        $labelTitle = $this->titleFactory->newFromText( $label 
);
                }
                if ( $labelTitle && $labelTitle->quickUserCan( 'createpage', 
$user ) ) {
-                       $this->showCreateArticle( $label, $output );
+                       $this->showCreateArticle( $entityId, $label, $output );
                }
 
                $this->showLanguageLinks( $entityId, $output );
@@ -112,10 +114,13 @@
        /**
         * Adds a button to create an article
         *
+        * @param ItemId $itemId
         * @param string $label
         * @param OutputPage $output
         */
-       private function showCreateArticle( $label, OutputPage $output ) {
+       private function showCreateArticle( ItemId $itemId, $label, OutputPage 
$output ) {
+               $siteLinks = $this->siteLinkLookup->getSiteLinksForItem( 
$itemId );
+
                $output->enableOOUI();
                $output->addModules( 'ext.articleplaceholder.createArticle' );
                $output->addJsConfigVars( 'apLabel', $label );
@@ -128,6 +133,18 @@
                                ->getLocalURL( [ 'ref' => 'button' ] ),
                        'target' => 'blank'
                ] );
+
+               // TODO: Button should be hidden if the only sitelink links to 
the current wiki.
+               // $wikibaseClient->getSettings()->getSetting( 'siteGlobalID' ) 
should be injected here!
+               if ( ExtensionRegistry::getInstance()->isLoaded( 
'ContentTranslation' ) && $siteLinks ) {
+                       $output->addModules( 
'ext.articleplaceholder.translateArticle' );
+                       $buttons .= new OOUI\ButtonWidget( [
+                               'id' => 'translate-article-button',
+                               'infusable' => true,
+                               'label' => wfMessage( 
'articleplaceholder-abouttopic-translate-article-button' )->text(),
+                               'target' => 'blank'
+                       ] );
+               }
 
                $output->addHTML( Html::rawElement(
                        'div',
@@ -160,6 +177,7 @@
         * @param OutputPage $output
         */
        private function showTitle( $label, OutputPage $output ) {
+               $output->setTitle( Title::newFromText( $label ) );
                $output->setPageTitle( htmlspecialchars( $label ) );
        }
 
@@ -172,17 +190,30 @@
        private function showLanguageLinks( ItemId $entityId, OutputPage 
$output ) {
                $siteLinks = $this->siteLinkLookup->getSiteLinksForItem( 
$entityId );
                $languageLinks = [];
+               $languageNames = [];
+               $pageNames = [];
 
                foreach ( $siteLinks as $siteLink ) {
                        $site = $this->siteLookup->getSite( 
$siteLink->getSiteId() );
                        $languageCode = $site->getLanguageCode();
                        $group = $site->getGroup();
+                       // TODO: This should not contain the current wiki.
+                       // $wikibaseClient->getSettings()->getSetting( 
'siteGlobalID' ) should be injected here!
                        if ( $languageCode !== null && $group === 
$this->langLinkSiteGroup ) {
                                $languageLinks[$languageCode] = $languageCode . 
':' . $siteLink->getPageName();
+
+                               // TODO: We may want to filter with user 
languages
+                               $languageNames[] = [
+                                       'data' => $languageCode,
+                                       'label' => Language::fetchLanguageName( 
$languageCode ),
+                               ];
+                               $pageNames[ $languageCode ] = 
$siteLink->getPageName();
                        }
                }
 
                $output->setLanguageLinks( $languageLinks );
+               $output->addJsConfigVars( 'apLanguages', $languageNames );
+               $output->addJsConfigVars( 'apPageNames', $pageNames );
        }
 
        /**
diff --git 
a/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.css
 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.css
new file mode 100644
index 0000000..386ab2c
--- /dev/null
+++ 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.css
@@ -0,0 +1,3 @@
+.oo-ui-processDialog > .oo-ui-window-frame {
+       min-height: 20em;
+}
diff --git 
a/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.js
 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.js
new file mode 100644
index 0000000..880f38c
--- /dev/null
+++ 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.createArticle.js
@@ -0,0 +1,61 @@
+/**
+ * @licence GNU GPL v2+
+ * @author Florian Schmidt
+ */
+
+( function ( $, mw, OO, module ) {
+       'use strict';
+
+       /**
+        * @class
+        */
+       function CreateArticleDialog( config ) {
+               CreateArticleDialog.super.call( this, config ); // jshint:ignore
+       }
+
+       OO.inheritClass( CreateArticleDialog, OO.ui.ProcessDialog );
+
+       CreateArticleDialog.static.title =
+               mw.msg( 'articleplaceholder-abouttopic-create-article-title' );
+
+       CreateArticleDialog.static.actions = [
+               {
+                       action: 'save',
+                       label: mw.msg( 
'articleplaceholder-abouttopic-create-article-submit-button' ),
+                       flags: [ 'primary', 'progressive' ]
+               },
+               {
+                       label: mw.msg( 'cancel' ),
+                       flags: 'safe'
+               }
+       ];
+
+       // Customize the initialize() function: This is where to add content to 
the dialog body and set up event handlers.
+       CreateArticleDialog.prototype.initialize = function () {
+               CreateArticleDialog.parent.prototype.initialize.call( this ); 
// jshint:ignore
+               this.$body.append( this.dialogContent );
+       };
+
+       CreateArticleDialog.prototype.setContent = function ( dialogContent ) {
+               this.dialogContent = dialogContent;
+       };
+
+       CreateArticleDialog.prototype.getActionProcess = function ( action ) {
+               var self = this;
+
+               if ( action ) {
+                       return new OO.ui.Process( function () {
+                               return self.onSubmit();
+                       }, this );
+               }
+
+               return 
CreateArticleDialog.parent.prototype.getActionProcess.call( this, action );
+       };
+
+       CreateArticleDialog.prototype.onSubmit = function () {
+               return true;
+       };
+
+       module.exports.CreateArticleDialog = CreateArticleDialog;
+
+} )( jQuery, mediaWiki, OO, module );
diff --git 
a/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.newEmptyArticle.js
 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.newEmptyArticle.js
index 68a9ec0..e45d1ae 100644
--- 
a/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.newEmptyArticle.js
+++ 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.createArticle/ext.articleplaceholder.newEmptyArticle.js
@@ -1,12 +1,14 @@
 /**
  * @licence GNU GPL v2+
- *
  * @author Lucie-Aimée Kaffee
+ * @author Florian Schmidt
  */
 
-( function ( $, mw, OO ) {
+( function ( $, mw, OO, module ) {
+       'use strict';
 
-       var titleInput;
+       var titleInput,
+               CreateArticleDialog = module.exports.CreateArticleDialog;
 
        /**
         * @return {jQuery.Promise}
@@ -63,52 +65,18 @@
                        autosize: true
                } );
 
-               dialogContent = titleInput.$element;
+               dialogContent = new OO.ui.PanelLayout( { $: $, padded: true, 
expanded: false } );
+               dialogContent.$element.append( titleInput.$element );
 
-               function NewEmptyArticleDialog( config ) {
-                       NewEmptyArticleDialog.super.call( this, config ); // 
jshint:ignore
-               }
-               OO.inheritClass( NewEmptyArticleDialog, OO.ui.ProcessDialog );
+               titleInput.on( 'change', function () {
+                       $( '#mw-article-placeholder-error' ).empty();
+               } );
 
-               NewEmptyArticleDialog.static.title =
-                       mw.msg( 
'articleplaceholder-abouttopic-create-article-title' );
-
-               NewEmptyArticleDialog.static.actions = [
-                       {
-                               action: 'save',
-                               label: mw.msg( 
'articleplaceholder-abouttopic-create-article-submit-button' ),
-                               flags: [ 'primary', 'progressive' ]
-                       },
-                       {
-                               label: mw.msg( 'cancel' ),
-                               flags: 'safe'
-                       }
-               ];
-
-               // Customize the initialize() function: This is where to add 
content to the dialog body and set up event handlers.
-               NewEmptyArticleDialog.prototype.initialize = function () {
-                       NewEmptyArticleDialog.super.prototype.initialize.call( 
this ); // jshint:ignore
-                       this.content = new OO.ui.PanelLayout( { $: this.$, 
padded: true, expanded: false } );
-                       this.content.$element.append( dialogContent );
-                       this.$body.append( this.content.$element );
-               };
-
-               NewEmptyArticleDialog.prototype.getBodyHeight = function () {
-                       return this.content.$element.outerHeight( true ) * 2;
-               };
-
-               NewEmptyArticleDialog.prototype.getActionProcess = function ( 
action ) {
-                       if ( action ) {
-                               return new OO.ui.Process( function () {
-                                       return onSubmit();
-                               }, this );
-                       }
-                       return 
NewEmptyArticleDialog.parent.prototype.getActionProcess.call( this, action );
-               };
-
-               dialog = new NewEmptyArticleDialog( {
+               dialog = new CreateArticleDialog( {
                        size: 'medium'
                } );
+               dialog.setContent( dialogContent.$element );
+               dialog.onSubmit = onSubmit;
 
                titleInput.on( 'enter', function () {
                        dialog.executeAction( 'save' );
@@ -129,4 +97,4 @@
 
        mw.hook( 'wikipage.content' ).add( onWikipageContent );
 
-} )( jQuery, mediaWiki, OO );
+} )( jQuery, mediaWiki, OO, module );
diff --git 
a/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.translateArticle/ext.articleplaceholder.translateArticle.js
 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.translateArticle/ext.articleplaceholder.translateArticle.js
new file mode 100644
index 0000000..94fa280
--- /dev/null
+++ 
b/extensions/ArticlePlaceholder/modules/ext.articleplaceholder.translateArticle/ext.articleplaceholder.translateArticle.js
@@ -0,0 +1,91 @@
+/**
+ * @licence GNU GPL v2+
+ * @author Florian Schmidt
+ * @author Jonas M. Kress
+ */
+
+( function ( $, mw, OO ) {
+       'use strict';
+
+       var windowManager,
+               dialog,
+               languageInput,
+               titleInput,
+               CreateArticleDialog = mw.loader.require( 
'ext.articleplaceholder.createArticle' ).CreateArticleDialog;
+
+       function onSubmit() {
+               if ( titleInput.getValue().trim() === '' ) {
+                       return $.Deferred().reject(
+                               new OO.ui.Error( mw.msg( 
'articleplaceholder-abouttopic-create-article-mandatory' ) )
+                       ).promise();
+               }
+
+               mw.loader.using( 'ext.cx.sitemapper' ).then( function () {
+                       document.location.href = 
mw.cx.SiteMapper.prototype.getCXUrl(
+                               mw.config.get( 'apPageNames' )[ 
languageInput.getValue() ],
+                               titleInput.getValue(),
+                               languageInput.getValue(),
+                               mw.config.get( 'wgContentLanguage' )
+                       );
+               } );
+
+               // To not leave the dialog in a stale, unusable state.
+               dialog.close();
+               return $.Deferred();
+       }
+
+       function createDialogContent() {
+               titleInput = new OO.ui.TextInputWidget( {
+                       value: mw.config.get( 'apLabel' ),
+                       label: mw.msg( 
'articleplaceholder-abouttopic-create-article-label' ),
+                       multiline: false,
+                       required: true,
+                       autosize: true
+               } );
+
+               languageInput = new OO.ui.DropdownInputWidget( {
+                       text: mw.msg( 
'articleplaceholder-abouttopic-translate-article-label' ),
+                       options: mw.config.get( 'apLanguages' ),
+                       required: true
+               } );
+
+               return new OO.ui.StackLayout( {
+                       items: [
+                                       new OO.ui.PanelLayout( {
+                                               $content: 
languageInput.$element,
+                                               padded: true
+                                       } ), new OO.ui.PanelLayout( {
+                                               $content: titleInput.$element,
+                                               padded: true
+                                       } )
+                       ],
+                       continuous: true
+               } );
+       }
+
+       function createDialog() {
+               dialog = new CreateArticleDialog( {
+                       size: 'medium'
+               } );
+
+               dialog.setContent( createDialogContent().$element );
+               dialog.onSubmit = onSubmit;
+
+               windowManager = new OO.ui.WindowManager();
+
+               $( 'body' ).append( windowManager.$element );
+               windowManager.addWindows( [ dialog ] );
+       }
+
+       function onWikipageContent() {
+               createDialog();
+
+               OO.ui.infuse( 'translate-article-button' ).on( 'click', 
function () {
+                       mw.track( 
'counter.MediaWiki.wikibase.articleplaceholder.button.translate-article' );
+                       windowManager.openWindow( dialog );
+               } );
+       }
+
+       mw.hook( 'wikipage.content' ).add( onWikipageContent );
+
+} )( jQuery, mediaWiki, OO );
diff --git 
a/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
 
b/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
index d5a2797..f932ecf 100644
--- 
a/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
+++ 
b/extensions/Wikibase/client/includes/DataAccess/DataAccessSnakFormatterFactory.php
@@ -8,7 +8,7 @@
 use Wikibase\Client\Usage\UsageTrackingSnakFormatter;
 use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
 use Wikibase\LanguageFallbackChainFactory;
-use Wikibase\Lib\BinaryOptionDispatchingSnakFormatter;
+use Wikibase\Lib\Formatters\BinaryOptionDispatchingSnakFormatter;
 use Wikibase\Lib\EscapingSnakFormatter;
 use Wikibase\Lib\FormatterLabelDescriptionLookupFactory;
 use Wikibase\Lib\OutputFormatSnakFormatterFactory;
diff --git a/extensions/Wikibase/lib/i18n/ar.json 
b/extensions/Wikibase/lib/i18n/ar.json
index 402f662..39aa210 100644
--- a/extensions/Wikibase/lib/i18n/ar.json
+++ b/extensions/Wikibase/lib/i18n/ar.json
@@ -30,8 +30,8 @@
        "wikibase-error-remove-timeout": "يشهد الموقع صعوبات تقنية حاليا. من 
فضلك حاول مجددا.",
        "wikibase-error-autocomplete-connection": "لم يكن من الممكن البحث في 
واجهة برمجة التطبيقات الخاصة بالموقع. الرجاء المحاولة مرة أخرى لاحقاَ.",
        "wikibase-error-autocomplete-response": "إجابة الخادوم: $1",
-       "wikibase-error-ui-no-external-page": "لم يمكن إيجاد المقالة المحددة 
على الموقع الموافق.",
-       "wikibase-error-ui-edit-conflict": "هناك نزاع في تحرير. الرجاء حفظ 
التغييرات في حاسوبك، إعادة تحميل هذه الصفحة وحفظها مرة أخرى.",
+       "wikibase-error-ui-no-external-page": "الصفحة \"$2\" لم يمكن إيجادها 
على \"$1\".",
+       "wikibase-error-ui-edit-conflict": "نفس القيمة تم تعديلها في ذلك الوقت، 
مما تسبب في حدوث تضارب في التحرير. من فضلك أعد تحميل الصفحة.",
        "wikibase-language-fallback-transliteration-hint": "$1 (مترجم)",
        "wikibase-quantitydetails-amount": "الكمية",
        "wikibase-quantitydetails-upperbound": "الحد الأعلى",
diff --git a/extensions/Wikibase/lib/i18n/be-tarask.json 
b/extensions/Wikibase/lib/i18n/be-tarask.json
index 57b27cf..bdda142 100644
--- a/extensions/Wikibase/lib/i18n/be-tarask.json
+++ b/extensions/Wikibase/lib/i18n/be-tarask.json
@@ -18,7 +18,7 @@
        "wikibase-error-remove-generic": "Не атрымалася выдаліць праз памылку.",
        "wikibase-error-save-connection": "Не атрымалася захаваць праз памылку 
злучэньня. Калі ласка, праверце вашае злучэньне з Інтэрнэтам.",
        "wikibase-error-remove-connection": "Не атрымалася выдаліць праз 
памылку злучэньня. Калі ласка, праверце вашае злучэньне з Інтэрнэтам.",
-       "wikibase-error-save-timeout": "Мы маем тэхнічныя праблемы. Вашае 
захаваньне завершыць немагчыма.",
+       "wikibase-error-save-timeout": "Мы маем тэхнічныя праблемы. Калі ласка, 
паспрабуйце яшчэ раз.",
        "wikibase-error-remove-timeout": "Мы маем тэхнічныя праблемы. Вашае 
выдаленьне завершыць немагчыма.",
        "wikibase-error-autocomplete-connection": "Не атрымалася запытаць API 
сайта. Калі ласка, паспрабуйце пазьней.",
        "wikibase-error-autocomplete-response": "Адказ сэрвэра: $1",
diff --git 
a/extensions/Wikibase/lib/includes/Formatters/BinaryOptionDispatchingSnakFormatter.php
 
b/extensions/Wikibase/lib/includes/Formatters/BinaryOptionDispatchingSnakFormatter.php
index 533a626..8b069d6 100644
--- 
a/extensions/Wikibase/lib/includes/Formatters/BinaryOptionDispatchingSnakFormatter.php
+++ 
b/extensions/Wikibase/lib/includes/Formatters/BinaryOptionDispatchingSnakFormatter.php
@@ -1,11 +1,12 @@
 <?php
 
-namespace Wikibase\Lib;
+namespace Wikibase\Lib\Formatters;
 
 use ValueFormatters\FormattingException;
 use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
 use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookupException;
 use Wikibase\DataModel\Snak\Snak;
+use Wikibase\Lib\SnakFormatter;
 use Wikimedia\Assert\Assert;
 
 /**
@@ -76,11 +77,14 @@
         * @param Snak $snak
         *
         * @throws PropertyDataTypeLookupException
-        * @return string The Snak's data type
+        * @return string|null The Snak's data type
         */
        private function getSnakDataType( Snak $snak ) {
-               return $this->dataTypeLookup->getDataTypeIdForProperty( 
$snak->getPropertyId() );
-               // @todo: wrap the PropertyDataTypeLookupException, but make 
sure ErrorHandlingSnakFormatter still handles it.
+               try {
+                       return $this->dataTypeLookup->getDataTypeIdForProperty( 
$snak->getPropertyId() );
+               } catch ( PropertyDataTypeLookupException $ex ) {
+                       return null;
+               }
        }
 
        /**
@@ -97,7 +101,7 @@
 
                if ( $snakType === 'value' ) {
                        $dataType = $this->getSnakDataType( $snak );
-                       if ( in_array( $dataType, 
$this->specialCasedPropertyDataTypes ) ) {
+                       if ( $dataType !== null && in_array( $dataType, 
$this->specialCasedPropertyDataTypes ) ) {
                                return 
$this->specialCaseSnakFormatter->formatSnak( $snak );
                        }
                }
diff --git 
a/extensions/Wikibase/lib/tests/phpunit/Formatters/BinaryOptionDispatchingSnakFormatterTest.php
 
b/extensions/Wikibase/lib/tests/phpunit/Formatters/BinaryOptionDispatchingSnakFormatterTest.php
index f789bb2..cad859a 100644
--- 
a/extensions/Wikibase/lib/tests/phpunit/Formatters/BinaryOptionDispatchingSnakFormatterTest.php
+++ 
b/extensions/Wikibase/lib/tests/phpunit/Formatters/BinaryOptionDispatchingSnakFormatterTest.php
@@ -1,20 +1,21 @@
 <?php
 
-namespace Wikibase\Lib\Test;
+namespace Wikibase\Lib\Tests\Formatters;
 
 use PHPUnit_Framework_TestCase;
-use DataValues\DataValue;
+use DataValues\StringValue;
 use Wikibase\DataModel\Entity\PropertyId;
 use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
+use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookupException;
 use Wikibase\DataModel\Snak\PropertyNoValueSnak;
 use Wikibase\DataModel\Snak\PropertySomeValueSnak;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Snak\Snak;
-use Wikibase\Lib\BinaryOptionDispatchingSnakFormatter;
+use Wikibase\Lib\Formatters\BinaryOptionDispatchingSnakFormatter;
 use Wikibase\Lib\SnakFormatter;
 
 /**
- * @covers Wikibase\Lib\BinaryOptionDispatchingSnakFormatterTest
+ * @covers Wikibase\Lib\Formatters\BinaryOptionDispatchingSnakFormatter
  *
  * @group SnakFormatters
  * @group DataValueExtensions
@@ -50,6 +51,7 @@
        public function formatSnakProvider() {
                $pSpecial = new PropertyId( 'P1' );
                $pRegular = new PropertyId( 'P2' );
+               $value = new StringValue( '' );
 
                return [
                        'PropertyNoValueSnak gets fallback treatment always' => 
[
@@ -61,13 +63,17 @@
                                false
                        ],
                        'PropertyValueSnak with special treatment' => [
-                               new PropertyValueSnak( $pSpecial, 
$this->getMock( DataValue::class ) ),
+                               new PropertyValueSnak( $pSpecial, $value ),
                                true
                        ],
                        'PropertyValueSnak without special treatment' => [
-                               new PropertyValueSnak( $pRegular, 
$this->getMock( DataValue::class ) ),
+                               new PropertyValueSnak( $pRegular, $value ),
                                false
-                       ]
+                       ],
+                       'Fallback on non-existing Properties' => [
+                               new PropertyValueSnak( new PropertyId( 'P3' ), 
$value ),
+                               false
+                       ],
                ];
        }
 
@@ -83,6 +89,12 @@
                $this->assertSame( 'text/whatever', $formatter->getFormat() );
        }
 
+       /**
+        * @param int $expectedCallCount
+        * @param string $result
+        *
+        * @return SnakFormatter
+        */
        private function getSnakFormatter( $expectedCallCount, $result = '' ) {
                $snakFormatter = $this->getMock( SnakFormatter::class );
                $snakFormatter->expects( $this->exactly( $expectedCallCount ) )
@@ -93,20 +105,23 @@
                return $snakFormatter;
        }
 
+       /**
+        * @return PropertyDataTypeLookup
+        */
        private function getPropertyDataTypeLookup() {
                $propertyDataTypeLookup = $this->getMock( 
PropertyDataTypeLookup::class );
                $propertyDataTypeLookup->expects( $this->any() )
                        ->method( 'getDataTypeIdForProperty' )
-                       ->willReturnCallback( function( PropertyId $propertyId 
) {
+                       ->will( $this->returnCallback( function( PropertyId 
$propertyId ) {
                                switch ( $propertyId->getSerialization() ) {
                                        case 'P1':
                                                return 'special';
                                        case 'P2':
                                                return 'something';
                                        default:
-                                               $this->fail( 'Unexpcted 
PropertyId' );
+                                               throw new 
PropertyDataTypeLookupException( $propertyId );
                                }
-                       } );
+                       } ) );
 
                return $propertyDataTypeLookup;
        }
diff --git a/extensions/Wikibase/repo/i18n/ast.json 
b/extensions/Wikibase/repo/i18n/ast.json
index 2158bfe..1853bd2 100644
--- a/extensions/Wikibase/repo/i18n/ast.json
+++ b/extensions/Wikibase/repo/i18n/ast.json
@@ -19,6 +19,10 @@
        "wikibase-addreference": "amestar referencia",
        "wikibase-save-inprogress": "Guardando...",
        "wikibase-remove-inprogress": "Desaniciando...",
+       "wikibase-statementlistview-add": "añadir",
+       "wikibase-statementlistview-add-tooltip": "Añadir un valor nuevu",
+       "wikibase-statementgrouplistview-add": "añadir",
+       "wikibase-statementgrouplistview-add-tooltip": "Añadir una declaración 
nueva",
        "wikibase-entitytermsview-entitytermsforlanguagelistview-toggler": "En 
más llingües",
        
"wikibase-entitytermsview-entitytermsforlanguagelistview-configure-link-label": 
"Configurar",
        "wikibase-setting-entitytermsview-showEntitytermslistview": "Amosar 
etiquetes, alcuños y descripciones en toles mios llingües al cargar la páxina",
@@ -223,7 +227,7 @@
        "wikibase-tokencheck-mustposttoken": "Sólo ye posible editar usando 
solicitúes POST.",
        "wikibase-tokencheck-badtoken": "Pase d'edición incorreutu 
(posiblemente la sesión yá espiró).",
        "special-dispatchstats": "Camudar les estadístiques de distribución",
-       "wikibase-dispatchstats-intro": "Esta páxina ufre estadístiques tocante 
a la distribución de cambios a los clientes.\nUna wiki cliente recibe l'avisu 
d'un cambiu en {{SITENAME}} en cuanto que'l cambiu tea distribuíu nesa wiki, y 
la cola de trabayos d'esa wiki tenga procesada esa notificación.\n* 
{{int:wikibase-dispatchstats-changes}} amuesa'l númberu y la data del elementu 
más antiguu y del más nuevu que tean na cola.\n* 
{{int:wikibase-dispatchstats-stats}} ufre información tocante a la wiki cliente 
con más y menos retardu, y una mediana ente elles. Pa cada wiki, úfrese la 
siguiente información:\n** \"{{int:wikibase-dispatchstats-site-id}}\" ye la ID 
interna de la wiki cliente.\n** \"{{int:wikibase-dispatchstats-pos}}\" ye la ID 
del últimu cambiu distribuíu a esa wiki.\n** 
\"{{int:wikibase-dispatchstats-lag-num}}\" ye'l númberu de cambios ensin 
distribuir entá a esa wiki.\n** \"{{int:wikibase-dispatchstats-lag-time}}\" 
ye'l tiempu ente l'últimu cambiu distribuíu a la wiki, y l'últimu cambiu fechu 
en {{SITENAME}}.\n** \"{{int:wikibase-dispatchstats-touched}}\" ye'l tiempu 
cuando l'últimu llote de cambios distribuyose a la wiki.",
+       "wikibase-dispatchstats-intro": "Esta páxina ufre estadístiques tocante 
a la distribución de cambios a los clientes.\nUna wiki cliente recibe l'avisu 
d'un cambiu en {{SITENAME}} en cuanto que'l cambiu tea distribuíu nesa wiki, y 
la cola de trabayos d'esa wiki tenga procesada esa notificación.\n* 
{{int:wikibase-dispatchstats-changes}} amuesa'l númberu y la data del elementu 
más antiguu y del más nuevu que tean na cola.\n* 
{{int:wikibase-dispatchstats-stats}} ufre información tocante a la wiki cliente 
con más y menos retrasu, y una con retrasu medianu. Pa cada wiki, úfrese la 
siguiente información:\n** \"{{int:wikibase-dispatchstats-site-id}}\" ye la ID 
interna de la wiki cliente.\n** \"{{int:wikibase-dispatchstats-pos}}\" ye la ID 
del últimu cambiu distribuíu a esa wiki.\n** 
\"{{int:wikibase-dispatchstats-lag-num}}\" ye'l númberu de cambios ensin 
distribuir entá a esa wiki.\n** \"{{int:wikibase-dispatchstats-lag-time}}\" 
ye'l tiempu ente l'últimu cambiu distribuíu a la wiki, y l'últimu cambiu fechu 
en {{SITENAME}}.\n** \"{{int:wikibase-dispatchstats-touched}}\" ye'l tiempu 
cuando l'últimu llote de cambios distribuyose a la wiki.",
        "wikibase-dispatchstats-no-stats": "Actualmente nun hai estadístiques 
disponibles.",
        "wikibase-dispatchstats-changes": "Estadístiques del rexistru de 
cambios",
        "wikibase-dispatchstats-stats": "Estadístiques de distribución",
@@ -484,6 +488,12 @@
        "apihelp-query+wbsearch-example-1": "Buscar «abc» n'inglés, coles 
opciones predeterminaes pa tipu y llende",
        "apihelp-query+wbsearch-example-2": "Buscar «abc» n'inglés con una 
llende de 50",
        "apihelp-query+wbsearch-example-3": "Buscar \"alphabet\" n'inglés pa la 
propiedá tipu",
+       "apihelp-query+wbsubscribers-description": "Llograr les suscripciones a 
les entidaes indicaes.",
+       "apihelp-query+wbsubscribers-param-entities": "Entidaes de les que 
recibir los suscriptores",
+       "apihelp-query+wbsubscribers-param-prop": "Propiedaes a amestar al 
resultáu",
+       "apihelp-query+wbsubscribers-param-limit": "Númberu máximu de 
resultaos",
+       "apihelp-query+wbsubscribers-example-1": "Llograr los suscriptores de 
la entidá Q42",
+       "apihelp-query+wbsubscribers-example-2": "Llograr los suscriptores de 
la entidá Q42 cola URL a Special:EntityUsage incluída",
        "apihelp-wbsetaliases-description": "Configura los alcuños pa un entidá 
de Wikibase.",
        "apihelp-wbsetaliases-param-id": "L'identificador de la entidá, 
incluyendo'l prefixu. \nUsa o <var>id</var> o <var>site</var> y 
<var>title</var> xuntos.",
        "apihelp-wbsetaliases-param-new": "Si s'indica, crearáse una entidá 
nueva.\nConfigura esto como'l tipu d'entidá que quieras crear.",
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTest.php
index ddae311..8fc0b45 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTest.php
@@ -20,7 +20,7 @@
  * @group Database
  * @group medium
  */
-abstract class PermissionsTest extends PermissionsTestCase {
+class PermissionsTest extends PermissionsTestCase {
 
        public function provideReadPermissions() {
                return array(
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTestCase.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTestCase.php
index 3bafa02..7e57ab2 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTestCase.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/Api/PermissionsTestCase.php
@@ -14,36 +14,17 @@
  */
 class PermissionsTestCase extends WikibaseApiTestCase {
 
-       protected $permissions;
-       protected $old_user;
-
        private static $hasSetup;
 
        protected function setUp() {
-               global $wgGroupPermissions, $wgUser;
-
                parent::setUp();
 
                if ( !isset( self::$hasSetup ) ) {
                        $this->initTestEntities( array( 'Oslo', 'Empty' ) );
                }
                self::$hasSetup = true;
-
-               $this->permissions = $wgGroupPermissions;
-               $this->old_user = clone $wgUser;
-       }
-
-       protected function tearDown() {
-               global $wgGroupPermissions;
-               global $wgUser;
-
-               $wgGroupPermissions = $this->permissions;
-
-               if ( $this->old_user ) { // should not be null, but sometimes, 
it is
-                       $wgUser = $this->old_user;
-               }
-
-               parent::tearDown();
+               $this->stashMwGlobals( 'wgGroupPermissions' );
+               $this->stashMwGlobals( 'wgUser' );
        }
 
        protected function doPermissionsTest(
@@ -52,10 +33,9 @@
                array $permissions = null,
                $expectedError = null
        ) {
-               global $wgUser, $wgGroupPermissions;
+               global $wgUser;
 
                $this->setMwGlobals( 'wgUser', clone $wgUser );
-               $this->setMwGlobals( 'wgGroupPermissions', $wgGroupPermissions 
);
                PermissionsHelper::applyPermissions( $permissions );
 
                try {
diff --git 
a/extensions/Wikibase/repo/tests/phpunit/includes/Api/WikibaseApiTestCase.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/Api/WikibaseApiTestCase.php
index ef8bb37..5c878af 100644
--- 
a/extensions/Wikibase/repo/tests/phpunit/includes/Api/WikibaseApiTestCase.php
+++ 
b/extensions/Wikibase/repo/tests/phpunit/includes/Api/WikibaseApiTestCase.php
@@ -65,6 +65,8 @@
                        'createpage' => true,
                        'bot' => true,
                        'item-term' => true,
+                       'item-merge' => true,
+                       'item-redirect' => true,
                        'property-term' => true,
                        'read' => true,
                        'edit' => true,
diff --git 
a/extensions/Wikibase/tests/browser/features/authority_control_gadget.feature 
b/extensions/Wikibase/tests/browser/features/authority_control_gadget.feature
index 4ca5d7f..806812c 100644
--- 
a/extensions/Wikibase/tests/browser/features/authority_control_gadget.feature
+++ 
b/extensions/Wikibase/tests/browser/features/authority_control_gadget.feature
@@ -35,4 +35,7 @@
   Examples:
     | item_id | debug_mode |
     | Q12480  | false |
+
+  Examples:
+    | item_id | debug_mode |
     | Q12480  | true |
diff --git a/vendor/composer/autoload_classmap.php 
b/vendor/composer/autoload_classmap.php
index 3d969c8..e2b8bb6 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -794,7 +794,6 @@
     'Wikibase\\LibHooks' => $baseDir . 
'/extensions/Wikibase/lib/WikibaseLib.hooks.php',
     'Wikibase\\Lib\\AutoCommentFormatter' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/AutoCommentFormatter.php',
     'Wikibase\\Lib\\BaseUnitStorage' => $baseDir . 
'/extensions/Wikibase/lib/includes/Units/BaseUnitStorage.php',
-    'Wikibase\\Lib\\BinaryOptionDispatchingSnakFormatter' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/BinaryOptionDispatchingSnakFormatter.php',
     'Wikibase\\Lib\\CSVUnitStorage' => $baseDir . 
'/extensions/Wikibase/lib/includes/Units/CSVUnitStorage.php',
     'Wikibase\\Lib\\Changes\\EntityChangeFactory' => $baseDir . 
'/extensions/Wikibase/lib/includes/Changes/EntityChangeFactory.php',
     'Wikibase\\Lib\\CommonsLinkFormatter' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/CommonsLinkFormatter.php',
@@ -814,6 +813,7 @@
     'Wikibase\\Lib\\EscapingValueFormatter' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/EscapingValueFormatter.php',
     'Wikibase\\Lib\\FieldPropertyInfoProvider' => $baseDir . 
'/extensions/Wikibase/lib/includes/Store/FieldPropertyInfoProvider.php',
     'Wikibase\\Lib\\FormatterLabelDescriptionLookupFactory' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/FormatterLabelDescriptionLookupFactory.php',
+    'Wikibase\\Lib\\Formatters\\BinaryOptionDispatchingSnakFormatter' => 
$baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/BinaryOptionDispatchingSnakFormatter.php',
     'Wikibase\\Lib\\Formatters\\CommonsThumbnailFormatter' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/CommonsThumbnailFormatter.php',
     'Wikibase\\Lib\\Formatters\\EntityIdSiteLinkFormatter' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/EntityIdSiteLinkFormatter.php',
     'Wikibase\\Lib\\Formatters\\ErrorHandlingSnakFormatter' => $baseDir . 
'/extensions/Wikibase/lib/includes/Formatters/ErrorHandlingSnakFormatter.php',
@@ -913,6 +913,7 @@
     'Wikibase\\Lib\\Tests\\EntityTypeDefinitionsTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/EntityTypeDefinitionsTest.php',
     'Wikibase\\Lib\\Tests\\EntityTypesTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/EntityTypesTest.php',
     'Wikibase\\Lib\\Tests\\FieldPropertyInfoProviderTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/Store/FieldPropertyInfoProviderTest.php',
+    
'Wikibase\\Lib\\Tests\\Formatters\\BinaryOptionDispatchingSnakFormatterTest' => 
$baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/Formatters/BinaryOptionDispatchingSnakFormatterTest.php',
     'Wikibase\\Lib\\Tests\\Formatters\\CommonsThumbnailFormatterTest' => 
$baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/Formatters/CommonsThumbnailFormatterTest.php',
     'Wikibase\\Lib\\Tests\\Formatters\\EntityIdSiteLinkFormatterTest' => 
$baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/Formatters/EntityIdSiteLinkFormatterTest.php',
     'Wikibase\\Lib\\Tests\\LanguageFallbackChainFactoryTest' => $baseDir . 
'/extensions/Wikibase/lib/tests/phpunit/LanguageFallbackChainFactoryTest.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 8c85b52..147f695 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -115,19 +115,19 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-            "reference": "769b04978d11696e3315592a5d8fe9ebe4df3bd3"
+            "reference": "d8bf846eb0cdc496c8a64b5a9bb044ca73fa953f"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/769b04978d11696e3315592a5d8fe9ebe4df3bd3";,
-            "reference": "769b04978d11696e3315592a5d8fe9ebe4df3bd3",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/d8bf846eb0cdc496c8a64b5a9bb044ca73fa953f";,
+            "reference": "d8bf846eb0cdc496c8a64b5a9bb044ca73fa953f",
             "shasum": ""
         },
         "require-dev": {
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "mediawiki/mediawiki-codesniffer": "0.7.2"
         },
-        "time": "2016-11-14 21:48:06",
+        "time": "2016-11-15 21:48:45",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {
@@ -1406,12 +1406,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "311f9625f71ad3f7d0c046edb0016d03ec1eb7cd"
+            "reference": "8102a7c30464e59b6ca965d358b069ccf67b07f2"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/311f9625f71ad3f7d0c046edb0016d03ec1eb7cd";,
-            "reference": "311f9625f71ad3f7d0c046edb0016d03ec1eb7cd",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/8102a7c30464e59b6ca965d358b069ccf67b07f2";,
+            "reference": "8102a7c30464e59b6ca965d358b069ccf67b07f2",
             "shasum": ""
         },
         "require": {
@@ -1444,7 +1444,7 @@
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0"
         },
-        "time": "2016-11-15 09:38:24",
+        "time": "2016-11-15 23:22:19",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {

-- 
To view, visit https://gerrit.wikimedia.org/r/321854
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id767f51c773654d8fcf445603d3f4a9c90d6dda3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to