30 setMousePos(e); |
31 setMousePos(e); |
31 |
32 |
32 // Determine threshold for moving the target |
33 // Determine threshold for moving the target |
33 var nodes = reorder_state.obj.parentNode.parentNode.childNodes; |
34 var nodes = reorder_state.obj.parentNode.parentNode.childNodes; |
34 var threshold = new Object(); |
35 var threshold = new Object(); |
|
36 var f = false; |
35 for ( var i = 0; i < nodes.length; i++ ) |
37 for ( var i = 0; i < nodes.length; i++ ) |
36 { |
38 { |
37 var node = nodes[i]; |
39 var node = nodes[i]; |
38 if ( node.tagName == 'TR' && node.DecirForumID ) |
40 if ( node.tagName == 'TR' && node.DecirForumID ) |
39 { |
41 { |
|
42 if ( !f ) |
|
43 { |
|
44 // this is the first row |
|
45 // get the top and add a new threshold entry for the border-top exception |
|
46 var t = $(node).Top(); |
|
47 threshold[0] = { |
|
48 top: t, |
|
49 realid: node.DecirForumID, |
|
50 node: node |
|
51 } |
|
52 } |
|
53 f = true; |
40 // This is a row with a forum in it - add to the threshold list. |
54 // This is a row with a forum in it - add to the threshold list. |
41 var t = $(node).Top(); |
55 var t = $(node).Top(); |
42 var h = $(node).Height(); |
56 var h = $(node).Height(); |
43 threshold[node.DecirForumID] = t + ( h / 2 ); |
57 threshold[node.DecirForumID] = t + ( h / 2 ); |
44 } |
58 } |
48 var current_threshold = threshold[ reorder_state.over.parentNode.DecirForumID ]; |
62 var current_threshold = threshold[ reorder_state.over.parentNode.DecirForumID ]; |
49 var next_threshold = threshold[ parseInt(reorder_state.over.parentNode.DecirForumID) + 1 ]; |
63 var next_threshold = threshold[ parseInt(reorder_state.over.parentNode.DecirForumID) + 1 ]; |
50 if ( !next_threshold ) |
64 if ( !next_threshold ) |
51 next_threshold = -1; |
65 next_threshold = -1; |
52 // window.console.debug('current ', current_threshold, ' next ', next_threshold); |
66 // window.console.debug('current ', current_threshold, ' next ', next_threshold); |
53 if ( mouseY < current_threshold ) |
67 reorder_state.topped = false; |
54 { |
68 if ( mouseY <= threshold[0].top ) |
55 var prev_tr = reorder_state.over.parentNode.previousSibling; |
69 { |
56 if ( !prev_tr ) |
|
57 // already at the top |
|
58 return false; |
|
59 // find the prev_td |
|
60 var i = 0; |
|
61 var prev_td; |
|
62 while ( true ) |
|
63 { |
|
64 prev_td = prev_tr.childNodes[i]; |
|
65 if ( !prev_td ) |
|
66 continue; |
|
67 if ( prev_td.tagName == 'TD' || i == 10000 ) |
|
68 break; |
|
69 i++; |
|
70 } |
|
71 if ( prev_td.tagName != 'TD' ) |
|
72 return false; |
|
73 reorder_state.over.style.borderBottom = null; |
70 reorder_state.over.style.borderBottom = null; |
74 reorder_state.over = prev_td; |
71 reorder_state.over.style.borderTop = null; |
75 reorder_state.over.style.borderBottom = '5px solid #000000'; |
72 |
76 } |
73 var next_tr = threshold[0].node; |
77 else if ( mouseY > next_threshold && next_threshold > -1 ) |
74 |
78 { |
|
79 var next_tr = reorder_state.over.parentNode.nextSibling; |
|
80 if ( !next_tr ) |
|
81 // already at the top |
|
82 return false; |
|
83 // find the next_td |
75 // find the next_td |
84 var i = 0; |
76 var i = 0; |
85 var next_td; |
77 var next_td; |
86 while ( true ) |
78 while ( true ) |
87 { |
79 { |
99 } |
91 } |
100 if ( !next_td ) |
92 if ( !next_td ) |
101 return false; |
93 return false; |
102 if ( next_td.tagName != 'TD' ) |
94 if ( next_td.tagName != 'TD' ) |
103 return false; |
95 return false; |
|
96 |
|
97 reorder_state.over = next_td; |
|
98 reorder_state.over.style.borderTop = '5px solid #000000'; |
|
99 reorder_state.topped = true; |
|
100 } |
|
101 else if ( mouseY < current_threshold ) |
|
102 { |
|
103 var prev_tr = reorder_state.over.parentNode.previousSibling; |
|
104 if ( !prev_tr ) |
|
105 // already at the top |
|
106 return false; |
|
107 // find the prev_td |
|
108 var i = 0; |
|
109 var prev_td; |
|
110 while ( true ) |
|
111 { |
|
112 prev_td = prev_tr.childNodes[i]; |
|
113 if ( !prev_td ) |
|
114 continue; |
|
115 if ( prev_td.tagName == 'TD' || i == 10000 ) |
|
116 break; |
|
117 i++; |
|
118 } |
|
119 if ( prev_td.tagName != 'TD' ) |
|
120 return false; |
104 reorder_state.over.style.borderBottom = null; |
121 reorder_state.over.style.borderBottom = null; |
|
122 reorder_state.over.style.borderTop = null; |
|
123 reorder_state.over = prev_td; |
|
124 reorder_state.over.style.borderBottom = '5px solid #000000'; |
|
125 } |
|
126 else if ( mouseY > next_threshold && next_threshold > -1 ) |
|
127 { |
|
128 var next_tr = reorder_state.over.parentNode.nextSibling; |
|
129 if ( !next_tr ) |
|
130 // already at the top |
|
131 return false; |
|
132 // find the next_td |
|
133 var i = 0; |
|
134 var next_td; |
|
135 while ( true ) |
|
136 { |
|
137 next_td = next_tr.childNodes[i]; |
|
138 if ( i >= 100 ) |
|
139 break; |
|
140 if ( !next_td ) |
|
141 { |
|
142 i++; |
|
143 continue; |
|
144 } |
|
145 if ( next_td.tagName == 'TD' || i == 100 ) |
|
146 break; |
|
147 i++; |
|
148 } |
|
149 if ( !next_td ) |
|
150 return false; |
|
151 if ( next_td.tagName != 'TD' ) |
|
152 return false; |
|
153 reorder_state.over.style.borderBottom = null; |
|
154 reorder_state.over.style.borderTop = null; |
105 reorder_state.over = next_td; |
155 reorder_state.over = next_td; |
106 reorder_state.over.style.borderBottom = '5px solid #000000'; |
156 reorder_state.over.style.borderBottom = '5px solid #000000'; |
107 } |
157 } |
108 } |
158 } |
109 |
159 |
114 for ( var i = 0; i < forums.length; i++ ) |
164 for ( var i = 0; i < forums.length; i++ ) |
115 { |
165 { |
116 forums[i].onmousedown = decir_admin_dragforum_start; |
166 forums[i].onmousedown = decir_admin_dragforum_start; |
117 forums[i].style.cursor = 'move'; |
167 forums[i].style.cursor = 'move'; |
118 forums[i].style.borderBottom = null; |
168 forums[i].style.borderBottom = null; |
|
169 forums[i].style.borderTop = null; |
119 } |
170 } |
120 } |
171 } |
121 |
172 |
122 function decir_admin_dragforum_close(e) |
173 function decir_admin_dragforum_close(e) |
123 { |
174 { |
129 |
180 |
130 reorder_state._ = false; |
181 reorder_state._ = false; |
131 |
182 |
132 // Move the row (or rather copy and delete) |
183 // Move the row (or rather copy and delete) |
133 var newnode = reorder_state.obj.parentNode.cloneNode(true); |
184 var newnode = reorder_state.obj.parentNode.cloneNode(true); |
134 insertAfter(reorder_state.obj.parentNode.parentNode, newnode, reorder_state.over.parentNode); |
185 if ( reorder_state.topped ) |
|
186 { |
|
187 window.console.info('before'); |
|
188 reorder_state.obj.parentNode.parentNode.insertBefore(newnode, reorder_state.over.parentNode); |
|
189 } |
|
190 else |
|
191 { |
|
192 window.console.info('after'); |
|
193 insertAfter(reorder_state.obj.parentNode.parentNode, newnode, reorder_state.over.parentNode); |
|
194 } |
135 reorder_state.obj.parentNode.parentNode.removeChild(reorder_state.obj.parentNode); |
195 reorder_state.obj.parentNode.parentNode.removeChild(reorder_state.obj.parentNode); |
136 |
196 |
137 // for some reason this needs to be called again in gecko (to reinit some values) |
197 // for some reason this needs to be called again in gecko (to reinit some values) |
138 decir_admin_dragforum_onload(); |
198 decir_admin_dragforum_onload(); |
139 |
199 |