WikidataBuilder has uploaded a new change for review.

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

Change subject: New Wikidata Build - 2016-09-14T10:00:01+0000
......................................................................

New Wikidata Build - 2016-09-14T10:00:01+0000

Change-Id: Icda23c8970500183bc7c14211afd3f2151ab7554
---
M composer.lock
M extensions/Wikibase/client/i18n/ar.json
M extensions/Wikibase/client/i18n/it.json
M extensions/Wikibase/client/i18n/mai.json
M extensions/Wikibase/lib/i18n/ar.json
M extensions/Wikibase/repo/i18n/mai.json
M extensions/Wikibase/repo/tests/phpunit/includes/EditEntityTest.php
M extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
M 
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
M 
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
M 
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
M 
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
M 
extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.sitelinkgroupview.css
M extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
M 
extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
M 
extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
M extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
M vendor/composer/installed.json
18 files changed, 173 insertions(+), 155 deletions(-)


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

diff --git a/composer.lock b/composer.lock
index b32fe0a..5c95924 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1574,12 +1574,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "68b68ad37b6ec442262825b72c3bbc9d83a6ccde"
+                "reference": "98975d2541f62dbc3e1fbfff4a9f7995962d7ab8"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/68b68ad37b6ec442262825b72c3bbc9d83a6ccde";,
-                "reference": "68b68ad37b6ec442262825b72c3bbc9d83a6ccde",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/98975d2541f62dbc3e1fbfff4a9f7995962d7ab8";,
+                "reference": "98975d2541f62dbc3e1fbfff4a9f7995962d7ab8",
                 "shasum": ""
             },
             "require": {
@@ -1653,7 +1653,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2016-09-13 08:14:11"
+            "time": "2016-09-14 09:00:57"
         },
         {
             "name": "wikibase/wikimedia-badges",
diff --git a/extensions/Wikibase/client/i18n/ar.json 
b/extensions/Wikibase/client/i18n/ar.json
index dbf374c..82c8eb4 100644
--- a/extensions/Wikibase/client/i18n/ar.json
+++ b/extensions/Wikibase/client/i18n/ar.json
@@ -21,6 +21,19 @@
        },
        "wikibase-client-desc": "عميل امتداد ويكيبيس",
        "tooltip-t-wikibase": "الربط بعنصر مرتبط في مستودع البيانات",
+       "apihelp-query+wbentityusage-description": "يرجع كل أرقام الكيانات 
المستخدمة في الصفحات المعطاة.",
+       "apihelp-query+wbentityusage-param-aspect": "فقط أرجع أرقام الكيانات 
المستخدمة في هذا الجانب.",
+       "apihelp-query+wbentityusage-param-prop": "الخصائص للإضافة للنتيجة.",
+       "apihelp-query+wbentityusage-paramvalue-prop-url": "لو مفعلة مسار 
الكيان ستتم إضافته",
+       "apihelp-query+wbentityusage-param-entities": "فقط أرجع الصفحة التي 
تستخدم هذه الكيانات.",
+       "apihelp-query+wbentityusage-param-limit": "كم عدد استخدامات الكيانات 
للإرجاع.",
+       "apihelp-query+wbentityusage-example-simple": "الحصول على الكيانات 
المستخدمة في الصفحة <kbd>Main Page</kbd>.",
+       "apihelp-query+pageterms-example-simple": "الحصول على كل المصطلحات 
المرتبطة بالصفحة 'London'، بلغة المستخدم.",
+       "apihelp-query+pageterms-example-label-en": "الحصول على العلامات 
والاسماء المستعارة مع الصفحة 'London'، بالإنجليزية.",
+       "apihelp-query+pageterms-example-item": "الحصول على العلامات والأسماء 
المستعارة للعنصر Q84.",
+       "apihelp-query+pageterms-param-terms": "أنواع المصطلحات للحصول عليها، 
مثلا 'description'. لو غير محدد، فكل الأنواع يتم إرجاعها.",
+       "apihelp-query+wikibase-description": "الحصول على المعلومات حول عميل 
Wikibase ومستودع Wikibase المصاحب.",
+       "apihelp-query+wikibase-example": "الحصول على المسار والمعلومات الأخرى 
حول عميل ومستودع Wikibase.",
        "wikibase-after-page-move": "يمكنك أيضا تحديث [$1 بند {{WBREPONAME}} 
المصاحب] للحفاظ على وصلات اللغة على الصفحة المنقولة.",
        "wikibase-after-page-move-queued": "[$1 عنصر {{WBREPONAME}}] المرتبط 
بهذه الصفحة سيُحدّث تلقائيًا. كن على علمٍ بأن هذا قد لا يحدث فورًا.",
        "wikibase-after-page-delete": "ينبغي أيضًا أن تُزيل الوصلة التي تقود 
لهذه الصفحة من [$1 عنصر {{WBREPONAME}} المرتبط بها] للحفاظ على وصلات اللغات.",
@@ -65,6 +78,7 @@
        "wikibase-error-deserialize-error": "فشل إلغاء تسلسل البيانات.",
        "wikibase-error-serialize-error": "فشل في تسلسل البيانات.",
        "wikibase-error-invalid-entity-id": "المعرِّف الذي أدخلته يجهله النظام. 
يرجى إدخال معرِّف كائن صالح.",
+       "wikibase-error-exceeded-entity-access-limit": "الكثير من كيانات 
{{WBREPONAME}} يتم الوصول لها.",
        "unconnectedpages": "صفحات غير متصلة بعناصر",
        "unconnectedpages-summary": "هذه الصفحة تعرض الصفحات التي ليست مرتبطة 
بعناصر بيانات (في النطاقات التي تدعم العناصر المرتبطة). القائمة مرتبة حسب رقم 
الصفحة تنازليا، بحيث أن الصفحات الأجدد تعرض أولا.",
        "wikibase-unconnectedpages-format-row": "يوجد ({{PLURAL:$1|وصلة بين 
اللغات|وصلتان بين اللغات|$1 وصلات بين اللغات|$1 وصلة بين اللغات}} في هذه 
الصفحة)",
@@ -77,6 +91,7 @@
        "wikibase-pageswithbadges-submit": "عرض الصفحات",
        "wikibase-pageinfo-entity-id": "معرف عنصر {{WBREPONAME}}",
        "wikibase-pageinfo-entity-id-none": "لا شيء",
+       "wikibase-pageinfo-entity-usage": "كيانات {{WBREPONAME}} المستخدمة في 
هذه الصفحة",
        "wikibase-pageinfo-entity-usage-S": "وصلة الموقع",
        "wikibase-pageinfo-entity-usage-L": "العلامة: $1",
        "wikibase-pageinfo-entity-usage-T": "عنوان",
@@ -86,5 +101,10 @@
        "wikibase-otherprojects": "في مشاريع أخرى",
        "wikibase-otherprojects-beta-message": "المشاريع الأخرى في الشريط 
الجانبي",
        "wikibase-otherprojects-beta-description": "يضيف قسم 
\"{{int:wikibase-otherprojects}}\" إلى الشريط الجانبي لعرض وصلات لمشاريع 
ويكيميديا الأخرى استنادا إلى معطيات {{WBREPONAME}}.",
-       "notification-link-text-view-item": "{{GENDER:$1|اعرض}} العنصر"
+       "echo-category-title-wikibase-action": "{{PLURAL:$1|اتصال|اتصالات}} مع 
{{WBREPONAME}}",
+       "echo-pref-tooltip-wikibase-action": "أخطرني عندما يقوم شخص ما بتوصيل 
صفحة {{GENDER:|أنشأتها}} لعنصر {{WBREPONAME}}.",
+       "notification-header-page-connection": "الصفحة <strong>$3</strong> تم 
{{GENDER:$2|توصيلها}} لعنصر {{WBREPONAME}}.",
+       "notification-bundle-header-page-connection": "<strong>$3</strong> و 
{{PLURAL:$4|صفحة واحدة أخرى|$4 صفحات أخرى|100=99+ صفحات أخرى}} تم 
{{GENDER:$2|توصيلها}} لعناصر {{WBREPONAME}}.",
+       "notification-link-text-view-item": "{{GENDER:$1|اعرض}} العنصر",
+       "notification-subject-page-connection": "صفحة على {{SITENAME}} أنت 
{{GENDER:$3|أنشأتها}} تم {{GENDER:$2|توصيلها}} إلى عنصر {{WBREPONAME}}"
 }
diff --git a/extensions/Wikibase/client/i18n/it.json 
b/extensions/Wikibase/client/i18n/it.json
index ccdf218..0d4b76d 100644
--- a/extensions/Wikibase/client/i18n/it.json
+++ b/extensions/Wikibase/client/i18n/it.json
@@ -20,6 +20,7 @@
        },
        "wikibase-client-desc": "Client per l'estensione Wikibase",
        "tooltip-t-wikibase": "Collegamento all'elemento connesso dell'archivio 
dati",
+       "apihelp-query+wbentityusage-param-entities": "Restituisce solo le 
pagine che utilizzano queste entità.",
        "apihelp-query+pageterms-description": "Ottieni termini associati a una 
pagina tramite un elemento dati associato. Su una pagina di un'entità wikibase, 
i termini dell'entità sono usati direttamente.\nAttenzione: su un repository 
wiki, i termini sono usati direttamente sulle pagine dell'entità, non sulle 
pagine connesse a un elemento. Questa cosa potrebbe cambiare in futuro.",
        "apihelp-query+pageterms-example-simple": "Ottieni tutti i termini 
