From f57886cca7a94cfa6dc96a5f78cdbc4a26362ca5 Mon Sep 17 00:00:00 2001 From: jaroslaw Date: Thu, 10 Jan 2013 21:45:39 +0000 Subject: [PATCH 1/3] fixed to issue #325 --- build/angular-ui.js | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/build/angular-ui.js b/build/angular-ui.js index 2355870..c59b8ce 100644 --- a/build/angular-ui.js +++ b/build/angular-ui.js @@ -27,7 +27,7 @@ angular.module('ui.directives').directive('uiSortable', [ return { require: '?ngModel', link: function(scope, element, attrs, ngModel) { - var onStart, onUpdate, opts, _start, _update; + var onStart, onUpdate,onReceive, opts, _start, _update, _receive, onRemove, _remove; opts = angular.extend({}, options, scope.$eval(attrs.uiOptions)); if (ngModel != null) { onStart = function(e, ui) { @@ -37,7 +37,26 @@ angular.module('ui.directives').directive('uiSortable', [ var end, start; start = ui.item.data('ui-sortable-start'); end = ui.item.index(); - ngModel.$modelValue.splice(end, 0, ngModel.$modelValue.splice(start, 1)[0]); + ui.item.indexs =ui.item.index(); + if(ui.item.received === true ){ + ui.item.received = false; + }else{ + ngModel.$modelValue.splice(end, 0, ngModel.$modelValue.splice(start, 1)[0]); + } + return scope.$apply(); + }; + onReceive = function(e, ui) { + var model, modelIndex; + ngModel.$modelValue.splice(ui.item.indexs,0,ui.item.connectedData); + ui.item.received = true; + return scope.$apply(); + }; + onRemove = function(e, ui) { + if(ngModel.$modelValue.length === 1) { + ui.item.connectedData = ngModel.$modelValue.splice(0,1)[0]; + }else { + ui.item.connectedData = ngModel.$modelValue.splice(ui.item.index(),1)[0]; + } return scope.$apply(); }; _start = opts.start; @@ -56,6 +75,22 @@ angular.module('ui.directives').directive('uiSortable', [ } return scope.$apply(); }; + _receive = opts.receive; + opts.receive = function(e, ui) { + onReceive(e, ui); + if (typeof _receive === "function") { + _receive(e, ui); + } + return scope.$apply(); + }; + _remove = opts.remove; + opts.remove = function(e, ui) { + onRemove(e, ui); + if (typeof _receive === "function") { + remove(e, ui); + } + return scope.$apply(); + }; } return element.sortable(opts); } From 95d61ed68c8cee25f441ce0d1eaec3481cb7fd93 Mon Sep 17 00:00:00 2001 From: jaroslaw Date: Sat, 19 Jan 2013 00:08:50 +0000 Subject: [PATCH 2/3] Fixed to issue #325 handling connectWith options correctly --- modules/directives/sortable/sortable.coffee | 39 +++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/modules/directives/sortable/sortable.coffee b/modules/directives/sortable/sortable.coffee index cb1c870..1abe2a1 100644 --- a/modules/directives/sortable/sortable.coffee +++ b/modules/directives/sortable/sortable.coffee @@ -21,9 +21,30 @@ angular.module('ui.directives').directive 'uiSortable', ['ui.config', (uiConfig) # Fetch saved and current position of dropped element start = ui.item.data('ui-sortable-start') end = ui.item.index() + ui.item.indexs =ui.item.index() + + # if item is received not sort it again as it is in correct position + if ui.item.received == true + ui.item.received = false + else + # Reorder array and apply change to scope + ngModel.$modelValue.splice(end, 0, ngModel.$modelValue.splice(start, 1)[0]) + + scope.$apply() + + onReceive = (e, ui) -> + # added item to array into correct position and set up flag + ngModel.$modelValue.splice(ui.item.indexs,0,ui.item.connectedData) + ui.item.received = true; + scope.$apply() - # Reorder array and apply change to scope - ngModel.$modelValue.splice(end, 0, ngModel.$modelValue.splice(start, 1)[0]) + onRemove = (e, ui) -> + # copy data into item + if ngModel.$modelValue.length == 1 + ui.item.connectedData = ngModel.$modelValue.splice(0,1)[0] + else + ui.item.connectedData = ngModel.$modelValue.splice(ui.item.index(),1)[0] + scope.$apply() # If user provided 'start' callback compose it with onStart function @@ -40,6 +61,20 @@ angular.module('ui.directives').directive 'uiSortable', ['ui.config', (uiConfig) _update?(e, ui) scope.$apply() + # If user provided 'receive' callback compose it with onReceive function + _receive = opts.receive + opts.receive = (e, ui) -> + onReceive(e, ui) + _receive?(e, ui) + scope.$apply(); + + # If user provided 'remove' callback compose it with onRemove function + _remove = opts.remove + opts.remove = (e, ui) -> + onRemove(e, ui) + _remove?(e, ui) + scope.$apply(); + # Create sortable element.sortable(opts) From 284f7583c47cdaf0a039b7f283055d79392ce5f9 Mon Sep 17 00:00:00 2001 From: jaroslaw Date: Sat, 19 Jan 2013 00:43:59 +0000 Subject: [PATCH 3/3] Fixed to issue #325 removed changes to build file --- build/angular-ui.js | 39 ++------------------------------------- 1 file changed, 2 insertions(+), 37 deletions(-) diff --git a/build/angular-ui.js b/build/angular-ui.js index c59b8ce..2355870 100644 --- a/build/angular-ui.js +++ b/build/angular-ui.js @@ -27,7 +27,7 @@ angular.module('ui.directives').directive('uiSortable', [ return { require: '?ngModel', link: function(scope, element, attrs, ngModel) { - var onStart, onUpdate,onReceive, opts, _start, _update, _receive, onRemove, _remove; + var onStart, onUpdate, opts, _start, _update; opts = angular.extend({}, options, scope.$eval(attrs.uiOptions)); if (ngModel != null) { onStart = function(e, ui) { @@ -37,26 +37,7 @@ angular.module('ui.directives').directive('uiSortable', [ var end, start; start = ui.item.data('ui-sortable-start'); end = ui.item.index(); - ui.item.indexs =ui.item.index(); - if(ui.item.received === true ){ - ui.item.received = false; - }else{ - ngModel.$modelValue.splice(end, 0, ngModel.$modelValue.splice(start, 1)[0]); - } - return scope.$apply(); - }; - onReceive = function(e, ui) { - var model, modelIndex; - ngModel.$modelValue.splice(ui.item.indexs,0,ui.item.connectedData); - ui.item.received = true; - return scope.$apply(); - }; - onRemove = function(e, ui) { - if(ngModel.$modelValue.length === 1) { - ui.item.connectedData = ngModel.$modelValue.splice(0,1)[0]; - }else { - ui.item.connectedData = ngModel.$modelValue.splice(ui.item.index(),1)[0]; - } + ngModel.$modelValue.splice(end, 0, ngModel.$modelValue.splice(start, 1)[0]); return scope.$apply(); }; _start = opts.start; @@ -75,22 +56,6 @@ angular.module('ui.directives').directive('uiSortable', [ } return scope.$apply(); }; - _receive = opts.receive; - opts.receive = function(e, ui) { - onReceive(e, ui); - if (typeof _receive === "function") { - _receive(e, ui); - } - return scope.$apply(); - }; - _remove = opts.remove; - opts.remove = function(e, ui) { - onRemove(e, ui); - if (typeof _receive === "function") { - remove(e, ui); - } - return scope.$apply(); - }; } return element.sortable(opts); }