summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2016-01-14 13:25:59 +0100
committerVincent Petry <pvince81@owncloud.com>2016-01-19 16:24:26 +0100
commit8d41cbb97a7a1fa750db520dc8879da4402f31e3 (patch)
tree26ac925f40f74e5e85d5f937cf042c611f652a70 /core
parentc13e489fb71fc515fcc64d5d16d418eff06bff80 (diff)
downloadnextcloud-server-8d41cbb97a7a1fa750db520dc8879da4402f31e3.tar.gz
nextcloud-server-8d41cbb97a7a1fa750db520dc8879da4402f31e3.zip
Implement toggleselect extension for select2
To make it possible to toggle selected values inside the dropdown
Diffstat (limited to 'core')
-rw-r--r--core/js/select2-toggleselect.js59
1 files changed, 59 insertions, 0 deletions
diff --git a/core/js/select2-toggleselect.js b/core/js/select2-toggleselect.js
new file mode 100644
index 00000000000..d38d4cc60b6
--- /dev/null
+++ b/core/js/select2-toggleselect.js
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2015
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+/* global Select2 */
+
+/**
+ * Select2 extension for toggling values in a multi-select dropdown
+ *
+ * Inspired by http://stackoverflow.com/a/27466159 and adjusted
+ */
+(function(Select2) {
+
+ var Select2FindHighlightableChoices = Select2.class.multi.prototype.findHighlightableChoices;
+ Select2.class.multi.prototype.findHighlightableChoices = function () {
+ if (this.opts.toggleSelect) {
+ return this.results.find('.select2-result-selectable:not(.select2-disabled)');
+ }
+ return Select2FindHighlightableChoices.apply(this, arguments);
+ };
+
+ var Select2TriggerSelect = Select2.class.multi.prototype.triggerSelect;
+ Select2.class.multi.prototype.triggerSelect = function (data) {
+ if (this.opts.toggleSelect && this.val().indexOf(this.id(data)) !== -1) {
+
+ var val = this.id(data);
+ var evt = $.Event('select2-removing');
+ evt.val = val;
+ evt.choice = data;
+ this.opts.element.trigger(evt);
+
+ if (evt.isDefaultPrevented()) {
+ return false;
+ }
+
+ var self = this;
+ this.results.find('.select2-result.select2-selected').each(function () {
+ var $this = $(this);
+ if (self.id($this.data('select2-data')) === val) {
+ $this.removeClass('select2-selected');
+ }
+ });
+
+ this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });
+ this.triggerChange({ removed: data });
+
+ } else {
+ return Select2TriggerSelect.apply(this, arguments);
+ }
+ };
+
+})(Select2);
+