Created
September 8, 2016 15:08
-
-
Save glamrock/f539dead923d0131c665dcf70358bd50 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function(a) { | |
a.fn.swiftfilter = function(b) { | |
jQuery(this).each(function() { | |
jQuery(this)._swiftfilter() | |
}) | |
}; | |
a.fn._swiftfilter = function(l) { | |
l = a.extend(l, a(this).data()); | |
var c = a.extend({ | |
container: "html", | |
searchIn: "article", | |
child: "*", | |
childOnly: false, | |
autocomplete: true, | |
typeEnd: 0, | |
show: "fadeTo", | |
hide: "fadeTo", | |
durationShow: 500, | |
durationHide: 500, | |
opacity: 0.2, | |
showParam: "", | |
hideParam: "", | |
connect: null, | |
compare: "in", | |
}, l); | |
var b = c.showParam == "" ? c.durationShow : c.showParam; | |
var d = c.hideParam == "" ? c.durationHide : c.hideParam; | |
c.show = c.hide == "fadeTo" ? "fadeTo" : c.show; | |
if (c.show == "toggleClass" || c.hide == "toggleClass") { | |
c.show = "removeClass"; | |
c.hide = "addClass"; | |
b = c.showParam; | |
d = c.hideParam | |
} | |
for (var e in c) { | |
a(this).attr("data-" + e.replace(/([A-Z]+)/g, function(i) { | |
return "-" + i.toLowerCase() | |
}), c[e]) | |
} | |
a("[data-keywords]").each(function() { | |
a(this).attr("data-keywords", " " + a(this).attr("data-keywords") + " ") | |
}); | |
var j = this; | |
var g = []; | |
var f = []; | |
this.push_field = function(i) { | |
a(i).each(function() { | |
g.push(a(this)) | |
}) | |
}; | |
this.get_autocomplete_list = function(m, u) { | |
var o = []; | |
var p = []; | |
var q = new RegExp("^" + m, "i"); | |
var r = []; | |
for (var n in u) { | |
var i = u[n].split(" "); | |
for (var s in i) { | |
r.push(i[s].replace(/\W+/g, "")) | |
} | |
} | |
for (var t in r) { | |
if (r[t].match(q)) { | |
if (a.inArray(r[t], o) == -1) { | |
o.push(r[t]); | |
p.push(a("<li>", { | |
text: r[t], | |
}).css("cursor", "pointer")) | |
} | |
} | |
if (p.length >= 10) { | |
return p | |
} | |
} | |
return p | |
}; | |
if (c.autocomplete && a(j).prop("type") == "text") { | |
a(j).each(function() { | |
var o = a(this).width() + parseInt(a(this).css("padding-left").replace(/[^\d]+/g, "")) + parseInt(a(this).css("padding-right").replace(/[^\d]+/g, "")); | |
var n = a(this).css("background-color") || "#fff"; | |
var m = a(this).css("color") || "#000"; | |
var i = a(this).css("font-size") || 12; | |
var p = a("<ul>", { | |
"class": "swiftfilter-autocomplete-container" | |
}).insertAfter(this); | |
a(p).css("position", "absolute"); | |
a(p).css("z-index", 999999); | |
a(p).css("width", o); | |
a(p).css("background", n); | |
a(p).css("color", m); | |
a(p).css("opacity", 0.9); | |
a(p).css("font-size", i); | |
a(p).css("margin", 0); | |
a(p).css("padding", "5px"); | |
a(p).css("list-style-type", "none"); | |
a(p).css("display", "none"); | |
a(document).on("click", ".swiftfilter-autocomplete-container li", function(q) { | |
a(j).val(a(this).text()); | |
a(j).trigger("change") | |
}); | |
a(this).on("blur", function() { | |
setTimeout(function() { | |
a(j).next().css("display", "none") | |
}, 200) | |
}); | |
a(this).on("keydown", function(q) { | |
if (q.which == 40) { | |
var r = a(p).find("li.sf-ac-selected").length > 0 && a(p).find("li.sf-ac-selected").next().length > 0 ? a(p).find("li.sf-ac-selected").next() : a(p).find("li:first"); | |
a(p).find("li.sf-ac-selected").css("background", a(p).css("background")); | |
a(p).find("li.sf-ac-selected").css("color", a(p).css("color")); | |
a(p).find("li.sf-ac-selected").removeClass("sf-ac-selected"); | |
a(r).css("background", "#2D84DF"); | |
a(r).css("color", "#FFF"); | |
a(r).addClass("sf-ac-selected") | |
} else { | |
if (q.which == 38) { | |
var r = a(p).find("li.sf-ac-selected").length > 0 && a(p).find("li.sf-ac-selected").prev().length > 0 ? a(p).find("li.sf-ac-selected").prev() : a(p).find("li:last"); | |
a(p).find("li.sf-ac-selected").css("background", a(p).css("background")); | |
a(p).find("li.sf-ac-selected").css("color", a(p).css("color")); | |
a(p).find("li.sf-ac-selected").removeClass("sf-ac-selected"); | |
a(r).css("background", "#2D84DF"); | |
a(r).css("color", "#FFF"); | |
a(r).addClass("sf-ac-selected") | |
} else { | |
if (q.which == 9 || q.which == 13) { | |
if (a(p).find("li.sf-ac-selected").length > 0) { | |
q.preventDefault(); | |
a(this).val(a(p).find("li.sf-ac-selected").text()); | |
a(this).trigger("blur"); | |
return false | |
} | |
} else { | |
if (q.which == 27) { | |
a(this).trigger("blur") | |
} | |
} | |
} | |
} | |
}) | |
}) | |
} | |
this.push_field(a(this)); | |
a(this).attr("data-compare", c.compare); | |
if (c.connect != null) { | |
var k = c.connect.split(","); | |
for (var e in k) { | |
this.push_field(a(k[e])) | |
} | |
a(this).on | |
} | |
if (Boolean(c.autocomplete) === true) { | |
var h = []; | |
a(c.container + " " + c.searchIn).each(function() { | |
var i = a(this).index(c.container + " " + c.searchIn); | |
h[i] = ((Boolean(c.childOnly) === true ? "" : (a(this).text() ? a(this).text() : "") + (a(this).attr("data-keywords") ? a(this).attr("data-keywords") : "")) + (a(this).find(c.child).text() ? a(this).find(c.child).text() : "") + (a(this).find(c.child).attr("data-keywords") ? a(this).find(c.child).attr("data-keywords") : "")).toLowerCase().replace(/\s+/g, " ") | |
}) | |
} | |
this.do_filter = function() { | |
a(c.container + " " + c.searchIn).each(function() { | |
var n = true; | |
for (var p in g) { | |
var t = ((a(g[p]).attr("data-child-only") == "true" ? "" : a(this).text() + (typeof a(this).attr("data-keywords") !== "undefined" ? a(this).attr("data-keywords") : "")) + a(this).find(a(g[p]).attr("data-child")).text() + (typeof a(this).find(a(g[p]).attr("data-child")).attr("data-keywords") !== "undefined" ? a(this).find(a(g[p]).attr("data-child")).attr("data-keywords") : "")).toLowerCase().replace(/\s+/g, " "); | |
var q = a(g[p]).val().toLowerCase(); | |
if (a(g[p]).attr("data-compare") == "in") { | |
var u = (null === t.match(q) ? false : true) | |
} else { | |
if (a(g[p]).attr("data-compare") == "not_in") { | |
var u = (null === t.match(q) || q == "" ? true : false) | |
} else { | |
if (a(g[p]).attr("data-compare") == "regexp") { | |
var u = (t.match(new RegExp(q)) || q == "") | |
} else { | |
if (a(g[p]).attr("data-compare") == "equals") { | |
var u = (t == q || q == "") | |
} else { | |
if (a(g[p]).attr("data-compare") == "gt") { | |
console.log(((t.replace(/[^\d\.]+/g, "")) * 1)); | |
var u = (((t.replace(/[^\d\.]+/g, "")) * 1) > (q * 1) || q == "") | |
} else { | |
if (a(g[p]).attr("data-compare") == "gte") { | |
var u = ((t.replace(/[^\d\.]+/g, "")) * 1 >= q * 1 || q == "") | |
} else { | |
if (a(g[p]).attr("data-compare") == "lt") { | |
var u = ((t.replace(/[^\d\.]+/g, "")) * 1 < q * 1 || q == "") | |
} else { | |
if (a(g[p]).attr("data-compare") == "lte") { | |
var u = ((t.replace(/[^\d\.]+/g, "")) * 1 <= q * 1 || q == "") | |
} else { | |
if (a(g[p]).attr("data-compare") == "between") { | |
var r = q.split("-"); | |
r[0] == "" ? r[0] = -9999999999 : r[0]; | |
r[1] == "" ? r[1] = 9999999999 : r[1]; | |
var m = r[0] * 1 < r[1] * 1 ? r[1] * 1 : r[0] * 1; | |
var o = r[0] * 1 > r[1] * 1 ? r[1] * 1 : r[0] * 1; | |
var u = (((t.replace(/[^\d\.]+/g, "")) * 1 >= o && (t.replace(/[^\d\.]+/g, "")) <= m) || q == "") | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
n = n && (u || ((a(g[p]).prop("type") == "checkbox" || a(g[p]).prop("type") == "radio") && !a(g[p]).prop("checked"))) | |
} | |
if (n) { | |
if (c.show == "fadeTo") { | |
a(this).stop()[c.show](c.durationShow, 1) | |
} else { | |
a(this).stop()[c.show](b) | |
} | |
} else { | |
if (c.hide == "fadeTo") { | |
a(this).stop()[c.hide](c.durationHide, c.opacity) | |
} else { | |
a(this).stop()[c.hide](d) | |
} | |
} | |
}) | |
}; | |
a(this).on("keyup change", function(i) { | |
if (i.which != 40 && i.which != 38 && a(j).prop("type") == "text") { | |
if (c.autocomplete && a(this).val() != "" && (c.compare == "in" || c.compare == "not_in")) { | |
a(this).next().css("display", "block"); | |
a(this).next().empty().append(j.get_autocomplete_list(a(this).val(), h)) | |
} else { | |
a(this).next().css("display", "none") | |
} | |
} | |
var m = (a(this).val() == "" || (a(this).prop("type") != "text") ? 0 : parseInt(c.typeEnd)); | |
clearTimeout(j.type_timeout); | |
j.type_timeout = setTimeout(j.do_filter, m) | |
}); | |
return this | |
} | |
}(jQuery)); | |
jQuery(function() { | |
jQuery(".swiftfilter").each(function() { | |
jQuery(this).swiftfilter() | |
}) | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment