URI:
       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