forked from NeXTs/Clusterize.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclusterize.min.js
12 lines (11 loc) · 4.13 KB
/
clusterize.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/*! Clusterize.js - v0.4.2 - 2015-05-03
* http://NeXTs.github.com/Clusterize.js/
* Copyright (c) 2015 Denis Lukov; Licensed MIT */
;(function(g,e){"undefined"!=typeof module?module.exports=e():"function"==typeof define&&"object"==typeof define.amd?define(e):this[g]=e()})("Clusterize",function(){var g=function(){for(var b=3,a=document.createElement("b"),c=a.all||[];a.innerHTML="\x3c!--[if gt IE "+ ++b+"]><i><![endif]--\x3e",c[0];);return 4<b?b:document.documentMode}(),e=function(b){if(!(this instanceof e))return new e(b);var a=this,c={item_height:0,block_height:0,rows_in_block:50,rows_in_cluster:0,cluster_height:0,blocks_in_cluster:4,
tag:null,content_tag:null,show_no_data_row:!0,no_data_class:"clusterize-no-data",no_data_text:"No data",keep_parity:!0,verify_change:!1};a.options={};"rows_in_block blocks_in_cluster verify_change show_no_data_row no_data_class no_data_text keep_parity tag".split(" ").forEach(function(h){a.options[h]="undefined"!=typeof b[h]&&null!=b[h]?b[h]:c[h]});["scroll","content"].forEach(function(c){a[c+"Elem"]=b[c+"Id"]?document.getElementById(b[c+"Id"]):b[c+"Elem"];if(!a[c+"Elem"])throw Error("Error! Could not find "+
c+" element");});var d=b.rows||[],f={data:""},g=a.scrollElem.scrollTop;a.exploreEnvironment(d);a.insertToDOM(d,f);a.scrollElem.scrollTop=g;var l=!1,k=function(){l!=(l=a.getClusterNum())&&a.insertToDOM(d,f)};a.scrollElem.addEventListener("scroll",k);a.destroy=function(b){a.scrollElem.removeEventListener("scroll",k);a.html(b?a.generateEmptyRow().join(""):d.join(""))};a.update=function(b){d=a.isArray(b)?b:[];b=a.scrollElem.scrollTop;a.insertToDOM(d,f);a.scrollElem.scrollTop=b};a.append=function(b){b=
a.isArray(b)?b:[];b.length&&(d=d.concat(b),a.insertToDOM(d,f))};a.clear=function(){a.update([])};a.getRowsAmount=function(){return d.length}};e.prototype={constructor:e,exploreEnvironment:function(b){var a=this.options;a.content_tag=this.contentElem.tagName.toLowerCase();if(!a.item_height||!a.tag){if(!b.length)return;g&&9>=g&&(a.tag=b[0].split("<")[1].split(" ")[0].split(">")[0]);this.html(b[0]+b[0]+b[0]);b=this.contentElem.children[1];a.tag||(a.tag=b.tagName.toLowerCase());a.item_height=b.offsetHeight}a.block_height=
a.item_height*a.rows_in_block;a.rows_in_cluster=a.blocks_in_cluster*a.rows_in_block;a.cluster_height=a.blocks_in_cluster*a.block_height},getClusterNum:function(){var b=this.options;return Math.floor(this.scrollElem.scrollTop/(b.cluster_height-b.block_height))},generateEmptyRow:function(){var b=this.options;if(!b.tag||!b.show_no_data_row)return[];var a=document.createElement(b.tag),c=document.createTextNode(b.no_data_text);a.className=b.no_data_class;if("tr"==b.tag){var d=document.createElement("td");
d.appendChild(c)}a.appendChild(d||c);return[a.outerHTML]},generate:function(b,a){var c=this.options,d=b.length;if(d<c.rows_in_block)return{rows_above:0,rows:d?b:this.generateEmptyRow()};c.cluster_height||this.exploreEnvironment(b);var f=a*c.rows_in_cluster-c.rows_in_block*a,f=0<f?f:0,e=f+c.rows_in_cluster,g=f*c.item_height,d=(d-e)*c.item_height,k=[],h=f;0<g?(c.keep_parity&&k.push(this.renderExtraTag("keep-parity")),k.push(this.renderExtraTag("top-space",g))):h++;for(c=f;c<e;c++)b[c]&&k.push(b[c]);
0<d&&k.push(this.renderExtraTag("bottom-space",d));return{rows_above:h,rows:k}},renderExtraTag:function(b,a){var c=document.createElement(this.options.tag);c.className=["clusterize-extra-row","clusterize-"+b].join(" ");a&&(c.style.height=a+"px");return c.outerHTML},insertToDOM:function(b,a){var c=this.generate(b,this.getClusterNum()),d=c.rows.join("");if(!this.options.verify_change||this.options.verify_change&&this.dataChanged(d,a))this.html(d),"ol"==this.options.content_tag&&this.contentElem.setAttribute("start",
c.rows_above)},html:function(b){var a=this.contentElem;if(g&&9>=g&&"tr"==this.options.tag){var c=document.createElement("div");for(c.innerHTML="<table><tbody>"+b+"</tbody></table>";b=a.lastChild;)a.removeChild(b);for(c=Array.prototype.slice.call(c.firstChild.firstChild.childNodes);c.length;)a.appendChild(c.shift())}else a.innerHTML=b},dataChanged:function(b,a){var c=JSON.stringify(b);return c!==a.data&&(a.data=c)},isArray:function(b){return"[object Array]"===Object.prototype.toString.call(b)}};return e});