diff options
author | isjusterin <erinproductions@gmail.com> | 2015-07-22 19:06:03 -0500 |
---|---|---|
committer | isjusterin <erinproductions@gmail.com> | 2015-07-22 19:06:03 -0500 |
commit | eda26599175299cd1481bc93ecfc57c4840f8705 (patch) | |
tree | 5bb7fed81f5788ed955bcc1f341667466d3c6d0c /comiccontrol/draganddrop/dragsort.js | |
parent | 2e1397a1c1ee6bde877c351010e0fdaed43efd25 (diff) | |
download | ComicControl-3.0-master.zip ComicControl-3.0-master.tar.gz ComicControl-3.0-master.tar.bz2 |
ComicControl files to be dumped in root folderHEADorigin/masterorigin/HEADmaster
Diffstat (limited to 'comiccontrol/draganddrop/dragsort.js')
-rw-r--r-- | comiccontrol/draganddrop/dragsort.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/comiccontrol/draganddrop/dragsort.js b/comiccontrol/draganddrop/dragsort.js new file mode 100644 index 0000000..2886c62 --- /dev/null +++ b/comiccontrol/draganddrop/dragsort.js @@ -0,0 +1,87 @@ +/* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ + +ToolMan._dragsortFactory = { + makeSortable : function(item) { + var group = ToolMan.drag().createSimpleGroup(item) + + group.register('dragstart', this._onDragStart) + group.register('dragmove', this._onDragMove) + group.register('dragend', this._onDragEnd) + + return group + }, + + /** + * Iterates over a list's items, making them sortable, applying + * optional functions to each item. + * + * example: makeListSortable(myList, myFunc1, myFunc2, ... , myFuncN) + */ + makeListSortable : function(list) { + var helpers = ToolMan.helpers() + var coordinates = ToolMan.coordinates() + var items = list.getElementsByTagName("li") + + helpers.map(items, function(item) { + var dragGroup = dragsort.makeSortable(item) + dragGroup.setThreshold(4) + var min, max + dragGroup.addTransform(function(coordinate, dragEvent) { + return coordinate.constrainTo(min, max) + }) + dragGroup.register('dragstart', function() { + var items = list.getElementsByTagName("li") + min = max = coordinates.topLeftOffset(items[0]) + for (var i = 1, n = items.length; i < n; i++) { + var offset = coordinates.topLeftOffset(items[i]) + min = min.min(offset) + max = max.max(offset) + } + }) + }) + for (var i = 1, n = arguments.length; i < n; i++) + helpers.map(items, arguments[i]) + }, + + _onDragStart : function(dragEvent) { + }, + + _onDragMove : function(dragEvent) { + var helpers = ToolMan.helpers() + var coordinates = ToolMan.coordinates() + + var item = dragEvent.group.element + var xmouse = dragEvent.transformedMouseOffset + var moveTo = null + + var previous = helpers.previousItem(item, item.nodeName) + while (previous != null) { + var bottomRight = coordinates.bottomRightOffset(previous) + if (xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) { + moveTo = previous + } + previous = helpers.previousItem(previous, item.nodeName) + } + if (moveTo != null) { + helpers.moveBefore(item, moveTo) + return + } + + var next = helpers.nextItem(item, item.nodeName) + while (next != null) { + var topLeft = coordinates.topLeftOffset(next) + if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x) { + moveTo = next + } + next = helpers.nextItem(next, item.nodeName) + } + if (moveTo != null) { + helpers.moveBefore(item, helpers.nextItem(moveTo, item.nodeName)) + return + } + }, + + _onDragEnd : function(dragEvent) { + ToolMan.coordinates().create(0, 0).reposition(dragEvent.group.element) + } +} |