Robert Vogel has uploaded a new change for review. https://gerrit.wikimedia.org/r/324735
Change subject: CategoryBoxSelect: Added "tree-trigger" ...................................................................... CategoryBoxSelect: Added "tree-trigger" ... that opens a window with an BS.tree.Categories panel Manual merge of https://gerrit.wikimedia.org/r/#/c/322859/ Change-Id: I3020b5903859fabd5782a85fac12188fa304e939 --- M extension.json M i18n/extjs/de.json M i18n/extjs/en.json M i18n/extjs/qqq.json M resources/bluespice.extjs/BS/form/CategoryBoxSelect.js A resources/bluespice.extjs/BS/tree/Categories.js M resources/bluespice.extjs/bluespice.extjs.fixes.css A resources/bluespice.extjs/images/tree-trigger.png 8 files changed, 108 insertions(+), 4 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceFoundation refs/changes/35/324735/1 diff --git a/extension.json b/extension.json index e45d1a6..93872ea 100644 --- a/extension.json +++ b/extension.json @@ -118,7 +118,8 @@ "bs-extjs-title-warning", "bs-extjs-filter-bool-yes", "bs-extjs-filter-bool-no", - "bs-extjs-categoryboxselect-emptytext" + "bs-extjs-categoryboxselect-emptytext", + "bs-extjs-categorytree-title" ], "dependencies": [ "ext.bluespice.extjs.theme.ux", diff --git a/i18n/extjs/de.json b/i18n/extjs/de.json index 7a11aee..db498de 100644 --- a/i18n/extjs/de.json +++ b/i18n/extjs/de.json @@ -46,5 +46,6 @@ "bs-extjs-filter-bool-no": "nein", "bs-extjs-title-success": "Erfolg", "bs-extjs-title-warning": "Warnung", - "bs-extjs-categoryboxselect-emptytext": "Kategorie hinzufügen" + "bs-extjs-categoryboxselect-emptytext": "Kategorie hinzufügen", + "bs-extjs-categorytree-title": "Kategorien" } diff --git a/i18n/extjs/en.json b/i18n/extjs/en.json index bb973a3..eb8318a 100644 --- a/i18n/extjs/en.json +++ b/i18n/extjs/en.json @@ -46,5 +46,6 @@ "bs-extjs-filter-bool-no": "no", "bs-extjs-title-success": "Success", "bs-extjs-title-warning": "Warning", - "bs-extjs-categoryboxselect-emptytext": "Add a category" + "bs-extjs-categoryboxselect-emptytext": "Add a category", + "bs-extjs-categorytree-title": "Categories" } diff --git a/i18n/extjs/qqq.json b/i18n/extjs/qqq.json index 6e32fca..7516bf9 100644 --- a/i18n/extjs/qqq.json +++ b/i18n/extjs/qqq.json @@ -50,4 +50,5 @@ "bs-extjs-title-success": "Window title for success\n{{Identical|Success}}", "bs-extjs-title-warning": "Window title for warning\n{{Identical|Warning}}", "bs-extjs-categoryboxselect-emptytext": "The placeholder text of an input field that allows the definition of categories" + "bs-extjs-categorytree-title": "The title of a panel containing a tree view of the wiki's categories" } diff --git a/resources/bluespice.extjs/BS/form/CategoryBoxSelect.js b/resources/bluespice.extjs/BS/form/CategoryBoxSelect.js index 3ca91b1..88abb2a 100644 --- a/resources/bluespice.extjs/BS/form/CategoryBoxSelect.js +++ b/resources/bluespice.extjs/BS/form/CategoryBoxSelect.js @@ -15,7 +15,17 @@ queryMode: 'local', emptyText: mw.message('bs-extjs-categoryboxselect-emptytext').plain(), delimiter: '|', + deferredSetValueConf: false, + showTreeTrigger: false, + + constructor: function( cfg ) { + if( cfg.showTreeTrigger ) { + cfg.trigger2Cls = Ext.baseCSSPrefix + 'form-search-trigger bs-form-tree-trigger'; + } + this.callParent( [cfg] ); + }, + initComponent: function() { this.store = Ext.create( 'Ext.data.JsonStore', { proxy: { @@ -74,5 +84,67 @@ callback: callback, value: value }; + }, + + onTrigger2Click : function( event ){ + //lazy loading, as this trigger is optional + Ext.require( 'BS.tree.Categories', this.showTree, this ); + }, + + wdTree: null, + showTree: function() { + if( !this.wdTree ) { + var categoryTree = new BS.tree.Categories({ + width: 250, + height: 300 + }); + categoryTree.on( 'itemclick', this.onTreeItemClick, this ); + this.wdTree = new Ext.Window({ + title: mw.message('bs-extjs-categorytree-title').plain(), + x: this.getX() + this.getWidth(), + y: this.getY() - 175, + closeAction: 'hide', + items: [ + categoryTree + ] + }); + + this.wireUpWithContainerWindow(); + } + + this.wdTree.show(); + }, + + onTreeItemClick: function( tree, record, item, index, e, eOpts ) { + if ( mw.config.get( 'BSInsertCategoryWithParents' ) ) { + this.addValuesFromRecord( record ); + } + else { + this.addValue( [ record.data.text ] ); + } + }, + + addValuesFromRecord: function ( record ) { + //parentNode is null if there is no parent, internalId "src" is the root of the categories + if ( typeof ( record.parentNode ) !== "null" && record.parentNode.internalId !== "src" ) { + this.addValuesFromRecord( record.parentNode ); + } + this.addValue( [ record.data.text ] ); + }, + + /** + * This is a little bit tricky. If our CategoryBoxSelect field is within a window we need to close the tree + * window when the parent window closes. As the CategoryBoxSelect is not necessarily in a window we need some + * checks here + */ + wireUpWithContainerWindow: function() { + var parentWindow = this.up( 'window' ); + if( !parentWindow ) { + return; + } + + parentWindow.on( 'close', function() { + this.wdTree.close(); + }, this ); } -}); \ No newline at end of file +}); diff --git a/resources/bluespice.extjs/BS/tree/Categories.js b/resources/bluespice.extjs/BS/tree/Categories.js new file mode 100644 index 0000000..12d140f --- /dev/null +++ b/resources/bluespice.extjs/BS/tree/Categories.js @@ -0,0 +1,24 @@ +Ext.define( 'BS.tree.Categories', { + extend: 'Ext.tree.Panel', + requires: [ 'BS.model.Category' ], + useArrows: true, + rootVisible: false, + displayField: 'text', + + initComponent: function() { + this.store = new Ext.data.TreeStore({ + proxy: { + type: 'ajax', + url: bs.util.getCAIUrl('getAsyncCategoryTreeStoreData') + }, + root: { + text: 'Categories', + id: 'src', + expanded: true + }, + model: 'BS.model.Category' + }); + + this.callParent( arguments ); + } +}); \ No newline at end of file diff --git a/resources/bluespice.extjs/bluespice.extjs.fixes.css b/resources/bluespice.extjs/bluespice.extjs.fixes.css index 40244e5..0d82373 100644 --- a/resources/bluespice.extjs/bluespice.extjs.fixes.css +++ b/resources/bluespice.extjs/bluespice.extjs.fixes.css @@ -101,3 +101,7 @@ .x-boundlist-item { font-size: 13px; } + +.bs-form-tree-trigger { + background-image: url(images/tree-trigger.png); +} diff --git a/resources/bluespice.extjs/images/tree-trigger.png b/resources/bluespice.extjs/images/tree-trigger.png new file mode 100644 index 0000000..490137d --- /dev/null +++ b/resources/bluespice.extjs/images/tree-trigger.png Binary files differ -- To view, visit https://gerrit.wikimedia.org/r/324735 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3020b5903859fabd5782a85fac12188fa304e939 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/BlueSpiceFoundation Gerrit-Branch: master Gerrit-Owner: Robert Vogel <vo...@hallowelt.biz> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits