Subversion Repositories DevTools

Rev

Rev 119 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
119 ghuddy 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
}