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

Reply via email to