reorder.js
1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
function getSibling(elm, which) {
var ret = elm[which + 'Sibling'];
while(!isUndefinedOrNull(ret) && ret.nodeName == '#text') ret = ret[which + 'Sibling'];
if(isUndefinedOrNull(ret)) return false;
return ret;
}
function swapItems(first, second) {
// ALWAYS in order
toggleElementClass('odd', first, second);
toggleElementClass('even', first, second);
first.parentNode.insertBefore(first, second);
var pos = first.reorderField.value;
first.reorderField.value = second.reorderField.value;
second.reorderField.value = pos;
}
function moveUp() {
var otherItem = getSibling(this, 'previous');
if(otherItem) {
swapItems(this, otherItem);
}
return false;
}
function moveDown() {
var otherItem = getSibling(this, 'next');
if(otherItem) {
swapItems(otherItem, this);
}
return false;
}
function hookReorderDisplay() {
var container = $('reorder-container');
if(isUndefinedOrNull(container)) return;
forEach(getElementsByTagAndClassName('*', 'reorder-item', container), function(item) {
var up = getElementsByTagAndClassName('*', 'reorder-up', item)[0],
down = getElementsByTagAndClassName('*', 'reorder-down', item)[0];
up.onclick = bind(moveUp, item);
down.onclick = bind(moveDown, item);
item.reorderField = getElementsByTagAndClassName('input', 'reorder-field', item)[0];
});
}
addLoadEvent(hookReorderDisplay);