1 // INTEGRATE ME INTO BROWSER.JS 2 3 function CompareObjPos(nodes, touch) { 4 var samePos = 0, 5 j= 0, 6 top = touch.pageY; 7 8 for (var i=0; i < nodes.length; i++) { 9 samePos = j++; 10 var position = findPos(nodes[i]); 11 if(position.top > top) { 12 break; 13 } 14 } 15 return samePos; 16 } 17 18 function checkAvatarPosition(first) { 19 var leftPane = document.getElementById("tracksAvail"), 20 rigthPane = document.getElementById("container"); 21 22 if (first.pageX < (leftPane.offsetLeft + leftPane.offsetWidth)) 23 { 24 return leftPane; 25 } 26 else { 27 return rigthPane; 28 } 29 } 30 31 var startX; 32 33 function removeTouchEvents() { 34 35 startX = null; 36 37 } 38 39 40 function touchSimulated(event) 41 { 42 if(event.touches.length <= 1) { 43 44 var touches = event.changedTouches, 45 first = touches[0], 46 type1 = "", 47 type2 = "mouseover", 48 objAvatar = document.getElementsByClassName("dojoDndAvatar"), 49 obj = {}, 50 pane = checkAvatarPosition(first), 51 nodes = pane.getElementsByClassName("dojoDndItem"), 52 element = {}, 53 simulatedEvent_1 = document.createEvent("MouseEvent"), 54 simulatedEvent_2 = document.createEvent("MouseEvent"); 55 56 57 switch (event.type) { 58 59 case "touchstart": 60 startX = first.pageX; 61 type1 = "mousedown"; 62 break; 63 64 case "touchmove": 65 event.preventDefault(); 66 type1 = "mousemove"; 67 break; 68 69 default: 70 return; 71 } 72 73 74 75 76 77 78 simulatedEvent_1.initMouseEvent(type1, true, true, window, 1, first.pageX, first.pageY, first.clientX, first.clientY, 79 false, false, false, false, 0, null); 80 81 82 simulatedEvent_2.initMouseEvent(type2, true, true, window, 1, first.pageX, first.pageY, first.clientX, first.clientY, 83 false, false, false, false, 0, null); 84 85 86 87 88 switch (event.type) { 89 90 case "touchstart": 91 first.target.dispatchEvent(simulatedEvent_1); 92 first.target.dispatchEvent(simulatedEvent_2); 93 initialPane = pane; 94 break; 95 case "touchmove": 96 97 if(objAvatar.length > 0) { 98 if (nodes.length > 0) { 99 element = CompareObjPos(nodes,first); 100 obj = nodes[element]; 101 } 102 103 try { 104 105 if (initialPane != pane) { 106 var simulatedEvent_3 = document.createEvent("MouseEvent"); 107 var type3 = "mouseout"; 108 simulatedEvent_3.initMouseEvent(type3, true, true, window, 1, 109 first.pageX, first.pageY, first.clientX, first.clientY, 110 false, false, false, false, 0, null); 111 initialPane.dispatchEvent(simulatedEvent_3); 112 } 113 obj.dispatchEvent(simulatedEvent_2); 114 obj.dispatchEvent(simulatedEvent_1); 115 116 } 117 catch(err) 118 { 119 //No Elements in the pane 120 pane.dispatchEvent(simulatedEvent_2); 121 pane.dispatchEvent(simulatedEvent_1); 122 } 123 } 124 break; 125 126 default: 127 return; 128 } 129 130 } 131 else { 132 removeTouchEvents(); 133 } 134 } 135 136 function touchEnd(event) { 137 138 139 140 var touches = event.changedTouches, 141 first = touches[0], 142 type1 = "mouseup", 143 type2 = "mouseover", 144 objAvatar = document.getElementsByClassName("dojoDndAvatar"), 145 obj = {}, 146 pane = checkAvatarPosition(first), 147 nodes = pane.getElementsByClassName("dojoDndItem"), 148 element = {}, 149 simulatedEvent_1 = document.createEvent("MouseEvent"), 150 simulatedEvent_2 = document.createEvent("MouseEvent"); 151 152 153 if (startX !== first.pageX) { 154 //slide ocurrs 155 event.preventDefault(); 156 } 157 158 var test = findPos(first.target); 159 160 simulatedEvent_1.initMouseEvent(type1, true, true, window, 1, first.pageX, first.pageY, first.clientX, first.clientY, 161 false, false, false, false, 0, null); 162 163 164 simulatedEvent_2.initMouseEvent(type2, true, true, window, 1, first.pageX, first.pageY, first.clientX, first.clientY, 165 false, false, false, false, 0, null); 166 167 168 169 170 if(objAvatar.length > 0) { 171 if (nodes.length > 0) { 172 element = CompareObjPos(nodes,first); 173 obj = nodes[element]; 174 } 175 176 try { 177 obj.dispatchEvent(simulatedEvent_2); 178 obj.dispatchEvent(simulatedEvent_1); 179 } 180 catch(error) 181 { 182 first.target.dispatchEvent(simulatedEvent_2); 183 pane.dispatchEvent(simulatedEvent_2); 184 } 185 } 186 else { 187 first.target.dispatchEvent(simulatedEvent_1); 188 first.target.dispatchEvent(simulatedEvent_2); 189 } 190 191 192 193 removeTouchEvents(); 194 } 195 196 function touchHandle(event) 197 { 198 199 dojo.query(".dojoDndItemAnchor").connect("touchstart", touchSimulated); 200 dojo.query(".dojoDndItemAnchor").connect("touchmove", touchSimulated); 201 dojo.query(".dojoDndItemAnchor").connect("touchend", touchEnd); 202 dojo.query(".dojoDndItemAnchor").connect("click" , function(){void(0);}); 203 204 if(event.touches.length <= 1) { 205 206 207 var touches = event.changedTouches, 208 first = touches[0], 209 type = ""; 210 211 212 213 switch(event.type) 214 { 215 case "touchstart": 216 startX = first.pageX; 217 type = "mousedown"; 218 break; 219 220 case "touchmove": 221 event.preventDefault(); 222 type = "mousemove"; 223 break; 224 225 case "touchend": 226 if (startX !== first.pageX) { 227 //slide ocurrs 228 event.preventDefault(); 229 } 230 type = "mouseup"; 231 break; 232 233 234 default: 235 return; 236 } 237 238 239 var simulatedEvent = document.createEvent("MouseEvent"); 240 241 simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, 242 false, false, false, false, 0/*left*/, null); 243 244 first.target.dispatchEvent(simulatedEvent); 245 246 } 247 else { 248 removeTouchEvents(); 249 } 250 } 251 252 253 254 255 function touchinit() 256 { 257 dojo.query(".dojoDndItem").connect("touchstart", touchSimulated); 258 dojo.query(".dojoDndItem").connect("touchmove", touchSimulated); 259 dojo.query(".dojoDndItem").connect("touchend", touchEnd); 260 261 dojo.query(".locationThumb").connect("touchstart", touchHandle); 262 dojo.query(".locationThumb").connect("touchmove", touchHandle); 263 dojo.query(".locationThumb").connect("touchend", touchHandle); 264 265 dojo.query(".dojoDndItem").connect("click" , function(){void(0);}); 266 267 dojo.query(".dojoDndTarget").connect("touchstart", touchHandle); 268 dojo.query(".dojoDndTarget").connect("touchmove", touchHandle); 269 dojo.query(".dojoDndTarget").connect("touchend", touchHandle); 270 271 dojo.query(".dijitSplitter").connect("touchstart", touchHandle); 272 dojo.query(".dijitSplitter").connect("touchmove", touchHandle); 273 dojo.query(".dijitSplitter").connect("touchend", touchHandle); 274 275 } 276 277 278 function loadTouch() 279 { 280 281 touchinit(); 282 document.documentElement.style.webkitTouchCallout = "none"; 283 } 284 285 function findPos(obj) { 286 var curtop = 0, 287 objP = {}; 288 289 if (obj.offsetParent) { 290 do { 291 curtop += obj.offsetTop; 292 } while ((obj = obj.offsetParent)); 293 } 294 295 objP.top = curtop; 296 297 return objP; 298 } 299