Henning Snater has uploaded a new change for review.
https://gerrit.wikimedia.org/r/80543
Change subject: Registered movetoolbar definition for qualifiers
......................................................................
Registered movetoolbar definition for qualifiers
Moving does not work correctly without change
Iaa854768c658f173ca19061e29e7792bf765efda
being merged.
Change-Id: Ibb16a18379f86beef62f39c6f199fc3cf962e03f
---
M lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
M lib/resources/wikibase.css
M repo/resources/wikibase.ui.entityViewInit.js
3 files changed, 148 insertions(+), 2 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/43/80543/1
diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
b/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
index aac5418..7eb2e0f 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.claimview.js
@@ -806,7 +806,7 @@
var snakview = lia.liInstance( $( item ) );
if ( snakview.element.data( 'removetoolbar' ) )
{
snakview.element.data( 'removetoolbar'
).destroy();
- snakview.element.children(
'.w-removetoolbar' ).remove();
+ snakview.element.children(
'.wb-removetoolbar' ).remove();
}
} );
},
@@ -827,4 +827,139 @@
}
} );
+$.wikibase.toolbarcontroller.definition( 'movetoolbar', {
+ id: 'claim-qualifiers-snak',
+ selector: '.wb-claim-qualifiers',
+ events: {
+ 'snakviewstartediting': function( event ) {
+ var $snakview = $( event.target ),
+ $snaklistview = $snakview.closest(
':wikibase-snaklistview' ),
+ $listview = $snaklistview.closest(
':wikibase-listview' ),
+ listview = $listview.data( 'listview' );
+
+ if( $snaklistview.data( 'snaklistview' ).value() !==
null ) {
+ // Create toolbar for each snakview widget:
+ $snakview.movetoolbar( {
+ listView: $listview.data( 'listview' )
+ } );
+
+ var $topMostSnakview =
listview.items().first().data( 'snaklistview' )
+ ._listview.items().first();
+ var $bottomMostSnakview =
listview.items().last().data( 'snaklistview' )
+ ._listview.items().last();
+
+ if ( $topMostSnakview.get( 0 ) ===
$snakview.get( 0 ) ) {
+ $snakview.data( 'movetoolbar'
).$btnMoveUp.data( 'toolbarbutton' ).disable();
+ }
+
+ if( $bottomMostSnakview.get( 0 ) ===
$snakview.get( 0 ) ) {
+ $snakview.data( 'movetoolbar'
).$btnMoveDown.data( 'toolbarbutton' ).disable();
+ }
+ }
+ },
+ 'snaklistviewafterstopediting': function( event ) {
+ // Destroy the snakview toolbars:
+ var $snaklistviewNode = $( event.target ),
+ listview = $snaklistviewNode.data(
'snaklistview' )._listview,
+ lia = listview.listItemAdapter();
+
+ $.each( listview.items(), function( i, item ) {
+ var snakview = lia.liInstance( $( item ) ),
+ movetoolbar = snakview.element.data(
'movetoolbar' );
+ if ( movetoolbar ) {
+ movetoolbar.destroy();
+ }
+ } );
+
+ // Remove obsolete event handlers attached to the node
the toolbarcontroller has been
+ // initialized on:
+ $snaklistviewNode.closest( '.wb-claim-qualifiers'
).off( '.movetoolbar' );
+ },
+ 'movetoolbarup': function( event ) {
+ var $snakview = $( event.target ),
+ snak = $snakview.data( 'wikibaseSnakview'
).snak(),
+ $snaklistview = $snakview.closest(
':wikibase-snaklistview' ),
+ snaklistview = $snaklistview.data(
'snaklistview' ),
+ snakList = snaklistview.value(),
+ $listview = $snaklistview.closest(
':wikibase-listview' ),
+ listview = $listview.data( 'listview' );
+
+ if( snakList.indexOf( snak ) !== 0 ) {
+ // Snak is not in top of the snaklistview group
the snaks featuring the same
+ // property. Therefore, the snak is to be moved
within the snaklistview.
+ snaklistview.moveUp( snak );
+ } else {
+ // Moving the topmost snak of a snaklistview up
involves moving the whole
+ // snaklistview within the parent listview.
+ listview.moveUp( $snaklistview );
+ }
+ },
+ 'movetoolbardown': function( event ) {
+ var $snakview = $( event.target ),
+ snak = $snakview.data( 'wikibaseSnakview'
).snak(),
+ $snaklistview = $snakview.closest(
':wikibase-snaklistview' ),
+ snaklistview = $snaklistview.data(
'snaklistview' ),
+ snakList = snaklistview.value(),
+ $listview = $snaklistview.closest(
':wikibase-listview' ),
+ listview = $listview.data( 'listview' );
+
+ if( snakList.indexOf( snak ) !== snakList.length - 1 ) {
+ snaklistview.moveDown( snak );
+ } else {
+ listview.moveDown( $snaklistview );
+ }
+ },
+ 'movetoolbarup movetoolbardown listviewitemadded
listviewitemremoved': function( event ) {
+ // Disable "move up" button of the topmost snakview of
the topmost snaklistview and the
+ // "move down" button of the bottommost snakview of the
bottommost snaklistview. All
+ // other buttons shall be enabled.
+ var $target = $( event.target ),
+ listview;
+
+ if( event.type.indexOf( 'listview' ) !== 0 ) {
+ var $snaklistview = $target.closest(
':wikibase-snaklistview' ),
+ $listview = $snaklistview.closest(
':wikibase-listview' );
+ listview = $listview.data( 'listview' );
+ } else if( !$target.parent().hasClass(
'wb-claim-qualifiers' ) ) {
+ // Do not react on snaklistview's listview
event.
+ return;
+ } else {
+ listview = $target.data( 'listview' );
+ }
+
+ var listviewItems = listview.items();
+
+ listviewItems.each( function( i, snaklistviewNode ) {
+ var snaklistview = $( snaklistviewNode ).data(
'snaklistview' );
+
+ if( !snaklistview || !snaklistview.value() ||
!snaklistview.isInEditMode() ) {
+ // Pending snaklistview: Remove the
preceding "move down" button if it exists:
+ return;
+ }
+
+ var snaklistviewItems =
snaklistview._listview.items();
+
+ snaklistviewItems.each( function( j,
snakviewNode ) {
+ var $snakview = $( snakviewNode ),
+ toolbar = $snakview.data(
'movetoolbar' ),
+ btnUp =
toolbar.$btnMoveUp.data( 'toolbarbutton' ),
+ btnDown =
toolbar.$btnMoveDown.data( 'toolbarbutton' ),
+ isOverallFirst = ( i === 0 && j
=== 0 ),
+ isLastInSnakview = ( j ===
snaklistviewItems.length - 1 ),
+ isOverallLast = ( i ===
listviewItems.length - 1 && isLastInSnakview ),
+ hasNextListItem =
listviewItems.eq( i + 1 ).length > 0,
+ nextListItemIsPending = (
+ hasNextListItem
+ && listviewItems.eq( i
+ 1 ).data( 'snaklistview' ).value() === null
+ ),
+ isBeforePending =
isLastInSnakview && nextListItemIsPending;
+
+ btnUp[ ( isOverallFirst ) ? 'disable' :
'enable' ]();
+ btnDown[ ( isOverallLast ||
isBeforePending ) ? 'disable' : 'enable' ]();
+ } );
+ } );
+ }
+ }
+} );
+
}( mediaWiki, wikibase, jQuery ) );
diff --git a/lib/resources/wikibase.css b/lib/resources/wikibase.css
index c56cabc..ffe9682 100644
--- a/lib/resources/wikibase.css
+++ b/lib/resources/wikibase.css
@@ -142,6 +142,16 @@
display: inline-block;
}
+.wb-movetoolbar {
+ position: absolute;
+ top: 5px;
+ right: 10px;
+}
+
+.wb-movetoolbar > .wb-editsection {
+ width: auto;
+}
+
/********** /BASIC LAYOUT **********/
diff --git a/repo/resources/wikibase.ui.entityViewInit.js
b/repo/resources/wikibase.ui.entityViewInit.js
index 639b7e9..bf2a52b 100644
--- a/repo/resources/wikibase.ui.entityViewInit.js
+++ b/repo/resources/wikibase.ui.entityViewInit.js
@@ -144,7 +144,8 @@
.toolbarcontroller( { // BUILD TOOLBARS
addtoolbar: ['claimlistview', 'claimsection',
'claim-qualifiers-snak', 'references', 'referenceview-snakview'],
edittoolbar: ['statementview', 'referenceview'],
- removetoolbar: ['claim-qualifiers-snak',
'referenceview-snakview-remove']
+ removetoolbar: ['claim-qualifiers-snak',
'referenceview-snakview-remove'],
+ movetoolbar: ['claim-qualifiers-snak']
} )
.claimgrouplabelscroll();
}
--
To view, visit https://gerrit.wikimedia.org/r/80543
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibb16a18379f86beef62f39c6f199fc3cf962e03f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits