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