From ac99243c385f24e98a38cfabf46242bc53be50b6 Mon Sep 17 00:00:00 2001 From: Dan Blaisdell Date: Wed, 17 Dec 2014 07:40:56 -0800 Subject: [PATCH] fix fixed numeric rowHeight, increment version --- bower.json | 2 +- dist/angular-gridster.min.css | 2 +- dist/angular-gridster.min.js | 4 ++-- package.json | 2 +- src/angular-gridster.js | 9 ++++----- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bower.json b/bower.json index 5253736d..f70289dc 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-gridster", - "version": "0.11.0", + "version": "0.11.1", "main": ["src/angular-gridster.js", "dist/angular-gridster.min.css"], "dependencies": { "angular": ">= 1.2.0", diff --git a/dist/angular-gridster.min.css b/dist/angular-gridster.min.css index e3cd5312..c769f289 100644 --- a/dist/angular-gridster.min.css +++ b/dist/angular-gridster.min.css @@ -1 +1 @@ -.gridster{position:relative;margin:auto;height:0}.gridster-content>ul{margin:0;list-style:none;padding:0}.gridster-item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;list-style:none;z-index:2;position:absolute;display:none}.gridster-loaded{-webkit-transition:height .3s;-moz-transition:height .3s;-o-transition:height .3s;transition:height .3s}.gridster-loaded .gridster-item{display:block;position:absolute;-webkit-transition:opacity .3s, left .3s, top .3s, width .3s, height .3s;-moz-transition:opacity .3s, left .3s, top .3s, width .3s, height .3s;-o-transition:opacity .3s, left .3s, top .3s, width .3s, height .3s;transition:opacity .3s, left .3s, top .3s, width .3s, height .3s}.gridster-mobile{height:auto !important}.gridster-mobile .gridster-item{height:auto;position:static;float:none}.gridster-preview-holder{display:none;z-index:1;position:absolute;background-color:#ddd;border-color:#fff;opacity:0.2}.gridster-item.gridster-item-moving,.gridster-item.gridster-preview-holder{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.gridster-item.ng-leave.ng-leave-active{opacity:0}.gridster-item.ng-enter{opacity:1}.gridster-item-moving{z-index:3}.gridster-item-resizable-handler{position:absolute;font-size:1px;display:block}.handle-se{cursor:se-resize;right:1px;bottom:1px}.handle-ne{cursor:ne-resize;width:12px;height:12px;right:1px;top:1px}.handle-nw{cursor:nw-resize;width:12px;height:12px;left:1px;top:1px}.handle-sw{cursor:sw-resize;width:12px;height:12px;left:1px;bottom:1px}.handle-e{cursor:e-resize;width:12px;bottom:0;right:1px;top:0}.handle-s{cursor:s-resize;height:12px;right:0;bottom:1px;left:0}.handle-n{cursor:n-resize;height:12px;right:0;top:1px;left:0}.handle-w{cursor:w-resize;width:12px;left:1px;top:0;bottom:0}.gridster .gridster-item:hover .gridster-box{border:1.5px solid #B3B2B3}.gridster .gridster-item:hover .handle-se{border-style:solid;border-width:0 0 13px 13px;border-color:transparent transparent #ccc} \ No newline at end of file +.gridster{position:relative;margin:auto;height:0}.gridster-content>ul{margin:0;list-style:none;padding:0}.gridster-item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;list-style:none;z-index:2;position:absolute;display:none}.gridster-loaded{-webkit-transition:height .3s;-moz-transition:height .3s;-o-transition:height .3s;transition:height .3s}.gridster-loaded .gridster-item{display:block;position:absolute;-webkit-transition:opacity .3s, left .3s, top .3s, width .3s, height .3s;-moz-transition:opacity .3s, left .3s, top .3s, width .3s, height .3s;-o-transition:opacity .3s, left .3s, top .3s, width .3s, height .3s;transition:opacity .3s, left .3s, top .3s, width .3s, height .3s}.gridster-mobile{height:auto !important}.gridster-mobile .gridster-item{height:auto;position:static;float:none}.gridster-preview-holder{display:none;z-index:1;position:absolute;background-color:#ddd;border-color:#fff;opacity:0.2}.gridster-item.gridster-item-moving,.gridster-item.gridster-preview-holder{-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.gridster-item.ng-leave.ng-leave-active{opacity:0}.gridster-item.ng-enter{opacity:1}.gridster-item-moving{z-index:3}.gridster-item-resizable-handler{position:absolute;font-size:1px;display:block}.handle-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.handle-ne{cursor:ne-resize;width:12px;height:12px;right:1px;top:1px}.handle-nw{cursor:nw-resize;width:12px;height:12px;left:1px;top:1px}.handle-sw{cursor:sw-resize;width:12px;height:12px;left:1px;bottom:1px}.handle-e{cursor:e-resize;width:12px;bottom:0;right:1px;top:0}.handle-s{cursor:s-resize;height:12px;right:0;bottom:1px;left:0}.handle-n{cursor:n-resize;height:12px;right:0;top:1px;left:0}.handle-w{cursor:w-resize;width:12px;left:1px;top:0;bottom:0}.gridster .gridster-item:hover .gridster-box{border:1.5px solid #B3B2B3}.gridster .gridster-item:hover .handle-se{border-style:solid;border-width:0 0 13px 13px;border-color:transparent transparent #ccc} \ No newline at end of file diff --git a/dist/angular-gridster.min.js b/dist/angular-gridster.min.js index 5e00ed5e..a36e96f6 100644 --- a/dist/angular-gridster.min.js +++ b/dist/angular-gridster.min.js @@ -2,7 +2,7 @@ * angular-gridster * http://manifestwebdesign.github.io/angular-gridster * - * @version: 0.11.0 + * @version: 0.11.1 * @license: MIT */ -!function(a){"use strict";a.module("gridster",[]).constant("gridsterConfig",{columns:6,pushing:!0,floating:!0,swapping:!1,width:"auto",colWidth:"auto",rowHeight:"match",margins:[10,10],outerMargin:!0,isMobile:!1,mobileBreakPoint:600,mobileModeEnabled:!0,minColumns:1,minRows:1,maxRows:100,defaultSizeX:2,defaultSizeY:1,minSizeX:1,maxSizeX:null,minSizeY:1,maxSizeY:null,saveGridItemCalculatedHeightInMobile:!1,resizable:{enabled:!0,handles:["s","e","n","w","se","ne","sw","nw"]},draggable:{enabled:!0,scrollSensitivity:20,scrollSpeed:20}}).controller("GridsterCtrl",["gridsterConfig",function(b){a.extend(this,b),this.resizable=a.extend({},b.resizable||{}),this.draggable=a.extend({},b.draggable||{}),this.grid=[],this.destroy=function(){this.grid&&(this.grid.length=0,this.grid=null)},this.setOptions=function(b){if(b)if(b=a.extend({},b),b.draggable&&(a.extend(this.draggable,b.draggable),delete b.draggable),b.resizable&&(a.extend(this.resizable,b.resizable),delete b.resizable),a.extend(this,b),this.margins&&2===this.margins.length)for(var c=0,d=this.margins.length;d>c;++c)this.margins[c]=parseInt(this.margins[c],10),isNaN(this.margins[c])&&(this.margins[c]=0);else this.margins=[0,0]},this.canItemOccupy=function(a,b,c){return b>-1&&c>-1&&a.sizeX+c<=this.columns&&a.sizeY+b<=this.maxRows},this.autoSetItemPosition=function(a){for(var b=0;bg;++g)for(var h=0;c>h;++h){var i=this.getItem(a+g,b+h,e);!i||e&&-1!==e.indexOf(i)||-1!==f.indexOf(i)||f.push(i)}return f},this.removeItem=function(a){for(var b=0,c=this.grid.length;c>b;++b){var d=this.grid[b];if(d){var e=d.indexOf(a);if(-1!==e){d[e]=null;break}}}this.floatItemsUp(),this.updateHeight()},this.getItem=function(a,b,c){!c||c instanceof Array||(c=[c]);for(var d=1;a>-1;){for(var e=1,f=b;f>-1;){var g=this.grid[a];if(g){var h=g[f];if(h&&(!c||-1===c.indexOf(h))&&h.sizeX>=e&&h.sizeY>=d)return h}++e,--f}--a,++d}return null},this.putItems=function(a){for(var b=0,c=a.length;c>b;++b)this.putItem(a[b])},this.putItem=function(a,b,c,d){if(("undefined"==typeof b||null===b)&&(b=a.row,c=a.col,"undefined"==typeof b||null===b))return void this.autoSetItemPosition(a);if(this.canItemOccupy(a,b,c)||(c=Math.min(this.columns-a.sizeX,Math.max(0,c)),b=Math.min(this.maxRows-a.sizeY,Math.max(0,b))),a&&null!==a.oldRow&&"undefined"!=typeof a.oldRow){if(a.oldRow===b&&a.oldColumn===c)return a.row=b,void(a.col=c);var e=this.grid[a.oldRow];e&&e[a.oldColumn]===a&&delete e[a.oldColumn]}a.oldRow=a.row=b,a.oldColumn=a.col=c,this.moveOverlappingItems(a,d),this.grid[b]||(this.grid[b]=[]),this.grid[b][c]=a},this.swapItems=function(a,b){this.grid[a.row][a.col]=b,this.grid[b.row][b.col]=a;var c=a.row,d=a.col;a.row=b.row,a.col=b.col,b.row=c,b.col=d},this.moveOverlappingItems=function(a,b){b?-1===b.indexOf(a)&&(b=b.slice(0),b.push(a)):b=[a];var c=this.getItems(a.row,a.col,a.sizeX,a.sizeY,b);this.moveItemsDown(c,a.row+a.sizeY,b)},this.moveItemsDown=function(a,b,c){if(a&&0!==a.length){a.sort(function(a,b){return a.row-b.row}),c=c?c.slice(0):[];var d,e,f,g={};for(e=0,f=a.length;f>e;++e){d=a[e];var h=g[d.col];("undefined"==typeof h||d.rowe;++e){d=a[e];var i=b-g[d.col];this.moveItemDown(d,d.row+i,c),c.push(d)}}},this.moveItemDown=function(a,b,c){if(!(a.row>=b)){for(;a.rowa;++a){var c=this.grid[a];if(c)for(var d=0,e=c.length;e>d;++d)c[d]&&this.floatItemUp(c[d])}},this.floatItemUp=function(a){if(this.floating!==!1){for(var b=a.col,c=a.sizeY,d=a.sizeX,e=null,f=null,g=a.row-1;g>-1;){var h=this.getItems(g,b,d,c,a);if(0!==h.length)break;e=g,f=b,--g}null!==e&&this.putItem(a,e,f)}},this.updateHeight=function(a){var b=this.minRows;a=a||0;for(var c=this.grid.length;c>=0;--c){var d=this.grid[c];if(d)for(var e=0,f=d.length;f>e;++e)d[e]&&(b=Math.max(b,c+a+d[e].sizeY))}this.gridHeight=this.maxRows-b>0?Math.min(this.maxRows,b):Math.max(this.maxRows,b)},this.pixelsToRows=function(a,b){return b===!0?Math.ceil(a/this.curRowHeight):b===!1?Math.floor(a/this.curRowHeight):Math.round(a/this.curRowHeight)},this.pixelsToColumns=function(a,b){return b===!0?Math.ceil(a/this.curColWidth):b===!1?Math.floor(a/this.curColWidth):Math.round(a/this.curColWidth)}}]).directive("gridster",["$timeout","$rootScope","$window",function(b,c,d){return{restrict:"EAC",transclude:!0,replace:!0,template:'
',controller:"GridsterCtrl",controllerAs:"gridster",scope:{config:"=?gridster"},compile:function(){return function(e,f,g,h){function i(){var a=f[0].offsetWidth||parseInt(f.css("width"),10);a&&a!==m&&!h.movingItem&&(m=a,h.loaded&&f.removeClass("gridster-loaded"),k(),h.loaded&&f.addClass("gridster-loaded"),e.$parent.$broadcast("gridster-resized",[a,f.offsetHeight]))}function j(){i(),b(function(){e.$apply()})}h.loaded=!1,e.gridsterClass=function(){return{gridster:!0,"gridster-desktop":!h.isMobile,"gridster-mobile":h.isMobile,"gridster-loaded":h.loaded}},e.previewStyle=function(){return h.movingItem?{display:"block",height:h.movingItem.sizeY*h.curRowHeight-h.margins[0]+"px",width:h.movingItem.sizeX*h.curColWidth-h.margins[1]+"px",top:h.movingItem.row*h.curRowHeight+(h.outerMargin?h.margins[0]:0)+"px",left:h.movingItem.col*h.curColWidth+(h.outerMargin?h.margins[1]:0)+"px"}:{display:"none"}};var k=function(){h.setOptions(e.config),h.curWidth="auto"===h.width?f[0].offsetWidth||parseInt(f.css("width"),10):h.width,h.curColWidth="auto"===h.colWidth?(h.curWidth+(h.outerMargin?-h.margins[1]:h.margins[1]))/h.columns:h.colWidth,"string"==typeof h.rowHeight&&(h.curRowHeight="match"===h.rowHeight?Math.round(h.curColWidth):-1!==h.rowHeight.indexOf("*")?Math.round(h.curColWidth*h.rowHeight.replace("*","").replace(" ","")):-1!==h.rowHeight.indexOf("/")?Math.round(h.curColWidth/h.rowHeight.replace("/","").replace(" ","")):h.rowHeight),h.isMobile=h.mobileModeEnabled&&h.curWidth<=h.mobileBreakPoint;for(var a=0,b=h.grid.length;b>a;++a){var c=h.grid[a];if(c)for(var d=0,g=c.length;g>d;++d)if(c[d]){var i=c[d];i.setElementPosition(),i.setElementSizeY(),i.setElementSizeX()}}l()};e.$watch("config",k,!0),e.$watch("config.draggable",function(){c.$broadcast("gridster-draggable-changed")},!0),e.$watch("config.resizable",function(){c.$broadcast("gridster-resizable-changed")},!0);var l=function(){f.css("height",h.gridHeight*h.curRowHeight+(h.outerMargin?h.margins[0]:-h.margins[0])+"px")};e.$watch("gridster.gridHeight",l);var m=f[0].offsetWidth||parseInt(f.css("width"),10);"function"==typeof f.resize&&f.resize(j);var n=a.element(d);n.on("resize",j),e.$watch(function(){return f[0].offsetWidth||parseInt(f.css("width"),10)},i),e.$on("$destroy",function(){h.destroy(),n.off("resize",j)}),b(function(){e.$watch("gridster.floating",function(){h.floatItemsUp()}),h.loaded=!0},100)}}}}]).controller("GridsterItemCtrl",function(){this.$element=null,this.gridster=null,this.row=null,this.col=null,this.sizeX=null,this.sizeY=null,this.minSizeX=0,this.minSizeY=0,this.maxSizeX=null,this.maxSizeY=null,this.init=function(a,b){this.$element=a,this.gridster=b,this.sizeX=b.defaultSizeX,this.sizeY=b.defaultSizeY},this.destroy=function(){this.gridster=null,this.$element=null},this.toJSON=function(){return{row:this.row,col:this.col,sizeY:this.sizeY,sizeX:this.sizeX}},this.isMoving=function(){return this.gridster.movingItem===this},this.setPosition=function(a,b){this.gridster.putItem(this,a,b),this.gridster.loaded&&this.gridster.floatItemsUp(),this.gridster.updateHeight(this.isMoving()?this.sizeY:0),this.isMoving()||this.setElementPosition()},this.setSize=function(a,b){a=a.toUpperCase();var c="size"+a,d="Size"+a;if(""!==b){b=parseInt(b,10),(isNaN(b)||0===b)&&(b=this.gridster["default"+d]);var e="X"===a?this.gridster.columns:this.gridster.maxRows;this["max"+d]&&(e=Math.min(this["max"+d],e)),this.gridster["max"+d]&&(e=Math.min(this.gridster["max"+d],e)),"X"===a&&this.cols?e-=this.cols:"Y"===a&&this.rows&&(e-=this.rows);var f="X"===a?this.gridster.minColumns:this.gridster.minRows;this["min"+d]&&(f=Math.max(this["min"+d],f)),this.gridster["min"+d]&&(f=Math.max(this.gridster["min"+d],f)),b=Math.max(Math.min(b,e),f);var g=!(this[c]===b&&this["old"+d]&&this["old"+d]===b);this["old"+d]=this[c]=b,this.isMoving()||this["setElement"+d](),g&&(this.gridster.moveOverlappingItems(this),this.gridster.loaded&&this.gridster.floatItemsUp(),this.gridster.updateHeight(this.isMoving()?this.sizeY:0))}},this.setSizeY=function(a){this.setSize("Y",a)},this.setSizeX=function(a){this.setSize("X",a)},this.setElementPosition=function(){this.$element.css(this.gridster.isMobile?{marginLeft:this.gridster.margins[0]+"px",marginRight:this.gridster.margins[0]+"px",marginTop:this.gridster.margins[1]+"px",marginBottom:this.gridster.margins[1]+"px",top:"",left:""}:{margin:0,top:this.row*this.gridster.curRowHeight+(this.gridster.outerMargin?this.gridster.margins[0]:0)+"px",left:this.col*this.gridster.curColWidth+(this.gridster.outerMargin?this.gridster.margins[1]:0)+"px"})},this.setElementSizeY=function(){this.gridster.isMobile&&!this.gridster.saveGridItemCalculatedHeightInMobile?this.$element.css("height",""):this.$element.css("height",this.sizeY*this.gridster.curRowHeight-this.gridster.margins[0]+"px")},this.setElementSizeX=function(){this.gridster.isMobile?this.$element.css("width",""):this.$element.css("width",this.sizeX*this.gridster.curColWidth-this.gridster.margins[1]+"px")}}).factory("GridsterDraggable",["$document","$timeout","$window",function(b,c,d){function e(e,f,g,h,i){function j(a){if(-1===F.indexOf(a.target.nodeName.toLowerCase())){switch(a.which){case 1:break;case 2:case 3:return}x=a.pageX,y=a.pageY,p=parseInt(e.css("left"),10),q=parseInt(e.css("top"),10),r=e[0].offsetWidth,s=e[0].offsetHeight,t=h.col,u=h.row,m(a),b.on("mousemove",k),b.on("mouseup",l),a.preventDefault(),a.stopPropagation()}}function k(a){var b=g.curWidth-1;v=a.pageX,w=a.pageY;var c=v-x+z,d=w-y+A;z=A=0,x=v,y=w;var f=c,h=d;D>p+f?(c=D-p,z=f-c):p+r+f>b&&(c=b-p-r,z=f-c),B>q+h?(d=B-q,A=h-d):q+s+h>C&&(d=C-q-s,A=h-d),p+=c,q+=d,e.css({top:q+"px",left:p+"px"}),n(a),a.stopPropagation(),a.preventDefault()}function l(a){b.off("mouseup",l),b.off("mousemove",k),z=A=0,o(a)}function m(a){e.addClass("gridster-item-moving"),g.movingItem=h,g.updateHeight(h.sizeY),f.$apply(function(){g.draggable&&g.draggable.start&&g.draggable.start(a,e,i)})}function n(a){var b=h.row,c=h.col,j=g.draggable&&g.draggable.drag,k=g.draggable.scrollSensitivity,l=g.draggable.scrollSpeed,m=g.pixelsToRows(q),n=g.pixelsToColumns(p),o=g.getItems(m,n,h.sizeX,h.sizeY,h),r=0!==o.length;if(g.swapping===!0&&r){var s=o[0],t=s.sizeX===h.sizeX&&s.sizeY===h.sizeY,u=s.row===m&&s.col===n;u&&t&&g.swapItems(h,s)}g.pushing===!1&&r||(h.row=m,h.col=n),a.pageY-E.body.scrollTop=0&&(E>r-g?(f=r-E,A=g-f):B>p+g&&(f=B-p,A=g-f),p+=f,r-=f),u.indexOf("s")>=0&&(E>r+g?(f=E-r,A=g-f):p+r+g>C&&(f=C-p-r,A=g-f),r+=f),u.indexOf("w")>=0&&(F>q-h?(d=q-F,z=h-d):D>o+h&&(d=D-o,z=h-d),o+=d,q-=d),u.indexOf("e")>=0&&(F>q+h?(d=F-q,z=h-d):o+q+h>b&&(d=b-o-q,z=h-d),q+=d),c.css({top:p+"px",left:o+"px",width:q+"px",height:r+"px"}),m(a),a.preventDefault(),a.stopPropagation()}function l(a){b.off("mouseup",l),b.off("mousemove",k),z=A=0,n(a)}function m(a){var b=f.row,h=f.col,i=f.sizeX,j=f.sizeY,k=e.resizable&&e.resizable.resize,l=e.pixelsToRows(p,!1),m=e.pixelsToColumns(o,!1),n=e.pixelsToColumns(q,!0),s=e.pixelsToRows(r,!0);(e.pushing!==!1||0===e.getItems(l,m,n,s,f).length)&&(f.row=l,f.col=m,f.sizeX=n,f.sizeY=s);var t=f.row!==b||f.col!==h||f.sizeX!==i||f.sizeY!==j;(k||t)&&d.$apply(function(){k&&e.resizable.resize(a,c,g)})}function n(a){c.removeClass("gridster-item-moving"),e.movingItem=null,f.setPosition(f.row,f.col),f.setSizeY(f.sizeY),f.setSizeX(f.sizeX),d.$apply(function(){e.resizable&&e.resizable.stop&&e.resizable.stop(a,c,g)})}var o,p,q,r,s,t,u=h,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=9999,D=0,E=e.curRowHeight-e.margins[0],F=e.curColWidth-e.margins[1],G=null;this.enable=function(){G||(G=a.element('
'),c.append(G)),G.on("mousedown",i)},this.disable=function(){G&&(G.off("mousedown",i),G.remove(),G=null),b.off("mouseup",l),b.off("mousemove",k)},this.destroy=function(){this.disable()}}var i=[],j=e.resizable.handles;"string"==typeof j&&(j=e.resizable.handles.split(","));for(var k=!1,l=0,m=j.length;m>l;l++)i.push(new h(j[l]));this.enable=function(){if(!k){for(var a=0,b=i.length;b>a;a++)i[a].enable();k=!0}},this.disable=function(){if(k){for(var a=0,b=i.length;b>a;a++)i[a].disable();k=!1}},this.toggle=function(a){a?this.enable():this.disable()},this.destroy=function(){for(var a=0,b=i.length;b>a;a++)i[a].destroy()}}return c}]).directive("gridsterItem",["$parse","GridsterDraggable","GridsterResizable",function(a,b,c){return{restrict:"EA",controller:"GridsterItemCtrl",require:["^gridster","gridsterItem"],link:function(d,e,f,g){function h(){n.setPosition(n.row,n.col),q.row&&q.row.assign&&q.row.assign(d,n.row),q.col&&q.col.assign&&q.col.assign(d,n.col)}function i(){n.setSizeX(n.sizeX),q.sizeX&&q.sizeX.assign&&q.sizeX.assign(d,n.sizeX),n.setSizeY(n.sizeY),q.sizeY&&q.sizeY.assign&&q.sizeY.assign(d,n.sizeY)}function j(){var a=document.createElement("div"),b={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(var c in b)if(void 0!==a.style[c])return b[c]}var k,l=f.gridsterItem,m=g[0],n=g[1];if(l){var o=a(l);k=o(d)||{},!k&&o.assign&&(k={row:n.row,col:n.col,sizeX:n.sizeX,sizeY:n.sizeY,minSizeX:0,minSizeY:0,maxSizeX:null,maxSizeY:null},o.assign(d,k))}else k=f;n.init(e,m),e.addClass("gridster-item");for(var p=["minSizeX","maxSizeX","minSizeY","maxSizeY","sizeX","sizeY","row","col"],q={},r=function(b){var c;if("string"==typeof k[b])c=k[b];else if("string"==typeof k[b.toLowerCase()])c=k[b.toLowerCase()];else{if(!l)return;c=a(l+"."+b)}q[b]=a(c),d.$watch(c,function(a){a=parseInt(a,10),isNaN(a)||(n[b]=a)});var e=q[b](d);"number"==typeof e&&(n[b]=e)},s=0,t=p.length;t>s;++s)r(p[s]);d.$watch(function(){return n.row+","+n.col},h),d.$watch(function(){return n.sizeY+","+n.sizeX+"|"+n.minSizeX+","+n.maxSizeX+","+n.minSizeY+","+n.maxSizeY},i);var u=new b(e,d,m,n,k),v=new c(e,d,m,n,k);return d.$on("gridster-draggable-changed",function(){u.toggle(!m.isMobile&&m.draggable&&m.draggable.enabled)}),d.$on("gridster-resizable-changed",function(){v.toggle(!m.isMobile&&m.resizable&&m.resizable.enabled)}),d.$on("gridster-resized",function(){v.toggle(!m.isMobile&&m.resizable&&m.resizable.enabled)}),d.$watch(function(){return m.isMobile},function(){v.toggle(!m.isMobile&&m.resizable&&m.resizable.enabled),u.toggle(!m.isMobile&&m.draggable&&m.draggable.enabled)}),e.on(j(),function(){d.$apply(function(){d.$broadcast("gridster-item-transition-end")})}),d.$on("$destroy",function(){try{v.destroy(),u.destroy()}catch(a){}try{m.removeItem(n)}catch(a){}try{n.destroy()}catch(a){}})}}}])}(angular); \ No newline at end of file +!function(a){"use strict";a.module("gridster",[]).constant("gridsterConfig",{columns:6,pushing:!0,floating:!0,swapping:!1,width:"auto",colWidth:"auto",rowHeight:"match",margins:[10,10],outerMargin:!0,isMobile:!1,mobileBreakPoint:600,mobileModeEnabled:!0,minColumns:1,minRows:1,maxRows:100,defaultSizeX:2,defaultSizeY:1,minSizeX:1,maxSizeX:null,minSizeY:1,maxSizeY:null,saveGridItemCalculatedHeightInMobile:!1,resizable:{enabled:!0,handles:["s","e","n","w","se","ne","sw","nw"]},draggable:{enabled:!0,scrollSensitivity:20,scrollSpeed:20}}).controller("GridsterCtrl",["gridsterConfig",function(b){a.extend(this,b),this.resizable=a.extend({},b.resizable||{}),this.draggable=a.extend({},b.draggable||{}),this.grid=[],this.destroy=function(){this.grid&&(this.grid.length=0,this.grid=null)},this.setOptions=function(b){if(b)if(b=a.extend({},b),b.draggable&&(a.extend(this.draggable,b.draggable),delete b.draggable),b.resizable&&(a.extend(this.resizable,b.resizable),delete b.resizable),a.extend(this,b),this.margins&&2===this.margins.length)for(var c=0,d=this.margins.length;d>c;++c)this.margins[c]=parseInt(this.margins[c],10),isNaN(this.margins[c])&&(this.margins[c]=0);else this.margins=[0,0]},this.canItemOccupy=function(a,b,c){return b>-1&&c>-1&&a.sizeX+c<=this.columns&&a.sizeY+b<=this.maxRows},this.autoSetItemPosition=function(a){for(var b=0;bg;++g)for(var h=0;c>h;++h){var i=this.getItem(a+g,b+h,e);!i||e&&-1!==e.indexOf(i)||-1!==f.indexOf(i)||f.push(i)}return f},this.removeItem=function(a){for(var b=0,c=this.grid.length;c>b;++b){var d=this.grid[b];if(d){var e=d.indexOf(a);if(-1!==e){d[e]=null;break}}}this.floatItemsUp(),this.updateHeight()},this.getItem=function(a,b,c){!c||c instanceof Array||(c=[c]);for(var d=1;a>-1;){for(var e=1,f=b;f>-1;){var g=this.grid[a];if(g){var h=g[f];if(h&&(!c||-1===c.indexOf(h))&&h.sizeX>=e&&h.sizeY>=d)return h}++e,--f}--a,++d}return null},this.putItems=function(a){for(var b=0,c=a.length;c>b;++b)this.putItem(a[b])},this.putItem=function(a,b,c,d){if(("undefined"==typeof b||null===b)&&(b=a.row,c=a.col,"undefined"==typeof b||null===b))return void this.autoSetItemPosition(a);if(this.canItemOccupy(a,b,c)||(c=Math.min(this.columns-a.sizeX,Math.max(0,c)),b=Math.min(this.maxRows-a.sizeY,Math.max(0,b))),a&&null!==a.oldRow&&"undefined"!=typeof a.oldRow){if(a.oldRow===b&&a.oldColumn===c)return a.row=b,void(a.col=c);var e=this.grid[a.oldRow];e&&e[a.oldColumn]===a&&delete e[a.oldColumn]}a.oldRow=a.row=b,a.oldColumn=a.col=c,this.moveOverlappingItems(a,d),this.grid[b]||(this.grid[b]=[]),this.grid[b][c]=a},this.swapItems=function(a,b){this.grid[a.row][a.col]=b,this.grid[b.row][b.col]=a;var c=a.row,d=a.col;a.row=b.row,a.col=b.col,b.row=c,b.col=d},this.moveOverlappingItems=function(a,b){b?-1===b.indexOf(a)&&(b=b.slice(0),b.push(a)):b=[a];var c=this.getItems(a.row,a.col,a.sizeX,a.sizeY,b);this.moveItemsDown(c,a.row+a.sizeY,b)},this.moveItemsDown=function(a,b,c){if(a&&0!==a.length){a.sort(function(a,b){return a.row-b.row}),c=c?c.slice(0):[];var d,e,f,g={};for(e=0,f=a.length;f>e;++e){d=a[e];var h=g[d.col];("undefined"==typeof h||d.rowe;++e){d=a[e];var i=b-g[d.col];this.moveItemDown(d,d.row+i,c),c.push(d)}}},this.moveItemDown=function(a,b,c){if(!(a.row>=b)){for(;a.rowa;++a){var c=this.grid[a];if(c)for(var d=0,e=c.length;e>d;++d)c[d]&&this.floatItemUp(c[d])}},this.floatItemUp=function(a){if(this.floating!==!1){for(var b=a.col,c=a.sizeY,d=a.sizeX,e=null,f=null,g=a.row-1;g>-1;){var h=this.getItems(g,b,d,c,a);if(0!==h.length)break;e=g,f=b,--g}null!==e&&this.putItem(a,e,f)}},this.updateHeight=function(a){var b=this.minRows;a=a||0;for(var c=this.grid.length;c>=0;--c){var d=this.grid[c];if(d)for(var e=0,f=d.length;f>e;++e)d[e]&&(b=Math.max(b,c+a+d[e].sizeY))}this.gridHeight=this.maxRows-b>0?Math.min(this.maxRows,b):Math.max(this.maxRows,b)},this.pixelsToRows=function(a,b){return b===!0?Math.ceil(a/this.curRowHeight):b===!1?Math.floor(a/this.curRowHeight):Math.round(a/this.curRowHeight)},this.pixelsToColumns=function(a,b){return b===!0?Math.ceil(a/this.curColWidth):b===!1?Math.floor(a/this.curColWidth):Math.round(a/this.curColWidth)},this.unifiedInput=function(a,b,c,d){var e,f,g={},h=function(a){if(Object.keys)return Object.keys(a).length;var b,c=0;for(b in a)++c;return c},i=function(a){for(var b=0,c=0,d=a;null!=d;d=d.offsetParent)navigator.userAgent.match(/\bMSIE\b/)&&(!document.documentMode||document.documentMode<8)&&"relative"===d.currentStyle.position&&d.offsetParent&&"relative"===d.offsetParent.currentStyle.position&&d.offsetLeft===d.offsetParent.offsetLeft?c+=d.offsetTop:(b+=d.offsetLeft,c+=d.offsetTop);return{x:b,y:c}},j=i(a),k=function(e){if("mousemove"!==e.type||0!==h(g)){for(var f=!0,m=e.changedTouches?e.changedTouches:[e],n=0;n
',controller:"GridsterCtrl",controllerAs:"gridster",scope:{config:"=?gridster"},compile:function(){return function(e,f,g,h){function i(){var a=f[0].offsetWidth||parseInt(f.css("width"),10);a&&a!==m&&!h.movingItem&&(m=a,h.loaded&&f.removeClass("gridster-loaded"),k(),h.loaded&&f.addClass("gridster-loaded"),e.$parent.$broadcast("gridster-resized",[a,f.offsetHeight]))}function j(){i(),b(function(){e.$apply()})}h.loaded=!1,e.gridsterClass=function(){return{gridster:!0,"gridster-desktop":!h.isMobile,"gridster-mobile":h.isMobile,"gridster-loaded":h.loaded}},e.previewStyle=function(){return h.movingItem?{display:"block",height:h.movingItem.sizeY*h.curRowHeight-h.margins[0]+"px",width:h.movingItem.sizeX*h.curColWidth-h.margins[1]+"px",top:h.movingItem.row*h.curRowHeight+(h.outerMargin?h.margins[0]:0)+"px",left:h.movingItem.col*h.curColWidth+(h.outerMargin?h.margins[1]:0)+"px"}:{display:"none"}};var k=function(){h.setOptions(e.config),h.curWidth="auto"===h.width?f[0].offsetWidth||parseInt(f.css("width"),10):h.width,h.curColWidth="auto"===h.colWidth?(h.curWidth+(h.outerMargin?-h.margins[1]:h.margins[1]))/h.columns:h.colWidth,h.curRowHeight=h.rowHeight,"string"==typeof h.rowHeight&&("match"===h.rowHeight?h.curRowHeight=Math.round(h.curColWidth):-1!==h.rowHeight.indexOf("*")?h.curRowHeight=Math.round(h.curColWidth*h.rowHeight.replace("*","").replace(" ","")):-1!==h.rowHeight.indexOf("/")&&(h.curRowHeight=Math.round(h.curColWidth/h.rowHeight.replace("/","").replace(" ","")))),h.isMobile=h.mobileModeEnabled&&h.curWidth<=h.mobileBreakPoint;for(var a=0,b=h.grid.length;b>a;++a){var c=h.grid[a];if(c)for(var d=0,g=c.length;g>d;++d)if(c[d]){var i=c[d];i.setElementPosition(),i.setElementSizeY(),i.setElementSizeX()}}l()};e.$watch("config",k,!0),e.$watch("config.draggable",function(){c.$broadcast("gridster-draggable-changed")},!0),e.$watch("config.resizable",function(){c.$broadcast("gridster-resizable-changed")},!0);var l=function(){f.css("height",h.gridHeight*h.curRowHeight+(h.outerMargin?h.margins[0]:-h.margins[0])+"px")};e.$watch("gridster.gridHeight",l);var m=f[0].offsetWidth||parseInt(f.css("width"),10);"function"==typeof f.resize&&f.resize(j);var n=a.element(d);n.on("resize",j),e.$watch(function(){return f[0].offsetWidth||parseInt(f.css("width"),10)},i),e.$on("$destroy",function(){h.destroy(),n.off("resize",j)}),b(function(){e.$watch("gridster.floating",function(){h.floatItemsUp()}),h.loaded=!0},100)}}}}]).controller("GridsterItemCtrl",function(){this.$element=null,this.gridster=null,this.row=null,this.col=null,this.sizeX=null,this.sizeY=null,this.minSizeX=0,this.minSizeY=0,this.maxSizeX=null,this.maxSizeY=null,this.init=function(a,b){this.$element=a,this.gridster=b,this.sizeX=b.defaultSizeX,this.sizeY=b.defaultSizeY},this.destroy=function(){this.gridster=null,this.$element=null},this.toJSON=function(){return{row:this.row,col:this.col,sizeY:this.sizeY,sizeX:this.sizeX}},this.isMoving=function(){return this.gridster.movingItem===this},this.setPosition=function(a,b){this.gridster.putItem(this,a,b),this.gridster.loaded&&this.gridster.floatItemsUp(),this.gridster.updateHeight(this.isMoving()?this.sizeY:0),this.isMoving()||this.setElementPosition()},this.setSize=function(a,b){a=a.toUpperCase();var c="size"+a,d="Size"+a;if(""!==b){b=parseInt(b,10),(isNaN(b)||0===b)&&(b=this.gridster["default"+d]);var e="X"===a?this.gridster.columns:this.gridster.maxRows;this["max"+d]&&(e=Math.min(this["max"+d],e)),this.gridster["max"+d]&&(e=Math.min(this.gridster["max"+d],e)),"X"===a&&this.cols?e-=this.cols:"Y"===a&&this.rows&&(e-=this.rows);var f="X"===a?this.gridster.minColumns:this.gridster.minRows;this["min"+d]&&(f=Math.max(this["min"+d],f)),this.gridster["min"+d]&&(f=Math.max(this.gridster["min"+d],f)),b=Math.max(Math.min(b,e),f);var g=!(this[c]===b&&this["old"+d]&&this["old"+d]===b);this["old"+d]=this[c]=b,this.isMoving()||this["setElement"+d](),g&&(this.gridster.moveOverlappingItems(this),this.gridster.loaded&&this.gridster.floatItemsUp(),this.gridster.updateHeight(this.isMoving()?this.sizeY:0))}},this.setSizeY=function(a){this.setSize("Y",a)},this.setSizeX=function(a){this.setSize("X",a)},this.setElementPosition=function(){this.$element.css(this.gridster.isMobile?{marginLeft:this.gridster.margins[0]+"px",marginRight:this.gridster.margins[0]+"px",marginTop:this.gridster.margins[1]+"px",marginBottom:this.gridster.margins[1]+"px",top:"",left:""}:{margin:0,top:this.row*this.gridster.curRowHeight+(this.gridster.outerMargin?this.gridster.margins[0]:0)+"px",left:this.col*this.gridster.curColWidth+(this.gridster.outerMargin?this.gridster.margins[1]:0)+"px"})},this.setElementSizeY=function(){this.gridster.isMobile&&!this.gridster.saveGridItemCalculatedHeightInMobile?this.$element.css("height",""):this.$element.css("height",this.sizeY*this.gridster.curRowHeight-this.gridster.margins[0]+"px")},this.setElementSizeX=function(){this.gridster.isMobile?this.$element.css("width",""):this.$element.css("width",this.sizeX*this.gridster.curColWidth-this.gridster.margins[1]+"px")}}).factory("GridsterDraggable",["$document","$timeout","$window",function(b,c,d){function e(e,f,g,h,i){function j(b){if(-1!==G.indexOf(b.target.nodeName.toLowerCase()))return!1;if(a.element(b.target).hasClass("gridster-item-resizable-handler"))return!1;switch(b.which){case 1:break;case 2:case 3:return}return y=b.pageX,z=b.pageY,p=parseInt(e.css("left"),10),q=parseInt(e.css("top"),10),r=e[0].offsetWidth,s=e[0].offsetHeight,t=h.col,u=h.row,m(b),!0}function k(a){if(!e.hasClass("gridster-item-moving")||e.hasClass("gridster-item-resizing"))return!1;var b=g.curWidth-1;w=a.pageX,x=a.pageY;var c=w-y+A,d=x-z+B;A=B=0,y=w,z=x;var f=c,h=d;return E>p+f?(c=E-p,A=f-c):p+r+f>b&&(c=b-p-r,A=f-c),C>q+h?(d=C-q,B=h-d):q+s+h>D&&(d=D-q-s,B=h-d),p+=c,q+=d,e.css({top:q+"px",left:p+"px"}),n(a),!0}function l(a){return!e.hasClass("gridster-item-moving")||e.hasClass("gridster-item-resizing")?!1:(A=B=0,o(a),!0)}function m(a){e.addClass("gridster-item-moving"),g.movingItem=h,g.updateHeight(h.sizeY),f.$apply(function(){g.draggable&&g.draggable.start&&g.draggable.start(a,e,i)})}function n(a){var b=h.row,c=h.col,j=g.draggable&&g.draggable.drag,k=g.draggable.scrollSensitivity,l=g.draggable.scrollSpeed,m=g.pixelsToRows(q),n=g.pixelsToColumns(p),o=g.getItems(m,n,h.sizeX,h.sizeY,h),r=0!==o.length;if(g.swapping===!0&&r){var s=o[0],t=s.sizeX===h.sizeX&&s.sizeY===h.sizeY,u=s.row===m&&s.col===n;u&&t&&g.swapItems(h,s)}g.pushing===!1&&r||(h.row=m,h.col=n),a.pageY-F.body.scrollTop=0&&(E>q-g?(f=q-E,A=g-f):B>o+g&&(f=B-o,A=g-f),o+=f,q-=f),u.indexOf("s")>=0&&(E>q+g?(f=E-q,A=g-f):o+q+g>C&&(f=C-o-q,A=g-f),q+=f),u.indexOf("w")>=0&&(F>p-h?(e=p-F,z=h-e):D>n+h&&(e=D-n,z=h-e),n+=e,p-=e),u.indexOf("e")>=0&&(F>p+h?(e=F-p,z=h-e):n+p+h>c&&(e=c-n-p,z=h-e),p+=e),b.css({top:o+"px",left:n+"px",width:p+"px",height:q+"px"}),l(a),!0}function k(a){return z=A=0,m(a),!0}function l(a){var g=e.row,h=e.col,i=e.sizeX,j=e.sizeY,k=d.resizable&&d.resizable.resize,l=d.pixelsToRows(o,!1),m=d.pixelsToColumns(n,!1),r=d.pixelsToColumns(p,!0),s=d.pixelsToRows(q,!0);(d.pushing!==!1||0===d.getItems(l,m,r,s,e).length)&&(e.row=l,e.col=m,e.sizeX=r,e.sizeY=s);var t=e.row!==g||e.col!==h||e.sizeX!==i||e.sizeY!==j;(k||t)&&c.$apply(function(){k&&d.resizable.resize(a,b,f)})}function m(a){b.removeClass("gridster-item-moving"),b.removeClass("gridster-item-resizing"),d.movingItem=null,e.setPosition(e.row,e.col),e.setSizeY(e.sizeY),e.setSizeX(e.sizeX),c.$apply(function(){d.resizable&&d.resizable.stop&&d.resizable.stop(a,b,f)})}var n,o,p,q,r,s,t,u=g,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=9999,D=0,E=d.curRowHeight-d.margins[0],F=d.curColWidth-d.margins[1],G=null;this.enable=function(){G||(G=a.element('
'),b.append(G)),t=d.unifiedInput(G[0],h,j,k),t.enable()},this.disable=function(){G&&(G.remove(),G=null),t.disable(),t=void 0},this.destroy=function(){this.disable()}}var h=[],i=d.resizable.handles;"string"==typeof i&&(i=d.resizable.handles.split(","));for(var j=!1,k=0,l=i.length;l>k;k++)h.push(new g(i[k]));this.enable=function(){if(!j){for(var a=0,b=h.length;b>a;a++)h[a].enable();j=!0}},this.disable=function(){if(j){for(var a=0,b=h.length;b>a;a++)h[a].disable();j=!1}},this.toggle=function(a){a?this.enable():this.disable()},this.destroy=function(){for(var a=0,b=h.length;b>a;a++)h[a].destroy()}}return b}]).directive("gridsterItem",["$parse","GridsterDraggable","GridsterResizable",function(a,b,c){return{restrict:"EA",controller:"GridsterItemCtrl",require:["^gridster","gridsterItem"],link:function(d,e,f,g){function h(){n.setPosition(n.row,n.col),q.row&&q.row.assign&&q.row.assign(d,n.row),q.col&&q.col.assign&&q.col.assign(d,n.col)}function i(){n.setSizeX(n.sizeX),q.sizeX&&q.sizeX.assign&&q.sizeX.assign(d,n.sizeX),n.setSizeY(n.sizeY),q.sizeY&&q.sizeY.assign&&q.sizeY.assign(d,n.sizeY)}function j(){var a=document.createElement("div"),b={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(var c in b)if(void 0!==a.style[c])return b[c]}var k,l=f.gridsterItem,m=g[0],n=g[1];if(l){var o=a(l);k=o(d)||{},!k&&o.assign&&(k={row:n.row,col:n.col,sizeX:n.sizeX,sizeY:n.sizeY,minSizeX:0,minSizeY:0,maxSizeX:null,maxSizeY:null},o.assign(d,k))}else k=f;n.init(e,m),e.addClass("gridster-item");for(var p=["minSizeX","maxSizeX","minSizeY","maxSizeY","sizeX","sizeY","row","col"],q={},r=function(b){var c;if("string"==typeof k[b])c=k[b];else if("string"==typeof k[b.toLowerCase()])c=k[b.toLowerCase()];else{if(!l)return;c=a(l+"."+b)}q[b]=a(c),d.$watch(c,function(a){a=parseInt(a,10),isNaN(a)||(n[b]=a)});var e=q[b](d);"number"==typeof e&&(n[b]=e)},s=0,t=p.length;t>s;++s)r(p[s]);d.$watch(function(){return n.row+","+n.col},h),d.$watch(function(){return n.sizeY+","+n.sizeX+"|"+n.minSizeX+","+n.maxSizeX+","+n.minSizeY+","+n.maxSizeY},i);var u=new b(e,d,m,n,k),v=new c(e,d,m,n,k);return d.$on("gridster-draggable-changed",function(){u.toggle(!m.isMobile&&m.draggable&&m.draggable.enabled)}),d.$on("gridster-resizable-changed",function(){v.toggle(!m.isMobile&&m.resizable&&m.resizable.enabled)}),d.$on("gridster-resized",function(){v.toggle(!m.isMobile&&m.resizable&&m.resizable.enabled)}),d.$watch(function(){return m.isMobile},function(){v.toggle(!m.isMobile&&m.resizable&&m.resizable.enabled),u.toggle(!m.isMobile&&m.draggable&&m.draggable.enabled)}),e.on(j(),function(){d.$apply(function(){d.$broadcast("gridster-item-transition-end")})}),d.$on("$destroy",function(){try{v.destroy(),u.destroy()}catch(a){}try{m.removeItem(n)}catch(a){}try{n.destroy()}catch(a){}})}}}])}(angular); \ No newline at end of file diff --git a/package.json b/package.json index 10aaeb5a..2558485d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-gridster", - "version": "0.11.0", + "version": "0.11.1", "description": "This directive gives you gridster behavior", "license": "MIT", "homepage": "http://manifestwebdesign.github.io/angular-gridster", diff --git a/src/angular-gridster.js b/src/angular-gridster.js index 630b7bd4..0f61031f 100644 --- a/src/angular-gridster.js +++ b/src/angular-gridster.js @@ -477,8 +477,9 @@ return Object.keys(theObject).length; } - var n = 0; - for (var key in theObject) { + var n = 0, + key; + for (key in theObject) { ++n; } @@ -856,6 +857,7 @@ gridster.curColWidth = gridster.colWidth; } + gridster.curRowHeight = gridster.rowHeight; if (typeof gridster.rowHeight === 'string') { if (gridster.rowHeight === 'match') { gridster.curRowHeight = Math.round(gridster.curColWidth); @@ -863,10 +865,7 @@ gridster.curRowHeight = Math.round(gridster.curColWidth * gridster.rowHeight.replace('*', '').replace(' ', '')); } else if (gridster.rowHeight.indexOf('/') !== -1) { gridster.curRowHeight = Math.round(gridster.curColWidth / gridster.rowHeight.replace('/', '').replace(' ', '')); - } else { - gridster.curRowHeight = gridster.rowHeight; } - } gridster.isMobile = gridster.mobileModeEnabled && gridster.curWidth <= gridster.mobileBreakPoint;