Drag.js 5.3 KB

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