filter.js - jscancer - Javascript crap (relatively small)
HTML git clone git://git.codemadness.org/jscancer
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
filter.js (2918B)
---
1 var sliders = document.getElementsByClassName("filterslider");
2 for (var i = 0; i < sliders.length; i++) {
3 var slider = sliders[i];
4 var fromel = document.getElementById(slider.getAttribute("data-from") || "");
5 var toel = document.getElementById(slider.getAttribute("data-to") || "");
6 if (fromel === null || toel === null)
7 continue;
8
9 // datalist: ticks and for snapping to value.
10 var datalistel = null;
11 var datalist = fromel.getAttribute("list") || "";
12 if (datalist !== "") {
13 datalistel = document.getElementById(datalist);
14 if (datalistel === null)
15 continue;
16 }
17
18 // decimals format based on datalist values.
19 var decimals = slider.getAttribute("data-decimals") || "0";
20 if (decimals === "datalist" && datalistel !== null) {
21 var maxdecimals = 0;
22 var countdecimals = function(v) {
23 if (Math.floor(v) !== v) {
24 var vs = v.toString().split(".");
25 return vs.length > 1 ? (vs[1].length || 0) : 0;
26 }
27 return 0;
28 };
29 var options = datalistel.options || [];
30 for (var j = 0; j < options.length; j++) {
31 var d = countdecimals(options[j].value);
32 if (d > maxdecimals)
33 maxdecimals = d;
34 }
35 decimals = maxdecimals;
36 } else {
37 decimals = parseInt(decimals) || 0;
38 }
39
40 var cfg = {
41 from: fromel,
42 to: toel,
43 labelfrom: document.getElementById(slider.getAttribute("data-label-from") || ""),
44 labelto: document.getElementById(slider.getAttribute("data-label-to") || ""),
45 decimals: decimals < 0 ? 0 : decimals
46 };
47
48 cfg.labelfn = (function(dec) {
49 return function(v) {
50 return Number(v).toFixed(dec);
51 };
52 })(cfg.decimals);
53
54 // from
55 cfg.inputrangefrom = (function(c) {
56 return function(e) {
57 if (parseFloat(c.from.value) > parseFloat(c.to.value))
58 c.from.value = c.to.value;
59 if (c.labelfrom !== null)
60 c.labelfrom[c.labelfrom.tagName === "INPUT" ? "value" : "innerText"] = c.labelfn(c.from.value);
61 };
62 })(cfg);
63 fromel.addEventListener("input", cfg.inputrangefrom);
64
65 // to
66 cfg.inputrangeto = (function(c) {
67 return function(e) {
68 if (parseFloat(c.to.value) < parseFloat(c.from.value))
69 c.to.value = c.from.value;
70 if (c.labelto !== null)
71 c.labelto[c.labelto.tagName === "INPUT" ? "value" : "innerText"] = c.labelfn(c.to.value);
72 };
73 })(cfg);
74 toel.addEventListener("input", cfg.inputrangeto);
75
76 // allow manual input if label is input element.
77 if (cfg.labelfrom != null && cfg.labelfrom.tagName === "INPUT") {
78 cfg.inputnumberfrom = (function(c) {
79 return function() {
80 this.max = c.to.value;
81 c.from.value = this.value;
82 };
83 })(cfg);
84 cfg.labelfrom.addEventListener("input", cfg.inputnumberfrom);
85 }
86 if (cfg.labelto != null && cfg.labelto.tagName === "INPUT") {
87 cfg.inputnumberto = (function(c) {
88 return function() {
89 this.min = c.from.value;
90 c.to.value = this.value;
91 };
92 })(cfg);
93 cfg.labelto.addEventListener("input", cfg.inputnumberto);
94 }
95
96 // call on init.
97 cfg.inputrangefrom();
98 cfg.inputrangeto();
99