From 4b1ed47e286f572e364365cf624c8174a60c0ba0 Mon Sep 17 00:00:00 2001 From: James Homer Date: Mon, 28 Mar 2016 15:56:18 +0100 Subject: [PATCH] fix(sortable): remove classes properly - Correctly remove sortable classes from elements on `dragend` Closes #902 --- src/common.css | 8 ++++++-- src/uiSelectController.js | 1 + src/uiSelectSortDirective.js | 25 ++++++++++++++++--------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/common.css b/src/common.css index 877679770..70f9f7858 100644 --- a/src/common.css +++ b/src/common.css @@ -192,7 +192,11 @@ body > .ui-select-bootstrap.open { position: relative; } -.ui-select-multiple .ui-select-match-item.dropping-before:before { +.ui-select-multiple .ui-select-match-item.dropping .ui-select-match-close { + pointer-events: none; +} + +.ui-select-multiple:hover .ui-select-match-item.dropping-before:before { content: ""; position: absolute; top: 0; @@ -202,7 +206,7 @@ body > .ui-select-bootstrap.open { border-left: 1px solid #428bca; } -.ui-select-multiple .ui-select-match-item.dropping-after:after { +.ui-select-multiple:hover .ui-select-match-item.dropping-after:after { content: ""; position: absolute; top: 0; diff --git a/src/uiSelectController.js b/src/uiSelectController.js index 2c4316b15..a82e40a74 100644 --- a/src/uiSelectController.js +++ b/src/uiSelectController.js @@ -42,6 +42,7 @@ uis.controller('uiSelectCtrl', ctrl.lockChoiceExpression = undefined; // Initialized inside uiSelectMatch directive link function ctrl.clickTriggeredSelect = false; ctrl.$filter = $filter; + ctrl.$element = $element; // Use $injector to check for $animate and store a reference to it ctrl.$animate = (function () { diff --git a/src/uiSelectSortDirective.js b/src/uiSelectSortDirective.js index d3cbcb5bc..c6ffd3e59 100644 --- a/src/uiSelectSortDirective.js +++ b/src/uiSelectSortDirective.js @@ -35,7 +35,7 @@ uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', f }); element.on('dragend', function() { - element.removeClass(draggingClassName); + removeClass(draggingClassName); }); var move = function(from, to) { @@ -43,17 +43,23 @@ uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', f 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)) { - element.removeClass(droppingAfterClassName); + removeClass(droppingAfterClassName); element.addClass(droppingBeforeClassName); } else { - element.removeClass(droppingBeforeClassName); + removeClass(droppingBeforeClassName); element.addClass(droppingAfterClassName); } }; @@ -102,9 +108,9 @@ uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', f }); }); - element.removeClass(droppingClassName); - element.removeClass(droppingBeforeClassName); - element.removeClass(droppingAfterClassName); + removeClass(droppingClassName); + removeClass(droppingBeforeClassName); + removeClass(droppingAfterClassName); element.off('drop', dropHandler); }; @@ -124,9 +130,10 @@ uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig', 'uiSelectMinErr', f if (event.target != element) { return; } - element.removeClass(droppingClassName); - element.removeClass(droppingBeforeClassName); - element.removeClass(droppingAfterClassName); + + removeClass(droppingClassName); + removeClass(droppingBeforeClassName); + removeClass(droppingAfterClassName); element.off('dragover', dragOverHandler); element.off('drop', dropHandler);