associati alla pagina 'London', nella lingua dell'utente.",
        "apihelp-query+pageterms-example-label-en": "Ottieni etichette ed alias 
associati alla pagina 'London', in inglese.",
diff --git a/extensions/Wikibase/client/i18n/mai.json 
b/extensions/Wikibase/client/i18n/mai.json
index 60c8f4d..10c1efc 100644
--- a/extensions/Wikibase/client/i18n/mai.json
+++ b/extensions/Wikibase/client/i18n/mai.json
@@ -36,8 +36,8 @@
        "wikibase-linkitem-success-link": "पृष्ठ सफलतापूर्वक जुड़ गएल अछि । 
अहाँ जडी सभ युक्त आइटम के अपन [$1 केन्द्रीय डेटा रिपोज़िटरी] में खोइज सकएत छी।",
        "wikibase-property-notfound": "$1 वस्तु नै भेटल।",
        "wikibase-rc-hide-wikidata": "$1 {{WBREPONAME}}",
-       "wikibase-rc-hide-wikidata-hide": "नुकाऊ",
-       "wikibase-rc-hide-wikidata-show": "देखाऊ",
+       "wikibase-rc-hide-wikidata-hide": "नुकाबी",
+       "wikibase-rc-hide-wikidata-show": "देखाबी",
        "wikibase-rc-show-wikidata-pref": "{{WBREPONAME}}के लगक परिवर्तन 
सम्पादन देखाउ",
        "wikibase-rc-wikibase-edit-letter": "डी",
        "wikibase-rc-wikibase-edit-title": "{{WBREPONAME}} सम्पादन",
diff --git a/extensions/Wikibase/lib/i18n/ar.json 
b/extensions/Wikibase/lib/i18n/ar.json
index 1b4e96b..3abccb2 100644
--- a/extensions/Wikibase/lib/i18n/ar.json
+++ b/extensions/Wikibase/lib/i18n/ar.json
@@ -15,6 +15,7 @@
                        "Sonic N800"
                ]
        },
+       "wikibase-lib-desc": "يمسك بالوظيفة المشتركة لامتدادات Wikibase و 
Wikibase Client",
        "specialpages-group-wikibase": "بيانات ويكي",
        "wikibase-deletedentity-item": "عنصر محذوف",
        "wikibase-deletedentity-property": "خاصية محذوفة",
@@ -30,6 +31,7 @@
        "wikibase-error-autocomplete-response": "إجابة الخادوم: $1",
        "wikibase-error-ui-no-external-page": "لم يمكن إيجاد المقالة المحددة 
على الموقع الموافق.",
        "wikibase-error-ui-edit-conflict": "هناك نزاع في تحرير. الرجاء حفظ 
التغييرات في حاسوبك، إعادة تحميل هذه الصفحة وحفظها مرة أخرى.",
+       "wikibase-language-fallback-transliteration-hint": "$1 (مترجم)",
        "wikibase-quantitydetails-amount": "الكمية",
        "wikibase-quantitydetails-upperbound": "الحد الأعلى",
        "wikibase-quantitydetails-lowerbound": "الحد الأدنى",
diff --git a/extensions/Wikibase/repo/i18n/mai.json 
b/extensions/Wikibase/repo/i18n/mai.json
index b90cfd2..6ffb139 100644
--- a/extensions/Wikibase/repo/i18n/mai.json
+++ b/extensions/Wikibase/repo/i18n/mai.json
@@ -6,11 +6,10 @@
                ]
        },
        "wikibase-edit": "सम्पादन करी",
-       "wikibase-add": "जोडु",
+       "wikibase-add": "जोडी",
        "wikibase-label-empty": "कोनो नामपत्र परिभाषित नै",
        "wikibase-description-empty": "कोनो विवरण परिभाषित नै",
        "wikibase-sitelinks-special": "दोसर साइटसभ",
-       "wikibase-aliases-empty": "कोनो उर्फ परिभाषित नै।",
        "wikibase-statementview-rank-normal": "सामान्य क्रम",
        "wikibase-statementview-references-counter": 
"$1{{PLURAL:$2|0=|$3+$2$4}} {{PLURAL:$1|स्रोत|स्रोतसभ}}"
 }
diff --git a/extensions/Wikibase/repo/tests/phpunit/includes/EditEntityTest.php 
b/extensions/Wikibase/repo/tests/phpunit/includes/EditEntityTest.php
index 1f3f1f9..429f567 100644
--- a/extensions/Wikibase/repo/tests/phpunit/includes/EditEntityTest.php
+++ b/extensions/Wikibase/repo/tests/phpunit/includes/EditEntityTest.php
@@ -650,13 +650,17 @@
                );
 
                // make sure we have a working cache
