1 | /* Copyright (c) 2005 Tim Taylor Consulting (see LICENSE.txt) */ |
---|
2 | |
---|
3 | ToolMan._dragsortFactory = { |
---|
4 | makeSortable : function(item) { |
---|
5 | var group = ToolMan.drag().createSimpleGroup(item) |
---|
6 | |
---|
7 | group.register('dragstart', this._onDragStart) |
---|
8 | group.register('dragmove', this._onDragMove) |
---|
9 | group.register('dragend', this._onDragEnd) |
---|
10 | |
---|
11 | return group |
---|
12 | }, |
---|
13 | |
---|
14 | /** |
---|
15 | * Iterates over a list's items, making them sortable, applying |
---|
16 | * optional functions to each item. |
---|
17 | * |
---|
18 | * example: makeListSortable(myList, myFunc1, myFunc2, ... , myFuncN) |
---|
19 | */ |
---|
20 | makeListSortable : function(list) { |
---|
21 | var helpers = ToolMan.helpers() |
---|
22 | var coordinates = ToolMan.coordinates() |
---|
23 | var items = list.getElementsByTagName("li") |
---|
24 | |
---|
25 | helpers.map(items, function(item) { |
---|
26 | var dragGroup = dragsort.makeSortable(item) |
---|
27 | dragGroup.setThreshold(4) |
---|
28 | var min, max |
---|
29 | dragGroup.addTransform(function(coordinate, dragEvent) { |
---|
30 | return coordinate.constrainTo(min, max) |
---|
31 | }) |
---|
32 | dragGroup.register('dragstart', function() { |
---|
33 | var items = list.getElementsByTagName("li") |
---|
34 | min = max = coordinates.topLeftOffset(items[0]) |
---|
35 | for (var i = 1, n = items.length; i < n; i++) { |
---|
36 | var offset = coordinates.topLeftOffset(items[i]) |
---|
37 | min = min.min(offset) |
---|
38 | max = max.max(offset) |
---|
39 | } |
---|
40 | }) |
---|
41 | }) |
---|
42 | for (var i = 1, n = arguments.length; i < n; i++) |
---|
43 | helpers.map(items, arguments[i]) |
---|
44 | }, |
---|
45 | |
---|
46 | _onDragStart : function(dragEvent) { |
---|
47 | }, |
---|
48 | |
---|
49 | _onDragMove : function(dragEvent) { |
---|
50 | var helpers = ToolMan.helpers() |
---|
51 | var coordinates = ToolMan.coordinates() |
---|
52 | |
---|
53 | var item = dragEvent.group.element |
---|
54 | var xmouse = dragEvent.transformedMouseOffset |
---|
55 | var moveTo = null |
---|
56 | |
---|
57 | var previous = helpers.previousItem(item, item.nodeName) |
---|
58 | while (previous != null) { |
---|
59 | var bottomRight = coordinates.bottomRightOffset(previous) |
---|
60 | if (xmouse.y <= bottomRight.y && xmouse.x <= bottomRight.x) { |
---|
61 | moveTo = previous |
---|
62 | } |
---|
63 | previous = helpers.previousItem(previous, item.nodeName) |
---|
64 | } |
---|
65 | if (moveTo != null) { |
---|
66 | helpers.moveBefore(item, moveTo) |
---|
67 | return |
---|
68 | } |
---|
69 | |
---|
70 | var next = helpers.nextItem(item, item.nodeName) |
---|
71 | while (next != null) { |
---|
72 | var topLeft = coordinates.topLeftOffset(next) |
---|
73 | if (topLeft.y <= xmouse.y && topLeft.x <= xmouse.x) { |
---|
74 | moveTo = next |
---|
75 | } |
---|
76 | next = helpers.nextItem(next, item.nodeName) |
---|
77 | } |
---|
78 | if (moveTo != null) { |
---|
79 | helpers.moveBefore(item, helpers.nextItem(moveTo, item.nodeName)) |
---|
80 | return |
---|
81 | } |
---|
82 | }, |
---|
83 | |
---|
84 | _onDragEnd : function(dragEvent) { |
---|
85 | ToolMan.coordinates().create(0, 0).reposition(dragEvent.group.element) |
---|
86 | } |
---|
87 | } |
---|