From ad4032449590c8eaf39792c6e60fa0864a8aa877 Mon Sep 17 00:00:00 2001 From: Matteo Gaggiano Date: Thu, 12 May 2016 11:03:02 +0200 Subject: [PATCH 01/15] Double binding variables --- src/js/directives/wg-grid-overlay.js | 7 +++---- src/js/directives/wg-grid.js | 6 +++--- src/js/directives/wg-widget.js | 9 ++++++--- src/templates/wg-movable.html | 2 +- src/templates/wg-resizable.html | 2 +- src/templates/wg-widget.html | 2 +- 6 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/js/directives/wg-grid-overlay.js b/src/js/directives/wg-grid-overlay.js index 3b70afd..4c23e17 100644 --- a/src/js/directives/wg-grid-overlay.js +++ b/src/js/directives/wg-grid-overlay.js @@ -11,9 +11,9 @@ angular.module('widgetGrid').directive('wgGridOverlay', function () { return { scope: { - 'rendering': '=', - 'highlight': '=?', - 'options': '=?' + 'rendering': '=wgRendering', + 'highlight': '=?wgHighlight', + 'options': '=?wgOptions', }, restrict: 'AE', replace: true, @@ -34,7 +34,6 @@ } } - function applyOptions(options) { updateGridLines(scope.rendering, options); } diff --git a/src/js/directives/wg-grid.js b/src/js/directives/wg-grid.js index c6e8605..8b2667d 100644 --- a/src/js/directives/wg-grid.js +++ b/src/js/directives/wg-grid.js @@ -211,9 +211,9 @@ angular.module('widgetGrid').directive('wgGrid', function () { return { scope: { - 'columns': '@', - 'rows': '@', - 'options': '=?' + 'columns': '=wgColumns', + 'rows': '=wgRows', + 'options': '=?wgOptions' }, restrict: 'AE', controller: 'wgGridController', diff --git a/src/js/directives/wg-widget.js b/src/js/directives/wg-widget.js index edeb310..529ac48 100644 --- a/src/js/directives/wg-widget.js +++ b/src/js/directives/wg-widget.js @@ -19,8 +19,8 @@ angular.module('widgetGrid').directive('wgWidget', function (Widget) { return { scope: { - position: '=', - editable: '@?' + position: '=wgPosition', + editable: '=?wgEditable', }, restrict: 'AE', controller: 'wgWidgetController', @@ -31,7 +31,10 @@ link: function (scope, element, attrs, gridCtrl) { var widget = new Widget(scope.position); - scope.editable = 'false'; + if (!angular.isDefined(attrs.wgEditable)) { + scope.editable = false; + } + scope.widget = widget; scope.setWidgetPosition = setWidgetPosition; diff --git a/src/templates/wg-movable.html b/src/templates/wg-movable.html index d059dbb..f1fb803 100644 --- a/src/templates/wg-movable.html +++ b/src/templates/wg-movable.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/src/templates/wg-resizable.html b/src/templates/wg-resizable.html index 31865e5..081f2eb 100644 --- a/src/templates/wg-resizable.html +++ b/src/templates/wg-resizable.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/src/templates/wg-widget.html b/src/templates/wg-widget.html index 3255d19..dcbedbf 100644 --- a/src/templates/wg-widget.html +++ b/src/templates/wg-widget.html @@ -1,3 +1,3 @@ -
+
\ No newline at end of file From 93c0cfa4de8ca96c65a4c7a54a945b1fdd3561d0 Mon Sep 17 00:00:00 2001 From: Matteo Gaggiano Date: Thu, 12 May 2016 11:08:33 +0200 Subject: [PATCH 02/15] Refactor attributes name for wg context --- src/js/directives/wg-grid.js | 3 +++ src/templates/wg-grid.html | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/js/directives/wg-grid.js b/src/js/directives/wg-grid.js index 8b2667d..d4bf3b0 100644 --- a/src/js/directives/wg-grid.js +++ b/src/js/directives/wg-grid.js @@ -76,6 +76,9 @@ vm.options = angular.extend({}, DEFAULT_OPTIONS, $scope.options); vm.overlayOptions.showGrid = vm.options.showGrid; + vm.grid.maxHeight = vm.options.maxHeight; + vm.grid.maxWidth = vm.options.maxWidth; + if (vm.options.highlightNextPosition) { updateNextPositionHighlight(); } else { diff --git a/src/templates/wg-grid.html b/src/templates/wg-grid.html index 80d2aa1..f27eb2b 100644 --- a/src/templates/wg-grid.html +++ b/src/templates/wg-grid.html @@ -1,4 +1,4 @@
-
+
\ No newline at end of file From e15a351e59aabd0310b1cdcbd4241e1dd6f645b0 Mon Sep 17 00:00:00 2001 From: Matteo Gaggiano Date: Thu, 12 May 2016 12:41:00 +0200 Subject: [PATCH 03/15] Movable as parameter. TODO: directions dependent as same as wgResizable --- src/js/directives/wg-movable.js | 118 ++++++++++++++++++-------------- src/templates/wg-movable.html | 2 +- 2 files changed, 68 insertions(+), 52 deletions(-) diff --git a/src/js/directives/wg-movable.js b/src/js/directives/wg-movable.js index c607454..0443ccd 100644 --- a/src/js/directives/wg-movable.js +++ b/src/js/directives/wg-movable.js @@ -15,7 +15,16 @@ widgetCtrl.innerCompile(template); } } - } + }, + controller: ['$attrs', '$parse', '$scope', function ($attrs, $parse, $scope) { + var vm = this; + + vm.isMovable = function () { + var attrValue = $parse($attrs.wgMovable)($scope); + return attrValue && attrValue.enabled !== undefined ? attrValue.enabled : true; + }; + }], + controllerAs: 'movableCtrl' }; }); @@ -23,8 +32,15 @@ angular.module('widgetGrid').directive('wgMover', function ($document, gridUtil, PathIterator) { return { restrict: 'A', - require: '^wgGrid', - link: function (scope, element, attrs, gridCtrl) { + require: ['^wgGrid', '^wgMovable'], + link: function (scope, element, attrs, ctrls) { + var gridCtrl = ctrls[0]; + var movableCtrl = ctrls[1]; + + if (!movableCtrl.isMovable()) { + return; + } + var eventDown, eventMove, eventUp; if (window.navigator.pointerEnabled) { eventDown = 'pointerdown'; @@ -46,7 +62,7 @@ var mouseDownPosition = { x: event.clientX, y: event.clientY }; var widgetContainer = element[0].parentElement, - widgetElement = angular.element(widgetContainer); + widgetElement = angular.element(widgetContainer); widgetElement.addClass('wg-moving'); @@ -73,7 +89,7 @@ var gridPositions = gridCtrl.getPositions(); var cellHeight = (gridCtrl.grid.cellSize.height / 100) * gridPositions.height, - cellWidth = (gridCtrl.grid.cellSize.width / 100) * gridPositions.width; + cellWidth = (gridCtrl.grid.cellSize.width / 100) * gridPositions.width; $document.on(eventMove, onMove); $document.on(eventUp, onUp); @@ -92,7 +108,7 @@ // normalize the drag position var dragPositionX = Math.round(event.clientX) - gridPositions.left, - dragPositionY = Math.round(event.clientY) - gridPositions.top; + dragPositionY = Math.round(event.clientY) - gridPositions.top; desiredPosition.top = Math.min(Math.max(dragPositionY - moverOffset.top, 0), gridPositions.height - startRender.height - 1); desiredPosition.left = Math.min(Math.max(dragPositionX - moverOffset.left, 0), gridPositions.width - startRender.width - 1); @@ -112,27 +128,27 @@ $document.off(eventUp, onUp); if (gridCtrl.options.clickThrough) { - if (event.clientX === mouseDownPosition.x && event.clientY === mouseDownPosition.y) { + if (event.clientX === mouseDownPosition.x && event.clientY === mouseDownPosition.y) { // user clicked but didn't drag the widget, so pass the onDown event to the underlying element element.hide(); var elBeneath = document.elementFromPoint(mouseDownPosition.x, mouseDownPosition.y); element.show(); angular.element(elBeneath).trigger('click'); + } } - } - var finalPos = determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth); - gridCtrl.resetHighlights(); - widgetElement.removeClass('wg-moving'); - scope.setWidgetPosition(finalPos); - } - } + var finalPos = determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth); + gridCtrl.resetHighlights(); + widgetElement.removeClass('wg-moving'); + scope.setWidgetPosition(finalPos); + } + } /** * Determines a final area after moving an element, given */ - function determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth) { + function determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth) { if (startRender.top === desiredPosition.top && startRender.left === desiredPosition.left) { return startPosition; } @@ -151,7 +167,7 @@ } var movedDown = anchorTop >= startRender.top, - movedRight = anchorLeft >= startRender.left; + movedRight = anchorLeft >= startRender.left; var desiredFinalPosition = gridCtrl.rasterizeCoords(anchorLeft, anchorTop); var path = new PathIterator(desiredFinalPosition, startPosition); @@ -176,45 +192,45 @@ // try to get closer to the desired position by leaving the original path if (desiredFinalPosition.top < targetArea.top) { while (desiredFinalPosition.top <= targetArea.top - 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top - 1, - left: targetArea.left, - height: targetArea.height, - width: targetArea.width }, options)) { + !gridCtrl.isAreaObstructed({ top: targetArea.top - 1, + left: targetArea.left, + height: targetArea.height, + width: targetArea.width }, options)) { targetArea.top--; - } - } else if (desiredFinalPosition.top > targetArea.top) { - while (desiredFinalPosition.top >= targetArea.top + 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top + 1, - left: targetArea.left, - height: targetArea.height, - width: targetArea.width }, options)) { - targetArea.top++; - } } - - if (desiredFinalPosition.left < targetArea.left) { - while (desiredFinalPosition.left <= targetArea.left - 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top, - left: targetArea.left - 1, - height: targetArea.height, - width: targetArea.width }, options)) { - targetArea.left--; - } - } else if (desiredFinalPosition.left > targetArea.left) { - while (desiredFinalPosition.left >= targetArea.left + 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top, - left: targetArea.left + 1, - height: targetArea.height, - width: targetArea.width }, options)) { - targetArea.left++; - } - } - - return targetArea; + } else if (desiredFinalPosition.top > targetArea.top) { + while (desiredFinalPosition.top >= targetArea.top + 1 && + !gridCtrl.isAreaObstructed({ top: targetArea.top + 1, + left: targetArea.left, + height: targetArea.height, + width: targetArea.width }, options)) { + targetArea.top++; } } + + if (desiredFinalPosition.left < targetArea.left) { + while (desiredFinalPosition.left <= targetArea.left - 1 && + !gridCtrl.isAreaObstructed({ top: targetArea.top, + left: targetArea.left - 1, + height: targetArea.height, + width: targetArea.width }, options)) { + targetArea.left--; + } + } else if (desiredFinalPosition.left > targetArea.left) { + while (desiredFinalPosition.left >= targetArea.left + 1 && + !gridCtrl.isAreaObstructed({ top: targetArea.top, + left: targetArea.left + 1, + height: targetArea.height, + width: targetArea.width }, options)) { + targetArea.left++; } } - }; - }); + + return targetArea; + } + } +} +} +}; +}); })(); diff --git a/src/templates/wg-movable.html b/src/templates/wg-movable.html index f1fb803..a345423 100644 --- a/src/templates/wg-movable.html +++ b/src/templates/wg-movable.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file From c2fd0bb36a0f00fd5bbe75c8003981e1b1b4d309 Mon Sep 17 00:00:00 2001 From: Matteo Gaggiano Date: Thu, 12 May 2016 12:44:06 +0200 Subject: [PATCH 04/15] - using angular.isDefined to check if property is defined - added default variable --- src/js/directives/wg-movable.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/js/directives/wg-movable.js b/src/js/directives/wg-movable.js index 0443ccd..e97e2ef 100644 --- a/src/js/directives/wg-movable.js +++ b/src/js/directives/wg-movable.js @@ -19,9 +19,11 @@ controller: ['$attrs', '$parse', '$scope', function ($attrs, $parse, $scope) { var vm = this; + var DEFAULT_MOVABLE = true; + vm.isMovable = function () { var attrValue = $parse($attrs.wgMovable)($scope); - return attrValue && attrValue.enabled !== undefined ? attrValue.enabled : true; + return angular.isDefined(attrValue) && angular.isDefined(attrValue.enabled) ? attrValue.enabled : DEFAULT_MOVABLE; }; }], controllerAs: 'movableCtrl' From 50fda1f8ddf07640712cb0a56d8ec1b222f40c50 Mon Sep 17 00:00:00 2001 From: Matteo Gaggiano Date: Thu, 12 May 2016 12:45:51 +0200 Subject: [PATCH 05/15] Added check for resizable enabled property --- src/js/directives/wg-resizable.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/js/directives/wg-resizable.js b/src/js/directives/wg-resizable.js index f43e212..a6cb292 100644 --- a/src/js/directives/wg-resizable.js +++ b/src/js/directives/wg-resizable.js @@ -20,10 +20,20 @@ var vm = this; var DEFAULT_DIRECTIONS = ['NW', 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W']; - + var DEFAULT_RESIZABLE = true; + vm.getResizeDirections = function () { + if (vm.isResizable()) { var attrValue = $parse($attrs.wgResizable)($scope); return attrValue && attrValue.directions ? attrValue.directions : DEFAULT_DIRECTIONS; + } else { + return []; + } + }; + + vm.isResizable = function () { + var attrValue = $parse($attrs.wgResizable)($scope); + return angular.isDefined(attrValue) && angular.isDefined(attrValue.enabled) ? attrValue.enabled : DEFAULT_RESIZABLE; }; }], controllerAs: 'resizableCtrl' From 889a4bde1def2355f473a53b7c6fc679403a7907 Mon Sep 17 00:00:00 2001 From: Matteo Gaggiano Date: Thu, 12 May 2016 12:46:26 +0200 Subject: [PATCH 06/15] Grunt compiled files with "grunt" --- angular-widget-grid.js | 167 +++++++++++++++++----------- angular-widget-grid.min.js | 4 +- angular-widget-grid.min.js.map | 2 +- demo/lib/angular-widget-grid.min.js | 4 +- 4 files changed, 105 insertions(+), 72 deletions(-) diff --git a/angular-widget-grid.js b/angular-widget-grid.js index 161d38c..2d961da 100644 --- a/angular-widget-grid.js +++ b/angular-widget-grid.js @@ -1,5 +1,5 @@ /** - * @license angular-widget-grid v0.2.5 + * @license angular-widget-grid v0.3.0 * (c) 2016 Patrick Buergin * License: MIT * https://github.com/patbuergin/angular-widget-grid @@ -21,9 +21,9 @@ angular.module('widgetGrid').directive('wgGridOverlay', function () { return { scope: { - 'rendering': '=', - 'highlight': '=?', - 'options': '=?' + 'rendering': '=wgRendering', + 'highlight': '=?wgHighlight', + 'options': '=?wgOptions', }, restrict: 'AE', replace: true, @@ -44,7 +44,6 @@ } } - function applyOptions(options) { updateGridLines(scope.rendering, options); } @@ -210,6 +209,9 @@ vm.options = angular.extend({}, DEFAULT_OPTIONS, $scope.options); vm.overlayOptions.showGrid = vm.options.showGrid; + vm.grid.maxHeight = vm.options.maxHeight; + vm.grid.maxWidth = vm.options.maxWidth; + if (vm.options.highlightNextPosition) { updateNextPositionHighlight(); } else { @@ -345,9 +347,9 @@ angular.module('widgetGrid').directive('wgGrid', function () { return { scope: { - 'columns': '@', - 'rows': '@', - 'options': '=?' + 'columns': '=wgColumns', + 'rows': '=wgRows', + 'options': '=?wgOptions' }, restrict: 'AE', controller: 'wgGridController', @@ -374,7 +376,18 @@ widgetCtrl.innerCompile(template); } } - } + }, + controller: ['$attrs', '$parse', '$scope', function ($attrs, $parse, $scope) { + var vm = this; + + var DEFAULT_MOVABLE = true; + + vm.isMovable = function () { + var attrValue = $parse($attrs.wgMovable)($scope); + return angular.isDefined(attrValue) && angular.isDefined(attrValue.enabled) ? attrValue.enabled : DEFAULT_MOVABLE; + }; + }], + controllerAs: 'movableCtrl' }; }]); @@ -382,8 +395,15 @@ angular.module('widgetGrid').directive('wgMover', ['$document', 'gridUtil', 'PathIterator', function ($document, gridUtil, PathIterator) { return { restrict: 'A', - require: '^wgGrid', - link: function (scope, element, attrs, gridCtrl) { + require: ['^wgGrid', '^wgMovable'], + link: function (scope, element, attrs, ctrls) { + var gridCtrl = ctrls[0]; + var movableCtrl = ctrls[1]; + + if (!movableCtrl.isMovable()) { + return; + } + var eventDown, eventMove, eventUp; if (window.navigator.pointerEnabled) { eventDown = 'pointerdown'; @@ -405,7 +425,7 @@ var mouseDownPosition = { x: event.clientX, y: event.clientY }; var widgetContainer = element[0].parentElement, - widgetElement = angular.element(widgetContainer); + widgetElement = angular.element(widgetContainer); widgetElement.addClass('wg-moving'); @@ -432,7 +452,7 @@ var gridPositions = gridCtrl.getPositions(); var cellHeight = (gridCtrl.grid.cellSize.height / 100) * gridPositions.height, - cellWidth = (gridCtrl.grid.cellSize.width / 100) * gridPositions.width; + cellWidth = (gridCtrl.grid.cellSize.width / 100) * gridPositions.width; $document.on(eventMove, onMove); $document.on(eventUp, onUp); @@ -451,7 +471,7 @@ // normalize the drag position var dragPositionX = Math.round(event.clientX) - gridPositions.left, - dragPositionY = Math.round(event.clientY) - gridPositions.top; + dragPositionY = Math.round(event.clientY) - gridPositions.top; desiredPosition.top = Math.min(Math.max(dragPositionY - moverOffset.top, 0), gridPositions.height - startRender.height - 1); desiredPosition.left = Math.min(Math.max(dragPositionX - moverOffset.left, 0), gridPositions.width - startRender.width - 1); @@ -471,27 +491,27 @@ $document.off(eventUp, onUp); if (gridCtrl.options.clickThrough) { - if (event.clientX === mouseDownPosition.x && event.clientY === mouseDownPosition.y) { + if (event.clientX === mouseDownPosition.x && event.clientY === mouseDownPosition.y) { // user clicked but didn't drag the widget, so pass the onDown event to the underlying element element.hide(); var elBeneath = document.elementFromPoint(mouseDownPosition.x, mouseDownPosition.y); element.show(); angular.element(elBeneath).trigger('click'); + } } - } - var finalPos = determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth); - gridCtrl.resetHighlights(); - widgetElement.removeClass('wg-moving'); - scope.setWidgetPosition(finalPos); - } - } + var finalPos = determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth); + gridCtrl.resetHighlights(); + widgetElement.removeClass('wg-moving'); + scope.setWidgetPosition(finalPos); + } + } /** * Determines a final area after moving an element, given */ - function determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth) { + function determineFinalPos(startPosition, desiredPosition, startRender, cellHeight, cellWidth) { if (startRender.top === desiredPosition.top && startRender.left === desiredPosition.left) { return startPosition; } @@ -510,7 +530,7 @@ } var movedDown = anchorTop >= startRender.top, - movedRight = anchorLeft >= startRender.left; + movedRight = anchorLeft >= startRender.left; var desiredFinalPosition = gridCtrl.rasterizeCoords(anchorLeft, anchorTop); var path = new PathIterator(desiredFinalPosition, startPosition); @@ -535,47 +555,47 @@ // try to get closer to the desired position by leaving the original path if (desiredFinalPosition.top < targetArea.top) { while (desiredFinalPosition.top <= targetArea.top - 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top - 1, - left: targetArea.left, - height: targetArea.height, - width: targetArea.width }, options)) { + !gridCtrl.isAreaObstructed({ top: targetArea.top - 1, + left: targetArea.left, + height: targetArea.height, + width: targetArea.width }, options)) { targetArea.top--; - } - } else if (desiredFinalPosition.top > targetArea.top) { - while (desiredFinalPosition.top >= targetArea.top + 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top + 1, - left: targetArea.left, - height: targetArea.height, - width: targetArea.width }, options)) { - targetArea.top++; - } - } - - if (desiredFinalPosition.left < targetArea.left) { - while (desiredFinalPosition.left <= targetArea.left - 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top, - left: targetArea.left - 1, - height: targetArea.height, - width: targetArea.width }, options)) { - targetArea.left--; - } - } else if (desiredFinalPosition.left > targetArea.left) { - while (desiredFinalPosition.left >= targetArea.left + 1 && - !gridCtrl.isAreaObstructed({ top: targetArea.top, - left: targetArea.left + 1, - height: targetArea.height, - width: targetArea.width }, options)) { - targetArea.left++; - } } - - return targetArea; + } else if (desiredFinalPosition.top > targetArea.top) { + while (desiredFinalPosition.top >= targetArea.top + 1 && + !gridCtrl.isAreaObstructed({ top: targetArea.top + 1, + left: targetArea.left, + height: targetArea.height, + width: targetArea.width }, options)) { + targetArea.top++; } } + + if (desiredFinalPosition.left < targetArea.left) { + while (desiredFinalPosition.left <= targetArea.left - 1 && + !gridCtrl.isAreaObstructed({ top: targetArea.top, + left: targetArea.left - 1, + height: targetArea.height, + width: targetArea.width }, options)) { + targetArea.left--; + } + } else if (desiredFinalPosition.left > targetArea.left) { + while (desiredFinalPosition.left >= targetArea.left + 1 && + !gridCtrl.isAreaObstructed({ top: targetArea.top, + left: targetArea.left + 1, + height: targetArea.height, + width: targetArea.width }, options)) { + targetArea.left++; } } - }; - }]); + + return targetArea; + } + } +} +} +}; +}]); })(); (function () { @@ -598,10 +618,20 @@ var vm = this; var DEFAULT_DIRECTIONS = ['NW', 'N', 'NE', 'E', 'SE', 'S', 'SW', 'W']; - + var DEFAULT_RESIZABLE = true; + vm.getResizeDirections = function () { + if (vm.isResizable()) { var attrValue = $parse($attrs.wgResizable)($scope); return attrValue && attrValue.directions ? attrValue.directions : DEFAULT_DIRECTIONS; + } else { + return []; + } + }; + + vm.isResizable = function () { + var attrValue = $parse($attrs.wgResizable)($scope); + return angular.isDefined(attrValue) && angular.isDefined(attrValue.enabled) ? attrValue.enabled : DEFAULT_RESIZABLE; }; }], controllerAs: 'resizableCtrl' @@ -877,8 +907,8 @@ angular.module('widgetGrid').directive('wgWidget', ['Widget', function (Widget) { return { scope: { - position: '=', - editable: '@?' + position: '=wgPosition', + editable: '=?wgEditable', }, restrict: 'AE', controller: 'wgWidgetController', @@ -889,7 +919,10 @@ link: function (scope, element, attrs, gridCtrl) { var widget = new Widget(scope.position); - scope.editable = 'false'; + if (!angular.isDefined(attrs.wgEditable)) { + scope.editable = false; + } + scope.widget = widget; scope.setWidgetPosition = setWidgetPosition; @@ -1933,22 +1966,22 @@ angular.module('widgetGrid').run(['$templateCache', function($templateCache) { 'use strict'; $templateCache.put('wg-grid', - "
" + "
" ); $templateCache.put('wg-movable', - "
" + "
" ); $templateCache.put('wg-resizable', - "
" + "
" ); $templateCache.put('wg-widget', - "
" + "
" ); }]); diff --git a/angular-widget-grid.min.js b/angular-widget-grid.min.js index 9317ead..1ace4bd 100644 --- a/angular-widget-grid.min.js +++ b/angular-widget-grid.min.js @@ -1,9 +1,9 @@ /** - * @license angular-widget-grid v0.2.5 + * @license angular-widget-grid v0.3.0 * (c) 2016 Patrick Buergin * License: MIT * https://github.com/patbuergin/angular-widget-grid */ -!function(){angular.module("widgetGrid",[])}(),function(){angular.module("widgetGrid").directive("wgGridOverlay",function(){return{scope:{rendering:"=",highlight:"=?",options:"=?"},restrict:"AE",replace:!0,template:'
',link:function(a,b){function c(b){angular.isDefined(b)&&f(b,a.options)}function d(b){f(a.rendering,b)}function e(b){if(h(),null!==b)if(angular.isArray(b))for(var c=0;c
',f=angular.element(f),b.append(f),l.push(f);for(c=1;c
',f=angular.element(f),b.append(f),l.push(f)}function h(){angular.forEach(k,function(a){a.remove()}),k=[]}function i(){angular.forEach(l,function(a){a.remove()}),l=[]}function j(a,c){var d=c.grid.cellSize.height,e=c.grid.cellSize.width,f=angular.element("
");f.addClass("wg-preview-item"),f.addClass("wg-preview-highlight"),f.css("top",(a.top-1)*d+"%"),f.css("left",(a.left-1)*e+"%"),f.css("height",a.height*d+"%"),f.css("width",a.width*e+"%"),b.append(f),k.push(f)}var k=[],l=[];a.options=a.options||{showGrid:!1},a.$watch("highlight",e),a.$watch("options",d,!0),a.$watch("rendering",c)}}})}(),function(){var a={showGrid:!1,highlightNextPosition:!1,clickThrough:!1};angular.module("widgetGrid").controller("wgGridController",["$element","$scope","$timeout","Grid","gridRenderer",function(b,c,d,e,f){function g(a){y.grid.add(a),k()}function h(a){y.grid.remove(a),k()}function i(){var a=parseInt(c.columns),b=parseInt(c.rows);y.grid.columns===a&&y.grid.rows===b||(y.grid.resize(b,a),k())}function j(){y.options=angular.extend({},a,c.options),y.overlayOptions.showGrid=y.options.showGrid,y.options.highlightNextPosition?o():x()}function k(){y.rendering=f.render(y.grid,l),o(),m(),c.$broadcast("wg-update-rendering")}function l(a){c.$emit("wg-update-position",{index:r(a),newPosition:a.getPosition()})}function m(){var a=y.rendering.hasSpaceLeft();a&&z?(c.$emit("wg-grid-space-available"),z=!1):a||z||(c.$emit("wg-grid-full"),z=!0)}function n(a){var b=a.getPosition();y.rendering.setWidgetPosition(a.id,b),l(a),m()}function o(){if(y.options.highlightNextPosition){var a=y.rendering.getNextPosition();y.highlight=a}}function p(a){return y.rendering.getWidgetPosition(a.id)}function q(a){return y.rendering.getStyle(a.id)}function r(a){for(var b=y.grid.widgets.length-1;b>=0;b--)if(y.grid.widgets[b].id===a.id)return b;return-1}function s(){var a=b[0],c=a.getBoundingClientRect();if(c.width||c.height||a.getClientRects().length){var d=a.ownerDocument,e=d.documentElement;return{top:c.top+window.pageYOffset-e.clientTop,left:c.left+window.pageXOffset-e.clientLeft,height:c.height,width:c.width}}return{top:0,left:0,height:0,width:0}}function t(a,b){return y.rendering?y.rendering.isObstructed(a,b):!0}function u(a,b){return y.rendering?y.rendering.isAreaObstructed(a,b):!0}function v(a,c){return y.rendering.rasterizeCoords(a,c,b[0].clientWidth,b[0].clientHeight)}function w(a){a.top&&a.left&&a.height&&a.width&&d(function(){y.highlight=a})}function x(){d(function(){y.highlight=null})}var y=this;y.grid=new e(c.rows,c.columns),y.rendering=null,y.highlight=null,y.options=a,y.overlayOptions={},y.addWidget=g,y.removeWidget=h,y.updateGridSize=i,y.updateRendering=k,y.getPositions=s,y.rasterizeCoords=v,y.updateWidget=n,y.getWidgetRenderPosition=p,y.getWidgetStyle=q,y.isPointObstructed=t,y.isAreaObstructed=u,y.highlightArea=w,y.resetHighlights=x,c.$watch("columns",i),c.$watch("rows",i),c.$watch("options",j,!0),k();var z=!1}]),angular.module("widgetGrid").directive("wgGrid",function(){return{scope:{columns:"@",rows:"@",options:"=?"},restrict:"AE",controller:"wgGridController",controllerAs:"gridCtrl",transclude:!0,replace:!0,templateUrl:"wg-grid"}})}(),function(){angular.module("widgetGrid").directive("wgMovable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-movable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}}}}]),angular.module("widgetGrid").directive("wgMover",["$document","gridUtil","PathIterator",function(a,b,c){return{restrict:"A",require:"^wgGrid",link:function(b,d,e,f){function g(c){function e(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var b=Math.round(a.clientX)-r.left,c=Math.round(a.clientY)-r.top;p.top=Math.min(Math.max(c-q.top,0),r.height-o.height-1),p.left=Math.min(Math.max(b-q.left,0),r.width-o.width-1);var d=h(n,p,o,s,t);f.highlightArea(d),m.css({top:p.top+"px",left:p.left+"px"})}function g(c){if(c.preventDefault(),a.off(j,e),a.off(k,g),f.options.clickThrough&&c.clientX===i.x&&c.clientY===i.y){d.hide();var l=document.elementFromPoint(i.x,i.y);d.show(),angular.element(l).trigger("click")}var q=h(n,p,o,s,t);f.resetHighlights(),m.removeClass("wg-moving"),b.setWidgetPosition(q)}c.preventDefault(),angular.isObject(c.originalEvent)&&(c=c.originalEvent);var i={x:c.clientX,y:c.clientY},l=d[0].parentElement,m=angular.element(l);m.addClass("wg-moving");var n={};n=f.getWidgetRenderPosition(b.widget),n.bottom=n.top+n.height-1,n.right=n.left+n.width-1;var o={};o.top=l.offsetTop,o.left=l.offsetLeft,o.height=l.clientHeight,o.width=l.clientWidth,c.offsetX=c.offsetX||c.layerX,c.offsetY=c.offsetY||c.layerY;var p={top:o.top,left:o.left},q={top:c.offsetY+d[0].offsetTop||0,left:c.offsetX+d[0].offsetLeft||0},r=f.getPositions(),s=f.grid.cellSize.height/100*r.height,t=f.grid.cellSize.width/100*r.width;a.on(j,e),a.on(k,g)}function h(a,b,d,e,g){if(d.top===b.top&&d.left===b.left)return a;var h,i;h=b.top%e>e/2?b.top+Math.floor(e):b.top,i=b.left%g>g/2?b.left+Math.floor(g):b.left;for(var j=h>=d.top,k=i>=d.left,l=f.rasterizeCoords(i,h),m=new c(l,a);m.hasNext();){var n=m.next(),o={top:n.top,left:n.left,height:a.height,width:a.width},p={excludedArea:a,fromBottom:j,fromRight:k};if(!f.isAreaObstructed(o,p)){if(l.topo.top)for(;l.top>=o.top+1&&!f.isAreaObstructed({top:o.top+1,left:o.left,height:o.height,width:o.width},p);)o.top++;if(l.lefto.left)for(;l.left>=o.left+1&&!f.isAreaObstructed({top:o.top,left:o.left+1,height:o.height,width:o.width},p);)o.left++;return o}}}var i,j,k;window.navigator.pointerEnabled?(i="pointerdown",j="pointermove",k="pointerup"):(i="mousedown touchstart",j="mousemove touchmove",k="mouseup touchend touchcancel"),d.on(i,g)}}}])}(),function(){angular.module("widgetGrid").directive("wgResizable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-resizable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}},controller:["$attrs","$parse","$scope",function(a,b,c){var d=this,e=["NW","N","NE","E","SE","S","SW","W"];d.getResizeDirections=function(){var d=b(a.wgResizable)(c);return d&&d.directions?d.directions:e}}],controllerAs:"resizableCtrl"}}]),angular.module("widgetGrid").directive("wgResizer",["$document",function(a){var b=42,c=42;return{restrict:"A",require:["^wgGrid","^wgResizable"],link:function(d,e,f,g){function h(e,f){function g(g){function h(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var d=Math.round(a.clientX)-u.left,g=Math.round(a.clientY)-u.top;e.up?(s.top=Math.min(Math.max(g-t.top,0),u.height)-r.top,s.top=Math.min(s.top,r.height-b)):e.down&&(s.bottom=r.bottom-Math.min(Math.max(g-t.bottom,0),u.height),s.bottom=Math.min(s.bottom,r.height-b)),e.left?(s.left=Math.min(Math.max(d-t.left,0),u.width)-r.left,s.left=Math.min(s.left,r.width-c)):e.right&&(s.right=r.right-Math.min(Math.max(d-t.right,0),u.width),s.right=Math.min(s.right,r.width-c));var h=m();l.highlightArea(h),f.css({top:s.top+"px",left:s.left+"px",bottom:s.bottom+"px",right:s.right+"px"})}function i(b){b.preventDefault(),a.off(j,h),a.off(k,i);var c=m();d.setWidgetPosition(c),l.resetHighlights(),p.removeClass("wg-resizing"),e.element.removeClass("dragging"),f.removeAttr("style")}function m(){var a,b,c,d={},f=l.rasterizeCoords(r.left+s.left+1,r.top+s.top+1),g=l.rasterizeCoords(r.right-s.right-1,r.bottom-s.bottom-1),h={top:f.top,right:g.left,bottom:g.top,left:f.left};if(e.up&&h.toph.top;){for(a=!1,c=Math.max(q.left,h.left);c<=Math.min(q.right,h.right);c++)if(l.isPointObstructed(d.top-1,c)){a=!0;break}if(a)break;d.top--}else if(e.down&&h.bottom>q.bottom)for(d.bottom=q.bottom;d.bottomh.left;){for(a=!1,b=d.top;b<=d.bottom;b++)if(l.isPointObstructed(b,d.left-1)){a=!0;break}if(a)break;d.left--}else if(e.right&&h.right>q.right)for(d.right=q.right;d.right
')},E:{up:!1,right:!0,down:!1,left:!1,element:angular.element('
')},S:{up:!1,right:!1,down:!0,left:!1,element:angular.element('
')},W:{up:!1,right:!1,down:!1,left:!0,element:angular.element('
')},NW:{up:!0,right:!1,down:!1,left:!0,element:angular.element('
')},NE:{up:!0,right:!0,down:!1,left:!1,element:angular.element('
')},SE:{up:!1,right:!0,down:!0,left:!1,element:angular.element('
')},SW:{up:!1,right:!1,down:!0,left:!0,element:angular.element('
')}},o=m.getResizeDirections(),p=0;p=1?100/b:0,e=c>=1?100/c:0;return new a(d,e)},a})}(),function(){var a=4,b=4;angular.module("widgetGrid").factory("Grid",["CellSize",function(c){var d=function(d,e){this.widgets=[],this.rows=parseInt(d)||b,this.columns=parseInt(e)||a,this.cellSize=c.create(this.rows,this.columns)};return d.prototype.add=function(a){this.widgets.push(a)},d.prototype.remove=function(a){var b=this.widgets.indexOf(a);b>=0&&this.widgets.splice(b,1)},d.prototype.resize=function(a,b){b=parseInt(b)||0,a=parseInt(a)||0,(b>0&&a>0&&b!==this.columns||a!==this.rows)&&(this.columns=b,this.rows=a,this.cellSize=c.create(this.rows,this.columns))},d}])}(),function(){angular.module("widgetGrid").factory("GridArea",function(){var a=function(a,b,c,d){this.top=parseInt(a)||0,this.left=parseInt(b)||0,this.height=parseInt(c)||0,this.width=parseInt(d)||0};return a.create=function(b,c){var d=c.left-b.left+1,e=c.top-b.top+1;return new a(b.top,b.left,d,e)},a.empty=new a,a.prototype.getBottom=function(){return this.top+this.height-1},a.prototype.getRight=function(){return this.left+this.width-1},a.prototype.getSurfaceArea=function(){return this.height*this.width},a})}(),function(){angular.module("widgetGrid").factory("GridPoint",function(){var a=function(a,b){this.top=parseInt(a)||1,this.left=parseInt(b)||1};return a})}(),function(){angular.module("widgetGrid").factory("GridRendering",["GridArea","GridPoint",function(a,b){function c(b,c){if(!(angular.isDefined(c)&&angular.isDefined(c.grid)&&angular.isNumber(c.grid.columns)&&angular.isNumber(c.grid.rows)))return null;for(var d=null,e=0,f=c.grid.columns,g=b.top;g<=c.grid.rows;g++)for(var h=b.left;f>=h;h++)if(c._isObstructed(g,h))f=h-1;else{var i=g-b.top+1,j=h-b.left+1,k=i*j;k>e&&(e=k,d=new a(b.top,b.left,i,j))}return d}var d=function(a){this.grid=a||{rows:0,columns:0},this.positions={},this.cachedNextPosition=void 0,this.obstructions=[];for(var b=0;ba||1>b||b>this.grid.columns||a>this.grid.rows?!0:c&&c.top<=a&&a<=c.bottom&&c.left<=b&&b<=c.right?!1:this._isObstructed(a,b)},d.prototype._isObstructed=function(a,b){return 1===this.obstructions[(a-1)*this.grid.columns+(b-1)]},d.prototype.isAreaObstructed=function(a,b){if(!a)return!1;b=angular.isObject(b)?b:{};var c=a.top,d=a.left,e=a.bottom||a.top+a.height-1,f=a.right||a.left+a.width-1;if(!(angular.isNumber(c)&&angular.isNumber(d)&&angular.isNumber(e)&&angular.isNumber(f)))return!1;for(var g=b.fromBottom?e:c,h=b.fromBottom?-1:1,i=(b.fromBottom?c:e)+h,j=b.fromRight?f:d,k=b.fromRight?-1:1,l=(b.fromRight?d:f)+k,m=g;m!==i;m+=h)for(var n=j;n!==l;n+=k)if(this.isObstructed(m,n,b.excludedArea))return!0;return!1},d.prototype.getStyle=function(a){a=a.id||a;var b=this.positions[a];return b?{top:((b.top-1)*this.grid.cellSize.height).toString()+"%",height:(b.height*this.grid.cellSize.height).toString()+"%",left:((b.left-1)*this.grid.cellSize.width).toString()+"%",width:(b.width*this.grid.cellSize.width).toString()+"%"}:{display:"none"}},d.prototype.setObstructionValues=function(a,b){for(var c=a.top-1;ci)break;d=c(new b(g,h),this),f=d.getSurfaceArea(),f>e&&(e=f,a=d)}return a},d}])}(),function(){angular.module("widgetGrid").factory("PathIterator",["GridPoint",function(a){var b=function(b,c){this.start=b,this.topDelta=c.top-b.top,this.leftDelta=c.left-b.left,this.steps=Math.max(Math.abs(this.topDelta),Math.abs(this.leftDelta)),this.currStep=0,this.currPos=null,this.nextPos=new a(b.top,b.left)};return b.prototype.next=function(){if(this.currPos=this.nextPos,this.currStep
'),a.put("wg-movable",'
'),a.put("wg-resizable",'
'),a.put("wg-widget","
")}]); +!function(){angular.module("widgetGrid",[])}(),function(){angular.module("widgetGrid").directive("wgGridOverlay",function(){return{scope:{rendering:"=wgRendering",highlight:"=?wgHighlight",options:"=?wgOptions"},restrict:"AE",replace:!0,template:'
',link:function(a,b){function c(b){angular.isDefined(b)&&f(b,a.options)}function d(b){f(a.rendering,b)}function e(b){if(h(),null!==b)if(angular.isArray(b))for(var c=0;c
',f=angular.element(f),b.append(f),l.push(f);for(c=1;c
',f=angular.element(f),b.append(f),l.push(f)}function h(){angular.forEach(k,function(a){a.remove()}),k=[]}function i(){angular.forEach(l,function(a){a.remove()}),l=[]}function j(a,c){var d=c.grid.cellSize.height,e=c.grid.cellSize.width,f=angular.element("
");f.addClass("wg-preview-item"),f.addClass("wg-preview-highlight"),f.css("top",(a.top-1)*d+"%"),f.css("left",(a.left-1)*e+"%"),f.css("height",a.height*d+"%"),f.css("width",a.width*e+"%"),b.append(f),k.push(f)}var k=[],l=[];a.options=a.options||{showGrid:!1},a.$watch("highlight",e),a.$watch("options",d,!0),a.$watch("rendering",c)}}})}(),function(){var a={showGrid:!1,highlightNextPosition:!1,clickThrough:!1};angular.module("widgetGrid").controller("wgGridController",["$element","$scope","$timeout","Grid","gridRenderer",function(b,c,d,e,f){function g(a){y.grid.add(a),k()}function h(a){y.grid.remove(a),k()}function i(){var a=parseInt(c.columns),b=parseInt(c.rows);y.grid.columns===a&&y.grid.rows===b||(y.grid.resize(b,a),k())}function j(){y.options=angular.extend({},a,c.options),y.overlayOptions.showGrid=y.options.showGrid,y.grid.maxHeight=y.options.maxHeight,y.grid.maxWidth=y.options.maxWidth,y.options.highlightNextPosition?o():x()}function k(){y.rendering=f.render(y.grid,l),o(),m(),c.$broadcast("wg-update-rendering")}function l(a){c.$emit("wg-update-position",{index:r(a),newPosition:a.getPosition()})}function m(){var a=y.rendering.hasSpaceLeft();a&&z?(c.$emit("wg-grid-space-available"),z=!1):a||z||(c.$emit("wg-grid-full"),z=!0)}function n(a){var b=a.getPosition();y.rendering.setWidgetPosition(a.id,b),l(a),m()}function o(){if(y.options.highlightNextPosition){var a=y.rendering.getNextPosition();y.highlight=a}}function p(a){return y.rendering.getWidgetPosition(a.id)}function q(a){return y.rendering.getStyle(a.id)}function r(a){for(var b=y.grid.widgets.length-1;b>=0;b--)if(y.grid.widgets[b].id===a.id)return b;return-1}function s(){var a=b[0],c=a.getBoundingClientRect();if(c.width||c.height||a.getClientRects().length){var d=a.ownerDocument,e=d.documentElement;return{top:c.top+window.pageYOffset-e.clientTop,left:c.left+window.pageXOffset-e.clientLeft,height:c.height,width:c.width}}return{top:0,left:0,height:0,width:0}}function t(a,b){return y.rendering?y.rendering.isObstructed(a,b):!0}function u(a,b){return y.rendering?y.rendering.isAreaObstructed(a,b):!0}function v(a,c){return y.rendering.rasterizeCoords(a,c,b[0].clientWidth,b[0].clientHeight)}function w(a){a.top&&a.left&&a.height&&a.width&&d(function(){y.highlight=a})}function x(){d(function(){y.highlight=null})}var y=this;y.grid=new e(c.rows,c.columns),y.rendering=null,y.highlight=null,y.options=a,y.overlayOptions={},y.addWidget=g,y.removeWidget=h,y.updateGridSize=i,y.updateRendering=k,y.getPositions=s,y.rasterizeCoords=v,y.updateWidget=n,y.getWidgetRenderPosition=p,y.getWidgetStyle=q,y.isPointObstructed=t,y.isAreaObstructed=u,y.highlightArea=w,y.resetHighlights=x,c.$watch("columns",i),c.$watch("rows",i),c.$watch("options",j,!0),k();var z=!1}]),angular.module("widgetGrid").directive("wgGrid",function(){return{scope:{columns:"=wgColumns",rows:"=wgRows",options:"=?wgOptions"},restrict:"AE",controller:"wgGridController",controllerAs:"gridCtrl",transclude:!0,replace:!0,templateUrl:"wg-grid"}})}(),function(){angular.module("widgetGrid").directive("wgMovable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-movable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}},controller:["$attrs","$parse","$scope",function(a,b,c){var d=this,e=!0;d.isMovable=function(){var d=b(a.wgMovable)(c);return angular.isDefined(d)&&angular.isDefined(d.enabled)?d.enabled:e}}],controllerAs:"movableCtrl"}}]),angular.module("widgetGrid").directive("wgMover",["$document","gridUtil","PathIterator",function(a,b,c){return{restrict:"A",require:["^wgGrid","^wgMovable"],link:function(b,d,e,f){function g(c){function e(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var b=Math.round(a.clientX)-r.left,c=Math.round(a.clientY)-r.top;p.top=Math.min(Math.max(c-q.top,0),r.height-o.height-1),p.left=Math.min(Math.max(b-q.left,0),r.width-o.width-1);var d=h(n,p,o,s,t);i.highlightArea(d),k.css({top:p.top+"px",left:p.left+"px"})}function f(c){if(c.preventDefault(),a.off(l,e),a.off(m,f),i.options.clickThrough&&c.clientX===g.x&&c.clientY===g.y){d.hide();var j=document.elementFromPoint(g.x,g.y);d.show(),angular.element(j).trigger("click")}var q=h(n,p,o,s,t);i.resetHighlights(),k.removeClass("wg-moving"),b.setWidgetPosition(q)}c.preventDefault(),angular.isObject(c.originalEvent)&&(c=c.originalEvent);var g={x:c.clientX,y:c.clientY},j=d[0].parentElement,k=angular.element(j);k.addClass("wg-moving");var n={};n=i.getWidgetRenderPosition(b.widget),n.bottom=n.top+n.height-1,n.right=n.left+n.width-1;var o={};o.top=j.offsetTop,o.left=j.offsetLeft,o.height=j.clientHeight,o.width=j.clientWidth,c.offsetX=c.offsetX||c.layerX,c.offsetY=c.offsetY||c.layerY;var p={top:o.top,left:o.left},q={top:c.offsetY+d[0].offsetTop||0,left:c.offsetX+d[0].offsetLeft||0},r=i.getPositions(),s=i.grid.cellSize.height/100*r.height,t=i.grid.cellSize.width/100*r.width;a.on(l,e),a.on(m,f)}function h(a,b,d,e,f){if(d.top===b.top&&d.left===b.left)return a;var g,h;g=b.top%e>e/2?b.top+Math.floor(e):b.top,h=b.left%f>f/2?b.left+Math.floor(f):b.left;for(var j=g>=d.top,k=h>=d.left,l=i.rasterizeCoords(h,g),m=new c(l,a);m.hasNext();){var n=m.next(),o={top:n.top,left:n.left,height:a.height,width:a.width},p={excludedArea:a,fromBottom:j,fromRight:k};if(!i.isAreaObstructed(o,p)){if(l.topo.top)for(;l.top>=o.top+1&&!i.isAreaObstructed({top:o.top+1,left:o.left,height:o.height,width:o.width},p);)o.top++;if(l.lefto.left)for(;l.left>=o.left+1&&!i.isAreaObstructed({top:o.top,left:o.left+1,height:o.height,width:o.width},p);)o.left++;return o}}}var i=f[0],j=f[1];if(j.isMovable()){var k,l,m;window.navigator.pointerEnabled?(k="pointerdown",l="pointermove",m="pointerup"):(k="mousedown touchstart",l="mousemove touchmove",m="mouseup touchend touchcancel"),d.on(k,g)}}}}])}(),function(){angular.module("widgetGrid").directive("wgResizable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-resizable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}},controller:["$attrs","$parse","$scope",function(a,b,c){var d=this,e=["NW","N","NE","E","SE","S","SW","W"],f=!0;d.getResizeDirections=function(){if(d.isResizable()){var f=b(a.wgResizable)(c);return f&&f.directions?f.directions:e}return[]},d.isResizable=function(){var d=b(a.wgResizable)(c);return angular.isDefined(d)&&angular.isDefined(d.enabled)?d.enabled:f}}],controllerAs:"resizableCtrl"}}]),angular.module("widgetGrid").directive("wgResizer",["$document",function(a){var b=42,c=42;return{restrict:"A",require:["^wgGrid","^wgResizable"],link:function(d,e,f,g){function h(e,f){function g(g){function h(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var d=Math.round(a.clientX)-u.left,g=Math.round(a.clientY)-u.top;e.up?(s.top=Math.min(Math.max(g-t.top,0),u.height)-r.top,s.top=Math.min(s.top,r.height-b)):e.down&&(s.bottom=r.bottom-Math.min(Math.max(g-t.bottom,0),u.height),s.bottom=Math.min(s.bottom,r.height-b)),e.left?(s.left=Math.min(Math.max(d-t.left,0),u.width)-r.left,s.left=Math.min(s.left,r.width-c)):e.right&&(s.right=r.right-Math.min(Math.max(d-t.right,0),u.width),s.right=Math.min(s.right,r.width-c));var h=m();l.highlightArea(h),f.css({top:s.top+"px",left:s.left+"px",bottom:s.bottom+"px",right:s.right+"px"})}function i(b){b.preventDefault(),a.off(j,h),a.off(k,i);var c=m();d.setWidgetPosition(c),l.resetHighlights(),p.removeClass("wg-resizing"),e.element.removeClass("dragging"),f.removeAttr("style")}function m(){var a,b,c,d={},f=l.rasterizeCoords(r.left+s.left+1,r.top+s.top+1),g=l.rasterizeCoords(r.right-s.right-1,r.bottom-s.bottom-1),h={top:f.top,right:g.left,bottom:g.top,left:f.left};if(e.up&&h.toph.top;){for(a=!1,c=Math.max(q.left,h.left);c<=Math.min(q.right,h.right);c++)if(l.isPointObstructed(d.top-1,c)){a=!0;break}if(a)break;d.top--}else if(e.down&&h.bottom>q.bottom)for(d.bottom=q.bottom;d.bottomh.left;){for(a=!1,b=d.top;b<=d.bottom;b++)if(l.isPointObstructed(b,d.left-1)){a=!0;break}if(a)break;d.left--}else if(e.right&&h.right>q.right)for(d.right=q.right;d.right
')},E:{up:!1,right:!0,down:!1,left:!1,element:angular.element('
')},S:{up:!1,right:!1,down:!0,left:!1,element:angular.element('
')},W:{up:!1,right:!1,down:!1,left:!0,element:angular.element('
')},NW:{up:!0,right:!1,down:!1,left:!0,element:angular.element('
')},NE:{up:!0,right:!0,down:!1,left:!1,element:angular.element('
')},SE:{up:!1,right:!0,down:!0,left:!1,element:angular.element('
')},SW:{up:!1,right:!1,down:!0,left:!0,element:angular.element('
')}},o=m.getResizeDirections(),p=0;p=1?100/b:0,e=c>=1?100/c:0;return new a(d,e)},a})}(),function(){var a=4,b=4;angular.module("widgetGrid").factory("Grid",["CellSize",function(c){var d=function(d,e){this.widgets=[],this.rows=parseInt(d)||b,this.columns=parseInt(e)||a,this.cellSize=c.create(this.rows,this.columns)};return d.prototype.add=function(a){this.widgets.push(a)},d.prototype.remove=function(a){var b=this.widgets.indexOf(a);b>=0&&this.widgets.splice(b,1)},d.prototype.resize=function(a,b){b=parseInt(b)||0,a=parseInt(a)||0,(b>0&&a>0&&b!==this.columns||a!==this.rows)&&(this.columns=b,this.rows=a,this.cellSize=c.create(this.rows,this.columns))},d}])}(),function(){angular.module("widgetGrid").factory("GridArea",function(){var a=function(a,b,c,d){this.top=parseInt(a)||0,this.left=parseInt(b)||0,this.height=parseInt(c)||0,this.width=parseInt(d)||0};return a.create=function(b,c){var d=c.left-b.left+1,e=c.top-b.top+1;return new a(b.top,b.left,d,e)},a.empty=new a,a.prototype.getBottom=function(){return this.top+this.height-1},a.prototype.getRight=function(){return this.left+this.width-1},a.prototype.getSurfaceArea=function(){return this.height*this.width},a})}(),function(){angular.module("widgetGrid").factory("GridPoint",function(){var a=function(a,b){this.top=parseInt(a)||1,this.left=parseInt(b)||1};return a})}(),function(){angular.module("widgetGrid").factory("GridRendering",["GridArea","GridPoint",function(a,b){function c(b,c){if(!(angular.isDefined(c)&&angular.isDefined(c.grid)&&angular.isNumber(c.grid.columns)&&angular.isNumber(c.grid.rows)))return null;for(var d=null,e=0,f=c.grid.columns,g=b.top;g<=c.grid.rows;g++)for(var h=b.left;f>=h;h++)if(c._isObstructed(g,h))f=h-1;else{var i=g-b.top+1,j=h-b.left+1,k=i*j;k>e&&(e=k,d=new a(b.top,b.left,i,j))}return d}var d=function(a){this.grid=a||{rows:0,columns:0},this.positions={},this.cachedNextPosition=void 0,this.obstructions=[];for(var b=0;ba||1>b||b>this.grid.columns||a>this.grid.rows?!0:c&&c.top<=a&&a<=c.bottom&&c.left<=b&&b<=c.right?!1:this._isObstructed(a,b)},d.prototype._isObstructed=function(a,b){return 1===this.obstructions[(a-1)*this.grid.columns+(b-1)]},d.prototype.isAreaObstructed=function(a,b){if(!a)return!1;b=angular.isObject(b)?b:{};var c=a.top,d=a.left,e=a.bottom||a.top+a.height-1,f=a.right||a.left+a.width-1;if(!(angular.isNumber(c)&&angular.isNumber(d)&&angular.isNumber(e)&&angular.isNumber(f)))return!1;for(var g=b.fromBottom?e:c,h=b.fromBottom?-1:1,i=(b.fromBottom?c:e)+h,j=b.fromRight?f:d,k=b.fromRight?-1:1,l=(b.fromRight?d:f)+k,m=g;m!==i;m+=h)for(var n=j;n!==l;n+=k)if(this.isObstructed(m,n,b.excludedArea))return!0;return!1},d.prototype.getStyle=function(a){a=a.id||a;var b=this.positions[a];return b?{top:((b.top-1)*this.grid.cellSize.height).toString()+"%",height:(b.height*this.grid.cellSize.height).toString()+"%",left:((b.left-1)*this.grid.cellSize.width).toString()+"%",width:(b.width*this.grid.cellSize.width).toString()+"%"}:{display:"none"}},d.prototype.setObstructionValues=function(a,b){for(var c=a.top-1;ci)break;d=c(new b(g,h),this),f=d.getSurfaceArea(),f>e&&(e=f,a=d)}return a},d}])}(),function(){angular.module("widgetGrid").factory("PathIterator",["GridPoint",function(a){var b=function(b,c){this.start=b,this.topDelta=c.top-b.top,this.leftDelta=c.left-b.left,this.steps=Math.max(Math.abs(this.topDelta),Math.abs(this.leftDelta)),this.currStep=0,this.currPos=null,this.nextPos=new a(b.top,b.left)};return b.prototype.next=function(){if(this.currPos=this.nextPos,this.currStep
'),a.put("wg-movable","
"),a.put("wg-resizable",'
'),a.put("wg-widget","
")}]); //# sourceMappingURL=angular-widget-grid.min.js.map \ No newline at end of file diff --git a/angular-widget-grid.min.js.map b/angular-widget-grid.min.js.map index 22b4fc8..f5673ec 100644 --- a/angular-widget-grid.min.js.map +++ b/angular-widget-grid.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["angular-widget-grid.js"],"names":["angular","module","directive","scope","rendering","highlight","options","restrict","replace","template","link","element","applyRendering","isDefined","updateGridLines","applyOptions","applyHighlight","clearHighlights","isArray","i","length","highlightArea","clearGridLines","showGrid","showGridLines","x","y","gridLine","cellHeight","grid","cellSize","height","cellWidth","width","rows","append","activeGridLines","push","columns","forEach","activeHighlights","activeHighlight","remove","activeGridLine","area","addClass","css","top","left","$watch","DEFAULT_OPTIONS","highlightNextPosition","clickThrough","controller","$element","$scope","$timeout","Grid","gridRenderer","addWidget","widget","vm","add","updateRendering","removeWidget","updateGridSize","parseInt","resize","updateOptions","extend","overlayOptions","updateNextPositionHighlight","resetHighlights","render","emitUpdatePosition","assessAvailableGridSpace","$broadcast","$emit","index","getWidgetIndex","newPosition","getPosition","gridHasSpaceLeft","hasSpaceLeft","usedToBeFull","updateWidget","setWidgetPosition","id","nextPos","getNextPosition","getWidgetPosition","getWidgetStyle","getStyle","widgets","getPositions","gridContainer","rect","getBoundingClientRect","getClientRects","doc","ownerDocument","docElem","documentElement","window","pageYOffset","clientTop","pageXOffset","clientLeft","isPointObstructed","j","isObstructed","isAreaObstructed","rasterizeCoords","clientWidth","clientHeight","this","getWidgetRenderPosition","controllerAs","transclude","templateUrl","gridUtil","require","pre","attrs","widgetCtrl","templateContent","getTemplate","innerCompile","$document","PathIterator","gridCtrl","onDown","event","onMove","preventDefault","isObject","originalEvent","touches","clientX","clientY","dragPositionX","Math","round","gridPositions","dragPositionY","desiredPosition","min","max","moverOffset","startRender","currentFinalPos","determineFinalPos","startPosition","widgetElement","onUp","off","eventMove","eventUp","mouseDownPosition","hide","elBeneath","document","elementFromPoint","show","trigger","finalPos","removeClass","widgetContainer","parentElement","bottom","right","offsetTop","offsetLeft","offsetX","layerX","offsetY","layerY","on","anchorTop","anchorLeft","floor","movedDown","movedRight","desiredFinalPosition","path","hasNext","currPos","next","targetArea","excludedArea","fromBottom","fromRight","eventDown","navigator","pointerEnabled","$attrs","$parse","DEFAULT_DIRECTIONS","getResizeDirections","attrValue","wgResizable","directions","MIN_HEIGHT","MIN_WIDTH","ctrls","registerDragHandler","dragger","containerElement","up","delta","draggerOffset","down","removeAttr","foundCollision","requestedStartPoint","requestedEndPoint","requestedPos","startPos","container","ceil","offsetHeight","offsetWidth","resizableCtrl","draggers","N","E","S","W","NW","NE","SE","SW","uppercase","$compile","Widget","position","editable","oldPosition","setPosition","equals","updateView","newValue","oldValue","$on","factory","CellSize","parseFloat","create","rowCount","columnCount","DEFAULT_COLUMNS","DEFAULT_ROWS","prototype","widgetIndex","indexOf","splice","GridArea","start","end","empty","getBottom","getRight","getSurfaceArea","GridPoint","_findLargestEmptyAreaFrom","isNumber","maxArea","maxSurfaceArea","endColumn","_isObstructed","currHeight","currWidth","currSurfaceArea","GridRendering","positions","cachedNextPosition","undefined","obstructions","gridWidth","gridHeight","getWidgetIdAt","widgetId","currPosition","setObstructionValues","maxPosition","findLargestEmptyArea","verticalStart","verticalStep","verticalEnd","horizontalStart","horizontalStep","horizontalEnd","toString","display","value","printObstructions","row","console","log","currMaxArea","currMaxSurfaceArea","currAreaLimit","topDelta","leftDelta","steps","abs","currStep","currTopDelta","currLeftDelta","generateUID","nextId","gridArea","service","emitWidgetPositionUpdated","unpositionedWidgets","nextPosition","$templateCache","templateName","get","sortWidgets","sorted","curr","comp","found","run","put"],"mappings":"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","file":"angular-widget-grid.min.js"} \ No newline at end of file +{"version":3,"sources":["angular-widget-grid.js"],"names":["angular","module","directive","scope","rendering","highlight","options","restrict","replace","template","link","element","applyRendering","isDefined","updateGridLines","applyOptions","applyHighlight","clearHighlights","isArray","i","length","highlightArea","clearGridLines","showGrid","showGridLines","x","y","gridLine","cellHeight","grid","cellSize","height","cellWidth","width","rows","append","activeGridLines","push","columns","forEach","activeHighlights","activeHighlight","remove","activeGridLine","area","addClass","css","top","left","$watch","DEFAULT_OPTIONS","highlightNextPosition","clickThrough","controller","$element","$scope","$timeout","Grid","gridRenderer","addWidget","widget","vm","add","updateRendering","removeWidget","updateGridSize","parseInt","resize","updateOptions","extend","overlayOptions","maxHeight","maxWidth","updateNextPositionHighlight","resetHighlights","render","emitUpdatePosition","assessAvailableGridSpace","$broadcast","$emit","index","getWidgetIndex","newPosition","getPosition","gridHasSpaceLeft","hasSpaceLeft","usedToBeFull","updateWidget","setWidgetPosition","id","nextPos","getNextPosition","getWidgetPosition","getWidgetStyle","getStyle","widgets","getPositions","gridContainer","rect","getBoundingClientRect","getClientRects","doc","ownerDocument","docElem","documentElement","window","pageYOffset","clientTop","pageXOffset","clientLeft","isPointObstructed","j","isObstructed","isAreaObstructed","rasterizeCoords","clientWidth","clientHeight","this","getWidgetRenderPosition","controllerAs","transclude","templateUrl","gridUtil","require","pre","attrs","widgetCtrl","templateContent","getTemplate","innerCompile","$attrs","$parse","DEFAULT_MOVABLE","isMovable","attrValue","wgMovable","enabled","$document","PathIterator","ctrls","onDown","event","onMove","preventDefault","isObject","originalEvent","touches","clientX","clientY","dragPositionX","Math","round","gridPositions","dragPositionY","desiredPosition","min","max","moverOffset","startRender","currentFinalPos","determineFinalPos","startPosition","gridCtrl","widgetElement","onUp","off","eventMove","eventUp","mouseDownPosition","hide","elBeneath","document","elementFromPoint","show","trigger","finalPos","removeClass","widgetContainer","parentElement","bottom","right","offsetTop","offsetLeft","offsetX","layerX","offsetY","layerY","on","anchorTop","anchorLeft","floor","movedDown","movedRight","desiredFinalPosition","path","hasNext","currPos","next","targetArea","excludedArea","fromBottom","fromRight","movableCtrl","eventDown","navigator","pointerEnabled","DEFAULT_DIRECTIONS","DEFAULT_RESIZABLE","getResizeDirections","isResizable","wgResizable","directions","MIN_HEIGHT","MIN_WIDTH","registerDragHandler","dragger","containerElement","up","delta","draggerOffset","down","removeAttr","foundCollision","requestedStartPoint","requestedEndPoint","requestedPos","startPos","container","ceil","offsetHeight","offsetWidth","resizableCtrl","draggers","N","E","S","W","NW","NE","SE","SW","uppercase","$compile","Widget","position","editable","oldPosition","setPosition","equals","updateView","wgEditable","newValue","oldValue","$on","factory","CellSize","parseFloat","create","rowCount","columnCount","DEFAULT_COLUMNS","DEFAULT_ROWS","prototype","widgetIndex","indexOf","splice","GridArea","start","end","empty","getBottom","getRight","getSurfaceArea","GridPoint","_findLargestEmptyAreaFrom","isNumber","maxArea","maxSurfaceArea","endColumn","_isObstructed","currHeight","currWidth","currSurfaceArea","GridRendering","positions","cachedNextPosition","undefined","obstructions","gridWidth","gridHeight","getWidgetIdAt","widgetId","currPosition","setObstructionValues","maxPosition","findLargestEmptyArea","verticalStart","verticalStep","verticalEnd","horizontalStart","horizontalStep","horizontalEnd","toString","display","value","printObstructions","row","console","log","currMaxArea","currMaxSurfaceArea","currAreaLimit","topDelta","leftDelta","steps","abs","currStep","currTopDelta","currLeftDelta","generateUID","nextId","gridArea","service","emitWidgetPositionUpdated","unpositionedWidgets","nextPosition","$templateCache","templateName","get","sortWidgets","sorted","curr","comp","found","run","put"],"mappings":"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","file":"angular-widget-grid.min.js"} \ No newline at end of file diff --git a/demo/lib/angular-widget-grid.min.js b/demo/lib/angular-widget-grid.min.js index 9317ead..1ace4bd 100644 --- a/demo/lib/angular-widget-grid.min.js +++ b/demo/lib/angular-widget-grid.min.js @@ -1,9 +1,9 @@ /** - * @license angular-widget-grid v0.2.5 + * @license angular-widget-grid v0.3.0 * (c) 2016 Patrick Buergin * License: MIT * https://github.com/patbuergin/angular-widget-grid */ -!function(){angular.module("widgetGrid",[])}(),function(){angular.module("widgetGrid").directive("wgGridOverlay",function(){return{scope:{rendering:"=",highlight:"=?",options:"=?"},restrict:"AE",replace:!0,template:'
',link:function(a,b){function c(b){angular.isDefined(b)&&f(b,a.options)}function d(b){f(a.rendering,b)}function e(b){if(h(),null!==b)if(angular.isArray(b))for(var c=0;c
',f=angular.element(f),b.append(f),l.push(f);for(c=1;c',f=angular.element(f),b.append(f),l.push(f)}function h(){angular.forEach(k,function(a){a.remove()}),k=[]}function i(){angular.forEach(l,function(a){a.remove()}),l=[]}function j(a,c){var d=c.grid.cellSize.height,e=c.grid.cellSize.width,f=angular.element("
");f.addClass("wg-preview-item"),f.addClass("wg-preview-highlight"),f.css("top",(a.top-1)*d+"%"),f.css("left",(a.left-1)*e+"%"),f.css("height",a.height*d+"%"),f.css("width",a.width*e+"%"),b.append(f),k.push(f)}var k=[],l=[];a.options=a.options||{showGrid:!1},a.$watch("highlight",e),a.$watch("options",d,!0),a.$watch("rendering",c)}}})}(),function(){var a={showGrid:!1,highlightNextPosition:!1,clickThrough:!1};angular.module("widgetGrid").controller("wgGridController",["$element","$scope","$timeout","Grid","gridRenderer",function(b,c,d,e,f){function g(a){y.grid.add(a),k()}function h(a){y.grid.remove(a),k()}function i(){var a=parseInt(c.columns),b=parseInt(c.rows);y.grid.columns===a&&y.grid.rows===b||(y.grid.resize(b,a),k())}function j(){y.options=angular.extend({},a,c.options),y.overlayOptions.showGrid=y.options.showGrid,y.options.highlightNextPosition?o():x()}function k(){y.rendering=f.render(y.grid,l),o(),m(),c.$broadcast("wg-update-rendering")}function l(a){c.$emit("wg-update-position",{index:r(a),newPosition:a.getPosition()})}function m(){var a=y.rendering.hasSpaceLeft();a&&z?(c.$emit("wg-grid-space-available"),z=!1):a||z||(c.$emit("wg-grid-full"),z=!0)}function n(a){var b=a.getPosition();y.rendering.setWidgetPosition(a.id,b),l(a),m()}function o(){if(y.options.highlightNextPosition){var a=y.rendering.getNextPosition();y.highlight=a}}function p(a){return y.rendering.getWidgetPosition(a.id)}function q(a){return y.rendering.getStyle(a.id)}function r(a){for(var b=y.grid.widgets.length-1;b>=0;b--)if(y.grid.widgets[b].id===a.id)return b;return-1}function s(){var a=b[0],c=a.getBoundingClientRect();if(c.width||c.height||a.getClientRects().length){var d=a.ownerDocument,e=d.documentElement;return{top:c.top+window.pageYOffset-e.clientTop,left:c.left+window.pageXOffset-e.clientLeft,height:c.height,width:c.width}}return{top:0,left:0,height:0,width:0}}function t(a,b){return y.rendering?y.rendering.isObstructed(a,b):!0}function u(a,b){return y.rendering?y.rendering.isAreaObstructed(a,b):!0}function v(a,c){return y.rendering.rasterizeCoords(a,c,b[0].clientWidth,b[0].clientHeight)}function w(a){a.top&&a.left&&a.height&&a.width&&d(function(){y.highlight=a})}function x(){d(function(){y.highlight=null})}var y=this;y.grid=new e(c.rows,c.columns),y.rendering=null,y.highlight=null,y.options=a,y.overlayOptions={},y.addWidget=g,y.removeWidget=h,y.updateGridSize=i,y.updateRendering=k,y.getPositions=s,y.rasterizeCoords=v,y.updateWidget=n,y.getWidgetRenderPosition=p,y.getWidgetStyle=q,y.isPointObstructed=t,y.isAreaObstructed=u,y.highlightArea=w,y.resetHighlights=x,c.$watch("columns",i),c.$watch("rows",i),c.$watch("options",j,!0),k();var z=!1}]),angular.module("widgetGrid").directive("wgGrid",function(){return{scope:{columns:"@",rows:"@",options:"=?"},restrict:"AE",controller:"wgGridController",controllerAs:"gridCtrl",transclude:!0,replace:!0,templateUrl:"wg-grid"}})}(),function(){angular.module("widgetGrid").directive("wgMovable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-movable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}}}}]),angular.module("widgetGrid").directive("wgMover",["$document","gridUtil","PathIterator",function(a,b,c){return{restrict:"A",require:"^wgGrid",link:function(b,d,e,f){function g(c){function e(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var b=Math.round(a.clientX)-r.left,c=Math.round(a.clientY)-r.top;p.top=Math.min(Math.max(c-q.top,0),r.height-o.height-1),p.left=Math.min(Math.max(b-q.left,0),r.width-o.width-1);var d=h(n,p,o,s,t);f.highlightArea(d),m.css({top:p.top+"px",left:p.left+"px"})}function g(c){if(c.preventDefault(),a.off(j,e),a.off(k,g),f.options.clickThrough&&c.clientX===i.x&&c.clientY===i.y){d.hide();var l=document.elementFromPoint(i.x,i.y);d.show(),angular.element(l).trigger("click")}var q=h(n,p,o,s,t);f.resetHighlights(),m.removeClass("wg-moving"),b.setWidgetPosition(q)}c.preventDefault(),angular.isObject(c.originalEvent)&&(c=c.originalEvent);var i={x:c.clientX,y:c.clientY},l=d[0].parentElement,m=angular.element(l);m.addClass("wg-moving");var n={};n=f.getWidgetRenderPosition(b.widget),n.bottom=n.top+n.height-1,n.right=n.left+n.width-1;var o={};o.top=l.offsetTop,o.left=l.offsetLeft,o.height=l.clientHeight,o.width=l.clientWidth,c.offsetX=c.offsetX||c.layerX,c.offsetY=c.offsetY||c.layerY;var p={top:o.top,left:o.left},q={top:c.offsetY+d[0].offsetTop||0,left:c.offsetX+d[0].offsetLeft||0},r=f.getPositions(),s=f.grid.cellSize.height/100*r.height,t=f.grid.cellSize.width/100*r.width;a.on(j,e),a.on(k,g)}function h(a,b,d,e,g){if(d.top===b.top&&d.left===b.left)return a;var h,i;h=b.top%e>e/2?b.top+Math.floor(e):b.top,i=b.left%g>g/2?b.left+Math.floor(g):b.left;for(var j=h>=d.top,k=i>=d.left,l=f.rasterizeCoords(i,h),m=new c(l,a);m.hasNext();){var n=m.next(),o={top:n.top,left:n.left,height:a.height,width:a.width},p={excludedArea:a,fromBottom:j,fromRight:k};if(!f.isAreaObstructed(o,p)){if(l.topo.top)for(;l.top>=o.top+1&&!f.isAreaObstructed({top:o.top+1,left:o.left,height:o.height,width:o.width},p);)o.top++;if(l.lefto.left)for(;l.left>=o.left+1&&!f.isAreaObstructed({top:o.top,left:o.left+1,height:o.height,width:o.width},p);)o.left++;return o}}}var i,j,k;window.navigator.pointerEnabled?(i="pointerdown",j="pointermove",k="pointerup"):(i="mousedown touchstart",j="mousemove touchmove",k="mouseup touchend touchcancel"),d.on(i,g)}}}])}(),function(){angular.module("widgetGrid").directive("wgResizable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-resizable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}},controller:["$attrs","$parse","$scope",function(a,b,c){var d=this,e=["NW","N","NE","E","SE","S","SW","W"];d.getResizeDirections=function(){var d=b(a.wgResizable)(c);return d&&d.directions?d.directions:e}}],controllerAs:"resizableCtrl"}}]),angular.module("widgetGrid").directive("wgResizer",["$document",function(a){var b=42,c=42;return{restrict:"A",require:["^wgGrid","^wgResizable"],link:function(d,e,f,g){function h(e,f){function g(g){function h(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var d=Math.round(a.clientX)-u.left,g=Math.round(a.clientY)-u.top;e.up?(s.top=Math.min(Math.max(g-t.top,0),u.height)-r.top,s.top=Math.min(s.top,r.height-b)):e.down&&(s.bottom=r.bottom-Math.min(Math.max(g-t.bottom,0),u.height),s.bottom=Math.min(s.bottom,r.height-b)),e.left?(s.left=Math.min(Math.max(d-t.left,0),u.width)-r.left,s.left=Math.min(s.left,r.width-c)):e.right&&(s.right=r.right-Math.min(Math.max(d-t.right,0),u.width),s.right=Math.min(s.right,r.width-c));var h=m();l.highlightArea(h),f.css({top:s.top+"px",left:s.left+"px",bottom:s.bottom+"px",right:s.right+"px"})}function i(b){b.preventDefault(),a.off(j,h),a.off(k,i);var c=m();d.setWidgetPosition(c),l.resetHighlights(),p.removeClass("wg-resizing"),e.element.removeClass("dragging"),f.removeAttr("style")}function m(){var a,b,c,d={},f=l.rasterizeCoords(r.left+s.left+1,r.top+s.top+1),g=l.rasterizeCoords(r.right-s.right-1,r.bottom-s.bottom-1),h={top:f.top,right:g.left,bottom:g.top,left:f.left};if(e.up&&h.toph.top;){for(a=!1,c=Math.max(q.left,h.left);c<=Math.min(q.right,h.right);c++)if(l.isPointObstructed(d.top-1,c)){a=!0;break}if(a)break;d.top--}else if(e.down&&h.bottom>q.bottom)for(d.bottom=q.bottom;d.bottomh.left;){for(a=!1,b=d.top;b<=d.bottom;b++)if(l.isPointObstructed(b,d.left-1)){a=!0;break}if(a)break;d.left--}else if(e.right&&h.right>q.right)for(d.right=q.right;d.right
')},E:{up:!1,right:!0,down:!1,left:!1,element:angular.element('
')},S:{up:!1,right:!1,down:!0,left:!1,element:angular.element('
')},W:{up:!1,right:!1,down:!1,left:!0,element:angular.element('
')},NW:{up:!0,right:!1,down:!1,left:!0,element:angular.element('
')},NE:{up:!0,right:!0,down:!1,left:!1,element:angular.element('
')},SE:{up:!1,right:!0,down:!0,left:!1,element:angular.element('
')},SW:{up:!1,right:!1,down:!0,left:!0,element:angular.element('
')}},o=m.getResizeDirections(),p=0;p=1?100/b:0,e=c>=1?100/c:0;return new a(d,e)},a})}(),function(){var a=4,b=4;angular.module("widgetGrid").factory("Grid",["CellSize",function(c){var d=function(d,e){this.widgets=[],this.rows=parseInt(d)||b,this.columns=parseInt(e)||a,this.cellSize=c.create(this.rows,this.columns)};return d.prototype.add=function(a){this.widgets.push(a)},d.prototype.remove=function(a){var b=this.widgets.indexOf(a);b>=0&&this.widgets.splice(b,1)},d.prototype.resize=function(a,b){b=parseInt(b)||0,a=parseInt(a)||0,(b>0&&a>0&&b!==this.columns||a!==this.rows)&&(this.columns=b,this.rows=a,this.cellSize=c.create(this.rows,this.columns))},d}])}(),function(){angular.module("widgetGrid").factory("GridArea",function(){var a=function(a,b,c,d){this.top=parseInt(a)||0,this.left=parseInt(b)||0,this.height=parseInt(c)||0,this.width=parseInt(d)||0};return a.create=function(b,c){var d=c.left-b.left+1,e=c.top-b.top+1;return new a(b.top,b.left,d,e)},a.empty=new a,a.prototype.getBottom=function(){return this.top+this.height-1},a.prototype.getRight=function(){return this.left+this.width-1},a.prototype.getSurfaceArea=function(){return this.height*this.width},a})}(),function(){angular.module("widgetGrid").factory("GridPoint",function(){var a=function(a,b){this.top=parseInt(a)||1,this.left=parseInt(b)||1};return a})}(),function(){angular.module("widgetGrid").factory("GridRendering",["GridArea","GridPoint",function(a,b){function c(b,c){if(!(angular.isDefined(c)&&angular.isDefined(c.grid)&&angular.isNumber(c.grid.columns)&&angular.isNumber(c.grid.rows)))return null;for(var d=null,e=0,f=c.grid.columns,g=b.top;g<=c.grid.rows;g++)for(var h=b.left;f>=h;h++)if(c._isObstructed(g,h))f=h-1;else{var i=g-b.top+1,j=h-b.left+1,k=i*j;k>e&&(e=k,d=new a(b.top,b.left,i,j))}return d}var d=function(a){this.grid=a||{rows:0,columns:0},this.positions={},this.cachedNextPosition=void 0,this.obstructions=[];for(var b=0;ba||1>b||b>this.grid.columns||a>this.grid.rows?!0:c&&c.top<=a&&a<=c.bottom&&c.left<=b&&b<=c.right?!1:this._isObstructed(a,b)},d.prototype._isObstructed=function(a,b){return 1===this.obstructions[(a-1)*this.grid.columns+(b-1)]},d.prototype.isAreaObstructed=function(a,b){if(!a)return!1;b=angular.isObject(b)?b:{};var c=a.top,d=a.left,e=a.bottom||a.top+a.height-1,f=a.right||a.left+a.width-1;if(!(angular.isNumber(c)&&angular.isNumber(d)&&angular.isNumber(e)&&angular.isNumber(f)))return!1;for(var g=b.fromBottom?e:c,h=b.fromBottom?-1:1,i=(b.fromBottom?c:e)+h,j=b.fromRight?f:d,k=b.fromRight?-1:1,l=(b.fromRight?d:f)+k,m=g;m!==i;m+=h)for(var n=j;n!==l;n+=k)if(this.isObstructed(m,n,b.excludedArea))return!0;return!1},d.prototype.getStyle=function(a){a=a.id||a;var b=this.positions[a];return b?{top:((b.top-1)*this.grid.cellSize.height).toString()+"%",height:(b.height*this.grid.cellSize.height).toString()+"%",left:((b.left-1)*this.grid.cellSize.width).toString()+"%",width:(b.width*this.grid.cellSize.width).toString()+"%"}:{display:"none"}},d.prototype.setObstructionValues=function(a,b){for(var c=a.top-1;ci)break;d=c(new b(g,h),this),f=d.getSurfaceArea(),f>e&&(e=f,a=d)}return a},d}])}(),function(){angular.module("widgetGrid").factory("PathIterator",["GridPoint",function(a){var b=function(b,c){this.start=b,this.topDelta=c.top-b.top,this.leftDelta=c.left-b.left,this.steps=Math.max(Math.abs(this.topDelta),Math.abs(this.leftDelta)),this.currStep=0,this.currPos=null,this.nextPos=new a(b.top,b.left)};return b.prototype.next=function(){if(this.currPos=this.nextPos,this.currStep
'),a.put("wg-movable",'
'),a.put("wg-resizable",'
'),a.put("wg-widget","
")}]); +!function(){angular.module("widgetGrid",[])}(),function(){angular.module("widgetGrid").directive("wgGridOverlay",function(){return{scope:{rendering:"=wgRendering",highlight:"=?wgHighlight",options:"=?wgOptions"},restrict:"AE",replace:!0,template:'
',link:function(a,b){function c(b){angular.isDefined(b)&&f(b,a.options)}function d(b){f(a.rendering,b)}function e(b){if(h(),null!==b)if(angular.isArray(b))for(var c=0;c',f=angular.element(f),b.append(f),l.push(f);for(c=1;c',f=angular.element(f),b.append(f),l.push(f)}function h(){angular.forEach(k,function(a){a.remove()}),k=[]}function i(){angular.forEach(l,function(a){a.remove()}),l=[]}function j(a,c){var d=c.grid.cellSize.height,e=c.grid.cellSize.width,f=angular.element("
");f.addClass("wg-preview-item"),f.addClass("wg-preview-highlight"),f.css("top",(a.top-1)*d+"%"),f.css("left",(a.left-1)*e+"%"),f.css("height",a.height*d+"%"),f.css("width",a.width*e+"%"),b.append(f),k.push(f)}var k=[],l=[];a.options=a.options||{showGrid:!1},a.$watch("highlight",e),a.$watch("options",d,!0),a.$watch("rendering",c)}}})}(),function(){var a={showGrid:!1,highlightNextPosition:!1,clickThrough:!1};angular.module("widgetGrid").controller("wgGridController",["$element","$scope","$timeout","Grid","gridRenderer",function(b,c,d,e,f){function g(a){y.grid.add(a),k()}function h(a){y.grid.remove(a),k()}function i(){var a=parseInt(c.columns),b=parseInt(c.rows);y.grid.columns===a&&y.grid.rows===b||(y.grid.resize(b,a),k())}function j(){y.options=angular.extend({},a,c.options),y.overlayOptions.showGrid=y.options.showGrid,y.grid.maxHeight=y.options.maxHeight,y.grid.maxWidth=y.options.maxWidth,y.options.highlightNextPosition?o():x()}function k(){y.rendering=f.render(y.grid,l),o(),m(),c.$broadcast("wg-update-rendering")}function l(a){c.$emit("wg-update-position",{index:r(a),newPosition:a.getPosition()})}function m(){var a=y.rendering.hasSpaceLeft();a&&z?(c.$emit("wg-grid-space-available"),z=!1):a||z||(c.$emit("wg-grid-full"),z=!0)}function n(a){var b=a.getPosition();y.rendering.setWidgetPosition(a.id,b),l(a),m()}function o(){if(y.options.highlightNextPosition){var a=y.rendering.getNextPosition();y.highlight=a}}function p(a){return y.rendering.getWidgetPosition(a.id)}function q(a){return y.rendering.getStyle(a.id)}function r(a){for(var b=y.grid.widgets.length-1;b>=0;b--)if(y.grid.widgets[b].id===a.id)return b;return-1}function s(){var a=b[0],c=a.getBoundingClientRect();if(c.width||c.height||a.getClientRects().length){var d=a.ownerDocument,e=d.documentElement;return{top:c.top+window.pageYOffset-e.clientTop,left:c.left+window.pageXOffset-e.clientLeft,height:c.height,width:c.width}}return{top:0,left:0,height:0,width:0}}function t(a,b){return y.rendering?y.rendering.isObstructed(a,b):!0}function u(a,b){return y.rendering?y.rendering.isAreaObstructed(a,b):!0}function v(a,c){return y.rendering.rasterizeCoords(a,c,b[0].clientWidth,b[0].clientHeight)}function w(a){a.top&&a.left&&a.height&&a.width&&d(function(){y.highlight=a})}function x(){d(function(){y.highlight=null})}var y=this;y.grid=new e(c.rows,c.columns),y.rendering=null,y.highlight=null,y.options=a,y.overlayOptions={},y.addWidget=g,y.removeWidget=h,y.updateGridSize=i,y.updateRendering=k,y.getPositions=s,y.rasterizeCoords=v,y.updateWidget=n,y.getWidgetRenderPosition=p,y.getWidgetStyle=q,y.isPointObstructed=t,y.isAreaObstructed=u,y.highlightArea=w,y.resetHighlights=x,c.$watch("columns",i),c.$watch("rows",i),c.$watch("options",j,!0),k();var z=!1}]),angular.module("widgetGrid").directive("wgGrid",function(){return{scope:{columns:"=wgColumns",rows:"=wgRows",options:"=?wgOptions"},restrict:"AE",controller:"wgGridController",controllerAs:"gridCtrl",transclude:!0,replace:!0,templateUrl:"wg-grid"}})}(),function(){angular.module("widgetGrid").directive("wgMovable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-movable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}},controller:["$attrs","$parse","$scope",function(a,b,c){var d=this,e=!0;d.isMovable=function(){var d=b(a.wgMovable)(c);return angular.isDefined(d)&&angular.isDefined(d.enabled)?d.enabled:e}}],controllerAs:"movableCtrl"}}]),angular.module("widgetGrid").directive("wgMover",["$document","gridUtil","PathIterator",function(a,b,c){return{restrict:"A",require:["^wgGrid","^wgMovable"],link:function(b,d,e,f){function g(c){function e(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var b=Math.round(a.clientX)-r.left,c=Math.round(a.clientY)-r.top;p.top=Math.min(Math.max(c-q.top,0),r.height-o.height-1),p.left=Math.min(Math.max(b-q.left,0),r.width-o.width-1);var d=h(n,p,o,s,t);i.highlightArea(d),k.css({top:p.top+"px",left:p.left+"px"})}function f(c){if(c.preventDefault(),a.off(l,e),a.off(m,f),i.options.clickThrough&&c.clientX===g.x&&c.clientY===g.y){d.hide();var j=document.elementFromPoint(g.x,g.y);d.show(),angular.element(j).trigger("click")}var q=h(n,p,o,s,t);i.resetHighlights(),k.removeClass("wg-moving"),b.setWidgetPosition(q)}c.preventDefault(),angular.isObject(c.originalEvent)&&(c=c.originalEvent);var g={x:c.clientX,y:c.clientY},j=d[0].parentElement,k=angular.element(j);k.addClass("wg-moving");var n={};n=i.getWidgetRenderPosition(b.widget),n.bottom=n.top+n.height-1,n.right=n.left+n.width-1;var o={};o.top=j.offsetTop,o.left=j.offsetLeft,o.height=j.clientHeight,o.width=j.clientWidth,c.offsetX=c.offsetX||c.layerX,c.offsetY=c.offsetY||c.layerY;var p={top:o.top,left:o.left},q={top:c.offsetY+d[0].offsetTop||0,left:c.offsetX+d[0].offsetLeft||0},r=i.getPositions(),s=i.grid.cellSize.height/100*r.height,t=i.grid.cellSize.width/100*r.width;a.on(l,e),a.on(m,f)}function h(a,b,d,e,f){if(d.top===b.top&&d.left===b.left)return a;var g,h;g=b.top%e>e/2?b.top+Math.floor(e):b.top,h=b.left%f>f/2?b.left+Math.floor(f):b.left;for(var j=g>=d.top,k=h>=d.left,l=i.rasterizeCoords(h,g),m=new c(l,a);m.hasNext();){var n=m.next(),o={top:n.top,left:n.left,height:a.height,width:a.width},p={excludedArea:a,fromBottom:j,fromRight:k};if(!i.isAreaObstructed(o,p)){if(l.topo.top)for(;l.top>=o.top+1&&!i.isAreaObstructed({top:o.top+1,left:o.left,height:o.height,width:o.width},p);)o.top++;if(l.lefto.left)for(;l.left>=o.left+1&&!i.isAreaObstructed({top:o.top,left:o.left+1,height:o.height,width:o.width},p);)o.left++;return o}}}var i=f[0],j=f[1];if(j.isMovable()){var k,l,m;window.navigator.pointerEnabled?(k="pointerdown",l="pointermove",m="pointerup"):(k="mousedown touchstart",l="mousemove touchmove",m="mouseup touchend touchcancel"),d.on(k,g)}}}}])}(),function(){angular.module("widgetGrid").directive("wgResizable",["gridUtil",function(a){return{restrict:"A",require:"wgWidget",link:{pre:function(b,c,d,e){var f=a.getTemplate("wg-resizable");if(f){var g=angular.element(f);c.append(g),e.innerCompile(g)}}},controller:["$attrs","$parse","$scope",function(a,b,c){var d=this,e=["NW","N","NE","E","SE","S","SW","W"],f=!0;d.getResizeDirections=function(){if(d.isResizable()){var f=b(a.wgResizable)(c);return f&&f.directions?f.directions:e}return[]},d.isResizable=function(){var d=b(a.wgResizable)(c);return angular.isDefined(d)&&angular.isDefined(d.enabled)?d.enabled:f}}],controllerAs:"resizableCtrl"}}]),angular.module("widgetGrid").directive("wgResizer",["$document",function(a){var b=42,c=42;return{restrict:"A",require:["^wgGrid","^wgResizable"],link:function(d,e,f,g){function h(e,f){function g(g){function h(a){a.preventDefault(),angular.isObject(a.originalEvent)&&(a=a.originalEvent),a.touches&&(a.clientX=a.touches[0].clientX,a.clientY=a.touches[0].clientY);var d=Math.round(a.clientX)-u.left,g=Math.round(a.clientY)-u.top;e.up?(s.top=Math.min(Math.max(g-t.top,0),u.height)-r.top,s.top=Math.min(s.top,r.height-b)):e.down&&(s.bottom=r.bottom-Math.min(Math.max(g-t.bottom,0),u.height),s.bottom=Math.min(s.bottom,r.height-b)),e.left?(s.left=Math.min(Math.max(d-t.left,0),u.width)-r.left,s.left=Math.min(s.left,r.width-c)):e.right&&(s.right=r.right-Math.min(Math.max(d-t.right,0),u.width),s.right=Math.min(s.right,r.width-c));var h=m();l.highlightArea(h),f.css({top:s.top+"px",left:s.left+"px",bottom:s.bottom+"px",right:s.right+"px"})}function i(b){b.preventDefault(),a.off(j,h),a.off(k,i);var c=m();d.setWidgetPosition(c),l.resetHighlights(),p.removeClass("wg-resizing"),e.element.removeClass("dragging"),f.removeAttr("style")}function m(){var a,b,c,d={},f=l.rasterizeCoords(r.left+s.left+1,r.top+s.top+1),g=l.rasterizeCoords(r.right-s.right-1,r.bottom-s.bottom-1),h={top:f.top,right:g.left,bottom:g.top,left:f.left};if(e.up&&h.toph.top;){for(a=!1,c=Math.max(q.left,h.left);c<=Math.min(q.right,h.right);c++)if(l.isPointObstructed(d.top-1,c)){a=!0;break}if(a)break;d.top--}else if(e.down&&h.bottom>q.bottom)for(d.bottom=q.bottom;d.bottomh.left;){for(a=!1,b=d.top;b<=d.bottom;b++)if(l.isPointObstructed(b,d.left-1)){a=!0;break}if(a)break;d.left--}else if(e.right&&h.right>q.right)for(d.right=q.right;d.right
')},E:{up:!1,right:!0,down:!1,left:!1,element:angular.element('
')},S:{up:!1,right:!1,down:!0,left:!1,element:angular.element('
')},W:{up:!1,right:!1,down:!1,left:!0,element:angular.element('
')},NW:{up:!0,right:!1,down:!1,left:!0,element:angular.element('
')},NE:{up:!0,right:!0,down:!1,left:!1,element:angular.element('
')},SE:{up:!1,right:!0,down:!0,left:!1,element:angular.element('
')},SW:{up:!1,right:!1,down:!0,left:!0,element:angular.element('
')}},o=m.getResizeDirections(),p=0;p=1?100/b:0,e=c>=1?100/c:0;return new a(d,e)},a})}(),function(){var a=4,b=4;angular.module("widgetGrid").factory("Grid",["CellSize",function(c){var d=function(d,e){this.widgets=[],this.rows=parseInt(d)||b,this.columns=parseInt(e)||a,this.cellSize=c.create(this.rows,this.columns)};return d.prototype.add=function(a){this.widgets.push(a)},d.prototype.remove=function(a){var b=this.widgets.indexOf(a);b>=0&&this.widgets.splice(b,1)},d.prototype.resize=function(a,b){b=parseInt(b)||0,a=parseInt(a)||0,(b>0&&a>0&&b!==this.columns||a!==this.rows)&&(this.columns=b,this.rows=a,this.cellSize=c.create(this.rows,this.columns))},d}])}(),function(){angular.module("widgetGrid").factory("GridArea",function(){var a=function(a,b,c,d){this.top=parseInt(a)||0,this.left=parseInt(b)||0,this.height=parseInt(c)||0,this.width=parseInt(d)||0};return a.create=function(b,c){var d=c.left-b.left+1,e=c.top-b.top+1;return new a(b.top,b.left,d,e)},a.empty=new a,a.prototype.getBottom=function(){return this.top+this.height-1},a.prototype.getRight=function(){return this.left+this.width-1},a.prototype.getSurfaceArea=function(){return this.height*this.width},a})}(),function(){angular.module("widgetGrid").factory("GridPoint",function(){var a=function(a,b){this.top=parseInt(a)||1,this.left=parseInt(b)||1};return a})}(),function(){angular.module("widgetGrid").factory("GridRendering",["GridArea","GridPoint",function(a,b){function c(b,c){if(!(angular.isDefined(c)&&angular.isDefined(c.grid)&&angular.isNumber(c.grid.columns)&&angular.isNumber(c.grid.rows)))return null;for(var d=null,e=0,f=c.grid.columns,g=b.top;g<=c.grid.rows;g++)for(var h=b.left;f>=h;h++)if(c._isObstructed(g,h))f=h-1;else{var i=g-b.top+1,j=h-b.left+1,k=i*j;k>e&&(e=k,d=new a(b.top,b.left,i,j))}return d}var d=function(a){this.grid=a||{rows:0,columns:0},this.positions={},this.cachedNextPosition=void 0,this.obstructions=[];for(var b=0;ba||1>b||b>this.grid.columns||a>this.grid.rows?!0:c&&c.top<=a&&a<=c.bottom&&c.left<=b&&b<=c.right?!1:this._isObstructed(a,b)},d.prototype._isObstructed=function(a,b){return 1===this.obstructions[(a-1)*this.grid.columns+(b-1)]},d.prototype.isAreaObstructed=function(a,b){if(!a)return!1;b=angular.isObject(b)?b:{};var c=a.top,d=a.left,e=a.bottom||a.top+a.height-1,f=a.right||a.left+a.width-1;if(!(angular.isNumber(c)&&angular.isNumber(d)&&angular.isNumber(e)&&angular.isNumber(f)))return!1;for(var g=b.fromBottom?e:c,h=b.fromBottom?-1:1,i=(b.fromBottom?c:e)+h,j=b.fromRight?f:d,k=b.fromRight?-1:1,l=(b.fromRight?d:f)+k,m=g;m!==i;m+=h)for(var n=j;n!==l;n+=k)if(this.isObstructed(m,n,b.excludedArea))return!0;return!1},d.prototype.getStyle=function(a){a=a.id||a;var b=this.positions[a];return b?{top:((b.top-1)*this.grid.cellSize.height).toString()+"%",height:(b.height*this.grid.cellSize.height).toString()+"%",left:((b.left-1)*this.grid.cellSize.width).toString()+"%",width:(b.width*this.grid.cellSize.width).toString()+"%"}:{display:"none"}},d.prototype.setObstructionValues=function(a,b){for(var c=a.top-1;ci)break;d=c(new b(g,h),this),f=d.getSurfaceArea(),f>e&&(e=f,a=d)}return a},d}])}(),function(){angular.module("widgetGrid").factory("PathIterator",["GridPoint",function(a){var b=function(b,c){this.start=b,this.topDelta=c.top-b.top,this.leftDelta=c.left-b.left,this.steps=Math.max(Math.abs(this.topDelta),Math.abs(this.leftDelta)),this.currStep=0,this.currPos=null,this.nextPos=new a(b.top,b.left)};return b.prototype.next=function(){if(this.currPos=this.nextPos,this.currStep
'),a.put("wg-movable","
"),a.put("wg-resizable",'
'),a.put("wg-widget","
")}]); //# sourceMappingURL=angular-widget-grid.min.js.map \ No newline at end of file From c1e28f190d5f580634db3d13dab6c5a4950f5a87 Mon Sep 17 00:00:00 2001 From: Matteo Gaggiano Date: Thu, 12 May 2016 13:03:50 +0200 Subject: [PATCH 07/15] Updated Readme.md --- README.md | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index c491671..2b03eda 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,7 @@ A flexible grid layout for responsive dashboards. Install with [Bower](http://bower.io/) / [npm](http://www.npmjs.com/), or simply download the files from the root folder: ```sh -$ bower install angular-widget-grid -$ npm install angular-widget-grid +$ bower install marchrius/angular-widget-grid ``` Add `