-               $this->setMwGlobals(
-                       'wgMainCacheType',
-                       CACHE_ANYTHING
-               );
-
-               // make sure we have a fresh cache
-               ObjectCache::clear();
+               $services = \MediaWiki\MediaWikiServices::getInstance();
+               if ( method_exists( $services, 'getLocalClusterObjectCache' ) ) 
{
+                       $services->resetServiceForTesting( 
'LocalClusterObjectCache' );
+                       $services->redefineService( 'LocalClusterObjectCache', 
function () {
+                               return new \HashBagOStuff();
+                       } );
+               } else {
+                       $this->setMwGlobals( 'wgMainCacheType', CACHE_ANYTHING 
);
+                       // make sure we have a fresh cache
+                       ObjectCache::clear();
+               }
 
                $user = $this->getUser( 'UserForTestAttemptSaveRateLimit' );
                $this->setUserGroups( $user, $groups );
@@ -688,7 +692,11 @@
                }
 
                // make sure nobody else has to work with our cache
-               ObjectCache::clear();
+               if ( method_exists( $services, 'getLocalClusterObjectCache' ) ) 
{
+                       $services->resetServiceForTesting( 
'LocalClusterObjectCache' );
+               } else {
+                       ObjectCache::clear();
+               }
        }
 
        public function provideIsTokenOk() {
diff --git 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
index 86f5c52..3396705 100644
--- 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
+++ 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
@@ -25,13 +25,6 @@
  *         Node name of the base node of new list items.
  */
 /**
- * @event itemremoved
- * Triggered after a list got removed from the list.
- * @param {jQuery.Event} event
- * @param {*|null} value The value of the list item which will be removed. 
`null` for empty value.
- * @param {jQuery} $li The list item's DOM node that was removed.
- */
-/**
  * @event destroy
  * Triggered when the widget has been destroyed.
  * @param {jQuery.Event} event
@@ -285,11 +278,10 @@
                        throw new Error( 'The given node is not an element in 
this list' );
                }
 
-               var liValue = this._lia.liInstance( $li ).value();
-
                this._removeItem( $li );
 
-               this._trigger( 'itemremoved', null, [liValue, $li] );
+               // FIXME: Remove all itemremoved events, see 
https://gerrit.wikimedia.org/r/298766.
+               this._trigger( 'itemremoved', null, [null, $li] );
        },
 
        _removeItem: function( $li ) {
diff --git 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
index 4025cca..d407806 100644
--- 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
+++ 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.referenceview.js
@@ -16,7 +16,7 @@
  *
  * @param {Object} options
  * @param {wikibase.datamodel.Reference|null} options.value
- * @param {jQuery.wikibase.listview.ListItemAdapter} options.listItemAdapter
+ * @param {Function} options.getListItemAdapter
  */
 /**
  * @event afterstartediting
@@ -55,7 +55,7 @@
                        $listview: '.wikibase-referenceview-listview'
                },
                value: null,
-               listItemAdapter: null
+               getListItemAdapter: null
        },
 
        /**
@@ -72,16 +72,20 @@
         * @throws {Error} if a required option is not specified properly.
         */
        _create: function() {
-               if ( !this.options.listItemAdapter ) {
+               if ( !this.options.getListItemAdapter ) {
                        throw new Error( 'Required option not specified 
properly' );
                }
 
                PARENT.prototype._create.call( this );
 
+               var listview;
                this.$listview.listview( {
-                       listItemAdapter: this.options.listItemAdapter,
+                       listItemAdapter: this.options.getListItemAdapter( 
function( snaklistview ) {
+                               listview.removeItem( snaklistview.element );
+                       } ),
                        value: this.options.value ? 
this.options.value.getSnaks().getGroupedSnakLists() : []
                } );
+               listview = this.$listview.data( 'listview' );
 
                this._updateReferenceHashClass( this.value() );
 
@@ -101,22 +105,12 @@
                var changeEvents = [
                        'snakviewchange.' + this.widgetName,
                        lia.prefixedEvent( 'change.' + this.widgetName ),
+                       // FIXME: Remove all itemremoved events, see 
https://gerrit.wikimedia.org/r/298766.
                        'listviewitemremoved.' + this.widgetName
                ];
 
                this.$listview
                .on( changeEvents.join( ' ' ), function( event ) {
-                       if ( event.type === 'listviewitemremoved' ) {
-                               // Check if last snaklistview item (snakview) 
has been removed and remove the
-                               // listview item (the snaklistview itself) if 
so:
-                               var $snaklistview = $( event.target ).closest( 
':wikibase-snaklistview' ),
-                                       snaklistview = lia.liInstance( 
$snaklistview );
-
-                               if ( snaklistview && 
!snaklistview.value().length ) {
-                                       listview.removeItem( $snaklistview );
-                               }
-                       }
-
                        // Propagate "change" event.
                        self._trigger( 'change' );
                } );
@@ -131,7 +125,6 @@
                var lia = this.$listview.data( 'listview' ).listItemAdapter(),
                        events = [
                                'snakviewchange.' + this.widgetName,
-                               'listviewitemremoved.' + this.widgetName,
                                lia.prefixedEvent( 'change.' + this.widgetName )
                        ];
                this.$listview.off( events.join( ' ' ) );
diff --git 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
index cf8b033..36b8955 100644
--- 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
+++ 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
@@ -132,6 +132,8 @@
                                },
                                function( sitelinkview ) {
                                        self.$listview.data( 'listview' 
).removeItem( sitelinkview.element );
+                                       self._refreshCounter();
+                                       self._trigger( 'change' );
                                }
                        );
 
@@ -173,16 +175,6 @@
                        ].join( ' ' ),
                        function( event ) {
                                event.stopPropagation();
-                       }
-               )
-               .on(
-                       'listviewitemremoved.' + this.widgetName,
-                       function( event, sitelinkview ) {
-                               self._refreshCounter();
-                               if ( sitelinkview ) {
-                                       // Do not trigger "change" event when 
handling empty elements.
-                                       self._trigger( 'change' );
-                               }
                        }
                );
        },
