From faf4402e1a60b9b00e1ca8fe40e273169264cf07 Mon Sep 17 00:00:00 2001 From: Clark Van Oyen Date: Sun, 20 Mar 2016 16:54:37 -0700 Subject: [PATCH 1/4] fix a bug where updates attribute values such as ngDrag=true to ngDrag=false are ignored by directive. --- ngDraggable.js | 15 ++-- update-attr-val.html | 162 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+), 9 deletions(-) create mode 100755 update-attr-val.html diff --git a/ngDraggable.js b/ngDraggable.js index 3f4a2ee..1a5b58f 100644 --- a/ngDraggable.js +++ b/ngDraggable.js @@ -72,7 +72,9 @@ angular.module("ngDraggable", []) // add listeners. scope.$on('$destroy', onDestroy); - scope.$watch(attrs.ngDrag, onEnableChange); + attrs.$observe('ngDrop', function(value){ + _dragEnabled = value; + }); scope.$watch(attrs.ngCenterAnchor, onCenterAnchor); // wire up touch events if (_dragHandle) { @@ -89,9 +91,6 @@ angular.module("ngDraggable", []) var onDestroy = function (enable) { toggleListeners(false); }; - var onEnableChange = function (newVal, oldVal) { - _dragEnabled = (newVal); - }; var onCenterAnchor = function (newVal, oldVal) { if(angular.isDefined(newVal)) _centerAnchor = (newVal || 'true'); @@ -290,7 +289,9 @@ angular.module("ngDraggable", []) if (!enable)return; // add listeners. - scope.$watch(attrs.ngDrop, onEnableChange); + attrs.$observe('ngDrop', function(value){ + _dropEnabled = value; + }); scope.$on('$destroy', onDestroy); scope.$on('draggable:start', onDragStart); scope.$on('draggable:move', onDragMove); @@ -300,9 +301,6 @@ angular.module("ngDraggable", []) var onDestroy = function (enable) { toggleListeners(false); }; - var onEnableChange = function (newVal, oldVal) { - _dropEnabled=newVal; - }; var onDragStart = function(evt, obj) { if(! _dropEnabled)return; isTouching(obj.x,obj.y,obj.element); @@ -325,7 +323,6 @@ angular.module("ngDraggable", []) }; var onDragEnd = function (evt, obj) { - // don't listen to drop events if this is the element being dragged // only update the styles and return if (!_dropEnabled || _myid === obj.uid) { diff --git a/update-attr-val.html b/update-attr-val.html new file mode 100755 index 0000000..36d7bf8 --- /dev/null +++ b/update-attr-val.html @@ -0,0 +1,162 @@ + + + + ngDraggable + + + + + +
+ +
+

ngDraggable Example

