jenkins-bot has submitted this change and it was merged.

Change subject: Show only topmost property label for snakview in snaklistview
......................................................................


Show only topmost property label for snakview in snaklistview

(bug 54317)
Since snaklistviews used for references and qualifiers feature snaks with the 
same property only,
the topmost label is displayed exclusively now.

Change-Id: I438839ef402c00695a8c312262cbfc7aff35f1f2
---
M lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
M lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js
M lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js
M lib/resources/jquery.wikibase/jquery.wikibase.snakview/snakview.js
M lib/tests/qunit/jquery.wikibase/jquery.wikibase.snaklistview.tests.js
5 files changed, 117 insertions(+), 31 deletions(-)

Approvals:
  Tobias Gritschacher: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
index 050174b..0aa0009 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
@@ -200,7 +200,8 @@
                                        listItemWidgetValueAccessor: 'value',
                                        newItemOptionsFn: function( value ) {
                                                return {
-                                                       value: value || null
+                                                       value: value || null,
+                                                       singleProperty: true
                                                };
                                        }
                                } ),
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js
index 1951e2a..17af018 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.referenceview.js
@@ -71,7 +71,8 @@
                        listItemWidgetValueAccessor: 'value',
                        newItemOptionsFn: function( value ) {
                                return {
-                                       value: value || null
+                                       value: value || null,
+                                       singleProperty: true
                                };
                        }
                } ),
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js
index f4f45ff..6337db4 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.snaklistview.js
@@ -19,6 +19,10 @@
  *         set initially. If this is null, the view will start edit mode upon 
initialization.
  *         Default: null
  *
+ * @option singleProperty {boolean} If set to true, it is assumed that the 
widget is filled with
+ *         snakviews featuring a single property only.
+ *         Default: false
+ *
  * @option helpMessage {string} End-user message explaining how to use the 
snaklistview widget. The
  *         message is most likely to be used inside the tooltip of the toolbar 
corresponding to
  *         the snaklistview.
@@ -65,6 +69,7 @@
                        '$listview': '.wb-snaklistview-listview'
                },
                value: null,
+               singleProperty: false,
                helpMessage: mw.msg( 'wikibase-claimview-snak-new-tooltip' )
        },
 
@@ -155,6 +160,7 @@
 
                this._listview = this.$listview.data( 'listview' );
                this._lia = this._listview.listItemAdapter();
+               this._updatePropertyLabels();
 
                this.$listview
                .off( '.' + this.widgetName )
@@ -175,6 +181,22 @@
                );
 
                this._attachEditModeEventHandlers();
+       },
+
+       /**
+        * Updates the visibility of the snakviews' property labels which has 
an effect if the
+        * "singleProperty" options is set.
+        * @since 0.5
+        */
+       _updatePropertyLabels: function() {
+               if( this.options.singleProperty ) {
+                       var $items = this._listview.items();
+
+                       for( var i = 0; i < $items.length; i++ ) {
+                               var operation = ( i === 0 ) ? 
'showPropertyLabel' : 'hidePropertyLabel';
+                               this._lia.liInstance( $items.eq( i ) 
)[operation]();
+                       }
+               }
        },
 
        /**
@@ -492,6 +514,7 @@
                                        self._listview.move( 
self._findListItem( snak ), i );
                                }
                        } );
+                       self._updatePropertyLabels();
                }
        },
 
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.snakview/snakview.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.snakview/snakview.js
index f35bafa..0776dbb 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.snakview/snakview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.snakview/snakview.js
@@ -852,6 +852,30 @@
        },
 
        /**
+        * Hides the property label.
+        * @since 0.5
+        */
+       hidePropertyLabel: function() {
+               this.$property.hide();
+       },
+
+       /**
+        * Shows the property label.
+        * @since 0.5
+        */
+       showPropertyLabel: function() {
+               this.$property.show();
+       },
+
+       /**
+        * Returns whether the property label is currently visible.
+        * @since 0.5
+        */
+       propertyLabelIsVisible: function() {
+               return this.$property.is( ':visible' );
+       },
+
+       /**
         * Marks the Snak view disabled and triggers re-drawing it.
         * Since the visual state should be managed completely by the draw 
method, toggling the css
         * classes is done in draw() by issuing a call to $.Widget.option().
diff --git 
a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.snaklistview.tests.js 
b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.snaklistview.tests.js
index ca6da06..eb1ecac 100644
--- a/lib/tests/qunit/jquery.wikibase/jquery.wikibase.snaklistview.tests.js
+++ b/lib/tests/qunit/jquery.wikibase/jquery.wikibase.snaklistview.tests.js
@@ -19,16 +19,29 @@
                ] )
        ];
 
+       var snakSet = [
+               new wb.PropertyValueSnak( 'p1',  new dv.StringValue( 'a' ) ),
+               new wb.PropertyValueSnak( 'p1',  new dv.StringValue( 'b' ) ),
+               new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 'c' ) ),
+               new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 'd' ) ),
+               new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 'e' ) ),
+               new wb.PropertyValueSnak( 'p3',  new dv.StringValue( 'f' ) ),
+               new wb.PropertyValueSnak( 'p4',  new dv.StringValue( 'g' ) )
+       ];
+
        /**
         * Generates a snaklistview widget suitable for testing.
         *
         * @param {wikibase.SnakList} [value]
+        * @param {Object} [additionalOptions]
         * @return {jQuery}
         */
