From e8564d76751b9e3c9b35eda7b2f15f41487f1dc7 Mon Sep 17 00:00:00 2001 From: guerler Date: Fri, 13 Mar 2015 14:54:36 -0400 Subject: [PATCH] Ui: Allow Ctrl-A and Ctrl-X in multi-select2 field --- .../galaxy/scripts/mvc/ui/ui-select-default.js | 16 ++++++++++++++++ static/scripts/mvc/ui/ui-select-default.js | 16 ++++++++++++++++ .../scripts/packed/mvc/ui/ui-select-default.js | 2 +- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/client/galaxy/scripts/mvc/ui/ui-select-default.js b/client/galaxy/scripts/mvc/ui/ui-select-default.js index a2676aeabd7..a800734b14a 100644 --- a/client/galaxy/scripts/mvc/ui/ui-select-default.js +++ b/client/galaxy/scripts/mvc/ui/ui-select-default.js @@ -200,6 +200,22 @@ var View = Backbone.View.extend({ if (this.options.searchable) { this.$select.select2('destroy'); this.$select.select2(); + this.$('.select2-input').off('keypress.selectall').on('keypress.selectall', function(event){ + if (event.ctrlKey || event.metaKey) { + var id = $(this).parents('div[class*="select2-container"]').attr('id').replace('s2id_', ''); + var element = $('#' + id); + if (event.which == 97){ + var selected = []; + element.find('option').each(function(i, e){ + selected[selected.length] = $(e).attr('value'); + }); + element.select2('val', selected); + } else if (event.which == 120){ + element.select2('val', ''); + } + $('.select2-drop-mask').click(); + } + }); } // set previous value diff --git a/static/scripts/mvc/ui/ui-select-default.js b/static/scripts/mvc/ui/ui-select-default.js index a2676aeabd7..a800734b14a 100644 --- a/static/scripts/mvc/ui/ui-select-default.js +++ b/static/scripts/mvc/ui/ui-select-default.js @@ -200,6 +200,22 @@ var View = Backbone.View.extend({ if (this.options.searchable) { this.$select.select2('destroy'); this.$select.select2(); + this.$('.select2-input').off('keypress.selectall').on('keypress.selectall', function(event){ + if (event.ctrlKey || event.metaKey) { + var id = $(this).parents('div[class*="select2-container"]').attr('id').replace('s2id_', ''); + var element = $('#' + id); + if (event.which == 97){ + var selected = []; + element.find('option').each(function(i, e){ + selected[selected.length] = $(e).attr('value'); + }); + element.select2('val', selected); + } else if (event.which == 120){ + element.select2('val', ''); + } + $('.select2-drop-mask').click(); + } + }); } // set previous value diff --git a/static/scripts/packed/mvc/ui/ui-select-default.js b/static/scripts/packed/mvc/ui/ui-select-default.js index 3a342fc4686..2a10120290a 100644 --- a/static/scripts/packed/mvc/ui/ui-select-default.js +++ b/static/scripts/packed/mvc/ui/ui-select-default.js @@ -1 +1 @@ -define(["utils/utils"],function(a){var b=Backbone.View.extend({optionsDefault:{id:a.uid(),cls:"ui-select",error_text:"No data available",empty_text:"No selection",visible:true,wait:false,multiple:false,searchable:true,optional:false},initialize:function(d){this.options=a.merge(d,this.optionsDefault);this.setElement(this._template(this.options));this.$select=this.$el.find(".select");this.$icon=this.$el.find(".icon");this.$button=this.$el.find(".button");if(this.options.multiple){this.$el.addClass("ui-select-multiple");this.$select.prop("multiple",true);this.$button.remove()}this.update(this.options.data);if(this.options.value!==undefined){this.value(this.options.value)}if(!this.options.visible){this.hide()}if(this.options.wait){this.wait()}else{this.show()}var c=this;this.$select.on("change",function(){c._change()});this.on("change",function(){c._change()})},value:function(c){if(c!==undefined){if(c===null){c="__null__"}if(this.exists(c)||this.options.multiple){this.$select.val(c);if(this.$select.select2){this.$select.select2("val",c)}}}return this._getValue()},first:function(){var c=this.$select.find("option").first();if(c.length>0){return c.val()}else{return null}},text:function(){return this.$select.find("option:selected").text()},show:function(){this.unwait();this.$select.show();this.$el.show()},hide:function(){this.$el.hide()},wait:function(){this.$icon.removeClass();this.$icon.addClass("fa fa-spinner fa-spin")},unwait:function(){this.$icon.removeClass();this.$icon.addClass("fa fa-caret-down")},disabled:function(){return this.$select.is(":disabled")},enable:function(){this.$select.prop("disabled",false)},disable:function(){this.$select.prop("disabled",true)},add:function(c){this.$select.append(this._templateOption(c));this._refresh()},del:function(c){this.$select.find("option[value="+c+"]").remove();this.$select.trigger("change");this._refresh()},update:function(c){var e=this._getValue();this.$select.find("option").remove();if(!this.options.multiple&&this.options.optional){this.$select.append(this._templateOption({value:"__null__",label:this.options.empty_text}))}for(var d in c){this.$select.append(this._templateOption(c[d]))}this._refresh();if(this.options.searchable){this.$select.select2("destroy");this.$select.select2()}this.value(e);if(this._getValue()===null){this.value(this.first())}},setOnChange:function(c){this.options.onchange=c},exists:function(c){return this.$select.find('option[value="'+c+'"]').length>0},_change:function(){if(this.options.onchange){this.options.onchange(this._getValue())}},_getValue:function(){var c=this.$select.val();if(!a.validate(c)){return null}return c},_refresh:function(){var c=this.$select.find("option").length;if(c==0){this.disable();this.$select.empty();this.$select.append(this._templateOption({value:"__null__",label:this.options.error_text}))}else{this.enable()}},_templateOption:function(c){return'"},_template:function(c){return'
'}});return{View:b}}); \ No newline at end of file