Commit 15f803df authored by George Kats's avatar George Kats

Provide ability to add divider to menu.

parent e61e25be
...@@ -143,6 +143,7 @@ ...@@ -143,6 +143,7 @@
ul: '<ul class="multiselect-container dropdown-menu"></ul>', ul: '<ul class="multiselect-container dropdown-menu"></ul>',
filter: '<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-search"></i></span><input class="form-control multiselect-search" type="text"></div>', filter: '<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-search"></i></span><input class="form-control multiselect-search" type="text"></div>',
li: '<li><a href="javascript:void(0);"><label></label></a></li>', li: '<li><a href="javascript:void(0);"><label></label></a></li>',
divider: '<li class="divider"></li>',
liGroup: '<li><label class="multiselect-group"></label></li>' liGroup: '<li><label class="multiselect-group"></label></li>'
}, },
...@@ -212,12 +213,19 @@ ...@@ -212,12 +213,19 @@
// Support optgroups and options without a group simultaneously. // Support optgroups and options without a group simultaneously.
var tag = $(element).prop('tagName') var tag = $(element).prop('tagName')
.toLowerCase(); .toLowerCase();
if (tag === 'optgroup') { if (tag === 'optgroup') {
this.createOptgroup(element); this.createOptgroup(element);
} }
else if (tag === 'option') { else if (tag === 'option') {
this.createOptionValue(element);
if ($(element).data('role') === 'divider') {
this.createDivider();
}
else {
this.createOptionValue(element);
}
} }
// Other illegal tags will be ignored. // Other illegal tags will be ignored.
}, this)); }, this));
...@@ -256,7 +264,7 @@ ...@@ -256,7 +264,7 @@
values.push(options[i].value); values.push(options[i].value);
} }
} }
if (checked) { if (checked) {
this.select(values); this.select(values);
} }
...@@ -309,7 +317,7 @@ ...@@ -309,7 +317,7 @@
if (event.shiftKey) { if (event.shiftKey) {
var checked = $(event.target).prop('checked') || false; var checked = $(event.target).prop('checked') || false;
if (checked) { if (checked) {
var prev = $(event.target).parents('li:last') var prev = $(event.target).parents('li:last')
.siblings('li[class="active"]:first'); .siblings('li[class="active"]:first');
...@@ -336,7 +344,7 @@ ...@@ -336,7 +344,7 @@
} }
} }
} }
$(event.target).blur(); $(event.target).blur();
}); });
...@@ -429,6 +437,12 @@ ...@@ -429,6 +437,12 @@
} }
}, },
// Create divider
createDivider: function(element) {
var $divider = $(this.templates.divider);
this.$ul.append($divider);
},
// Create optgroup. // Create optgroup.
createOptgroup: function(group) { createOptgroup: function(group) {
var groupName = $(group).prop('label'); var groupName = $(group).prop('label');
...@@ -448,7 +462,7 @@ ...@@ -448,7 +462,7 @@
// Add the select all option to the select. // Add the select all option to the select.
buildSelectAll: function() { buildSelectAll: function() {
var alreadyHasSelectAll = this.$select[0][0] ? this.$select[0][0].value === this.options.selectAllValue : false; var alreadyHasSelectAll = this.$select[0][0] ? this.$select[0][0].value === this.options.selectAllValue : false;
// If options.includeSelectAllOption === true, add the include all checkbox. // If options.includeSelectAllOption === true, add the include all checkbox.
if (this.options.includeSelectAllOption && this.options.multiple && !alreadyHasSelectAll) { if (this.options.includeSelectAllOption && this.options.multiple && !alreadyHasSelectAll) {
this.$select.prepend('<option value="' + this.options.selectAllValue + '">' + this.options.selectAllText + '</option>'); this.$select.prepend('<option value="' + this.options.selectAllValue + '">' + this.options.selectAllText + '</option>');
...@@ -461,7 +475,7 @@ ...@@ -461,7 +475,7 @@
// Build filter if filtering OR case insensitive filtering is enabled and the number of options exceeds (or equals) enableFilterLength. // Build filter if filtering OR case insensitive filtering is enabled and the number of options exceeds (or equals) enableFilterLength.
if (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering) { if (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering) {
var enableFilterLength = Math.max(this.options.enableFiltering, this.options.enableCaseInsensitiveFiltering); var enableFilterLength = Math.max(this.options.enableFiltering, this.options.enableCaseInsensitiveFiltering);
if (this.$select.find('option').length >= enableFilterLength) { if (this.$select.find('option').length >= enableFilterLength) {
this.$filter = $(this.templates.filter); this.$filter = $(this.templates.filter);
...@@ -482,7 +496,7 @@ ...@@ -482,7 +496,7 @@
$.each($('li', this.$ul), $.proxy(function(index, element) { $.each($('li', this.$ul), $.proxy(function(index, element) {
var value = $('input', element).val(); var value = $('input', element).val();
var text = $('label', element).text(); var text = $('label', element).text();
if (value !== this.options.selectAllValue && text) { if (value !== this.options.selectAllValue && text) {
// by default lets assume that element is not // by default lets assume that element is not
// interesting for this search // interesting for this search
...@@ -512,7 +526,7 @@ ...@@ -512,7 +526,7 @@
} }
}, this)); }, this));
} }
// TODO: check whether select all option needs to be updated. // TODO: check whether select all option needs to be updated.
}, this), 300, this); }, this), 300, this);
}, this)); }, this));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment