From bbaee04f28fd49f228124c54fd391eb528eb50cb Mon Sep 17 00:00:00 2001 From: mdipierro Date: Sat, 8 Sep 2012 21:59:49 -0500 Subject: [PATCH] fixed jQuery multiselect in admin --- VERSION | 2 +- applications/admin/languages/default.py | 10 + .../admin/models/plugin_multiselect.py | 5 +- .../plugin_multiselect/jquery.dimensions.js | 12 - .../plugin_multiselect/jquery.multi-select.js | 321 ++++++++++++++++++ .../plugin_multiselect/jquery.multiselect.css | 26 -- .../plugin_multiselect/jquery.multiselect.js | 25 -- .../plugin_multiselect/multi-select.css | 91 +++++ .../admin/static/plugin_multiselect/start.js | 2 +- .../static/plugin_multiselect/switch.png | Bin 0 -> 3080 bytes applications/admin/views/wizard/step.html | 10 +- 11 files changed, 431 insertions(+), 73 deletions(-) delete mode 100755 applications/admin/static/plugin_multiselect/jquery.dimensions.js create mode 100755 applications/admin/static/plugin_multiselect/jquery.multi-select.js delete mode 100755 applications/admin/static/plugin_multiselect/jquery.multiselect.css delete mode 100755 applications/admin/static/plugin_multiselect/jquery.multiselect.js create mode 100755 applications/admin/static/plugin_multiselect/multi-select.css create mode 100755 applications/admin/static/plugin_multiselect/switch.png diff --git a/VERSION b/VERSION index 464d1f36..e64a7abe 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.0.8 (2012-09-08 20:33:20) stable +Version 2.0.8 (2012-09-08 21:59:44) stable diff --git a/applications/admin/languages/default.py b/applications/admin/languages/default.py index 20e01bcb..d5d49ba4 100644 --- a/applications/admin/languages/default.py +++ b/applications/admin/languages/default.py @@ -19,6 +19,8 @@ 'at char %s': 'at char %s', 'at line %s': 'at line %s', 'back': '<35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5($){$.19={P:\'1.2\'};$.u([\'j\',\'w\'],5(i,d){$.q[\'O\'+d]=5(){p(!3[0])6;g a=d==\'j\'?\'s\':\'m\',e=d==\'j\'?\'D\':\'C\';6 3.B(\':y\')?3[0][\'L\'+d]:4(3,d.x())+4(3,\'n\'+a)+4(3,\'n\'+e)};$.q[\'I\'+d]=5(b){p(!3[0])6;g c=d==\'j\'?\'s\':\'m\',e=d==\'j\'?\'D\':\'C\';b=$.F({t:Z},b||{});g a=3.B(\':y\')?3[0][\'8\'+d]:4(3,d.x())+4(3,\'E\'+c+\'w\')+4(3,\'E\'+e+\'w\')+4(3,\'n\'+c)+4(3,\'n\'+e);6 a+(b.t?(4(3,\'t\'+c)+4(3,\'t\'+e)):0)}});$.u([\'m\',\'s\'],5(i,b){$.q[\'l\'+b]=5(a){p(!3[0])6;6 a!=W?3.u(5(){3==h||3==r?h.V(b==\'m\'?a:$(h)[\'U\'](),b==\'s\'?a:$(h)[\'T\']()):3[\'l\'+b]=a}):3[0]==h||3[0]==r?S[(b==\'m\'?\'R\':\'Q\')]||$.N&&r.M[\'l\'+b]||r.A[\'l\'+b]:3[0][\'l\'+b]}});$.q.F({z:5(){g a=0,f=0,o=3[0],8,9,7,v;p(o){7=3.7();8=3.8();9=7.8();8.f-=4(o,\'K\');8.k-=4(o,\'J\');9.f+=4(7,\'H\');9.k+=4(7,\'Y\');v={f:8.f-9.f,k:8.k-9.k}}6 v},7:5(){g a=3[0].7;G(a&&(!/^A|10$/i.16(a.15)&&$.14(a,\'z\')==\'13\'))a=a.7;6 $(a)}});5 4(a,b){6 12($.11(a.17?a[0]:a,b,18))||0}})(X);',62,72,'|||this|num|function|return|offsetParent|offset|parentOffset|||||borr|top|var|window||Height|left|scroll|Left|padding|elem|if|fn|document|Top|margin|each|results|Width|toLowerCase|visible|position|body|is|Right|Bottom|border|extend|while|borderTopWidth|outer|marginLeft|marginTop|client|documentElement|boxModel|inner|version|pageYOffset|pageXOffset|self|scrollTop|scrollLeft|scrollTo|undefined|jQuery|borderLeftWidth|false|html|curCSS|parseInt|static|css|tagName|test|jquery|true|dimensions'.split('|'),0,{})) diff --git a/applications/admin/static/plugin_multiselect/jquery.multi-select.js b/applications/admin/static/plugin_multiselect/jquery.multi-select.js new file mode 100755 index 00000000..0393b29e --- /dev/null +++ b/applications/admin/static/plugin_multiselect/jquery.multi-select.js @@ -0,0 +1,321 @@ +/* +* MultiSelect v0.8 +* Copyright (c) 2012 Louis Cuny +* +* This program is free software. It comes without any warranty, to +* the extent permitted by applicable law. You can redistribute it +* and/or modify it under the terms of the Do What The Fuck You Want +* To Public License, Version 2, as published by Sam Hocevar. See +* http://sam.zoy.org/wtfpl/COPYING for more details. +*/ + +(function($){ + var msMethods = { + 'init' : function(options){ + this.settings = { + disabledClass : 'disabled', + selectCallbackOnInit: false, + keepOrder : false + }; + if(options) { + this.settings = $.extend(this.settings, options); + } + var multiSelects = this; + multiSelects.css('position', 'absolute').css('left', '-9999px'); + return multiSelects.each(function(){ + var ms = $(this); + + if (ms.next('.ms-container').length == 0){ + ms.attr('id', ms.attr('id') ? ms.attr('id') : 'ms-'+Math.ceil(Math.random()*1000)); + var container = $('
'), + selectableContainer = $('
'), + selectedContainer = $('
'), + selectableUl = $(''), + selectedUl = $(''); + + ms.data('settings', multiSelects.settings); + + var optgroupLabel = null, + optgroupId = null, + optgroupCpt = 0, + scroll = 0; + ms.find('optgroup,option').each(function(){ + if ($(this).is('optgroup')){ + optgroupLabel = $(this).attr('label'); + optgroupId = 'ms-'+ms.attr('id')+'-optgroup-'+optgroupCpt; + selectableUl.append($('
    • '+ + optgroupLabel+'
  • ')); + optgroupCpt++; + } else { + var klass = $(this).attr('class') ? ' '+$(this).attr('class') : ''; + var selectableLi = $('
  • '+$(this).text()+'
  • '); + + if ($(this).attr('title')) + selectableLi.attr('title', $(this).attr('title')); + if ($(this).attr('disabled') || ms.attr('disabled')){ + selectableLi.attr('disabled', 'disabled'); + selectableLi.addClass(multiSelects.settings.disabledClass); + } + selectableLi.click(function(){ + ms.multiSelect('select', $(this).attr('ms-value')); + }); + var container = optgroupId ? selectableUl.children('#'+optgroupId).find('ul').first() : selectableUl; + container.append(selectableLi); + } + }); + if (multiSelects.settings.selectableHeader){ + selectableContainer.append(multiSelects.settings.selectableHeader); + } + selectableContainer.append(selectableUl); + if (multiSelects.settings.selectedHeader){ + selectedContainer.append(multiSelects.settings.selectedHeader); + } + selectedContainer.append(selectedUl); + container.append(selectableContainer); + container.append(selectedContainer); + ms.after(container); + ms.find('option:selected').each(function(){ + ms.multiSelect('select', $(this).val(), 'init'); + }); + + $('.ms-elem-selectable', selectableUl).on('mouseenter', function(){ + $('li', container).removeClass('ms-hover'); + $(this).addClass('ms-hover'); + }).on('mouseout', function(){ + $('li', container).removeClass('ms-hover'); + }); + + + + selectableUl.on('focusin', function(){ + $(this).addClass('ms-focus'); + selectedUl.focusout(); + }).on('focusout', function(){ + $(this).removeClass('ms-focus'); + $('li', container).removeClass('ms-hover'); + }); + + selectedUl.on('focusin', function(){ + $(this).addClass('ms-focus'); + }).on('focusout', function(){ + $(this).removeClass('ms-focus'); + $('li', container).removeClass('ms-hover'); + }); + + ms.on('focusin', function(){ + selectableUl.focus(); + }).on('focusout', function(){ + selectableUl.removeClass('ms-focus'); + selectedUl.removeClass('ms-focus'); + }); + + ms.onKeyDown = function(e, keyContainer){ + var selectables = $('.'+keyContainer+' li:visible:not(.ms-optgroup-label, .ms-optgroup-container)', container), + selectablesLength = selectables.length, + selectableFocused = $('.'+keyContainer+' li.ms-hover', container), + selectableFocusedIndex = $('.'+keyContainer+' li:visible:not(.ms-optgroup-label, .ms-optgroup-container)', container).index(selectableFocused), + liHeight = selectables.first().outerHeight(), + numberOfItemsDisplayed = Math.ceil(container.outerHeight()/liHeight), + scrollStart = Math.ceil(numberOfItemsDisplayed/4); + + selectables.removeClass('ms-hover'); + if (e.keyCode == 32){ // space + var method = keyContainer == 'ms-selectable' ? 'select' : 'deselect'; + ms.multiSelect(method, selectableFocused.first().attr('ms-value')); + + } else if (e.keyCode == 40){ // Down + var nextIndex = (selectableFocusedIndex+1 != selectablesLength) ? selectableFocusedIndex+1 : 0, + nextSelectableLi = selectables.eq(nextIndex); + + nextSelectableLi.addClass('ms-hover'); + if (nextIndex > scrollStart){ + scroll += liHeight; + } else if (nextIndex == 0){ + scroll = 0; + } + $('.'+keyContainer+' ul', container).scrollTop(scroll); + } else if (e.keyCode == 38){ // Up + var prevIndex = (selectableFocusedIndex-1 >= 0) ? selectableFocusedIndex-1 : selectablesLength-1, + prevSelectableLi = selectables.eq(prevIndex); + selectables.removeClass('ms-hover'); + prevSelectableLi.addClass('ms-hover'); + if (selectablesLength-prevIndex+1 < scrollStart){ + scroll = liHeight*(selectablesLength-scrollStart); + } else { + scroll -= liHeight; + } + $('.'+keyContainer+' ul', container).scrollTop(scroll); + } else if (e.keyCode == 37 || e.keyCode == 39){ // Right and Left + if (selectableUl.hasClass('ms-focus')){ + selectableUl.focusout(); + selectedUl.focusin(); + } else { + selectableUl.focusin(); + selectedUl.focusout(); + } + } + } + + ms.on('keydown', function(e){ + if (ms.is(':focus')){ + var keyContainer = selectableUl.hasClass('ms-focus') ? 'ms-selectable' : 'ms-selection'; + ms.onKeyDown(e, keyContainer); + } + }); + } + }); + }, + 'refresh' : function() { + $("#ms-"+$(this).attr("id")).remove(); + $(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 = $('
  • '+text+'
  • '), + selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul'), + selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'), + selectableLi = selectableUl.children('li[ms-value="'+value+'"]'), + haveToSelect = null; + + if (method == 'init'){ + haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass) && selectedOption.prop('selected'); + } else { + haveToSelect = !selectableLi.hasClass(ms.data('settings').disabledClass); + ms.focus(); + } + if (haveToSelect && selectedUl.children('li[ms-value="'+value+'"]').length == 0){ + 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.prop('selected', true); + 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 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); + } + selectedLi.on('mouseenter', function(){ + $('li', selectedUl).removeClass('ms-hover'); + $(this).addClass('ms-hover'); + }).on('mouseout', function(){ + $('li', selectedUl).removeClass('ms-hover'); + }); + if (method == "select_all" && parentOptgroup.children('.ms-elem-selectable').length > 0){ + parentOptgroup.children('.ms-optgroup-label').hide(); + } + if(method != 'init' || ms.data('settings').selectCallbackOnInit){ + ms.trigger('change'); + selectedUl.trigger('change'); + selectableUl.trigger('change'); + if (typeof ms.data('settings').afterSelect == 'function' && + (method != 'init' || ms.data('settings').selectCallbackOnInit)) { + ms.data('settings').afterSelect.call(this, value, text); + } + } + } + }, + 'deselect' : function(value){ + var ms = this, + selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'), + selectedOption = ms.find('option[value="'+value +'"]'), + selectedLi = selectedUl.children('li[ms-value="'+value+'"]'); + + if(selectedLi){ + selectedUl.focusin(); + var selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul'), + selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'), + selectableLi = selectableUl.children('li[ms-value="'+value+'"]'), + selectedLi = selectedUl.children('li[ms-value="'+value+'"]'); + + var parentOptgroup = selectableLi.parent('.ms-optgroup'); + if (parentOptgroup.length > 0){ + parentOptgroup.children('.ms-optgroup-label').addClass('ms-collapse').show(); + parentOptgroup.children('.ms-elem-selectable:not(.ms-selected)').show(); + } + selectedOption.prop('selected', false); + selectableLi.show(); + selectableLi.removeClass('ms-selected'); + selectedLi.remove(); + selectedUl.trigger('change'); + selectableUl.trigger('change'); + ms.trigger('change'); + if (typeof ms.data('settings').afterDeselect == 'function') { + ms.data('settings').afterDeselect.call(this, value, selectedLi.text()); + } + } + }, + 'select_all' : function(visible){ + var ms = this, + selectableUl = $('#ms-'+ms.attr('id')+' .ms-selectable ul'); + + ms.find("option:not(:selected)").each(function(){ + var value = $(this).val(); + if (visible){ + var selectableLi = selectableUl.children('li[ms-value="'+value+'"]'); + if (selectableLi.filter(':visible').length > 0){ + ms.multiSelect('select', value, 'select_all'); + } + } else { + ms.multiSelect('select', value, 'select_all'); + } + }); + }, + 'deselect_all' : function(){ + var ms = this, + selectedUl = $('#ms-'+ms.attr('id')+' .ms-selection ul'); + + ms.find("option:selected").each(function(){ + ms.multiSelect('deselect', $(this).val(), 'deselect_all'); + }); + } + }; + + $.fn.multiSelect = function(method){ + if ( msMethods[method] ) { + return msMethods[method].apply( this, Array.prototype.slice.call( arguments, 1 )); + } else if ( typeof method === 'object' || ! method ) { + return msMethods.init.apply( this, arguments ); + } else { + if(console.log) console.log( 'Method ' + method + ' does not exist on jquery.multiSelect' ); + } + return false; + }; +})(jQuery); diff --git a/applications/admin/static/plugin_multiselect/jquery.multiselect.css b/applications/admin/static/plugin_multiselect/jquery.multiselect.css deleted file mode 100755 index 5e20c739..00000000 --- a/applications/admin/static/plugin_multiselect/jquery.multiselect.css +++ /dev/null @@ -1,26 +0,0 @@ -.ui-multiselect { font-weight:normal !important; display:-moz-inline-block; display:inline-block; cursor:default; text-decoration:none !important; padding:0 } -.ui-multiselect input { float:left; padding:3px 0 3px 6px; margin:0; border:none !important /* important fixes bug when inside ui-widget-content */; cursor:default; background:transparent } -.ui-multiselect span { float:right; margin-top:-18px; } - -.ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 6px } -.ui-multiselect-header ul { font-size:0.9em } -.ui-multiselect-header ul li { float:left; padding:0 10px 0 0 } -.ui-multiselect-header a { text-decoration:none } -.ui-multiselect-header a:hover { text-decoration:underline } -.ui-multiselect-header .ui-icon { float:left } -.ui-multiselect-header li.ui-multiselect-close { float:right; text-align:right; padding-right:0 } - -.ui-multiselect-options { display:none; padding:3px; position:relative; z-index:10000; background: white; border: 1px solid #666666;} -.ui-multiselect-checkboxes { position:relative /* fixes bug in IE6/7 */; overflow-y:scroll; margin-left:0; width:100%; } -.ui-multiselect-checkboxes label { cursor:default; display:block; border:1px solid transparent; padding:3px } -.ui-multiselect-checkboxes label input { position:relative; top:1px; right:2px; } -.ui-multiselect-checkboxes li { clear:both; font-size:0.9em; padding-right:3px } -.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label { text-align:center; font-weight:bold; border-bottom:1px solid } -.ui-multiselect-checkboxes li.ui-multiselect-optgroup-label a { display:block; padding:3px; margin:1px 0; text-decoration:none } - -/* remove label borders in IE6 because IE6 does not support transparency */ -* html .ui-multiselect-checkboxes label { border:none } - -/* shadow effect */ -.ui-multiselect-shadow { box-shadow:0 0 10px #777; -moz-box-shadow:0 0 10px #777; -webkit-box-shadow:0 0 10px #777; -ms-filter: "progid:DXImageTransform.Microsoft.Glow(color=#666666,strength=3) progid:DXImageTransform.Microsoft.Shadow(color=#777777,direction=135,strength=3)"; filter: progid:DXImageTransform.Microsoft.Glow(color=#666666,strength=3) progid:DXImageTransform.Microsoft.Shadow(color=#777777,direction=135,strength=3); } - diff --git a/applications/admin/static/plugin_multiselect/jquery.multiselect.js b/applications/admin/static/plugin_multiselect/jquery.multiselect.js deleted file mode 100755 index edbcd1e1..00000000 --- a/applications/admin/static/plugin_multiselect/jquery.multiselect.js +++ /dev/null @@ -1,25 +0,0 @@ -/* - * jQuery MultiSelect Plugin 0.6 - * Copyright (c) 2010 Eric Hynds - * - * http://www.erichynds.com/jquery/jquery-multiselect-plugin-with-themeroller-support/ - * Inspired by Cory S.N. LaViska's implementation, A Beautiful Site (http://abeautifulsite.net/) 2009 - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html -*/ -(function(f){f.fn.multiSelect=function(i){i=f.extend({},f.fn.multiSelect.defaults,i);return this.each(function(){return new w(this,i)})};var x=0,w=function(i,a){var g=$original=f(i),e,l,k,h=[],s=[];l=g.is(":disabled");var t=i.id||"ui-multiselect-"+x++;h.push('');h.push('');h.push('
    ');if(a.showHeader){h.push('
    ');h.push('");h.push("
    ")}h.push('
      ');l&&g.removeAttr("disabled");g.find("option").each(function(b){var c=f(this),d=c.html(),m=this.value;b=this.id||"ui-multiselect-"+t+"-option-"+b;var j=c.parent(),n=j.is("optgroup"),o=c.is(":disabled"),u=["ui-corner-all"];if(n){j=j.attr("label");if(f.inArray(j, -s)===-1){h.push('
    • '+j+"
    • ");s.push(j)}}if(m.length>0){o&&u.push("ui-state-disabled");h.push('
    • ');h.push('
    • ")}});h.push("
    "); -g=g.after(h.join("")).next("a.ui-multiselect");e=g.next("div.ui-multiselect-options");l=e.find("div.ui-multiselect-header");k=e.find("label").not(".ui-state-disabled");var v=g.find("span.ui-icon").outerWidth(),p=$original.outerWidth(),q=p+v;if(/\d/.test(a.minWidth)&&q0&&d<=a.selectedList?c.map(function(){return this.title}).get().join(", "):a.selectedText.replace("#",d).replace("#",b.length);g.find("input").val(d);return d};g.bind({click:function(){e.trigger("toggle")}, -keypress:function(b){switch(b.keyCode){case 27:case 38:e.trigger("close");break;case 40:case 0:e.trigger("toggle");break}},mouseenter:function(){g.hasClass("ui-state-disabled")||f(this).addClass("ui-state-hover")},mouseleave:function(){f(this).removeClass("ui-state-hover")},focus:function(){g.hasClass("ui-state-disabled")||f(this).addClass("ui-state-focus")},blur:function(){f(this).removeClass("ui-state-focus")}});e.bind({close:function(b,c){c=c||false;if(c===true)f("div.ui-multiselect-options").filter(":visible").fadeOut(a.fadeSpeed).prev("a.ui-multiselect").removeClass("ui-state-active").trigger("mouseout"); -else{g.removeClass("ui-state-active").trigger("mouseout");e.fadeOut(a.fadeSpeed)}},open:function(b,c){if(!g.hasClass("ui-state-disabled")){var d=g.position(),m=e.find("ul:last"),j,n;g.addClass("ui-state-active");if(c||typeof c==="undefined")e.trigger("close",[true]);j=a.position==="middle"?d.top+g.height()/2-e.outerHeight()/2:a.position==="top"?d.top-e.outerHeight():d.top+g.outerHeight();n=g.width()-parseInt(e.css("padding-left"),10)-parseInt(e.css("padding-right"),10);k.filter("label:first").trigger("mouseenter").trigger("focus"); -e.css({position:"absolute",top:j+"px",left:d.left+"px",width:n+"px"}).show();m.scrollTop(0);a.maxHeight&&m.css("height",a.maxHeight);a.onOpen.call(e[0])}},toggle:function(){e.trigger(f(this).is(":hidden")?"open":"close")},traverse:function(b,c,d){b=f(c);d=d===38||d===37?true:false;b=b.parent()[d?"prevAll":"nextAll"]("li:not(.ui-multiselect-disabled, .ui-multiselect-optgroup-label)")[d?"last":"first"]();if(b.length)b.find("label").trigger("mouseenter");else{b=e.find("ul:last");e.find("label")[d?"last": -"first"]().trigger("mouseover");b.scrollTop(d?b.height():0)}},toggleChecked:function(b,c,d){(d&&d.length?d:k.find("input")).not(":disable d").attr("checked",c);r()}}).find("li.ui-multiselect-optgroup-label a").click(function(b){var c=f(this).parent().nextUntil("li.ui-multiselect-optgroup-label").find("input");e.trigger("toggleChecked",[c.filter(":checked").length===c.length?false:true,c]);a.onOptgroupToggle.call(this,c.get());b.preventDefault()});k.bind({mouseenter:function(){k.removeClass("ui-state-hover"); -f(this).addClass("ui-state-hover").find("input").focus()},keyup:function(b){switch(b.keyCode){case 27:e.trigger("close");break;case 38:case 40:case 37:case 39:e.trigger("traverse",[this,b.keyCode]);break;case 13:b.preventDefault();f(this).click();break}}}).find("input").bind("click",function(){a.onCheck.call(this);r()});$original.remove();f.fn.bgiframe&&e.bgiframe();a.state==="open"&&e.trigger("open",[false]);g.find("input")[0].defaultValue=r();return g};f(document).bind("click",function(i){i=f(i.target); -!i.closest("div.ui-multiselect-options").length&&!i.parent().hasClass("ui-multiselect")&&f("div.ui-multiselect-options").trigger("close",[true])});f.fn.multiSelect.defaults={showHeader:true,maxHeight:175,minWidth:215,checkAllText:"Check all",unCheckAllText:"Uncheck all",noneSelectedText:"Select options",selectedText:"# selected",selectedList:0,position:"bottom",shadow:false,fadeSpeed:200,disabled:false,state:"closed",multiple:true,onCheck:function(){},onOpen:function(){},onCheckAll:function(){},onUncheckAll:function(){}, -onOptgroupToggle:function(){}}})(jQuery); - diff --git a/applications/admin/static/plugin_multiselect/multi-select.css b/applications/admin/static/plugin_multiselect/multi-select.css new file mode 100755 index 00000000..4fdcfc9c --- /dev/null +++ b/applications/admin/static/plugin_multiselect/multi-select.css @@ -0,0 +1,91 @@ +.ms-container{ + background: transparent url('switch.png') no-repeat 164px 80px; +} + +.ms-container:after{ + content: "."; display: block; height: 0; line-height: 0; font-size: 0; clear: both; min-height: 0; visibility: hidden; +} + +.ms-container .ms-selectable, .ms-container .ms-selection{ + + background: #fff; + color: #555555; + float: left; +} + +.ms-container .ms-list{ + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + border: 1px solid #cccccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + + +.ms-selected{ + display:none; +} +.ms-container .ms-selectable{ + margin-right: 40px; +} + +.ms-container .ms-list.ms-focus{ + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + outline: 0; + outline: thin dotted \9; +} + +.ms-container ul { + margin: 0; + list-style-type: none; +} + +.ms-container ul li { + margin: 0; +} + +.ms-container ul.ms-list{ + width: 160px; + height: 200px; + padding: 0px 0px; + overflow-y: auto; +} + +.ms-container .ms-selectable li.ms-elem-selectable, +.ms-container .ms-selection li.ms-elem-selected{ + border-bottom: 1px #eee solid; + padding: 2px 10px; + color: #555; + font-size: 14px; +} + +.ms-container .ms-selectable li.disabled, +.ms-container .ms-selection li.disabled{ + background-color: #eee; + color: #aaa; +} + +.ms-container .ms-optgroup-label{ + padding: 5px 0px 0px 5px; + cursor: pointer; + color: #999; +} + +.ms-container li.ms-elem-selectable:not(.disabled).ms-hover, +.ms-container .ms-selection li:not(.disabled).ms-hover{ + cursor: pointer; + color: #ffffff; + text-decoration: none; + background-color: #0088cc; +} + diff --git a/applications/admin/static/plugin_multiselect/start.js b/applications/admin/static/plugin_multiselect/start.js index 5553ba5e..b5d6d0d9 100644 --- a/applications/admin/static/plugin_multiselect/start.js +++ b/applications/admin/static/plugin_multiselect/start.js @@ -1 +1 @@ -jQuery(document).ready(function(){jQuery('[multiple]').multiSelect({maxHeight:200});}); +jQuery(document).ready(function(){jQuery('[multiple]').multiSelect({selectableHeader:'Options',selectedHeader:'Selected'});}); diff --git a/applications/admin/static/plugin_multiselect/switch.png b/applications/admin/static/plugin_multiselect/switch.png new file mode 100755 index 0000000000000000000000000000000000000000..7accb6ac4bdd2afdbfb7b1e4cab0049f9d99cac4 GIT binary patch literal 3080 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