-       function createSnaklistview( value ) {
+       function createSnaklistview( value, additionalOptions ) {
+               var options = $.extend( additionalOptions, { value: ( value || 
null ) } );
+
                return $( '<div/>' )
                        .addClass( 'test_snaklistview' )
-                       .snaklistview( { value: ( value || null ) } );
+                       .snaklistview( options );
        }
 
        /**
@@ -701,17 +714,7 @@
        } );
 
        QUnit.test( 'move()', function( assert ) {
-               var snaks = [
-                       new wb.PropertyValueSnak( 'p1',  new dv.StringValue( 
'a' ) ),
-                       new wb.PropertyValueSnak( 'p1',  new dv.StringValue( 
'b' ) ),
-                       new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 
'c' ) ),
-                       new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 
'd' ) ),
-                       new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 
'e' ) ),
-                       new wb.PropertyValueSnak( 'p3',  new dv.StringValue( 
'f' ) ),
-                       new wb.PropertyValueSnak( 'p4',  new dv.StringValue( 
'g' ) )
-               ];
-
-               var snakList = new wb.SnakList( snaks );
+               var snakList = new wb.SnakList( snakSet );
 
                /**
                 * Array of test case definitions. Test case definition 
structure:
@@ -759,7 +762,7 @@
                        $node = createSnaklistview( snakList );
                        snaklistview = $node.data( 'snaklistview' );
 
-                       snaklistview.move( snaks[testCases[i][0]], 
testCases[i][1] );
+                       snaklistview.move( snakSet[testCases[i][0]], 
testCases[i][1] );
 
                        assert.equal(
                                snakOrder( snaklistview.value() ),
@@ -770,7 +773,7 @@
 
                $node = createSnaklistview( snakList );
                snaklistview = $node.data( 'snaklistview' );
-               snaklistview.move( snaks[1], 1 );
+               snaklistview.move( snakSet[1], 1 );
 
                assert.equal(
                        snakOrder( snaklistview.value() ),
@@ -782,24 +785,14 @@
                        function() {
                                $node = createSnaklistview( snakList );
                                snaklistview = $node.data( 'snaklistview' );
-                               snaklistview.move( snaks[0], 4 );
+                               snaklistview.move( snakSet[0], 4 );
                        },
                        'move() throws an error when trying to move a snak to 
an invalid index.'
                );
        } );
 
        QUnit.test( 'moveUp() and moveDown()', function( assert ) {
-               var snaks = [
-                       new wb.PropertyValueSnak( 'p1',  new dv.StringValue( 
'a' ) ),
-                       new wb.PropertyValueSnak( 'p1',  new dv.StringValue( 
'b' ) ),
-                       new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 
'c' ) ),
-                       new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 
'd' ) ),
-                       new wb.PropertyValueSnak( 'p2',  new dv.StringValue( 
'e' ) ),
-                       new wb.PropertyValueSnak( 'p3',  new dv.StringValue( 
'f' ) ),
-                       new wb.PropertyValueSnak( 'p4',  new dv.StringValue( 
'g' ) )
-               ];
-
-               var snakList = new wb.SnakList( snaks ),
+               var snakList = new wb.SnakList( snakSet ),
                        $node,
                        snaklistview;
 
@@ -824,7 +817,7 @@
                        $node = createSnaklistview( snakList );
                        snaklistview = $node.data( 'snaklistview' );
 
-                       snaklistview.moveUp( snaks[i] );
+                       snaklistview.moveUp( snakSet[i] );
 
                        assert.equal(
                                snakOrder( snaklistview.value() ),
@@ -835,7 +828,7 @@
                        $node = createSnaklistview( snakList );
                        snaklistview = $node.data( 'snaklistview' );
 
-                       snaklistview.moveDown( snaks[i] );
+                       snaklistview.moveDown( snakSet[i] );
 
                        assert.equal(
                                snakOrder( snaklistview.value() ),
@@ -845,4 +838,48 @@
                }
        } );
 
+       QUnit.test( 'singleProperty option', function( assert ) {
+               var $node = createSnaklistview( snakLists[0], { singleProperty: 
true } ),
+                       snaklistview = $node.data( 'snaklistview' );
+
+               // Append node to body in order to correctly detect visibility:
+               $node.appendTo( 'body' );
+
+               assert.ok(
+                       snaklistview._listview.items().length > 0,
+                       'Initialized snaklistview with more than one item.'
+               );
+
+               function testPropertyLabelVisibility( assert, snaklistview ) {
+                       $.each( snaklistview._listview.items(), function( i, 
snakviewNode ) {
+                               var $snakview = $( snakviewNode ),
+                                       snakview = 
snaklistview._lia.liInstance( $snakview );
+
+                               if( i === 0 ) {
+                                       assert.ok(
+                                               
snakview.propertyLabelIsVisible(),
+                                               'Topmost snakview\'s property 
label is visible.'
+                                       );
+                               } else {
+                                       assert.ok(
+                                               
!snakview.propertyLabelIsVisible(),
+                                               'Property label of snakview 
that is not on top of the snaklistview is not '
+                                                       + 'visible.'
+                                       );
+                               }
+                       } );
+               }
+
+               // Initial test:
+               testPropertyLabelVisibility( assert, snaklistview );
+
+               // Move a snakview without affecting topmost snakview:
+               snaklistview.moveDown( snakLists[1].toArray()[0] );
+               testPropertyLabelVisibility( assert, snaklistview );
+
+               // Move topmost snakview:
+               snaklistview.moveDown( snakLists[0].toArray()[0] );
+               testPropertyLabelVisibility( assert, snaklistview );
+       } );
+
 } )( jQuery, mediaWiki, wikibase, dataValues );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I438839ef402c00695a8c312262cbfc7aff35f1f2
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to