diff --git 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
index 7faf6f8..adb0a50 100644
--- 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
+++ 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
@@ -19,10 +19,11 @@
  * @param {Object} options
  * @param {wikibase.datamodel.SnakList} [value=new 
wikibase.datamodel.SnakList()]
  *        The `SnakList` to be displayed by this view.
- * @param {jQuery.wikibase.listview.ListItemAdapter} options.listItemAdapter
+ * @param {Function} options.getListItemAdapter
  * @param {boolean} [singleProperty=true]
  *        If `true`, it is assumed that the widget is filled with `Snak`s 
featuring a single common
  *        property.
+ * @param {Function} removeCallback A function that removes this snaklistview
  */
 /**
  * @event afterstartediting
@@ -56,7 +57,8 @@
                },
                value: null,
                singleProperty: false,
-               listItemAdapter: null
+               getListItemAdapter: null,
+               removeCallback: null
        },
 
        /**
@@ -125,6 +127,11 @@
                this.$listview.listview( {
                        listItemAdapter: this.options.getListItemAdapter( 
function( snakview ) {
                                self._listview.removeItem( snakview.element );
+                               if ( self.value().length === 0 ) {
+                                       self.options.removeCallback();
+                               } else {
+                                       self._trigger( 'change' );
+                               }
                        } ),
                        value: this.options.value.toArray()
                } );
@@ -140,7 +147,8 @@
                this.$listview
                .off( '.' + this.widgetName )
                .on( this._lia.prefixedEvent( 'change.' ) + this.widgetName
-                       + ' listviewitemremoved.' + this.widgetName, function( 
event ) {
+                               // FIXME: Remove all itemremoved events, see 
https://gerrit.wikimedia.org/r/298766.
+                               + ' listviewitemremoved.' + this.widgetName, 
function( event ) {
                                // Forward the "change" event to external 
components (e.g. the edit toolbar).
                                self._trigger( 'change' );
                        }
diff --git 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
index fdd9fe1..eafc65f 100644
--- 
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
+++ 
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementview.js
@@ -41,7 +41,7 @@
  *        Allows to predefine certain aspects of the `Statement` to be created 
from the view. If
  *        this option is omitted, an empty view is created. A common use-case 
is adding a value to a
  *        property existing already by specifying, for example: `{ 
mainSnak.property: 'P1' }`.
- * @param {jQuery.wikibase.listview.ListItemAdapter} 
options.qualifiersListItemAdapter
+ * @param {Function} options.getQualifiersListItemAdapter
  * @param {Object} [options.locked={ mainSnak: false }]
  *        Elements that shall be locked and may not be changed by user 
interaction.
  * @param {string} [options.helpMessage=mw.msg( 
'wikibase-claimview-snak-new-tooltip' )]
@@ -118,12 +118,6 @@
        _referencesListview: null,
 
        /**
-        * @property {boolean}
-        * @private
-        */
-       _ignoreReferencesListviewChanges: false,
-
-       /**
         * Reference to the `listview` widget managing the qualifier 
`snaklistview`s.
         * @property {jQuery.wikibase.listview|null}
         * @private
@@ -154,7 +148,7 @@
                        || !this.options.buildSnakView
                        || !this.options.entityIdPlainFormatter
                        || !this.options.guidGenerator
-                       || !this.options.qualifiersListItemAdapter
+                       || !this.options.getQualifiersListItemAdapter
                ) {
                        throw new Error( 'Required option not specified 
properly' );
                }
@@ -276,7 +270,9 @@
                        $qualifiers = $( '<div/>' ).prependTo( this.$qualifiers 
);
                }
                $qualifiers.listview( {
-                       listItemAdapter: this.options.qualifiersListItemAdapter,
+                       listItemAdapter: 
this.options.getQualifiersListItemAdapter( function( snaklistview ) {
+                               self._qualifiers.removeItem( 
snaklistview.element );
+                       } ),
                        value: groupedQualifierSnaks
                } )
                .on( 'snaklistviewchange.' + this.widgetName,
@@ -284,22 +280,7 @@
                                event.stopPropagation();
                                self._trigger( 'change' );
                        }
-               )
-               .on( 'listviewitemremoved.' + this.widgetName, function( event, 
value, $itemNode ) {
-                       if ( event.target === self._qualifiers.element.get( 0 ) 
) {
-                               self._trigger( 'change' );
-                               return;
-                       }
-
-                       // Check if last snaklistview of a qualifier listview 
item has been removed and
-                       // remove the listview item if so:
-                       var $snaklistview = $( event.target ).closest( 
':wikibase-snaklistview' ),
-                               snaklistview = $snaklistview.data( 
'snaklistview' );
-
-                       if ( !snaklistview.value().length ) {
-                               self._qualifiers.removeItem( 
snaklistview.element );
-                       }
-               } );
+               );
 
                this._qualifiers = $qualifiers.data( 'listview' );
        },
@@ -322,6 +303,8 @@
                var lia = this.options.getReferenceListItemAdapter(
                        function( referenceview ) {
                                self._referencesListview.removeItem( 
referenceview.element );
+                               self._drawReferencesCounter();
+                               self._trigger( 'change' );
                        }
                );
 
@@ -333,17 +316,9 @@
                this._referencesListview = $listview.data( 'listview' );
 
                $listview
-               .on( 'listviewitemremoved', function( event, value, $li ) {
-                       if ( self._ignoreReferencesListviewChanges ) {
-                               return;
-                       }
-                       if ( event.target === $listview[0] ) {
-                               self._drawReferencesCounter();
-                       }
-                       self._trigger( 'change' );
-               } )
                .on( lia.prefixedEvent( 'change.' + this.widgetName ), 
function( event ) {
                        event.stopPropagation();
+                       self._drawReferencesCounter();
                        self._trigger( 'change' );
                } );
 
@@ -687,6 +662,7 @@
                this._stopEditingQualifiers( dropValue );
                this._rankSelector.stopEditing( dropValue );
 
+               // FIXME: Should not be necessary if _setOption would do the 
right thing for values
                this._recreateReferences();
 
                return PARENT.prototype._afterStopEditing.call( this, dropValue 
);
@@ -696,11 +672,8 @@
         * @protected
         */
        _recreateReferences: function() {
-               // Normally, statementview would trigger a change event when 
references are removed and added
-               this._ignoreReferencesListviewChanges = true;
                this._referencesListview.option( 'value', this.options.value
                                ? this.options.value.getReferences().toArray() 
: [] );
-               this._ignoreReferencesListviewChanges = false;
 
                this._drawReferencesCounter();
        },
