summaryrefslogtreecommitdiffstats
path: root/comiccontrol/draganddrop/dragsort.js
diff options
context:
space:
mode:
authorisjusterin <erinproductions@gmail.com>2015-07-22 19:06:03 -0500
committerisjusterin <erinproductions@gmail.com>2015-07-22 19:06:03 -0500
commiteda26599175299cd1481bc93ecfc57c4840f8705 (patch)
tree5bb7fed81f5788ed955bcc1f341667466d3c6d0c /comiccontrol/draganddrop/dragsort.js
parent2e1397a1c1ee6bde877c351010e0fdaed43efd25 (diff)
downloadComicControl-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.js87
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)
+ }
+}