]> source.dussan.org Git - nextcloud-server.git/commitdiff
some multiselect improvements
authorRobin Appelman <icewind@owncloud.com>
Wed, 22 Feb 2012 20:38:15 +0000 (21:38 +0100)
committerRobin Appelman <icewind@owncloud.com>
Wed, 22 Feb 2012 20:38:15 +0000 (21:38 +0100)
core/js/multiselect.js

index 96fc09a0759d57edf63ba32d9fd1fa2a3a22e3da..541dddf0f708eb36d44562cdecac0f47dce0cc78 100644 (file)
                        'minWidth': 'default;',
                };
                $.extend(settings,options);
+               $.each(this.children(),function(i,option){
+                       if($(option).attr('selected') && settings.checked.indexOf($(option).val())==-1){
+                               settings.checked.push($(option).val());
+                       }
+               });
                var button=$('<div class="multiselect button"><span>'+settings.title+'</span><span>▾</span></div>');
                var span=$('<span/>');
                span.append(button);
                        });
                        button.addClass('active');
                        event.stopPropagation();
-                       var options=$(this).parent().next().children().map(function(){return $(this).val();});
+                       var options=$(this).parent().next().children();
                        var list=$('<ul class="multiselectoptions"/>').hide().appendTo($(this).parent());
-                       function createItem(item,checked){
+                       function createItem(element,checked){
+                               element=$(element);
+                               var item=element.val();
                                var id='ms'+multiSelectId+'-option-'+item;
                                var input=$('<input id="'+id+'" type="checkbox"/>');
                                var label=$('<label for="'+id+'">'+item+'</label>');
@@ -61,6 +68,7 @@
                                input.change(function(){
                                        var groupname=$(this).next().text();
                                        if($(this).is(':checked')){
+                                               element.attr('selected','selected');
                                                if(settings.oncheck){
                                                        if(settings.oncheck(groupname)===false){
                                                                $(this).attr('checked', false);
@@ -70,6 +78,7 @@
                                                settings.checked.push(groupname);
                                        }else{
                                                var index=settings.checked.indexOf(groupname);
+                                               element.attr('selected',null);
                                                if(settings.onuncheck){
                                                        if(settings.onuncheck(groupname)===false){
                                                                $(this).attr('checked',true);
                                                        var li=$(this).parent();
                                                        $(this).remove();
                                                        li.text('+ '+settings.createText);
-                                                       li.before(createItem($(this).val()));
+                                                       li.before(createItem(this));
+                                                       var select=button.parent().next();
+                                                       select.append($('<option selected="selected" value="'+$(this).val()+'">'+$(this).val()+'</option>'));
                                                        li.prev().children('input').trigger('click');
                                                        button.parent().data('preventHide',false);
-                                                       var select=button.parent().next();
-                                                       select.append($('<option value="'+$(this).val()+'">'+$(this).val()+'</option>'));
                                                        if(settings.createCallback){
                                                                settings.createCallback();
                                                        }