1/* 2 * DropKick 1.4 3 * 4 * Highly customizable <select> lists 5 * https://github.com/robdel12/DropKick 6 * 7 * Created by: Jamie Lottering <http://github.com/JamieLottering> <http://twitter.com/JamieLottering> 8 * 9 * 10*/ 11(function(e, t, n) { 12 "use strict"; 13 var r = navigator.userAgent.match(/MSIE ([0-9]{1,}[\.0-9]{0,})/), i=!!r, s = i && parseFloat(r[1]) < 7, o = navigator.userAgent.match(/iPad|iPhone|Android|IEMobile|BlackBerry/i), u = {}, a = [], f = { 14 left: 37, 15 up: 38, 16 right: 39, 17 down: 40, 18 enter: 13, 19 tab: 9, 20 zero: 48, 21 z: 90, 22 last: 221 23 }, l = ['<div class="dk_container" id="dk_container_{{ id }}" tabindex="{{ tabindex }}" aria-hidden="true">', '<a class="dk_toggle dk_label">{{ label }}</a>', '<div class="dk_options">', '<ul class="dk_options_inner" role="main" aria-hidden="true">', "</ul>", "</div>", "</div>"].join(""), c = '<li><a data-dk-dropdown-value="{{ value }}">{{ text }}</a></li>', h = { 24 startSpeed: 400, 25 theme: !1, 26 changes: !1, 27 syncReverse: !0, 28 nativeMobile: !0, 29 autoWidth: !0 30 }, p = null, d = null, v = function(e, t, n) { 31 var r, i, s, o; 32 r = e.attr("data-dk-dropdown-value"); 33 i = e.text(); 34 s = t.data("dropkick"); 35 o = s.$select; 36 o.val(r).trigger("change"); 37 t.find(".dk_label").text(i); 38 n = n ||!1; 39 s.settings.change&&!n&&!s.settings.syncReverse && s.settings.change.call(o, r, i) 40 }, m = function(e) { 41 e.removeClass("dk_open dk_open_top"); 42 p = null 43 }, g = function(n) { 44 var r = n.find(".dk_toggle"), i = n.find(".dk_options").outerHeight(), s = e(t).height() - r.outerHeight() - r.offset().top + e(t).scrollTop(), o = r.offset().top - e(t).scrollTop(); 45 return i < o ? i < s : !0 46 }, y = function(e, t, n) { 47 var r = e.find(".dk_options_inner"), i = t.prevAll("li").outerHeight() * t.prevAll("li").length, s = r.scrollTop(), o = r.height() + r.scrollTop() - t.outerHeight(); 48 (n && n.type === "keydown" || i < s || i > o) && r.scrollTop(i) 49 }, b = function(e, t) { 50 var n = g(e); 51 p = e.toggleClass("dk_open"); 52 var n = g(e), r = n ? "dk_open": "dk_open_top dk_open"; 53 e.find(".dk_options").css({ 54 top: n ? e.find(".dk_toggle").outerHeight()-1: "", 55 bottom: n ? "": e.find(".dk_toggle").outerHeight()-1 56 }); 57 p = e.addClass(r); 58 y(e, e.find(".dk_option_current"), t) 59 }, w = function(e, t, n) { 60 t.find(".dk_option_current").removeClass("dk_option_current"); 61 e.addClass("dk_option_current"); 62 y(t, e, n) 63 }, E = function(t, n) { 64 var r = t.keyCode, i = n.data("dropkick"), s = String.fromCharCode(r), o = n.find(".dk_options"), u = n.hasClass("dk_open"), a = o.find("li"), l = n.find(".dk_option_current"), c = a.first(), h = a.last(), p, d, g, y, E, S, x; 65 switch (r) { 66 case f.enter: 67 if (u) { 68 if (!l.hasClass("disabled")) { 69 v(l.find("a"), n); 70 m(n) 71 } 72 } else 73 b(n, t); 74 t.preventDefault(); 75 break; 76 case f.tab: 77 if (u) { 78 l.length && v(l.find("a"), n); 79 m(n) 80 } 81 break; 82 case f.up: 83 d = l.prev("li"); 84 u ? d.length ? w(d, n, t) : w(h, n, t) : b(n, t); 85 t.preventDefault(); 86 break; 87 case f.down: 88 if (u) { 89 p = l.next("li").first(); 90 p.length ? w(p, n, t) : w(c, n, t) 91 } else 92 b(n, t); 93 t.preventDefault(); 94 break; 95 default: 96 } 97 if (r >= f.zero && r <= f.z) { 98 g = (new Date).getTime(); 99 if (i.finder === null || i.finder === undefined) { 100 i.finder = s.toUpperCase(); 101 i.timer = g 102 } else if (g > parseInt(i.timer, 10) + 1e3) { 103 i.finder = s.toUpperCase(); 104 i.timer = g 105 } else { 106 i.finder = i.finder + s.toUpperCase(); 107 i.timer = g 108 } 109 y = a.find("a"); 110 for (E = 0, S = y.length; E < S; E++) { 111 x = e(y[E]); 112 if (x.html().toUpperCase().indexOf(i.finder) === 0) { 113 v(x, n); 114 w(x.parent(), n, t); 115 break 116 } 117 } 118 n.data("dropkick", i) 119 } 120 }, S = function(t) { 121 return e.trim(t).length > 0 ? t : !1 122 }, x = function(t, n) { 123 var r = t.replace("{{ id }}", n.id).replace("{{ label }}", n.label).replace("{{ tabindex }}", n.tabindex), i = [], s, o, u, a, f; 124 if (n.options && n.options.length) 125 for (o = 0, u = n.options.length; o < u; o++) { 126 a = e(n.options[o]); 127 o === 0 && a.attr("selected") !== undefined && a.attr("disabled") !== undefined ? f = null : f = c.replace("{{ value }}", a.val()).replace("{{ current }}", S(a.val()) === n.value ? "dk_option_current" : "").replace("{{ disabled }}", a.attr("disabled") !== undefined ? "disabled" : "").replace("{{ text }}", e.trim(a.html())); 128 i[i.length] = f 129 } 130 s = e(r); 131 s.find(".dk_options_inner").html(i.join("")); 132 return s 133 }; 134 s || (n.documentElement.className = n.documentElement.className + " dk_fouc"); 135 u.init = function(t) { 136 t = e.extend({}, h, t); 137 l = t.dropdownTemplate ? t.dropdownTemplate : l; 138 c = t.optionTemplate ? t.optionTemplate : c; 139 return this.each(function() { 140 var n = e(this), r = n.find(":selected").first(), i = n.find("option"), s = n.data("dropkick") || {}, u = n.attr("id") || n.attr("name"), f = t.width || n.outerWidth(), c = n.attr("tabindex") || "0", h=!1, p, v; 141 if (s.id) 142 return n; 143 s.settings = t; 144 s.tabindex = c; 145 s.id = u; 146 s.$original = r; 147 s.$select = n;
148 s.value = S(n.val()) || S(r.attr("value")); 149 s.label = r.text(); 150 s.options = i; 151 h = x(l, s); 152 s.settings.autoWidth && h.find(".dk_toggle").css({ 153 //width: f + "px" 154 }); 155 n.before(h).appendTo(h); 156 h = e('div[id="dk_container_' + u + '"]').fadeIn(t.startSpeed); 157 p = t.theme || "default"; 158 h.addClass("dk_theme_" + p); 159 s.theme = p; 160 s.$dk = h; 161 n.data("dropkick", s); 162 h.addClass(n.attr("class")); 163 h.data("dropkick", s); 164 a[a.length] = n; 165 h.on("focus.dropkick", function() { 166 d = h.addClass("dk_focus") 167 }).on("blur.dropkick", function() { 168 h.removeClass("dk_focus"); 169 d = null 170 }); 171 o && s.settings.nativeMobile && h.addClass("dk_mobile"); 172 s.settings.syncReverse && n.on("change", function(t) { 173 var r = n.val(), i = e('a[data-dk-dropdown-value="' + r + '"]', h), o = i.text(); 174 h.find(".dk_label").text(o); 175 s.settings.change && s.settings.change.call(n, r, o); 176 w(i.parent(), h, t) 177 }); 178 v = n.attr("form") ? e("#" + n.attr("form").replace(" ", ", #")) : n.closest("form"); 179 v.length && v.on("reset", function() { 180 n.dropkick("reset") 181 }) 182 }) 183 }; 184 u.theme = function(t) { 185 var n = e(this).data("dropkick"), r = n.$dk, i = "dk_theme_" + n.theme; 186 r.removeClass(i).addClass("dk_theme_" + t); 187 n.theme = t 188 }; 189 u.reset = function() { 190 return this.each(function() { 191 var t = e(this).data("dropkick"), n = t.$dk, r = e('a[data-dk-dropdown-value="' + t.$original.attr("value") + '"]', n); 192 t.$original.prop("selected", !0); 193 n.find(".dk_label").text(t.label); 194 w(r.parent(), n) 195 }) 196 }; 197 u.setValue = function(t) { 198 return this.each(function() { 199 var n = e(this).data("dropkick").$dk, r = e('.dk_options a[data-dk-dropdown-value="' + t + '"]', n); 200 r.length ? v(r, n) | w(r.parent(), n) : console.warn("There is no option with this value in " + n.selector) 201 }) 202 }; 203 u.refresh = function() { 204 return this.each(function() { 205 var t = e(this).data("dropkick"), n = t.$select, r = t.$dk, i, s; 206 t.options = n.find("option"); 207 s = x(l, t).find(".dk_options_inner"); 208 r.find(".dk_options_inner").replaceWith(s); 209 i = e('a[data-dk-dropdown-value="' + n.val() + '"]', r); 210 w(i.parent(), r) 211 }) 212 }; 213 e.fn.dropkick = function(e) { 214 if (!s) { 215 if (u[e]) 216 return u[e].apply(this, Array.prototype.slice.call(arguments, 1)); 217 if (typeof e == "object" ||!e) 218 return u.init.apply(this, arguments) 219 } 220 }; 221 e(function() { 222 e(n).on(i ? "mousedown" : "click", ".dk_options a", function() { 223 var t = e(this), n = t.parents(".dk_container").first(); 224 if (!t.parent().hasClass("disabled")) { 225 v(t, n); 226 w(t.parent(), n); 227 m(n) 228 } 229 return !1 230 }); 231 e(n).on("keydown.dk_nav", function(e) { 232 var t; 233 p ? t = p : d && (t = d); 234 t && E(e, t) 235 }); 236 e(n).on("click", null, function(t) { 237 var n = e(t.target), r; 238 if (p && n.closest(".dk_container").length === 0) 239 m(p); 240 else { 241 if (n.is(".dk_toggle, .dk_label")) { 242 r = n.parents(".dk_container").first(); 243 if (r.hasClass("dk_open")) 244 m(r); 245 else { 246 p && m(p); 247 b(r, t) 248 } 249 return !1 250 } 251 n.attr("for")&&!!e("#dk_container_" + n.attr("for"))[0] && e("#dk_container_" + n.attr("for")).trigger("focus.dropkick") 252 } 253 }); 254 var r = "onwheel"in t ? "wheel": "onmousewheel"in n ? "mousewheel": "MouseScrollEvent"in t ? "DOMMouseScroll MozMousePixelScroll": !1; 255 r && e(n).on(r, ".dk_options_inner", function(e) { 256 var t = e.originalEvent.wheelDelta||-e.originalEvent.deltaY||-e.originalEvent.detail; 257 if (i) { 258 this.scrollTop -= Math.round(t / 10); 259 return !1 260 } 261 return t > 0 && this.scrollTop <= 0 || t < 0 && this.scrollTop >= this.scrollHeight - this.offsetHeight?!1 : !0 262 }) 263 }) 264})(jQuery, window, document); 265
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.