Mglaser has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/358089 )
Change subject: BlueSpiceCategoryManager: fixed logical errors, improvements ...................................................................... BlueSpiceCategoryManager: fixed logical errors, improvements the drag'n'drop logic did not handle every possibility. So some events did not call the API. added loaderMask added dialog at delete category categories are now html links code refactoring Change-Id: Ie03e3c9b7b831f419b20dfc002a5544cfa4e5387 (cherry picked from commit 143be1a08c65c475cf1f713be8e907f7989679a9) --- M extension.json M resources/BS.BlueSpiceCategoryManager/Model.js M resources/BS.BlueSpiceCategoryManager/TreePanel.js 3 files changed, 114 insertions(+), 89 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceCategoryManager refs/changes/89/358089/1 diff --git a/extension.json b/extension.json index feed87c..ec5549a 100644 --- a/extension.json +++ b/extension.json @@ -37,7 +37,9 @@ ], "dependencies": [ "ext.bluespice.extjs", - "mediawiki.api.edit" + "ext.bluespice.extjs.BS.deferred", + "mediawiki.api.edit", + "mediawiki.Title" ], "messages": [ "bs-categorymanager-draganddrop-text", @@ -45,7 +47,6 @@ "bs-categorymanager-dlg-new-title", "bs-categorymanager-removecategoryconfirm-text", "bs-categorymanager-removecategoryconfirm-title" - ] } }, diff --git a/resources/BS.BlueSpiceCategoryManager/Model.js b/resources/BS.BlueSpiceCategoryManager/Model.js index 4d91ee5..bd22d05 100644 --- a/resources/BS.BlueSpiceCategoryManager/Model.js +++ b/resources/BS.BlueSpiceCategoryManager/Model.js @@ -2,8 +2,19 @@ extend: 'BS.model.Category', fields: [ { name: 'text', type: 'string' }, - { name: 'leaf', type: 'boolean', convert: function() { - return false; - } } + { + name: 'leaf', type: 'boolean', convert: function() { + return false; + } + }, + { + name: 'href', type: 'string', convert: function( value, record ) { + var catTitle = mw.Title.makeTitle( bs.ns.NS_CATEGORY, record.get( 'text') ); + return catTitle.getUrl(); + } + }, + { + name: 'hrefTarget', type: 'string', defaultValue: '_blank' + } ] } ); \ No newline at end of file diff --git a/resources/BS.BlueSpiceCategoryManager/TreePanel.js b/resources/BS.BlueSpiceCategoryManager/TreePanel.js index 5dfa6cf..0553925 100644 --- a/resources/BS.BlueSpiceCategoryManager/TreePanel.js +++ b/resources/BS.BlueSpiceCategoryManager/TreePanel.js @@ -1,6 +1,5 @@ Ext.define( "BS.BlueSpiceCategoryManager.TreePanel", { extend: 'BS.CRUDPanel', - id: 'BlueSpiceCategoryManager', requires: [ 'BS.action.APIAddCategories', 'BS.action.APIRemoveCategories', @@ -33,6 +32,7 @@ this.treePanel = new Ext.tree.Panel( { useArrows: true, + height: 500, rootVisible: false, displayField: 'text', store: this.store, @@ -41,80 +41,13 @@ ptype: 'treeviewdragdrop', dragText: mw.message( 'bs-categorymanager-draganddrop-text' ).plain(), enableDrop: true - }, - listeners: { - beforedrop: function( node, data, overModel, dropPosition, dropHandler, eOpts ){ - Ext.Array.each( data.records, function ( record ) { - this.originalParent = record.parentNode.get('text'); - }); - }, - drop: function ( node, data, overModel, dropPosition, dropHandler, eOpts ) { - function addCategories(page, categories){ - return Ext.create('BS.action.APIAddCategories', { - pageTitle: page, - categories: categories - }).execute() - .fail( function (dfd, set, resp) { - mw.log("Add fail"); - mw.log(resp); - }); - }; - - function removeCategories(page, categories){ - return Ext.create('BS.action.APIRemoveCategories', { - pageTitle: page, - categories: categories - }).execute() - .fail( function (dfd, set, resp) { - mw.log("Remove fail"); - mw.log(resp); - }); - }; - - Ext.Array.each( data.records, function ( record ) { - var recordFullName = 'Category:' + record.get( 'text' ); - - if ( record.parentNode === overModel ) { - //MOVING FROM ROOT TO CATEGORY - if (this.originalParent && this.originalParent === 'Categories'){ - addCategories(recordFullName, [overModel.get( 'text' )]); - } else{ - //MOVING FROM CATEGORY FROM CATEGORY SELECTING PARENT CATEGORY AS DROP TARGET - removeCategories(recordFullName, [this.originalParent]) - .done(function(resp){ - addCategories(recordFullName, [overModel.get( 'text' )]); - }); - } - } else { - //MOVE FROM CATEGORY TO ROOT - if(record.parentNode.get('text') === 'Categories'){ - removeCategories(recordFullName, [this.originalParent]); - } - else{ - //MOVE FROM ROOT TO CATEGORY BY PLACING ITEM BETWEEN EXISTING CATEGORIES OF PARENT - if (this.originalParent && this.originalParent === 'Categories'){ - addCategories(recordFullName, [record.parentNode.get( 'text' )]); - } - //MOVING FROM CATEGORY FROM CATEGORY BY PLACING ITEM BETWEEN EXISTING CATEGORIES OF PARENT - else { - removeCategories(recordFullName, [this.originalParent]) - .done(function(resp){ - addCategories(recordFullName, [record.parentNode.get( 'text' )]); - }); - } - } - } - this.originalParent = undefined; - }); - }, - itemclick: function ( obj, record, item, index, e, eOpts ) { - var btnRemove = Ext.getCmp( 'BlueSpiceCategoryManager' ).btnRemove; - btnRemove.enable(); - btnRemove.element = record; - } } } } ); + + this.treePanel.getView().on( 'drop', this.onDrop, this ); + this.treePanel.getView().on( 'beforedrop', this.onBeforedrop, this ); + this.treePanel.getView().on( 'itemclick', this.onItemclick, this ); this.items = [ this.treePanel @@ -122,9 +55,77 @@ this.callParent(); }, + onBeforedrop: function( node, data, overModel, dropPosition, dropHandler, eOpts ){ + Ext.Array.each( data.records, function ( record ) { + this.originalParent = record.parentNode.get( 'text' ); + }); + }, + onItemclick: function ( obj, record, item, index, e, eOpts ) { + this.btnRemove.enable(); + this.btnRemove.element = record; + }, + onDrop: function ( node, data, overModel, dropPosition, dropHandler, eOpts ) { + var me = this; + + Ext.Array.each( data.records, function ( record ) { + var recordFullName = 'Category:' + record.get( 'text' ); + + // append to category + if( dropPosition === 'append' ) { + $.when( + me.removeCategories( recordFullName, [this.originalParent] ) + ).always( function(){ + $.when( + me.addCategories( recordFullName, [overModel.get( 'text' )] ) + ).always( function() { + me.treePanel.setLoading( false ); + }); + }); + } else { + // moved before or after + if( overModel.parentNode.isRoot() ) { + // moved to root, only remove category + $.when( + me.removeCategories( recordFullName, [this.originalParent] ) + ).always( function(){ + me.treePanel.setLoading( false ); + }); + } else { + // set category to parent of overModel + $.when( + me.removeCategories( recordFullName, [this.originalParent] ) + ).always( function() { + $.when( + me.addCategories( recordFullName, [overModel.parentNode.get( 'text' )] ) + ).always( function() { + me.treePanel.setLoading( false ); + }); + }); + } + } + + this.originalParent = undefined; + }); + }, + addCategories: function( page, categories ) { + this.treePanel.setLoading( true ); + + return Ext.create('BS.action.APIAddCategories', { + pageTitle: page, + categories: categories + }).execute(); + }, + + removeCategories: function( page, categories ) { + this.treePanel.setLoading( true ); + return Ext.create('BS.action.APIRemoveCategories', { + pageTitle: page, + categories: categories + }).execute(); + }, onBtnAddClick: function ( oButton, oEvent ) { - var treePanel = this.treePanel; + var me = this; bs.util.prompt( "bs-categorymanager", { @@ -133,25 +134,28 @@ }, { ok: function( input ) { + me.treePanel.setLoading( true ); + var addCategoryAction = Ext.create('BS.action.APIAddCategories', { pageTitle: 'Category:' + input.value, categories: [] }); addCategoryAction.execute() - .done(function(resp){ - btnDoneProxy(); + .done( function( resp ) { + me.treePanel.getStore().load(); + me.treePanel.setLoading( false ); + }) + .fail( function() { + me.treePanel.setLoading( false ); }); - }, scope: this } ); - function btnDoneProxy(){ - treePanel.getStore().load(); - } }, onBtnRemoveClick: function ( oButton, oEvent ) { + var me = this; bs.util.confirm('RemoveCategory', { text: mw.message('bs-categorymanager-removecategoryconfirm-text').plain(), title: mw.message('bs-categorymanager-removecategoryconfirm-title').plain(), @@ -168,7 +172,7 @@ action: 'query', list: 'categorymembers', cmtitle: categoryEntire - + // limit? }) .done( function ( response ){ $.each(response.query.categorymembers, function(index, val){ @@ -178,16 +182,25 @@ }); data.push( action ); }); + + data.push( Ext.create('BS.action.APIDeletePage', { + pageTitle: categoryEntire + }) ); + if ( data.length === 0){ removeCategory( element ); } else { - var batchPanel = Ext.create('BS.panel.BatchActions', {}); + var batchPanel = Ext.create('BS.dialog.BatchActions', {}); batchPanel.setData(data); + batchPanel.show(); batchPanel.startProcessing(); - batchPanel.on('processcomplete', function(){ - removeCategory( element ); - }, element); + batchPanel.on( 'ok', function() { + me.treePanel.getStore().load(); + }, this ); } + }) + .fail( function(){ + me.treePanel.setLoading( false ); }); function removeCategory( element ){ api.postWithEditToken( { -- To view, visit https://gerrit.wikimedia.org/r/358089 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie03e3c9b7b831f419b20dfc002a5544cfa4e5387 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/BlueSpiceCategoryManager Gerrit-Branch: master Gerrit-Owner: Mglaser <gla...@hallowelt.biz> Gerrit-Reviewer: Nasty <kon...@hallowelt.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits