forked from brunjo/rowGrid.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.row-grid.min.js
5 lines (5 loc) · 2 KB
/
jquery.row-grid.min.js
1
2
3
4
5
(function(k){function t(d,b,f){var l=0,e=[];f=jQuery.makeArray(f||d.querySelectorAll(b.itemSelector));var p=f.length;d=d.clientWidth-parseFloat(k(d).css("padding-left"))-parseFloat(k(d).css("padding-right"));for(var m=[],c,g,n,a=0;a<p;++a)(c=f[a].getElementsByTagName("img")[0])?((g=parseInt(c.getAttribute("width")))||c.setAttribute("width",g=c.offsetWidth),(n=parseInt(c.getAttribute("height")))||c.setAttribute("height",n=c.offsetHeight),m[a]={width:g,height:n}):(f.splice(a,1),--a,--p);p=f.length;
for(c=0;c<p;++c){f[c].classList?(f[c].classList.remove(b.firstItemClass),f[c].classList.remove(b.lastRowClass)):f[c].className=f[c].className.replace(new RegExp("(^|\\b)"+b.firstItemClass+"|"+b.lastRowClass+"(\\b|$)","gi")," ");l+=m[c].width;e.push(f[c]);if(c===p-1)for(a=0;a<e.length;a++)0===a&&(e[a].className+=" "+b.lastRowClass),e[a].style.cssText="width: "+m[c+parseInt(a)-e.length+1].width+"px;height: "+m[c+parseInt(a)-e.length+1].height+"px;margin-right:"+(a<e.length-1?b.minMargin+"px":0);if(l+
b.maxMargin*(e.length-1)>d){g=l+b.maxMargin*(e.length-1)-d;a=e.length;(b.maxMargin-b.minMargin)*(a-1)<g?(n=b.minMargin,g-=(b.maxMargin-b.minMargin)*(a-1)):(n=b.maxMargin-g/(a-1),g=0);for(var s,q=0,a=0;a<e.length;a++){s=e[a];var r=m[c+parseInt(a)-e.length+1].width,h=r-r/l*g,r=Math.round(m[c+parseInt(a)-e.length+1].height*(h/r));.5<=q+1-h%1?(q-=h%1,h=Math.floor(h)):(q+=1-h%1,h=Math.ceil(h));s.style.cssText="width: "+h+"px;height: "+r+"px;margin-right: "+(a<e.length-1?n:0)+"px";0===a&&(s.className+=
" "+b.firstItemClass)}e=[];l=0}}}k.fn.rowGrid=function(d){return this.each(function(){$this=k(this);if("appended"===d){d=$this.data("grid-options");var b=$this.children("."+d.lastRowClass),b=b.nextAll(d.itemSelector).add(b);t(this,d,b)}else if(d=k.extend({},k.fn.rowGrid.defaults,d),$this.data("grid-options",d),t(this,d),d.resize)k(window).on("resize.rowGrid",{container:this},function(b){t(b.data.container,d)})})};k.fn.rowGrid.defaults={minMargin:null,maxMargin:null,resize:!0,lastRowClass:"last-row",
firstItemClass:null}})(jQuery);