From 0c5c991b8262284bd4edd8da2d6d1e0c9a1b8e81 Mon Sep 17 00:00:00 2001 From: James Homer Date: Tue, 23 Jun 2015 20:19:17 +0100 Subject: [PATCH 1/3] Update model on sort (fixes #974) --- src/uiSelectSortDirective.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/uiSelectSortDirective.js b/src/uiSelectSortDirective.js index b01b21a9f..763ab4b8e 100644 --- a/src/uiSelectSortDirective.js +++ b/src/uiSelectSortDirective.js @@ -1,12 +1,15 @@ // Make multiple matches sortable uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', function($timeout, uiSelectConfig, uiSelectMinErr) { return { - require: '^uiSelect', - link: function(scope, element, attrs, $select) { + require: ['^uiSelect', '^ngModel'], + link: function(scope, element, attrs, ctrls) { if (scope[attrs.uiSelectSort] === null) { throw uiSelectMinErr('sort', "Expected a list to sort"); } + var $select = ctrls[0]; + var $ngModel = ctrls[1]; + var options = angular.extend({ axis: 'horizontal' }, @@ -93,6 +96,8 @@ uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', f move.apply(theList, [droppedItemIndex, newIndex]); + $ngModel.$setViewValue(Date.now()); + scope.$apply(function() { scope.$emit('uiSelectSort:change', { array: theList, From 66f6338aac983511a9dae88d52f787446abe7514 Mon Sep 17 00:00:00 2001 From: Josh Schneider Date: Mon, 30 Mar 2015 16:10:03 -0700 Subject: [PATCH 2/3] Revert "Only change ngClick event finding for IE8. Leave ngMouseEnter binding as it is." This reverts commit 9510eb1eda476fe6cf8e0076901c0709db3ed353. --- src/uiSelectSortDirective.js.orig | 153 ------------------------------ 1 file changed, 153 deletions(-) delete mode 100644 src/uiSelectSortDirective.js.orig diff --git a/src/uiSelectSortDirective.js.orig b/src/uiSelectSortDirective.js.orig deleted file mode 100644 index 38811bb59..000000000 --- a/src/uiSelectSortDirective.js.orig +++ /dev/null @@ -1,153 +0,0 @@ -// Make multiple matches sortable -uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', function($timeout, uiSelectConfig, uiSelectMinErr) { - return { -<<<<<<< .merge_file_eLcdgt - require: ['^uiSelect', '^ngModel'], - link: function(scope, element, attrs, ctrls) { -======= - require: '^^uiSelect', - link: function(scope, element, attrs, $select) { ->>>>>>> .merge_file_G9TOXq - if (scope[attrs.uiSelectSort] === null) { - throw uiSelectMinErr('sort', 'Expected a list to sort'); - } - - var $select = ctrls[0]; - var $ngModel = ctrls[1]; - - var options = angular.extend({ - axis: 'horizontal' - }, - scope.$eval(attrs.uiSelectSortOptions)); - - var axis = options.axis; - var draggingClassName = 'dragging'; - var droppingClassName = 'dropping'; - var droppingBeforeClassName = 'dropping-before'; - var droppingAfterClassName = 'dropping-after'; - - scope.$watch(function(){ - return $select.sortable; - }, function(newValue){ - if (newValue) { - element.attr('draggable', true); - } else { - element.removeAttr('draggable'); - } - }); - - element.on('dragstart', function(event) { - element.addClass(draggingClassName); - - (event.dataTransfer || event.originalEvent.dataTransfer).setData('text', scope.$index.toString()); - }); - - element.on('dragend', function() { - removeClass(draggingClassName); - }); - - var move = function(from, to) { - /*jshint validthis: true */ - this.splice(to, 0, this.splice(from, 1)[0]); - }; - - var removeClass = function(className) { - angular.forEach($select.$element.querySelectorAll('.' + className), function(el){ - angular.element(el).removeClass(className); - }); - }; - - var dragOverHandler = function(event) { - event.preventDefault(); - - var offset = axis === 'vertical' ? event.offsetY || event.layerY || (event.originalEvent ? event.originalEvent.offsetY : 0) : event.offsetX || event.layerX || (event.originalEvent ? event.originalEvent.offsetX : 0); - - if (offset < (this[axis === 'vertical' ? 'offsetHeight' : 'offsetWidth'] / 2)) { - removeClass(droppingAfterClassName); - element.addClass(droppingBeforeClassName); - - } else { - removeClass(droppingBeforeClassName); - element.addClass(droppingAfterClassName); - } - }; - - var dropTimeout; - - var dropHandler = function(event) { - event.preventDefault(); - - var droppedItemIndex = parseInt((event.dataTransfer || event.originalEvent.dataTransfer).getData('text'), 10); - - // prevent event firing multiple times in firefox - $timeout.cancel(dropTimeout); - dropTimeout = $timeout(function() { - _dropHandler(droppedItemIndex); - }, 20); - }; - - var _dropHandler = function(droppedItemIndex) { - var theList = scope.$eval(attrs.uiSelectSort); - var itemToMove = theList[droppedItemIndex]; - var newIndex = null; - - if (element.hasClass(droppingBeforeClassName)) { - if (droppedItemIndex < scope.$index) { - newIndex = scope.$index - 1; - } else { - newIndex = scope.$index; - } - } else { - if (droppedItemIndex < scope.$index) { - newIndex = scope.$index; - } else { - newIndex = scope.$index + 1; - } - } - - move.apply(theList, [droppedItemIndex, newIndex]); - - $ngModel.$setViewValue(Date.now()); - - scope.$apply(function() { - scope.$emit('uiSelectSort:change', { - array: theList, - item: itemToMove, - from: droppedItemIndex, - to: newIndex - }); - }); - - removeClass(droppingClassName); - removeClass(droppingBeforeClassName); - removeClass(droppingAfterClassName); - - element.off('drop', dropHandler); - }; - - element.on('dragenter', function() { - if (element.hasClass(draggingClassName)) { - return; - } - - element.addClass(droppingClassName); - - element.on('dragover', dragOverHandler); - element.on('drop', dropHandler); - }); - - element.on('dragleave', function(event) { - if (event.target != element) { - return; - } - - removeClass(droppingClassName); - removeClass(droppingBeforeClassName); - removeClass(droppingAfterClassName); - - element.off('dragover', dragOverHandler); - element.off('drop', dropHandler); - }); - } - }; -}]); From 4e6e79be763d4d8f317ace029bc43392f17892f0 Mon Sep 17 00:00:00 2001 From: James Homer Date: Tue, 26 Apr 2016 15:28:24 +0100 Subject: [PATCH 3/3] fix require ^^ --- src/uiSelectSortDirective.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uiSelectSortDirective.js b/src/uiSelectSortDirective.js index e8c987781..43a546171 100644 --- a/src/uiSelectSortDirective.js +++ b/src/uiSelectSortDirective.js @@ -1,7 +1,7 @@ // Make multiple matches sortable uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', function($timeout, uiSelectConfig, uiSelectMinErr) { return { - require: ['^uiSelect', '^ngModel'], + require: ['^^uiSelect', '^ngModel'], link: function(scope, element, attrs, ctrls) { if (scope[attrs.uiSelectSort] === null) { throw uiSelectMinErr('sort', 'Expected a list to sort');