| 248 | |
| 249 | // fix ie cursor if user click on empty document |
| 250 | (function(){ |
| 251 | var started, |
| 252 | startRange; |
| 253 | |
| 254 | html.$.unselectable = true; |
| 255 | |
| 256 | function getRangeFromXy(x, y) { |
| 257 | var range = body.$.createTextRange(); |
| 258 | |
| 259 | try { |
| 260 | range['moveToPoint'](x, y); |
| 261 | } catch (ex) { |
| 262 | range = null; |
| 263 | } |
| 264 | |
| 265 | return range; |
| 266 | } |
| 267 | |
| 268 | function onSelectionEnd() { |
| 269 | var range = doc.$.selection.createRange(); |
| 270 | |
| 271 | if (startRange && !range.item && range.compareEndPoints('StartToEnd', range) === 0) { |
| 272 | startRange.select(); |
| 273 | } |
| 274 | doc.removeListener('mouseup', onSelectionEnd); |
| 275 | doc.removeListener('mousemove', onMouseMove); |
| 276 | startRange = started = 0; |
| 277 | saveSelection(1); |
| 278 | } |
| 279 | |
| 280 | function getXy(evt){ |
| 281 | var docEl=html.$,bd=body.$,x=evt.pageX,y=evt.pageY; |
| 282 | |
| 283 | if(!x){ |
| 284 | x= evt.clientX + (docEl && docEl.scrollLeft || bd && bd.scrollLeft || 0) - (docEl && docEl.clientLeft || bd && bd.clientLeft || 0); |
| 285 | } |
| 286 | if(!y){ |
| 287 | y = evt.clientY + (docEl && docEl.scrollTop || bd && bd.scrollTop || 0) - (docEl && docEl.clientTop || bd && bd.clientTop || 0); |
| 288 | } |
| 289 | return [x,y]; |
| 290 | } |
| 291 | |
| 292 | |
| 293 | function onMouseMove(e) { |
| 294 | var currentRange,evt=e.data.$; |
| 295 | |
| 296 | if (evt.button) { |
| 297 | |
| 298 | var xy=getXy(evt); |
| 299 | |
| 300 | currentRange = getRangeFromXy(xy[0], xy[1]); |
| 301 | |
| 302 | if (currentRange) { |
| 303 | if (currentRange.compareEndPoints('StartToStart', startRange) > 0) |
| 304 | currentRange.setEndPoint('StartToStart', startRange); |
| 305 | else |
| 306 | currentRange.setEndPoint('EndToEnd', startRange); |
| 307 | |
| 308 | currentRange.select(); |
| 309 | } |
| 310 | } else { |
| 311 | onSelectionEnd(); |
| 312 | } |
| 313 | } |
| 314 | |
| 315 | function cursorFix(e){ |
| 316 | if (e.data.$.srcElement=== html.$) { |
| 317 | |
| 318 | if (started) { |
| 319 | onSelectionEnd(); |
| 320 | } |
| 321 | |
| 322 | if (html.$.scrollHeight > html.$.clientHeight) { |
| 323 | return; |
| 324 | } |
| 325 | |
| 326 | started = 1; |
| 327 | |
| 328 | var xy=getXy(e.data.$); |
| 329 | |
| 330 | startRange = getRangeFromXy(xy[0], xy[1]); |
| 331 | |
| 332 | if (startRange) { |
| 333 | |
| 334 | doc.on('mouseup', onSelectionEnd); |
| 335 | doc.on('mousemove', onMouseMove); |
| 336 | |
| 337 | editor.focus(); |
| 338 | startRange.select(); |
| 339 | } |
| 340 | } |
| 341 | } |
| 342 | |
| 343 | doc.on("mousedown",cursorFix); |
| 344 | doc.on("contextmenu",cursorFix); |
| 345 | })(); |
| 346 | |