+
+ + + +
+ {{drop_flag}} +
+ Drop area #1 + +
+ {{obj.name}} +
+ +
+ +
+ + + +
+ + + + + + + From b27ab424a8bd2f32d2cf796147f10c763f025bb6 Mon Sep 17 00:00:00 2001 From: Clark Van Oyen Date: Sun, 20 Mar 2016 17:01:27 -0700 Subject: [PATCH 2/4] un-break what i broke last commit --- ngDraggable.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ngDraggable.js b/ngDraggable.js index 1a5b58f..c88a3b8 100644 --- a/ngDraggable.js +++ b/ngDraggable.js @@ -37,7 +37,7 @@ angular.module("ngDraggable", []) var _dragOffset = null; - var _dragEnabled = false; + var _dragEnabled = attrs.ngDrag; var _pressTimer = null; @@ -73,7 +73,7 @@ angular.module("ngDraggable", []) scope.$on('$destroy', onDestroy); attrs.$observe('ngDrop', function(value){ - _dragEnabled = value; + _dropEnabled = value; }); scope.$watch(attrs.ngCenterAnchor, onCenterAnchor); // wire up touch events @@ -91,6 +91,9 @@ angular.module("ngDraggable", []) var onDestroy = function (enable) { toggleListeners(false); }; + var onEnableChange = function (newVal, oldVal) { + _dragEnabled = (newVal); + }; var onCenterAnchor = function (newVal, oldVal) { if(angular.isDefined(newVal)) _centerAnchor = (newVal || 'true'); @@ -272,7 +275,7 @@ angular.module("ngDraggable", []) var _myid = scope.$id; - var _dropEnabled=false; + var _dropEnabled=attrs.ngDrop; var onDropCallback = $parse(attrs.ngDropSuccess);// || function(){}; @@ -301,6 +304,10 @@ angular.module("ngDraggable", []) var onDestroy = function (enable) { toggleListeners(false); }; + var onEnableChange = function (newVal, oldVal) { + console.log("DROP", _dropEnabled); + _dropEnabled=newVal; + }; var onDragStart = function(evt, obj) { if(! _dropEnabled)return; isTouching(obj.x,obj.y,obj.element); From 96d8759c78e87b9e3c07ff873a84bdbb4ce2d2e5 Mon Sep 17 00:00:00 2001 From: Clark Van Oyen Date: Sun, 20 Mar 2016 19:20:04 -0700 Subject: [PATCH 3/4] wasnt paying attention --- ngDraggable.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ngDraggable.js b/ngDraggable.js index c88a3b8..90bab71 100644 --- a/ngDraggable.js +++ b/ngDraggable.js @@ -72,8 +72,8 @@ angular.module("ngDraggable", []) // add listeners. scope.$on('$destroy', onDestroy); - attrs.$observe('ngDrop', function(value){ - _dropEnabled = value; + attrs.$observe('ngDrag', function(value){ + _dragEnabled = value; }); scope.$watch(attrs.ngCenterAnchor, onCenterAnchor); // wire up touch events From c3c74693bfb7433b9830e74e3b905a5624a43f71 Mon Sep 17 00:00:00 2001 From: Clark Van Oyen Date: Sun, 20 Mar 2016 20:51:31 -0700 Subject: [PATCH 4/4] fix case where string value is used in attribute value --- ngDraggable.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/ngDraggable.js b/ngDraggable.js index 90bab71..d51ad1a 100644 --- a/ngDraggable.js +++ b/ngDraggable.js @@ -74,6 +74,7 @@ angular.module("ngDraggable", []) scope.$on('$destroy', onDestroy); attrs.$observe('ngDrag', function(value){ _dragEnabled = value; + if (_dragEnabled === 'false') _dragEnabled=false; }); scope.$watch(attrs.ngCenterAnchor, onCenterAnchor); // wire up touch events @@ -91,9 +92,6 @@ angular.module("ngDraggable", []) var onDestroy = function (enable) { toggleListeners(false); }; - var onEnableChange = function (newVal, oldVal) { - _dragEnabled = (newVal); - }; var onCenterAnchor = function (newVal, oldVal) { if(angular.isDefined(newVal)) _centerAnchor = (newVal || 'true'); @@ -151,7 +149,6 @@ angular.module("ngDraggable", []) _dragOffset = {left:document.body.scrollLeft, top:document.body.scrollTop}; } - element.centerX = element[0].offsetWidth / 2; element.centerY = element[0].offsetHeight / 2; @@ -294,6 +291,7 @@ angular.module("ngDraggable", []) // add listeners. attrs.$observe('ngDrop', function(value){ _dropEnabled = value; + if (_dropEnabled === 'false') _dropEnabled=false; }); scope.$on('$destroy', onDestroy); scope.$on('draggable:start', onDragStart); @@ -304,10 +302,6 @@ angular.module("ngDraggable", []) var onDestroy = function (enable) { toggleListeners(false); }; - var onEnableChange = function (newVal, oldVal) { - console.log("DROP", _dropEnabled); - _dropEnabled=newVal; - }; var onDragStart = function(evt, obj) { if(! _dropEnabled)return; isTouching(obj.x,obj.y,obj.element);