Alex Monk has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/173360

Change subject: Make category widget items draggable
......................................................................

Make category widget items draggable

Change-Id: Idae3e293a6f7c29b70bc27c3db58e014d23b3e47
---
M modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
M modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
2 files changed, 23 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/60/173360/1

diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
index 91b8aff..2ec9832 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryItemWidget.js
@@ -12,6 +12,7 @@
  * @abstract
  * @extends OO.ui.Widget
  * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.DraggableElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -29,6 +30,7 @@
 
        // Mixin constructors
        OO.ui.IndicatorElement.call( this, config );
+       OO.ui.DraggableElement.call( this, config );
 
        // Properties
        this.name = config.item.name;
@@ -72,6 +74,7 @@
 
 OO.inheritClass( ve.ui.MWCategoryItemWidget, OO.ui.Widget );
 
+OO.mixinClass( ve.ui.MWCategoryItemWidget, OO.ui.DraggableElement );
 OO.mixinClass( ve.ui.MWCategoryItemWidget, OO.ui.IndicatorElement );
 
 /* Events */
diff --git a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js 
b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
index b4ad29b..09e608e 100644
--- a/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
+++ b/modules/ve-mw/ui/widgets/ve.ui.MWCategoryWidget.js
@@ -11,7 +11,7 @@
  * @class
  * @abstract
  * @extends OO.ui.Widget
- * @mixins OO.ui.GroupElement
+ * @mixins OO.ui.DraggableGroupElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
@@ -26,6 +26,7 @@
 
        // Mixin constructors
        OO.ui.GroupElement.call( this, config );
+       OO.ui.DraggableGroupElement.call( this, config );
 
        // Properties
        this.categories = {};
@@ -61,7 +62,8 @@
 
 OO.inheritClass( ve.ui.MWCategoryWidget, OO.ui.Widget );
 
-OO.mixinClass( ve.ui.MWCategoryWidget, OO.ui.GroupElement );
+OO.mixinClass( ve.ui.MWCategoryWidget, OO.ui.GroupElement ); // TODO: WTF?
+OO.mixinClass( ve.ui.MWCategoryWidget, OO.ui.DraggableGroupElement );
 
 /* Events */
 
@@ -241,7 +243,7 @@
 ve.ui.MWCategoryWidget.prototype.addItems = function ( items, index ) {
        var i, len, item, categoryItem,
                categoryItems = [],
-               existingCategoryItem = null,
+               existingCategoryItems = [],
                categoryNames = $.map( items, function ( item ) {
                        return item.name;
                } ),
@@ -281,39 +283,40 @@
                        // Index item
                        categoryWidget.categories[itemTitle.getMainText()] = 
categoryItem;
                        // Copy sortKey from old item when "moving"
-                       if ( existingCategoryItem ) {
-                               categoryItem.sortKey = 
existingCategoryItem.sortKey;
+                       existingCategoryItems = $.grep( categoryWidget.items, 
function ( existingCategoryItem ) {
+                               return config.item.value === 
existingCategoryItem.value;
+                       } );
+                       if ( existingCategoryItems.length ) {
+                               // There should only be one element in 
existingCategoryItems
+                               categoryItem.sortKey = 
existingCategoryItems[0].sortKey;
+                               categoryWidget.removeItems( [ 
existingCategoryItems[0] ] );
                        }
 
                        categoryItems.push( categoryItem );
                }
 
-               OO.ui.GroupElement.prototype.addItems.call( categoryWidget, 
categoryItems, index );
+               OO.ui.DraggableGroupElement.prototype.addItems.call( 
categoryWidget, categoryItems, index );
 
                categoryWidget.fitInput();
        } );
 };
 
 /**
- * Remove category items.
- *
- * @method
- * @param {string[]} names Names of categories to remove
+ * @inheritdoc
  */
-ve.ui.MWCategoryWidget.prototype.removeItems = function ( names ) {
-       var i, len, categoryItem,
-               items = [];
+ve.ui.MWCategoryWidget.prototype.removeItems = function ( items ) {
+       var i, len, categoryItem;
 
-       for ( i = 0, len = names.length; i < len; i++ ) {
-               categoryItem = this.categories[names[i]];
+       for ( i = 0, len = items.length; i < len; i++ ) {
+               categoryItem = items[i];
                if ( categoryItem ) {
                        categoryItem.disconnect( this );
                        items.push( categoryItem );
-                       delete this.categories[names[i]];
+                       delete this.categories[categoryItem.value];
                }
        }
 
-       OO.ui.GroupElement.prototype.removeItems.call( this, items );
+       OO.ui.DraggableGroupElement.prototype.removeItems.call( this, items );
 
        this.fitInput();
 };

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idae3e293a6f7c29b70bc27c3db58e014d23b3e47
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <[email protected]>

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

Reply via email to