@@ -765,6 +738,7 @@
                }
                if ( key === 'value' ) {
                        this.element.toggleClass( 'wb-new', value === null );
+                       // FIXME: set the value!
                }
 
                return response;
diff --git 
a/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.sitelinkgroupview.css
 
b/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.sitelinkgroupview.css
index b8ffad6..05676b3 100644
--- 
a/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.sitelinkgroupview.css
+++ 
b/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.sitelinkgroupview.css
@@ -33,9 +33,7 @@
        background-color: #D6F3FF;
 }
 
-.wikibase-sitelinkgroupview h2, /* TODO: Temporarily kept for compatibility, 
remove after July 2015 */
-.wikibase-sitelinkgroupview h3 {
-       border-bottom: 0; /* TODO: Temporarily kept for compatibility, remove 
after July 2015 */
+.wikibase-sitelinkgroupview .wikibase-sitelinkgroupview-heading-section h3 {
        display: inline;
        float: none;
        font-weight: normal;
diff --git a/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js 
b/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
index 6b293b6..568e1c8 100644
--- a/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
+++ b/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
@@ -451,9 +451,9 @@
                                ),
                                entityIdPlainFormatter: 
this._entityIdPlainFormatter,
                                getAdder: this._getAdderWithStartEditing( 
startEditingCallback ),
+                               getQualifiersListItemAdapter: 
this.getListItemAdapterForSnakListView.bind( this, startEditingCallback ),
                                getReferenceListItemAdapter: 
this.getListItemAdapterForReferenceView.bind( this, startEditingCallback ),
-                               guidGenerator: new 
wb.utilities.ClaimGuidGenerator( entityId ),
-                               qualifiersListItemAdapter: 
this.getListItemAdapterForSnakListView( startEditingCallback )
+                               guidGenerator: new 
wb.utilities.ClaimGuidGenerator( entityId )
                        }
                );
                return view;
@@ -480,8 +480,8 @@
                        $dom,
                        {
                                value: value || null,
-                               listItemAdapter: 
this.getListItemAdapterForSnakListView( startEditingCallback ),
                                getAdder: this._getAdderWithStartEditing( 
startEditingCallback ),
+                               getListItemAdapter: 
this.getListItemAdapterForSnakListView.bind( this, startEditingCallback ),
                                getReferenceRemover: function( $dom ) {
                                        return 
structureEditorFactory.getRemover( function() {
                                                return 
startEditingCallback().then( function() { return removeCallback( view ); } );
@@ -497,20 +497,37 @@
         *
         * @return {jQuery.wikibase.listview.ListItemAdapter} The constructed 
ListItemAdapter
         */
-       SELF.prototype.getListItemAdapterForSnakListView = function( 
startEditingCallback ) {
+       SELF.prototype.getListItemAdapterForSnakListView = function( 
startEditingCallback, removeCallback ) {
                return new $.wikibase.listview.ListItemAdapter( {
                        listItemWidget: $.wikibase.snaklistview,
-                       newItemOptionsFn: $.proxy( function( value ) {
-                               return {
-                                       getListItemAdapter: 
this.getListItemAdapterForSnakView.bind( this, startEditingCallback ),
-                                       value: value || undefined,
-                                       singleProperty: true
-                               };
+                       getNewItem: $.proxy( function( value, dom ) {
+                               return this.getSnakListView( 
startEditingCallback, removeCallback, $( dom ), value );
                        }, this )
                } );
        };
 
        /**
+        * Construct a `snaklistview`
+        *
+        * @return {jQuery.wikibase.snaklistview} The constructed snaklistview
+        */
+       SELF.prototype.getSnakListView = function( startEditingCallback, 
removeCallback, $dom, value ) {
+               var view = this._getView(
+                       'snaklistview',
+                       $dom,
+                       {
+                               value: value || undefined,
+                               singleProperty: true,
+                               removeCallback: function() {
+                                       removeCallback( view );
+                               },
+                               getListItemAdapter: 
this.getListItemAdapterForSnakView.bind( this, startEditingCallback )
+                       }
+               );
+               return view;
+       };
+
+       /**
         * Construct a `ListItemAdapter` for `snakview`s
         *
         * @return {jQuery.wikibase.listview.ListItemAdapter} The constructed 
ListItemAdapter
diff --git 
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
 
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
index 669548e..db8c673 100644
--- 
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
+++ 
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.referenceview.tests.js
@@ -5,6 +5,26 @@
 ( function( $, wb, QUnit ) {
        'use strict';
 
+       var listItemAdapter = wb.tests.getMockListItemAdapter(
+               'snaklistview',
+               function() {
+                       this.enterNewItem = function() {
+                               return $.Deferred().resolve( {
+                                       data: function() {
+                                               return { focus: function() {} };
+                                       }
+                               } ).promise();
+                       };
+                       this.isValid = function() {
+                               return false;
+                       };
+                       this.stopEditing = function() {};
+                       this.value = function() {
+                               return this.options.value;
+                       };
+               }
+       );
+
        /**
         * Generates a referenceview widget suitable for testing.
         *
@@ -23,25 +43,9 @@
                                        destroy: function() {}
                                };
                        },
-                       listItemAdapter: wb.tests.getMockListItemAdapter(
-                               'snaklistview',
-                               function() {
-                                       this.enterNewItem = function() {
-                                               return $.Deferred().resolve( {
-                                                       data: function() {
-                                                               return { focus: 
function() {} };
-                                                       }
-                                               } ).promise();
-                                       };
-                                       this.isValid = function() {
-                                               return false;
-                                       };
-                                       this.stopEditing = function() {};
-                                       this.value = function() {
-                                               return this.options.value;
-                                       };
-                               }
-                       )
+                       getListItemAdapter: function() {
+                               return listItemAdapter;
+                       }
                }, options );
 
                return $( '<div/>' )
diff --git 
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
 
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
index c4074ef..a6d4c7e 100644
--- 
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
+++ 
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.statementview.tests.js
@@ -68,14 +68,16 @@
                guidGenerator: 'I am a ClaimGuidGenerator',
                locked: 'I am a',
                predefined: 'I am a',
-               qualifiersListItemAdapter: wb.tests.getMockListItemAdapter(
-                       'mytestqualifiersview',
-                       function() {
-                               this.value = function() {
-                                       return this.options.value;
-                               };
-                       }
-               )
+               getQualifiersListItemAdapter: function() {
+                       return wb.tests.getMockListItemAdapter(
+                               'mytestqualifiersview',
+                               function() {
+                                       this.value = function() {
+                                               return this.options.value;
+                                       };
+                               }
+                       );
+               }
        }, options || {} );
 
        $node = $node || $( '<div/>' ).appendTo( 'body' );
diff --git 
a/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js 
b/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
index 2e2d60d..fc4b148 100644
--- a/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
+++ b/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
@@ -274,11 +274,11 @@
                                        }
                                },
 
+                               getQualifiersListItemAdapter: 
sinon.match.instanceOf( Function ),
                                getReferenceListItemAdapter: 
sinon.match.instanceOf( Function ),
                                buildSnakView: sinon.match.instanceOf( Function 
),
                                entityIdPlainFormatter: entityIdPlainFormatter,
-                               guidGenerator: sinon.match.instanceOf( 
wb.utilities.ClaimGuidGenerator ),
-                               qualifiersListItemAdapter: 
sinon.match.instanceOf( ListItemAdapter )
+                               guidGenerator: sinon.match.instanceOf( 
wb.utilities.ClaimGuidGenerator )
                        } )
                );
 
@@ -378,7 +378,7 @@
                        referenceview,
                        sinon.match( {
                                value: value || null,
-                               listItemAdapter: sinon.match.instanceOf( 
$.wikibase.listview.ListItemAdapter ),
+                               getListItemAdapter: sinon.match.func,
                                getReferenceRemover: sinon.match.func
                        } )
                );
@@ -387,9 +387,8 @@
        } );
 
        QUnit.test( 'getListItemAdapterForSnakListView passes correct options 
to ListItemAdapter', function( assert ) {
-               assert.expect( 3 );
-               var value = null,
-                       viewFactory = new ViewFactory(),
+               assert.expect( 1 );
+               var viewFactory = new ViewFactory(),
                        ListItemAdapter = sinon.spy( $.wikibase.listview, 
'ListItemAdapter' );
 
                viewFactory.getListItemAdapterForSnakListView();
@@ -398,24 +397,33 @@
                        ListItemAdapter,
                        sinon.match( {
                                listItemWidget: $.wikibase.snaklistview,
-                               newItemOptionsFn: sinon.match.func
+                               getNewItem: sinon.match.func
                        } )
                );
 
-               var result = ListItemAdapter.args[0][0].newItemOptionsFn( value 
);
+               ListItemAdapter.restore();
+       } );
 
-               assert.deepEqual(
-                       result,
-                       {
-                               getListItemAdapter: result.getListItemAdapter, 
// Hack
+       QUnit.test( 'getSnakListView passes correct options to view', function( 
assert ) {
+               assert.expect( 1 );
+
+               var value = null,
+                       viewFactory = new ViewFactory(),
+                       $dom = $( '<div/>' ),
+                       stub = sinon.stub( $dom, 'snaklistview' );
+
+               viewFactory.getSnakListView( {}, null, $dom, value );
+
+               sinon.assert.calledWith(
+                       stub,
+                       sinon.match( {
+                               getListItemAdapter: sinon.match.func,
                                singleProperty: true,
                                value: value || undefined
-                       }
-               );
+                       } )
+               ) ;
 
-               assert.ok( result.getListItemAdapter instanceof Function );
-
-               $.wikibase.listview.ListItemAdapter.restore();
+               stub.restore();
        } );
 
        QUnit.test( 'getListItemAdapterForSnakView passes correct options to 
ListItemAdapter', function( assert ) {
@@ -436,7 +444,7 @@
                $.wikibase.listview.ListItemAdapter.restore();
        } );
 
-       QUnit.test( 'getSnakView passes correct options to ListItemAdapter', 
function( assert ) {
+       QUnit.test( 'getSnakView passes correct options to view', function( 
assert ) {
                assert.expect( 2 );
                var contentLanguages = {},
                        value = null,
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index c115353..0f0ab3a 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1354,12 +1354,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "68b68ad37b6ec442262825b72c3bbc9d83a6ccde"
+            "reference": "98975d2541f62dbc3e1fbfff4a9f7995962d7ab8"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/68b68ad37b6ec442262825b72c3bbc9d83a6ccde";,
-            "reference": "68b68ad37b6ec442262825b72c3bbc9d83a6ccde",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/98975d2541f62dbc3e1fbfff4a9f7995962d7ab8";,
+            "reference": "98975d2541f62dbc3e1fbfff4a9f7995962d7ab8",
             "shasum": ""
         },
         "require": {
@@ -1392,7 +1392,7 @@
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0"
         },
-        "time": "2016-09-13 08:14:11",
+        "time": "2016-09-14 09:00:57",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icda23c8970500183bc7c14211afd3f2151ab7554
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <wikidata-servi...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to