Drag.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /*
  2. * DON'T REMOVE THE FOLLOWING LICENSE
  3. * INFORMATION!
  4. * ----------------------------------
  5. * Copyright by
  6. * Dennis Ritz
  7. * Author: Dennis Ritz
  8. * dennis.ritz@gmx.net
  9. * 2007-2008
  10. * ----------------------------------
  11. */
  12. var dragObject = new Object();
  13. var dropObject = new Object();
  14. var dropDummy = Browser.createElement("div","","","treeNodeDummy");
  15. function DragAndDrop() {
  16. this.startDrag = function startDrag(ev,p_dragNode,p_dragType,p_dragID){
  17. ev = ev || window.event;
  18. ContextMenu.hide(ev);
  19. var mousepos = mouseCoords(ev);
  20. dragObject.dragNode = p_dragNode.parentNode;
  21. dragObject.dragBar = p_dragNode;
  22. dragObject.dropNode = p_dragNode;
  23. dragObject.dragAction = "move";
  24. dragObject.dragActionProp = "xy";
  25. dragObject.dragType = p_dragType;
  26. dragObject.dragID = p_dragID;
  27. dragObject.drag = true;
  28. // Save starting positions of cursor and elements.
  29. dragObject.cursorStartX = mousepos.x;
  30. dragObject.cursorStartY = mousepos.y;
  31. dragObject.elStartLeft = parseInt(dragObject.dragNode.style.left, 10);
  32. dragObject.elStartTop = parseInt(dragObject.dragNode.style.top, 10);
  33. dragObject.elStartWidth = parseInt(dragObject.dragNode.style.width, 10);
  34. dragObject.elStartHeight = parseInt(dragObject.dragNode.style.height, 10);
  35. if (isNaN(dragObject.elStartLeft)) dragObject.elStartLeft = 0;
  36. if (isNaN(dragObject.elStartTop)) dragObject.elStartTop = 0;
  37. document.onmouseup = DragAndDrop.stopDrag;
  38. document.onmousemove = DragAndDrop.drag;
  39. return false;
  40. }
  41. this.drag = function drag(ev){
  42. ev = ev || window.event;
  43. var mousePos = mouseCoords(ev);
  44. //standard return false;
  45. return false;
  46. }
  47. this.stopDrag = function stopDrag(){
  48. /* Please never set return false on drag mode */
  49. if(dragObject.drag) dragObject.drag = false;
  50. try{
  51. dropDummy.style.background="url('img/GUI/Tree/divider.png')";
  52. }catch(e){}
  53. document.onmouseup = null;
  54. document.onmousemove = null;
  55. if(dropObject.className != null) {
  56. dropObject.dropNode.className = dropObject.className;
  57. }
  58. if(dragObject.dragNode){
  59. switch(dragObject.dragAction){
  60. case "move": if(dropObject.dropable) {
  61. dropObject.dropable = false;
  62. eval(dropObject.dropComp).dragAndDrop(dragObject.dragType,dragObject.dragID,dropObject.dropType,dropObject.dropID,dropObject.order);
  63. }
  64. break;
  65. }
  66. }
  67. return false;
  68. }
  69. this.setDrop = function setDrop(ev,item,type,p_dropTypes,p_comp,p_dropID){
  70. if(!item) return false;
  71. if(dragObject.drag) {
  72. dropObject.dropNode = item.parentNode;
  73. if(!dropObject.className) dropObject.className = item.parentNode.className;
  74. dropObject.dropType = type;
  75. dropObject.dropComp = p_comp;
  76. dropObject.dropID = p_dropID;
  77. moffset = getMouseOffset(dropObject.dropNode,ev);
  78. //alert("y: "+Browser.getHeight(item)+"px "+moffset.y+"px x: "+Browser.getWidth(item)+"px "+moffset.x+"px");
  79. if(dropObject.dropID != dragObject.dragID){
  80. if(dropObject.dropType == dragObject.dragType && moffset.y < (Browser.getHeight(dropObject.dropNode)*0.30)) {
  81. dropObject.dropNode.className = dropObject.className;
  82. dropObject.dropNode.parentNode.previousSibling.style.background="url('img/GUI/Tree/drop.png')";
  83. dropDummy = dropObject.dropNode.parentNode.previousSibling;
  84. //dropObject.dropNode.parentNode.parentNode.insertBefore(dropDummy,dropObject.dropNode.parentNode);
  85. dropObject.order = "before";
  86. dropObject.dropable = true;
  87. } else if(dropObject.dropType == dragObject.dragType && moffset.y > (Browser.getHeight(dropObject.dropNode)*0.70)) {
  88. dropObject.dropNode.className = dropObject.className;
  89. dropObject.dropNode.parentNode.nextSibling.style.background="url('img/GUI/Tree/drop.png')";
  90. dropDummy = dropObject.dropNode.parentNode.nextSibling;
  91. //dropObject.dropNode.parentNode.parentNode.insertBefore(dropDummy,dropObject.dropNode.parentNode.nextSibling);
  92. dropObject.order = "after";
  93. dropObject.dropable = true;
  94. } else if(p_dropTypes.indexOf(dragObject.dragType)>=0) {
  95. //dropObject.dropNode.nextSibling.appendChild(dropDummy);
  96. try{
  97. dropDummy.style.background="url('img/GUI/Tree/divider.png')";
  98. }catch(e){}
  99. //Browser.setDisplay(dropObject.dropNode.nextSibling,true);
  100. if(dropObject.className != null) {
  101. dropObject.dropNode.className = dropObject.className+"_active";
  102. }
  103. dropObject.order = "under";
  104. dropObject.dropable = true;
  105. } else {
  106. dropObject.dropable = false;
  107. try{
  108. dropDummy.style.background="url('img/GUI/Tree/divider.png')";
  109. }catch(e){}
  110. }
  111. }else{
  112. dropObject.dropable = false;
  113. try{
  114. dropDummy.style.background="url('img/GUI/Tree/divider.png')";
  115. }catch(e){}
  116. }
  117. }else{
  118. dropObject.dropable = false;
  119. try{
  120. dropDummy.style.background="url('img/GUI/Tree/divider.png')";
  121. }catch(e){}
  122. }
  123. return false;
  124. }
  125. this.clearDrop = function clearDrop(){
  126. if(dragObject.drag){
  127. if(dropObject.dropable)
  128. dropObject.dropNode.className = dropObject.className;
  129. dropObject.dropable = false;
  130. dropObject.dropType = null;
  131. dropObject.className = null;
  132. }
  133. }
  134. }
  135. var DragAndDrop = new DragAndDrop();