Subversion-Projekte lars-tiefland.zeldi.de_alt

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

/**
 * toChecklist plug-in (requires jQuery 1.9.x)
 * @author Scott Horlbeck <me@scotthorlbeck.com>
 * @url http://www.scotthorlbeck.com/code/tochecklist/
 * @version 1.5.0
 * @date 2013-04-15
 *
 * See full version or enclosed license for license information.
*/
(function($){jQuery.fn.toChecklist=function(o){var updateChecklist=function(action,checklistElem){var showSelectedItemsSetting;var disableDynamicList=function(checklistLength){if(checklistLength>3){showSelectedItemsSetting=$(checklistElem).attr('showSelectedItems');$(checklistElem).attr('showSelectedItems','false');}};var enableDynamicList=function(){$(checklistElem).attr('showSelectedItems',showSelectedItemsSetting);};switch(action){case'clearAll':var selector='li:has(input:checked)';break;case'checkAll':var selector='li:has(input:not(:checked,:disabled))';break;case'invert':var selector='li:has(input)';break;default:alert("toChecklist Plugin says:\n\nWarning - Invalid action requested on checklist.\nThe action requested was: "+action);break;}
var checklistLength=$(selector,checklistElem).length;disableDynamicList(checklistLength);$(selector,checklistElem).each(function(i){if(i==checklistLength-2&&checklistLength>3)
enableDynamicList();$(this).trigger('click');});};if(typeof o=='string'){this.each(function(){if(!$(this).isChecklist())
return true;updateChecklist(o,this);});return $;}
o=jQuery.extend({"addScrollBar":true,"addSearchBox":false,"animateSearch":'normal',"searchBoxText":'Type here to search list...',"showCheckboxes":true,"showSelectedItems":false,"overwriteName":false,"submitDataAsArray":true,"preferIdOverName":true,"maxNumOfSelections":-1,"onMaxNumExceeded":function(){alert('You cannot select more than '+this.maxNumOfSelections+' items in this list.');},"cssChecklist":'checklist',"cssChecklistHighlighted":'checklistHighlighted',"cssLeaveRoomForCheckbox":'leaveRoomForCheckbox',"cssEven":'even',"cssOdd":'odd',"cssChecked":'checked',"cssDisabled":'disabled',"cssShowSelectedItems":'showSelectedItems',"cssFocused":'focused',"cssFindInList":'findInList',"cssBlurred":'blurred',"cssOptgroup":'optgroup',"listWidth":0,"itemWidth":0},o);var error=function(msg){alert("jQuery Plugin Error (Plugin: toChecklist)\n\n"+msg);};var addSearchBox=function(jSelectElem,checklistDivId,w){var focusSearchBox=function(){$(this).val('');$(this).removeClass(o.cssBlurred);};var showAllSelectOptions=function(){$('label',checklistDivId).each(function(){if(o.animateSearch!==false)
$(this).parent('li').slideDown(o.animateSearch);else
$(this).parent('li').show();});};var blurSearchBox=function(){$(this).val(o.searchBoxText);$(this).addClass(o.cssBlurred);var t=setTimeout(showAllSelectOptions,250);};var initSearchBox=function(){$(checklistDivId).before('<div class="findInList" id="'+jSelectElem.attr('id')+'_findInListDiv">'
+'<input type="text" value="'+o.searchBoxText+'" id="'
+jSelectElem.attr('id')+'_findInList" class="'+o.cssBlurred+'" /></div>');$('#'+jSelectElem.attr('id')+'_findInList').css('width',w);$('label',checklistDivId).each(function(){$(this).parent().on('blur.restoreDefaultText',function(){$('#'+jSelectElem.attr('id')+'_findInList').val(o.searchBoxText).addClass(o.cssBlurred).on('blur.blurSearchBox',blurSearchBox);});});var searchBoxId='#'+jSelectElem.attr('id')+'_findInList';$(searchBoxId).on('keydown.tabToFocus',function(event){if(event.keyCode==9){$('label:first:visible',checklistDivId).parent().on('keydown.tabBack',function(event){if(event.keyCode==9&&event.shiftKey){event.preventDefault();$(searchBoxId).on('blur.blurSearchBox',blurSearchBox).focus();$(this).off('keydown.tabBack');}}).focus();}else{$(this).off('blur.blurSearchBox');}}).on('focus.focusSearchBox',focusSearchBox).on('blur.blurSearchBox',blurSearchBox).on('keyup',function(event){var textbox=this;if($(this).val()==''){showAllSelectOptions();return false;}
$('label',checklistDivId).each(function(){var $curLabel=$(this);if(!$curLabel.is(':disabled')){var curItem=$curLabel.text().toLowerCase();var typedText=textbox.value.toLowerCase();if(curItem.indexOf(typedText)==-1){if(o.animateSearch!==false)
$curLabel.parent('li').slideUp(o.animateSearch);else
$curLabel.parent('li').hide();}else{if(o.animateSearch!==false)
$curLabel.parent('li').slideDown(o.animateSearch);else
$curLabel.parent('li').show();}}});return;});findInListDivHeight=$('#'+jSelectElem.attr('id')+'_findInListDiv').height()+3;};initSearchBox();};var overflowProperty=(o.addScrollBar)?'overflow-y: auto; overflow-x: hidden;':'';var leaveRoomForCheckbox=(o.showCheckboxes)?'padding-left: 25px':'padding-left: 3px';this.each(function(){var numOfCheckedBoxesSoFar=0;var jSelectElem=$(this);var jSelectElemId=jSelectElem.attr('id');var jSelectElemName=jSelectElem.attr('name');if(jSelectElemId==''||!o.preferIdOverName){jSelectElemId=jSelectElemName.replace(/\[|\]/g,'');if(jSelectElemId==''){error('Can\'t convert element to checklist.\nYour SELECT element must'
+' have a "name" attribute and/or an "id" attribute specified.');return $;}}
var h=jSelectElem.outerHeight();var w=o.listWidth?o.listWidth:jSelectElem.outerWidth();w-=4;if(this.type!='select-multiple'&&this.type!='select-one'){error("Can't convert element to checklist.\n"
+"Expecting SELECT element with \"multiple\" attribute.");return $;}else if(this.type=='select-one'){return $;}
var convertListItemsToCheckboxes=function(){var checkboxValue=$(this).val();if(checkboxValue==''){checkboxValue=$(this).html();}
checkboxValue=checkboxValue.replace(/ /g,'_');var checkboxId=jSelectElemId+'_'+checkboxValue;checkboxId=checkboxId.replace(/(\.|\/|\,|\%|\<|\>)/g,'\\$1');var labelText=$(this).html();var selected='';if($(this).attr('disabled')){var disabled=' disabled="disabled"';var disabledClass=' class="disabled"';}else{var disabled='';var disabledClass='';var selected='';if($(this).attr('selected')){if(o.maxNumOfSelections!=-1&&numOfCheckedBoxesSoFar<=o.maxNumOfSelections){selected+='checked="checked"';numOfCheckedBoxesSoFar++;}else if(o.maxNumOfSelections==-1){selected+='checked="checked"';}}}
var arrayBrackets=(o.submitDataAsArray)?'[]':'';var checkboxName=(o.preferIdOverName)?jSelectElemId+arrayBrackets:jSelectElemName+arrayBrackets;checkboxName=checkboxName.replace(/\[\]\[\]$/,'[]');$(this).replaceWith('<li tabindex="0"><input type="checkbox" value="'+checkboxValue
+'" name="'+checkboxName+'" id="'+checkboxId+'" '+selected+disabled
+' /><label for="'+checkboxId+'"'+disabledClass+'>'+labelText+'</label></li>');if(o.showCheckboxes===false){$('#'+checkboxId).css('position','absolute').css('left','-50000px');}else{$('label[for='+checkboxId+']').addClass(o.cssLeaveRoomForCheckbox);}};$('optgroup',jSelectElem).each(function(){$('option',this).each(convertListItemsToCheckboxes);$(this).replaceWith('<li class="'+o.cssOptgroup+'">'+$(this).attr('label')+'</li>'+$(this).html());});$('option',jSelectElem).each(convertListItemsToCheckboxes);$('li:first',jSelectElem).each(function(){if($(this).hasClass('optgroup'))
$(this).css('border-top','none');});var checklistId=jSelectElemId+'_'+'checklist';jSelectElem.replaceWith('<div id="'+jSelectElemId+'"><div id="'+checklistId+'">'
+'<ul>'+jSelectElem.html()+'</ul></div></div>');var checklistDivId='#'+checklistId;$('#'+jSelectElemId).attr('showSelectedItems',o.showSelectedItems.toString());$(checklistDivId).css('position','relative');var findInListDivHeight=0;if(o.addSearchBox){addSearchBox(jSelectElem,checklistDivId,w);}
var items=$('li',checklistDivId);$(checklistDivId).addClass(o.cssChecklist);if(o.addScrollBar){$(checklistDivId).height(h-findInListDivHeight).width(w);}else{$(checklistDivId).height('100%').width(w);}
$('ul',checklistDivId).addClass(o.cssChecklist);$('li:even',checklistDivId).addClass(o.cssEven);$('li:odd',checklistDivId).addClass(o.cssOdd);items.focus(function(){$(this).addClass(o.cssFocused);}).blur(function(event){$(this).removeClass(o.cssFocused);});if(o.itemWidth>0){var colW=o.itemWidth+'px';items.each(function(){$(this).css({'float':'left','width':colW});});}
items.each(function(){if($('input',this).attr('checked')){$(this).addClass(o.cssChecked);}});var toggleDivGlow=function(){if(items.hasClass(o.cssChecked)){$(checklistDivId).addClass(o.cssChecklistHighlighted);}else{$(checklistDivId).removeClass(o.cssChecklistHighlighted);}};var moveToNextLi=function(){if($(this).prop('tagName').toLowerCase()!='li')
return;if($(this).is('li:has(input)'))
$(this).focus();else
$(this).next().each(moveToNextLi);};var check=function(event){if(event.type=='keydown'){if(event.keyCode==32||event.keyCode==13)event.preventDefault();if(event.keyCode==9&&!event.shiftKey){event.preventDefault();$(this).off('keydown.tabBack').blur().next().each(moveToNextLi);}else if(event.keyCode==9&&event.shiftKey){}
if(event.keyCode!=32)return;}
var numOfItemsChecked=$('input:checked',checklistDivId).length;if(o.maxNumOfSelections!=-1&&numOfItemsChecked>o.maxNumOfSelections&&!$('input',this).attr('checked')){o.onMaxNumExceeded();event.preventDefault();return;}
$('label',this).off();if(event.target.tagName.toLowerCase()!='input'&&event.target.tagName.toLowerCase()!='label'){$('input',this).trigger('click');}
var checkbox=$('input',this).get(0);updateLIStyleToMatchCheckedStatus(checkbox);if($('#'+jSelectElemId).attr('showSelectedItems')==='true')showSelectedItems();};var updateLIStyleToMatchCheckedStatus=function(checkbox){if(checkbox.checked){$(checkbox).parent().addClass(o.cssChecked);}else{$(checkbox).parent().removeClass(o.cssChecked);}
toggleDivGlow();};var handFocusToLI=function(){$(this).parent().focus();};$('li:has(input)',checklistDivId).click(check).keydown(check);$('label',checklistDivId).focus(handFocusToLI);$('input',checklistDivId).focus(handFocusToLI);toggleDivGlow();var fixFormElems=function(event){$('input',this).each(function(){this.checked=this.defaultChecked;updateLIStyleToMatchCheckedStatus(this);if(o.showSelectedItems)showSelectedItems();}).parent();};$('form:has(div.'+o.cssChecklist+')').on('reset.fixFormElems',fixFormElems);var selectedItemsListId='#'+jSelectElemId+'_selectedItems';if(o.showSelectedItems){$(selectedItemsListId).addClass(o.cssShowSelectedItems);}
var showSelectedItems=function(){$(selectedItemsListId).html('');$('label',checklistDivId).each(function(){var vcontext=$(this).parent();if($(this).parent().hasClass(o.cssChecked)){var labelText=jQuery.trim($(this).html());$('<li class="">'+labelText+'</li>').on('click.remove',function(){vcontext.trigger('click');}).appendTo(selectedItemsListId);}});};if(o.showSelectedItems)showSelectedItems();});};jQuery.fn.isChecklist=function(){var isChecklist=false;this.each(function(){var divContainsChecklist=$('#'+this.id+'_checklist',this).get();isChecklist=($(this).prop('tagName').toLowerCase()=='div'&&divContainsChecklist);return false;});return(isChecklist)?true:false;};})(jQuery);