forked from paulstraw/FancySelect
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfancySelect.js
More file actions
2 lines (2 loc) · 3.25 KB
/
fancySelect.js
File metadata and controls
2 lines (2 loc) · 3.25 KB
1
2
// Generated by CoffeeScript 1.6.3
(function(){var e;e=window.jQuery||window.Zepto||window.$;e.fn.fancySelect=function(t){var n,r;t==null&&(t={});r=e.extend({forceiOS:!1,includeBlank:!1},t);n=!!navigator.userAgent.match(/iP(hone|od|ad)/i);return this.each(function(){var t,i,s,o,u,a,f,l;u=e(this);if(u.hasClass("fancified")||u[0].tagName!=="SELECT")return;u.addClass("fancified");u.css({width:1,height:1,display:"block",position:"absolute",top:0,left:0,opacity:0});u.wrap('<div class="fancy-select">');l=u.parent();u.data("class")&&l.addClass(u.data("class"));l.append('<div class="trigger">');(!n||!!r.forceiOS)&&l.append('<ul class="options">');a=l.find(".trigger");o=l.find(".options");s=u.prop("disabled");s&&l.addClass("disabled");f=function(){return a.text(u.find(":selected").text())};u.on("blur",function(){if(a.hasClass("open"))return setTimeout(function(){return a.trigger("close")},120)});a.on("close",function(){a.removeClass("open");return o.removeClass("open")});a.on("click",function(){var t,i;if(!s){a.toggleClass("open");if(n&&!r.forceiOS){if(a.hasClass("open"))return u.focus()}else{if(a.hasClass("open")){i=a.parent();t=i.offsetParent();i.offset().top+i.outerHeight()+o.outerHeight()+20>e(window).height()+e(window).scrollTop()?o.addClass("overflowing"):o.removeClass("overflowing")}o.toggleClass("open");if(!n)return u.focus()}}});u.on("enable",function(){u.prop("disabled",!1);l.removeClass("disabled");s=!1;return t()});u.on("disable",function(){u.prop("disabled",!0);l.addClass("disabled");return s=!0});u.on("change",function(e){return e.originalEvent&&e.originalEvent.isTrusted?e.stopPropagation():f()});u.on("keydown",function(e){var t,n,r;r=e.which;t=o.find(".hover");t.removeClass("hover");if(!o.hasClass("open")){if(r===13||r===32||r===38||r===40){e.preventDefault();return a.trigger("click")}}else{if(r===38){e.preventDefault();t.length&&t.index()>0?t.prev().addClass("hover"):o.find("li:last-child").addClass("hover")}else if(r===40){e.preventDefault();t.length&&t.index()<o.find("li").length-1?t.next().addClass("hover"):o.find("li:first-child").addClass("hover")}else if(r===27){e.preventDefault();a.trigger("click")}else if(r===13||r===32){e.preventDefault();t.trigger("click")}else r===9&&a.hasClass("open")&&a.trigger("close");n=o.find(".hover");if(n.length){o.scrollTop(0);return o.scrollTop(n.position().top-12)}}});o.on("click","li.option",function(t){u.val(e(this).data("value"));n||u.trigger("blur").trigger("focus");o.find(".selected").removeClass("selected");e(t.currentTarget).addClass("selected");return u.val(e(this).data("value")).trigger("change").trigger("blur").trigger("focus")});t=function(){f();if(n&&!r.forceiOS)return;return u.children().each(function(t,n){var r,s;n=e(n);if(n.is("option"))return i(n,o);if(n.is("optgroup")){r=n;o.append("<li class='optgroup'><span class='optgroup-label'>"+r.prop("label")+"</span><ul id=optgroup_"+t+">");s=e("#optgroup_"+t);return r.children().each(function(t,n){n=e(n);return i(n,s)})}})};i=function(e,t){if(!e.prop("disabled")&&(e.val()||r.includeBlank))return e.prop("selected")?t.append("<li data-value='"+e.val()+"' class='option selected'>"+e.text()+"</li>"):t.append("<li data-value='"+e.val()+"' class='option'>"+e.text()+"</li>")};u.on("update",function(){l.find(".options").empty();return t()});return t()})}}).call(this);