1'use strict'; 2 3// Generated by CoffeeScript 1.4.0 4 5(function() { 6 var $; 7 8 $ = window.jQuery || window.Zepto || window.$; 9 10 $.fn.fancySelect = function(opts) { 11 12 // var isiOS, settings; 13 14 var isiOS, settings, clicked = false; 15 if (opts == null) { 16 opts = {}; 17 } 18 settings = $.extend({ 19 forceiOS: false, 20 includeBlank: false, 21 optionTemplate: function(optionEl) { 22 return optionEl.text(); 23 }, 24 triggerTemplate: function(optionEl) { 25 return optionEl.text(); 26 } 27 }, opts); 28 isiOS = !!navigator.userAgent.match(/iP(hone|od|ad)/i); 29 return this.each(function() { 30 var copyOptionsToList, disabled, options, sel, trigger, updateTriggerText, wrapper; 31 sel = $(this); 32 if (sel.hasClass('fancified') || sel[0].tagName !== 'SELECT') { 33 return; 34 } 35 sel.addClass('fancified'); 36 sel.css({ 37 width: 1, 38 height: 1, 39 display: 'none', 40 position: 'absolute', 41 top: 0, 42 left: 0, 43 opacity: 0 44 }); 45 sel.wrap('<div class="fancy-select">'); 46 wrapper = sel.parent(); 47 if (sel.data('class')) { 48 wrapper.addClass(sel.data('class')); 49 } 50 wrapper.append('<div class="trigger">'); 51 52 wrapper.append('<ul class="options">'); 53 54 trigger = wrapper.find('.trigger'); 55 options = wrapper.find('.options'); 56 disabled = sel.prop('disabled'); 57 58 if (disabled) { 59 wrapper.addClass('disabled'); 60 } 61 updateTriggerText = function() { 62 var triggerHtml; 63 triggerHtml = settings.triggerTemplate(sel.find(':selected')); 64 return trigger.html(triggerHtml); 65 }; 66 sel.on('blur.fs', function() { 67 if (trigger.hasClass('open')) { 68 return setTimeout(function() { 69 return trigger.trigger('close.fs'); 70 }, 120); 71 } 72 }); 73 trigger.on('close.fs', function() { 74 trigger.removeClass('open'); 75 return options.removeClass('open'); 76 }); 77 trigger.on('close', function() { 78 var parent = sel.parent(); 79 if(!parent.is(':hover') || (parent.is(':hover') && clicked)) { 80 clicked = false; 81 trigger.removeClass('open'); 82 return options.removeClass('open'); 83 } 84 }); 85 sel.parent().on('mouseout', function() { 86 sel.trigger('focus'); 87 }); 88 89 trigger.on('click.fs', function() { 90 var offParent, parent; 91 if (!disabled) { 92 trigger.toggleClass('open'); 93 if (trigger.hasClass('open')) { 94 parent = trigger.parent(); 95 offParent = parent.offsetParent(); 96 if ((parent.offset().top + parent.outerHeight() + options.outerHeight() + 20) > $(window).height() + $(window).scrollTop()) { 97 options.addClass('overflowing'); 98 } else { 99 options.removeClass('overflowing'); 100 } 101 } 102 options.toggleClass('open'); 103 if (!isiOS) { 104 return sel.focus(); 105 } 106 } 107 }); 108 sel.on('enable', function() { 109 sel.prop('disabled', false); 110 wrapper.removeClass('disabled'); 111 disabled = false; 112 return copyOptionsToList(); 113 }); 114 sel.on('disable', function() { 115 sel.prop('disabled', true); 116 wrapper.addClass('disabled'); 117 return disabled = true; 118 }); 119 sel.on('change.fs', function(e) { 120 if (e.originalEvent && e.originalEvent.isTrusted) { 121 return e.stopPropagation(); 122 } else { 123 return updateTriggerText(); 124 } 125 }); 126 sel.on('keydown', function(e) { 127 var hovered, newHovered, w; 128 w = e.which; 129 hovered = options.find('.hover'); 130 hovered.removeClass('hover'); 131 if (!options.hasClass('open')) { 132 if (w === 13 || w === 32 || w === 38 || w === 40) { 133 e.preventDefault(); 134 return trigger.trigger('click.fs'); 135 } 136 } else { 137 if (w === 38) { 138 e.preventDefault(); 139 if (hovered.length && hovered.index() > 0) { 140 hovered.prev().addClass('hover'); 141 } else { 142 options.find('li:last-child').addClass('hover'); 143 } 144 } else if (w === 40) { 145 e.preventDefault(); 146 if (hovered.length && hovered.index() < options.find('li').length - 1) { 147 hovered.next().addClass('hover'); 148 } else { 149 options.find('li:first-child').addClass('hover'); 150 } 151 } else if (w === 27) { 152 e.preventDefault(); 153 trigger.trigger('click.fs'); 154 } else if (w === 13 || w === 32) { 155 e.preventDefault(); 156 hovered.trigger('click.fs'); 157 } else if (w === 9) { 158 if (trigger.hasClass('open')) { 159 trigger.trigger('close.fs'); 160 } 161 } 162 newHovered = options.find('.hover'); 163 if (newHovered.length) { 164 options.scrollTop(0); 165 return options.scrollTop(newHovered.position().top - 12); 166 } 167 } 168 }); 169 options.on('click.fs', 'li', function(e) { 170 var clicked; 171 clicked = $(this); 172 sel.val(clicked.data('raw-value')); 173 if (!isiOS) { 174 sel.trigger('blur.fs').trigger('focus.fs'); 175 } 176 options.find('.selected').removeClass('selected'); 177 clicked.addClass('selected'); 178 trigger.addClass('selected'); 179 return sel.val(clicked.data('raw-value')).trigger('change.fs').trigger('blur.fs').trigger('focus.fs'); 180 }); 181 options.on('mouseenter.fs', 'li', function() { 182 var hovered, nowHovered; 183 nowHovered = $(this); 184 hovered = options.find('.hover'); 185 hovered.removeClass('hover'); 186 return nowHovered.addClass('hover'); 187 }); 188 options.on('mouseleave.fs', 'li', function() { 189 return options.find('.hover').removeClass('hover'); 190 }); 191 copyOptionsToList = function() { 192 var selOpts; 193 updateTriggerText(); 194 selOpts = sel.find('option'); 195 return sel.find('option').each(function(i, opt) { 196 var optHtml; 197 opt = $(opt); 198 if (!opt.prop('disabled') && (opt.val() || settings.includeBlank)) { 199 optHtml = settings.optionTemplate(opt); 200 if (opt.prop('selected')) { 201 return options.append("<li data-raw-value=\"" + (opt.val()) + "\" class=\"selected\">" + optHtml + "</li>"); 202 } else { 203 return options.append("<li data-raw-value=\"" + (opt.val()) + "\">" + optHtml + "</li>"); 204 } 205 } 206 }); 207 }; 208 sel.on('update.fs', function() { 209 wrapper.find('.options').empty(); 210 return copyOptionsToList(); 211 }); 212 return copyOptionsToList(); 213 }); 214 }; 215 216}).call(this);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.