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