Файл: contao-3.5.8/assets/mootools/chosen/chosen.js
Строк: 611
<?php
/* Chosen by Patrick Filler, Jules Janssen, Jonnathan Soares, MIT-style license */
Elements.implement({chosen:function(e,t){return this.each(function(s){return s.hasClass("chzn-done")?void 0:new Chosen(s,e,t)})}});var Chosen=new Class({active_field:!1,mouse_on_container:!1,results_showing:!1,result_highlighted:null,result_single_selected:null,choices:0,initialize:function(e){this.click_test_action=this.test_active_click.bind(this),this.form_field=e,this.is_multiple=this.form_field.multiple,this.is_rtl=this.form_field.hasClass("chzn-rtl"),this.set_up_html(),this.register_observers()},set_up_html:function(){var e;this.form_field.id||(this.form_field.id=String.uniqueID()),this.container_id=this.form_field.id.replace(/(:|.)/g,"_")+"_chzn",this.default_text=this.form_field.get("data-placeholder")?this.form_field.get("data-placeholder"):Locale.get("Chosen.placeholder",this.form_field.multiple),this.container=new Element("div",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":"")+" chzn-container-"+(this.is_multiple?"multi":"single")}).addClass(this.form_field.get("class")).setStyles({padding:"0",border:"none"}),(e=this.form_field.get("style"))&&e.test("(^width|[^-]width)")&&this.container.setStyle("width",this.form_field.getStyle("width")),this.is_multiple?this.container.set("html",'<ul class="chzn-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chzn-drop" style="left:-9000px;"><ul class="chzn-results"></ul></div>'):this.container.set("html",'<a href="javascript:void(0)" class="chzn-single"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chzn-drop" style="left:-9000px;"><div class="chzn-search"><input type="text" autocomplete="off" /></div><ul class="chzn-results"></ul></div>'),this.form_field.setStyle("display","none").removeProperty("required").grab(this.container,"after"),this.dropdown=this.container.getElement("div.chzn-drop"),this.dropdown.setStyles({top:"10",width:"100%"}),this.search_field=this.container.getElement("input"),this.search_results=this.container.getElement("ul.chzn-results"),this.search_no_results=this.container.getElement("li.no-results"),this.is_multiple?(this.search_choices=this.container.getElement("ul.chzn-choices"),this.search_container=this.container.getElement("li.search-field")):(this.search_container=this.container.getElement("div.chzn-search"),this.selected_item=this.container.getElement(".chzn-single"),this.search_field.setStyle("width","100%")),this.results_build(),this.set_tab_index()},register_observers:function(){this.container.addEvents({click:this.container_click.bind(this),mouseenter:this.mouse_enter.bind(this),mouseleave:this.mouse_leave.bind(this)}),this.search_results.addEvents({click:this.search_results_click.bind(this),mouseover:this.search_results_mouseover.bind(this),mouseout:this.search_results_mouseout.bind(this)}),this.form_field.addEvent("liszt:updated",this.results_update_field.bind(this)),this.search_field.addEvents({blur:this.input_blur.bind(this),keyup:this.keyup_checker.bind(this),keydown:this.keydown_checker.bind(this)}),this.is_multiple?(this.search_choices.addEvent("click",this.choices_click.bind(this)),this.search_field.addEvent("focus",this.input_focus.bind(this))):this.selected_item.addEvent("focus",this.activate_field.bind(this))},container_click:function(e){e&&"click"===e.type&&e.stopPropagation(),this.pending_destroy_click?this.pending_destroy_click=!1:(this.active_field?this.is_multiple||!e||e.target!==this.selected_item&&!e.target.getParents("a.chzn-single").length||(e.preventDefault(),this.results_toggle()):(this.is_multiple&&(this.search_field.value=""),document.addEvent("click",this.click_test_action),this.results_show()),this.activate_field())},mouse_enter:function(){this.mouse_on_container=!0},mouse_leave:function(){this.mouse_on_container=!1},input_focus:function(e){this.active_field||setTimeout(this.container_click.bind(this),50)},input_blur:function(e){this.mouse_on_container||(this.active_field=!1,setTimeout(this.blur_test.bind(this),100))},blur_test:function(e){!this.active_field&&this.container.hasClass("chzn-container-active")&&this.close_field()},close_field:function(){document.removeEvent("click",this.click_test_action),this.is_multiple||(this.selected_item.set("tabindex",this.search_field.get("tabindex")),this.search_field.set("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},activate_field:function(){this.is_multiple||this.active_field||(this.search_field.set("tabindex",this.selected_item.get("tabindex")),this.selected_item.set("tabindex",-1)),this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.set("value",this.search_field.get("value")),this.search_field.focus()},test_active_click:function(e){e.target.getParents("#"+this.container_id).length?this.active_field=!0:this.close_field()},results_build:function(){this.parsing=!0,this.results_data=this.form_field.select_to_array(),this.is_multiple&&this.choices>0?(this.search_choices.getElements("li.search-choice").destroy(),this.choices=0):this.is_multiple||this.selected_item.getElements("span").set("text",this.default_text);var e="";this.results_data.each(function(t){t.group?e+=this.result_add_group(t):t.empty||(e+=this.result_add_option(t),t.selected&&this.is_multiple?this.choice_build(t):t.selected&&!this.is_multiple&&(this.selected_item.getElements("span").set("text",t.text),this.selected_item.getElements("span").set("html",t.html)))},this),this.show_search_field_default(),this.search_field_scale(),this.search_results.set("html",e),this.parsing=!1},result_add_group:function(e){return e.disabled?"":(e.dom_id=this.container_id+"_g_"+e.array_index,'<li id="'+e.dom_id+'" class="group-result"><div>'+e.label+"</div></li>")},result_add_option:function(e){var t;return e.disabled?"":(e.dom_id=this.container_id+"_o_"+e.array_index,t=e.selected&&this.is_multiple?[]:["active-result"],e.selected&&t.push("result-selected"),null!=e.group_array_index&&t.push("group-option"),'<li id="'+e.dom_id+'" class="'+t.join(" ")+'"><div>'+e.html+"</div></li>")},results_update_field:function(){this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},result_do_highlight:function(e){var t,s,i,l,h;e&&(this.result_clear_highlight(),this.result_highlight=e,this.result_highlight.addClass("highlighted"),i=parseInt(this.search_results.getStyle("maxHeight"),10),h=this.search_results.getScroll().y,l=i+h,s=this.result_highlight.getPosition(this.search_results).y+this.search_results.getScroll().y,t=s+this.result_highlight.getCoordinates().height,t>=l?this.search_results.scrollTo(0,t-i>0?t-i:0):h>s&&this.search_results.scrollTo(0,s))},result_clear_highlight:function(){this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},results_toggle:function(){this.results_showing?this.results_hide():this.results_show()},results_show:function(){var e;this.is_multiple||(this.selected_item.addClass("chzn-single-with-drop"),this.result_single_selected&&this.result_do_highlight(this.result_single_selected)),e=this.is_multiple?this.container.getCoordinates().height:this.container.getCoordinates().height-1,this.dropdown.setStyles({top:e,left:0}),this.results_showing=!0,this.search_field.focus(),this.search_field.set("value",this.search_field.get("value")),this.winnow_results()},results_hide:function(){this.is_multiple||this.selected_item.removeClass("chzn-single-with-drop"),this.result_clear_highlight(),this.dropdown.setStyle("left",-9e3),this.results_showing=!1},set_tab_index:function(e){var t;this.form_field.get("tabindex")&&(t=this.form_field.get("tabindex"),this.form_field.set("tabindex",-1),this.is_multiple?this.search_field.set("tabindex",t):(this.selected_item.set("tabindex",t),this.search_field.set("tabindex",-1)))},show_search_field_default:function(){this.is_multiple&&this.choices<1&&!this.active_field?(this.search_field.set("value",this.default_text),this.search_field.addClass("default")):(this.search_field.set("value",""),this.search_field.removeClass("default"))},search_results_click:function(e){var t=e.target.hasClass("active-result")?e.target:e.target.getParent(".active-result");t&&(this.result_highlight=t,this.result_select(e))},search_results_mouseover:function(e){var t=e.target.hasClass("active-result")?e.target:e.target.getParent(".active-result");t&&this.result_do_highlight(t)},search_results_mouseout:function(e){(e.target.hasClass("active-result")||e.target.getParent(".active-result"))&&this.result_clear_highlight()},choices_click:function(e){e.preventDefault(),!this.active_field||e.target.hasClass("search-choice")||e.target.getParent(".search-choice")||this.results_showing||this.results_show()},choice_build:function(e){var t=this.container_id+"_c_"+e.array_index;this.choices+=1;var s=new Element("li",{id:t}).addClass("search-choice").set("html","<span>"+e.html+'</span><a href="#" class="search-choice-close" rel="'+e.array_index+'"></a>');this.search_container.grab(s,"before"),document.id(t).getElement("a").addEvent("click",this.choice_destroy_link_click.bind(this))},choice_destroy_link_click:function(e){e.preventDefault(),this.pending_destroy_click=!0,this.choice_destroy(e.target)},choice_destroy:function(e){this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.value.length<1&&this.results_hide(),this.result_deselect(e.get("rel")),e.getParent("li").destroy()},result_select:function(e){var t,s,i,l;this.result_highlight&&(t=this.result_highlight,s=t.get("id"),this.result_clear_highlight(),t.addClass("result-selected"),this.is_multiple?this.result_deactivate(t):this.result_single_selected=t,l=s.substr(s.lastIndexOf("_")+1),i=this.results_data[l],i.selected=!0,this.form_field.options[i.options_index].selected=!0,this.is_multiple?this.choice_build(i):this.selected_item.getElement("span").set("text",i.text),this.is_multiple&&e.control||this.results_hide(),this.search_field.set("value",""),this.form_field.fireEvent("change"),"function"==typeof this.form_field.onchange&&this.form_field.onchange(),this.search_field_scale())},result_activate:function(e){e.addClass("active-result").setStyle("display","block")},result_deactivate:function(e){e.removeClass("active-result").setStyle("display","none")},result_deselect:function(e){var t,s;s=this.results_data[e],s.selected=!1,this.form_field.options[s.options_index].selected=!1,t=document.id(this.container_id+"_o_"+e),t.removeClass("result-selected").addClass("active-result").setStyle("display","block"),this.result_clear_highlight(),this.winnow_results(),this.form_field.fireEvent("change"),this.search_field_scale()},results_search:function(e){this.results_showing?this.winnow_results():this.results_show()},winnow_results:function(){var e,t,s,i,l,h,r,n,a;this.no_results_clear(),l=0,h=this.search_field.get("value")===this.default_text?"":new Element("div",{text:this.search_field.get("value").trim()}).get("html"),s=new RegExp(h.replace(/[-[]{}()*+?.,\^$|#s]/g,"\$&"),"i"),a=new RegExp(h.replace(/[-[]{}()*+?.,\^$|#s]/g,"\$&"),"i"),this.results_data.each(function(c){c.disabled||c.empty||(c.group?document.id(c.dom_id).setStyle("display","none"):this.is_multiple&&c.selected||(e=!1,i=c.dom_id,s.test(c.text)?(e=!0,l+=1):(c.text.indexOf(" ")>=0||0===c.text.indexOf("["))&&(t=c.text.replace(/[|]/g,"").split(" "),t.length&&t.each(function(t){s.test(t)&&(e=!0,l+=1)})),e?(h.length?(r=c.html.search(a),n=c.html.substr(0,r+h.length)+"</em>"+c.html.substr(r+h.length),n=n.substr(0,r)+"<em>"+n.substr(r)):n=c.html,document.id(i).get("html")!==n&&document.id(i).set("html",n),this.result_activate(document.id(i)),null!=c.group_array_index&&document.id(this.results_data[c.group_array_index].dom_id).setStyle("display","block")):(this.result_highlight&&i===this.result_highlight.get("id")&&this.result_clear_highlight(),this.result_deactivate(document.id(i)))))},this),1>l&&h.length?this.no_results(h):this.winnow_results_set_highlight()},winnow_results_clear:function(){this.search_field.set("value",""),this.search_results.getElements("li").each(function(e){e.hasClass("group-result")?e.setStyle("display","block"):this.is_multiple&&e.hasClass("result-selected")?void 0:this.result_activate(e)},this)},winnow_results_set_highlight:function(){if(!this.result_highlight){var e=this.is_multiple?[]:this.search_results.getElements(".result-selected"),t=e.length?e[0]:this.search_results.getElement(".active-result");null!=t&&this.result_do_highlight(t)}},no_results:function(e){var t=new Element("li",{"class":"no-results"}).set("html",Locale.get("Chosen.noResults")+' "<span></span>"');t.getElement("span").set("html",e),this.search_results.grab(t)},no_results_clear:function(){this.search_results.getElements(".no-results").destroy()},keydown_arrow:function(){var e,t;this.result_highlight?this.results_showing&&(t=this.result_highlight.getNext("li.active-result"),t&&this.result_do_highlight(t)):(e=this.search_results.getElement("li.active-result"),e&&this.result_do_highlight(e)),this.results_showing||this.results_show()},keyup_arrow:function(){if(this.results_showing||this.is_multiple){if(this.result_highlight){var e=this.result_highlight.getAllPrevious("li.active-result");e.length?this.result_do_highlight(e[0]):(this.choices>0&&this.results_hide(),this.result_clear_highlight())}}else this.results_show()},keydown_backstroke:function(){this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.getElement("a")),this.clear_backstroke()):(this.pending_backstroke=this.search_choices.getLast("li.search-choice"),this.pending_backstroke.addClass("search-choice-focus"))},clear_backstroke:function(){this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},keyup_checker:function(e){switch(this.search_field_scale(),e.key){case"backspace":this.is_multiple&&this.backstroke_length<1&&this.choices>0?this.keydown_backstroke():this.pending_backstroke||(this.result_clear_highlight(),this.results_search());break;case"enter":e.preventDefault(),this.results_showing&&this.result_select(e);break;case"esc":this.results_showing&&this.results_hide();break;case"tab":case"up":case"down":case"shift":case"ctrl":break;default:this.results_search()}},keydown_checker:function(e){switch(this.search_field_scale(),"backspace"!==e.key&&this.pending_backstroke&&this.clear_backstroke(),e.key){case"backspace":this.backstroke_length=this.search_field.value.length;break;case"tab":this.mouse_on_container=!1;break;case"enter":e.preventDefault();break;case"up":e.preventDefault(),this.keyup_arrow();break;case"down":this.keydown_arrow()}},search_field_scale:function(){var e,t,s,i,l,h;this.is_multiple&&(s=0,h=0,i={position:"absolute",visibility:"hidden"},l=this.search_field.getStyles("font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"),Object.merge(i,l),t=new Element("div",{styles:i}),t.set("text",this.search_field.get("value")),$(document.body).grab(t),h=t.getCoordinates().width+25,t.destroy(),h>this.f_width-10&&(h=this.f_width-10),this.search_field.setStyle("width",h),e=this.container.getCoordinates().height,this.dropdown.setStyle("top",e))}});Element.implement({get_side_border_padding:function(){var e=this.getStyles("padding-left","padding-right","border-left-width","border-right-width"),t=Object.filter(e,function(e){return"string"==typeof e}),s=Object.map(t,function(e){return e.toInt()}),i=Object.values(s),l=0,h=i.length;if(h)for(;h--;)l+=i[h];return l},select_to_array:function(){var e=new SelectParser;return this.getChildren().each(function(t){e.add_node(t)}),e.parsed}});var SelectParser=new Class({options_index:0,parsed:[],add_node:function(e){"OPTGROUP"===e.nodeName.toUpperCase()?this.add_group(e):this.add_option(e)},add_group:function(e){var t=this.parsed.length;this.parsed.push({array_index:t,group:!0,label:e.label,children:0,disabled:e.disabled}),e.getChildren().each(function(s){this.add_option(s,t,e.disabled)},this)},add_option:function(e,t,s){"OPTION"===e.nodeName.toUpperCase()&&(""!==e.text?(null!=t&&(this.parsed[t].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:e.get("value"),text:e.get("text").trim(),html:e.get("html").replace("[",'<span style="color:#b3b3b3;padding-left:3px">[').replace("]","]</span>"),selected:e.selected,disabled:s===!0?s:e.disabled,group_array_index:t})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1)}});
?>