Merge pull request #800 from nasa/timeline-reorder-789

[Timeline] Fix reordering behavior in timelines
This commit is contained in:
Andrew Henry 2016-03-31 09:39:17 -07:00
commit dee0613b81
2 changed files with 23 additions and 10 deletions

View File

@ -100,6 +100,13 @@ define(
return swimlane.highlight() || expandedForDropInto();
}
function isReorder(targetObject, droppedObject) {
var droppedContext = droppedObject.getCapability('context'),
droppedParent =
droppedContext && droppedContext.getParent(),
droppedParentId = droppedParent && droppedParent.getId();
return targetObject.getId() === droppedParentId;
}
// Choose an appropriate composition action for the drag-and-drop
function chooseAction(targetObject, droppedObject) {
@ -142,26 +149,21 @@ define(
}
function canDrop(targetObject, droppedObject) {
var droppedContext = droppedObject.getCapability('context'),
droppedParent =
droppedContext && droppedContext.getParent(),
droppedParentId = droppedParent && droppedParent.getId();
return (targetObject.getId() === droppedParentId) ||
return isReorder(targetObject, droppedObject) ||
!!chooseAction(targetObject, droppedObject);
}
function drop(domainObject, targetObject, indexOffset) {
var action = chooseAction(targetObject, domainObject);
function changeIndex() {
var id = domainObject.getId();
return insert(id, targetObject, indexOffset);
}
return action ?
action.perform().then(changeIndex) :
changeIndex();
return isReorder(targetObject, domainObject) ?
changeIndex() :
chooseAction(targetObject, domainObject)
.perform().then(changeIndex);
}
return {

View File

@ -206,6 +206,7 @@ define(
it("allows reordering within a parent", function () {
var testModel = { composition: [ 'x', 'b', 'y', 'd' ] };
mockSwimlane.highlightBottom.andReturn(true);
mockSwimlane.expanded = true;
mockSwimlane.children = [];
@ -225,6 +226,16 @@ define(
});
});
it("does not invoke an action when reordering", function () {
mockSwimlane.highlightBottom.andReturn(true);
mockSwimlane.expanded = true;
mockSwimlane.children = [];
mockContext.getParent
.andReturn(mockSwimlane.parent.domainObject);
handler.drop('d', mockOtherObject);
expect(mockAction.perform).not.toHaveBeenCalled();
});
});
}
);