summaryrefslogtreecommitdiffstats
path: root/js/jquery.multi-select.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/jquery.multi-select.js')
-rw-r--r--js/jquery.multi-select.js115
1 files changed, 65 insertions, 50 deletions
diff --git a/js/jquery.multi-select.js b/js/jquery.multi-select.js
index d429ebc..c0eb3d3 100644
--- a/js/jquery.multi-select.js
+++ b/js/jquery.multi-select.js
@@ -48,7 +48,8 @@
optgroupCpt++;
}
if ($(this).is("option:not(option[value=''])")){
- var selectableLi = $('<li class="ms-elem-selectable" ms-value="'+$(this).val()+'">'+$(this).text()+'</li>');
+ var klass = $(this).attr('class') ? ' '+$(this).attr('class') : '';
+ var selectableLi = $('<li class="ms-elem-selectable'+klass+'" ms-value="'+$(this).val()+'">'+$(this).text()+'</li>');
if ($(this).attr('title'))
selectableLi.attr('title', $(this).attr('title'));
@@ -82,70 +83,82 @@
},
'refresh' : function() {
$("#ms-"+$(this).attr("id")).remove();
- $(this).multiSelect("init");
+ $(this).multiSelect("init", $(this).data("settings"));
},
'select' : function(value, method){
var ms = this,
selectedOption = ms.find('option[value="'+value +'"]'),
text = selectedOption.text(),
+ klass = selectedOption.attr('class'),
titleAttr = selectedOption.attr('title');
- var selectedLi = $('<li class="ms-elem-selected" ms-value="'+value+'">'+text+'</li>'),
- selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul'),
- selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'),
- selectableLi = selectableUl.children('li[ms-value="'+value+'"]'),
- haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass) && value != '' &&
- ((method == 'init' && selectedOption.attr('selected')) ||
- (method != 'init' && !selectedOption.attr('selected')))
+ var selectedLi = $('<li class="ms-elem-selected'+(klass ? ' '+klass : '')+'" ms-value="'+value+'">'+text+'</li>'),
+ selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul'),
+ selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'),
+ selectableLi = selectableUl.children('li[ms-value="'+value+'"]'),
+ haveToSelect = ((!selectableLi.hasClass(ms.data('settings').disabledClass)) ||
+ (selectableLi.hasClass(ms.data('settings').disabledClass) && method == 'init')) &&
+ value != '' &&
+ ((method == 'init' && selectedOption.attr('selected')) ||
+ (method != 'init' && !selectedOption.attr('selected')))
- if (haveToSelect ){
- var parentOptgroup = selectableLi.parent('.ms-optgroup');
- if (parentOptgroup.length > 0)
- if (parentOptgroup.children('.ms-elem-selectable:not(:hidden)').length == 1)
- parentOptgroup.children('.ms-optgroup-label').hide();
- selectableLi.addClass('ms-selected');
- selectableLi.hide();
- selectedOption.attr('selected', 'selected');
- if(titleAttr){
- selectedLi.attr('title', titleAttr)
- }
+ if (haveToSelect ){
+ var parentOptgroup = selectableLi.parent('.ms-optgroup');
+ if (parentOptgroup.length > 0)
+ if (parentOptgroup.children('.ms-elem-selectable:not(:hidden)').length == 1)
+ parentOptgroup.children('.ms-optgroup-label').hide();
+ selectableLi.addClass('ms-selected');
+ selectableLi.hide();
+ selectedOption.attr('selected', 'selected');
+ if(titleAttr){
+ selectedLi.attr('title', titleAttr)
+ }
+ if (selectableLi.hasClass(ms.data('settings').disabledClass)){
+ selectedLi.addClass(ms.data('settings').disabledClass);
+ } else {
selectedLi.click(function(){
ms.multiSelect('deselect', $(this).attr('ms-value'));
});
+ }
- var selectedUlLis = selectedUl.children('.ms-elem-selected');
- if (method != 'init' && ms.data('settings').keepOrder && selectedUlLis.length > 0) {
+ var selectedUlLis = selectedUl.children('.ms-elem-selected');
+ if (method != 'init' && ms.data('settings').keepOrder && selectedUlLis.length > 0) {
- var getIndexOf = function(value) {
- elems = selectableUl.children('.ms-elem-selectable');
- return(elems.index(elems.closest('[ms-value="'+value+'"]')));
- }
-
- var index = getIndexOf(selectedLi.attr('ms-value'));
- if (index == 0)
- selectedUl.prepend(selectedLi);
- else {
- for (i = index - 1; i >= 0; i--){
- if (selectedUlLis[i] && getIndexOf($(selectedUlLis[i]).attr('ms-value')) < index) {
- $(selectedUlLis[i]).after(selectedLi);
- break;
- }
+ var getIndexOf = function(value) {
+ elems = selectableUl.children('.ms-elem-selectable');
+ return(elems.index(elems.closest('[ms-value="'+value+'"]')));
+ }
+
+ var index = getIndexOf(selectedLi.attr('ms-value'));
+ if (index == 0)
+ selectedUl.prepend(selectedLi);
+ else {
+ for (i = index - 1; i >= 0; i--){
+ if (selectedUlLis[i] && getIndexOf($(selectedUlLis[i]).attr('ms-value')) < index) {
+ $(selectedUlLis[i]).after(selectedLi);
+ break;
+ } else if (i == 0) {
+ $(selectedUlLis[i]).before(selectedLi);
}
}
- } else {
- selectedUl.append(selectedLi);
}
+ } else {
+ selectedUl.append(selectedLi);
+ }
- if (ms.find("option[value='']")){
- ms.find("option[value='']").removeAttr('selected');
+ if (ms.find("option[value='']")){
+ ms.find("option[value='']").removeAttr('selected');
+ }
+ if (method == "select_all" && parentOptgroup.children('.ms-elem-selectable').length > 0){
+ parentOptgroup.children('.ms-optgroup-label').hide();
+ }
+ if(method != 'init' || ms.data('settings').callbackOnInit){
+ selectedUl.trigger('change');
+ selectableUl.trigger('change');
+ if (typeof ms.data('settings').afterSelect == 'function' &&
+ (method != 'init' || ms.data('settings').callbackOnInit)) {
+ ms.data('settings').afterSelect.call(this, value, text);
}
- if(method != 'init' || ms.data('settings').callbackOnInit){
- selectedUl.trigger('change');
- selectableUl.trigger('change');
- if (typeof ms.data('settings').afterSelect == 'function' &&
- (method != 'init' || ms.data('settings').callbackOnInit)) {
- ms.data('settings').afterSelect.call(this, value, text);
- }
}
}
},
@@ -162,8 +175,10 @@
selectedLi = selectedUl.children('li[ms-value="'+value+'"]');
var parentOptgroup = selectableLi.parent('.ms-optgroup');
- if (parentOptgroup.length > 0)
- parentOptgroup.children('.ms-optgroup-label').show();
+ if (parentOptgroup.length > 0){
+ parentOptgroup.children('.ms-optgroup-label').addClass('collapse').show();
+ parentOptgroup.children('.ms-elem-selectable:not(.ms-selected)').show();
+ }
selectedOption.removeAttr('selected');
selectableLi.show();
selectableLi.removeClass('ms-selected');
@@ -199,4 +214,4 @@
}
return false;
};
-})(jQuery); \ No newline at end of file
+})(jQuery);