diff --git a/dist/hierarchy-select.min.js b/dist/hierarchy-select.min.js index ac8b324..6ccd774 100644 --- a/dist/hierarchy-select.min.js +++ b/dist/hierarchy-select.min.js @@ -1 +1 @@ -!function(h){"use strict";var a=function(e,t){this.$element=h(e),this.options=h.extend({},h.fn.hierarchySelect.defaults,t),this.$button=this.$element.children("button"),this.$selectedLabel=this.$button.children(".selected-label"),this.$menu=this.$element.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.$hiddenField=this.$element.children("input"),this.previouslySelected=null,this.init()};a.prototype={constructor:a,init:function(){this.setWidth(),this.setHeight(),this.initSelect(),this.clickListener(),this.buttonListener(),this.searchListener()},initSelect:function(){var e=this.$menuInner.find("li[data-default-selected]:first");if(e.length)this.setValue(e.data("value"));else{var t=this.$menuInner.find("li:first");this.setValue(t.data("value"))}},setWidth:function(){if("auto"===this.options.width){var e=this.$menu.width();this.$element.css("min-width",e+2+"px")}else this.options.width?this.$element.css("width",this.options.width):this.$element.css("min-width","42px")},setHeight:function(){this.options.height&&(this.$menu.css("overflow","hidden"),this.$menuInner.css({"max-height":this.options.height,"overflow-y":"auto"}))},getText:function(){return this.$selectedLabel.text()},getValue:function(){return this.$hiddenField.val()},setValue:function(e){var t=this.$menuInner.children('li[data-value="'+e+'"]:first');this.setSelected(t)},enable:function(){this.$button.removeAttr("disabled")},disable:function(){this.$button.attr("disabled","disabled")},setSelected:function(e){if(e.length&&this.previouslySelected!==e){var t=e.children("a").text(),n=e.data("value");this.previouslySelected=e,this.$selectedLabel.html(t),this.$hiddenField.val(n),this.$menuInner.find(".active").removeClass("active"),e.addClass("active"),this.$element.trigger("change")}},moveUp:function(){var e=this.$menuInner.find("li:not(.hidden,.disabled)"),t=this.$menuInner.find(".active"),n=e.index(t);void 0!==e[n-1]&&(this.$menuInner.find(".active").removeClass("active"),e[n-1].classList.add("active"),i(this.$menuInner[0],e[n-1]))},moveDown:function(){var e=this.$menuInner.find("li:not(.hidden,.disabled)"),t=this.$menuInner.find(".active"),n=e.index(t);void 0!==e[n+1]&&(this.$menuInner.find(".active").removeClass("active"),e[n+1]&&(e[n+1].classList.add("active"),i(this.$menuInner[0],e[n+1])))},selectItem:function(){var e=this,t=this.$menuInner.find(".active");t.hasClass("hidden")||t.hasClass("disabled")||(setTimeout(function(){e.$button.focus()},5),t&&this.setSelected(t),this.$button.dropdown("toggle"))},clickListener:function(){var l=this;this.$element.on("show.bs.dropdown",function(){var e=h(this),t=h(window).scrollTop(),n=h(window).height(),i=e.offset().top-t,s=n-i-e.outerHeight(),o=l.$menu.outerHeight(!0);se.offsetTop+e.clientHeight||(e.parentNode.scrollTop=e.offsetTop)},0)}),this.$element.on("hide.bs.dropdown",function(){l.previouslySelected&&l.setSelected(l.previouslySelected)}),this.$element.on("shown.bs.dropdown",function(){l.previouslySelected=l.$menuInner.find(".active"),l.$searchbox.focus()}),this.$element.on("hidden.bs.dropdown",function(){l.$element.toggleClass("dropup",!1)}),this.$menuInner.on("click","li a",function(e){e.preventDefault();var t=h(this).parent();t.hasClass("disabled")?e.stopPropagation():l.setSelected(t)})},buttonListener:function(){var t=this;this.options.search||this.$button.on("keydown",function(e){switch(e.keyCode){case 9:t.$element.hasClass("open")&&e.preventDefault();break;case 13:t.$element.hasClass("open")&&(e.preventDefault(),t.selectItem());break;case 27:t.$element.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),t.$button.focus(),t.previouslySelected&&t.setSelected(t.previouslySelected),t.$button.dropdown("toggle"));break;case 38:t.$element.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),t.moveUp());break;case 40:t.$element.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),t.moveDown())}})},searchListener:function(){var i=this;this.options.search?(this.$searchbox.on("keydown",function(e){switch(e.keyCode){case 9:e.preventDefault(),e.stopPropagation(),i.$menuInner.click(),i.$button.focus();break;case 13:i.selectItem();break;case 27:e.preventDefault(),e.stopPropagation(),i.$button.focus(),i.previouslySelected&&i.setSelected(i.previouslySelected),i.$button.dropdown("toggle");break;case 38:e.preventDefault(),i.moveUp();break;case 40:e.preventDefault(),i.moveDown()}}),this.$searchbox.on("input propertychange",function(e){e.preventDefault();var t=i.$searchbox.val().toLowerCase(),n=i.$menuInner.find("li");0===t.length?n.each(function(){var e=h(this);e.toggleClass("disabled",!1),e.toggleClass("hidden",!1)}):n.each(function(){var e=h(this);-1!==e.children("a").text().toLowerCase().indexOf(t)?(e.toggleClass("disabled",!1),e.toggleClass("hidden",!1),i.options.hierarchy&&function(e){for(var t=e,n=t.data("level");"object"==typeof t&&0t.offsetTop&&(e.scrollTop=t.offsetTop)}h.fn.hierarchySelect=function(i){var s,o=Array.prototype.slice.call(arguments,1),e=this.each(function(){var e=h(this),t=e.data("HierarchySelect"),n="object"==typeof i&&i;t||e.data("HierarchySelect",t=new a(this,n)),"string"==typeof i&&(s=t[i].apply(t,o))});return void 0===s?e:s},h.fn.hierarchySelect.defaults={width:"auto",height:"208px",hierarchy:!0,search:!0},h.fn.hierarchySelect.Constructor=a,h.fn.hierarchySelect.noConflict=function(){return h.fn.hierarchySelect=e,this}}(jQuery); \ No newline at end of file +!function(h){"use strict";var a=function(e,t){this.$element=h(e),this.options=h.extend({},h.fn.hierarchySelect.defaults,t),this.$button=this.$element.children("button"),this.$selectedLabel=this.$button.children(".selected-label"),this.$menu=this.$element.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.$hiddenField=this.$element.children("input"),this.previouslySelected=null,this.init()};a.prototype={constructor:a,init:function(){this.setWidth(),this.setHeight(),this.initSelect(),this.clickListener(),this.buttonListener(),this.searchListener()},initSelect:function(){var e=this.$menuInner.find("li[data-default-selected]:first");if(e.length)this.setValue(e.data("value"));else{var t=this.$menuInner.find("li:first");this.setValue(t.data("value"))}},setWidth:function(){if("auto"===this.options.width){var e=this.$menu.width();this.$element.css("min-width",e+2+"px")}else this.options.width?this.$element.css("width",this.options.width):this.$element.css("min-width","42px")},setHeight:function(){this.options.height&&(this.$menu.css("overflow","hidden"),this.$menuInner.css({"max-height":this.options.height,"overflow-y":"auto"}))},getText:function(){return this.$selectedLabel.text()},getValue:function(){return this.$hiddenField.val()},setValue:function(e){var t=this.$menuInner.children('li[data-value="'+e+'"]:first');this.setSelected(t)},enable:function(){this.$button.removeAttr("disabled")},disable:function(){this.$button.attr("disabled","disabled")},setSelected:function(e){if(e.length&&this.previouslySelected!==e){var t=e.children("a").text(),n=e.data("value");this.previouslySelected=e,this.$selectedLabel.html(t),this.$hiddenField.val(n),this.$menuInner.find(".active").removeClass("active"),e.addClass("active"),this.$element.trigger("change")}},moveUp:function(){var e=this.$menuInner.find("li:not(.hidden,.disabled)"),t=this.$menuInner.find(".active"),n=e.index(t);void 0!==e[n-1]&&(this.$menuInner.find(".active").removeClass("active"),e[n-1].classList.add("active"),i(this.$menuInner[0],e[n-1]))},moveDown:function(){var e=this.$menuInner.find("li:not(.hidden,.disabled)"),t=this.$menuInner.find(".active"),n=e.index(t);void 0!==e[n+1]&&(this.$menuInner.find(".active").removeClass("active"),e[n+1]&&(e[n+1].classList.add("active"),i(this.$menuInner[0],e[n+1])))},selectItem:function(){var e=this,t=this.$menuInner.find(".active");t.hasClass("hidden")||t.hasClass("disabled")||(setTimeout(function(){e.$button.focus()},5),t.length&&this.setSelected(t),this.$button.dropdown("toggle"))},clickListener:function(){var l=this;this.$element.on("show.bs.dropdown",function(){var e=h(this),t=h(window).scrollTop(),n=h(window).height(),i=e.offset().top-t,s=n-i-e.outerHeight(),o=l.$menu.outerHeight(!0);se.offsetTop+e.clientHeight||(e.parentNode.scrollTop=e.offsetTop)},0)}),this.$element.on("hide.bs.dropdown",function(){l.previouslySelected&&l.setSelected(l.previouslySelected)}),this.$element.on("shown.bs.dropdown",function(){l.previouslySelected=l.$menuInner.find(".active"),l.$searchbox.focus()}),this.$element.on("hidden.bs.dropdown",function(){l.$element.toggleClass("dropup",!1)}),this.$menuInner.on("click","li a",function(e){e.preventDefault();var t=h(this).parent();t.hasClass("disabled")?e.stopPropagation():l.setSelected(t)})},buttonListener:function(){var t=this;this.options.search||this.$button.on("keydown",function(e){switch(e.keyCode){case 9:t.$element.hasClass("open")&&e.preventDefault();break;case 13:t.$element.hasClass("open")&&(e.preventDefault(),t.selectItem());break;case 27:t.$element.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),t.$button.focus(),t.previouslySelected&&t.setSelected(t.previouslySelected),t.$button.dropdown("toggle"));break;case 38:t.$element.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),t.moveUp());break;case 40:t.$element.hasClass("open")&&(e.preventDefault(),e.stopPropagation(),t.moveDown())}})},searchListener:function(){var i=this;this.options.search?(this.$searchbox.on("keydown",function(e){switch(e.keyCode){case 9:e.preventDefault(),e.stopPropagation(),i.$menuInner.click(),i.$button.focus();break;case 13:i.selectItem();break;case 27:e.preventDefault(),e.stopPropagation(),i.$button.focus(),i.previouslySelected&&i.setSelected(i.previouslySelected),i.$button.dropdown("toggle");break;case 38:e.preventDefault(),i.moveUp();break;case 40:e.preventDefault(),i.moveDown()}}),this.$searchbox.on("input propertychange",function(e){e.preventDefault();var t=i.$searchbox.val().toLowerCase(),n=i.$menuInner.find("li");0===t.length?n.each(function(){var e=h(this);e.toggleClass("disabled",!1),e.toggleClass("hidden",!1)}):n.each(function(){var e=h(this);-1!==e.children("a").text().toLowerCase().indexOf(t)?(e.toggleClass("disabled",!1),e.toggleClass("hidden",!1),i.options.hierarchy&&function(e){for(var t=e,n=t.data("level");"object"==typeof t&&0t.offsetTop&&(e.scrollTop=t.offsetTop)}h.fn.hierarchySelect=function(i){var s,o=Array.prototype.slice.call(arguments,1),e=this.each(function(){var e=h(this),t=e.data("HierarchySelect"),n="object"==typeof i&&i;t||e.data("HierarchySelect",t=new a(this,n)),"string"==typeof i&&(s=t[i].apply(t,o))});return void 0===s?e:s},h.fn.hierarchySelect.defaults={width:"auto",height:"208px",hierarchy:!0,search:!0},h.fn.hierarchySelect.Constructor=a,h.fn.hierarchySelect.noConflict=function(){return h.fn.hierarchySelect=e,this}}(jQuery); diff --git a/src/hierarchy-select.js b/src/hierarchy-select.js index c0be966..cdb1978 100644 --- a/src/hierarchy-select.js +++ b/src/hierarchy-select.js @@ -111,7 +111,7 @@ setTimeout(function() { that.$button.focus(); }, 5); - selected && this.setSelected(selected); + selected.length && this.setSelected(selected); this.$button.dropdown('toggle'); }, clickListener: function() { @@ -128,7 +128,7 @@ $this.toggleClass('dropup', true); } var selected = that.$menuInner.find('.active'); - selected && setTimeout(function() { + selected.length && setTimeout(function() { var el = selected[0]; var p = selected[0].parentNode; if (!(p.scrollTop <= el.offsetTop && (p.scrollTop + p.clientHeight) > el.offsetTop + el.clientHeight)) {