yui-rails-asset 2.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (398) hide show
  1. data/LICENSE +21 -0
  2. data/README +17 -0
  3. data/lib/yui/rails.rb +29 -0
  4. data/lib/yui/rails/engine.rb +10 -0
  5. data/lib/yui/rails/version.rb +6 -0
  6. data/vendor/assets/javascripts/yui-2.8.1/build/animation/animation-debug.js +1396 -0
  7. data/vendor/assets/javascripts/yui-2.8.1/build/animation/animation-min.js +23 -0
  8. data/vendor/assets/javascripts/yui-2.8.1/build/animation/animation.js +1392 -0
  9. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/ajax-loader.gif +0 -0
  10. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/asc.gif +0 -0
  11. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/autocomplete.css +7 -0
  12. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/back-h.png +0 -0
  13. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/back-v.png +0 -0
  14. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bar-h.png +0 -0
  15. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bar-v.png +0 -0
  16. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bg-h.gif +0 -0
  17. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/bg-v.gif +0 -0
  18. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/blankimage.png +0 -0
  19. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/button.css +7 -0
  20. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/calendar.css +8 -0
  21. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/carousel.css +7 -0
  22. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/check0.gif +0 -0
  23. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/check1.gif +0 -0
  24. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/check2.gif +0 -0
  25. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/colorpicker.css +7 -0
  26. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/container.css +7 -0
  27. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/datatable.css +8 -0
  28. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/desc.gif +0 -0
  29. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/dt-arrow-dn.png +0 -0
  30. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/dt-arrow-up.png +0 -0
  31. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor-knob.gif +0 -0
  32. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor-sprite-active.gif +0 -0
  33. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor-sprite.gif +0 -0
  34. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/editor.css +10 -0
  35. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/header_background.png +0 -0
  36. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/hue_bg.png +0 -0
  37. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/imagecropper.css +7 -0
  38. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/layout.css +7 -0
  39. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/layout_sprite.png +0 -0
  40. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/loading.gif +0 -0
  41. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/logger.css +7 -0
  42. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menu-button-arrow-disabled.png +0 -0
  43. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menu-button-arrow.png +0 -0
  44. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menu.css +7 -0
  45. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menubaritem_submenuindicator.png +0 -0
  46. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menubaritem_submenuindicator_disabled.png +0 -0
  47. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_checkbox.png +0 -0
  48. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_checkbox_disabled.png +0 -0
  49. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_submenuindicator.png +0 -0
  50. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/menuitem_submenuindicator_disabled.png +0 -0
  51. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/paginator.css +7 -0
  52. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/picker_mask.png +0 -0
  53. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/profilerviewer.css +7 -0
  54. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/progressbar.css +7 -0
  55. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/resize.css +7 -0
  56. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/simpleeditor.css +10 -0
  57. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/skin.css +36 -0
  58. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/slider.css +7 -0
  59. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-active.png +0 -0
  60. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-disabled.png +0 -0
  61. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-focus.png +0 -0
  62. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow-hover.png +0 -0
  63. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/split-button-arrow.png +0 -0
  64. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/sprite.png +0 -0
  65. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/sprite.psd +0 -0
  66. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/tabview.css +8 -0
  67. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/treeview-loading.gif +0 -0
  68. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/treeview-sprite.gif +0 -0
  69. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/treeview.css +7 -0
  70. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/wait.gif +0 -0
  71. data/vendor/assets/javascripts/yui-2.8.1/build/assets/skins/sam/yuitest.css +7 -0
  72. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/assets/autocomplete-core.css +7 -0
  73. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/assets/skins/sam/autocomplete-skin.css +57 -0
  74. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/assets/skins/sam/autocomplete.css +7 -0
  75. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/autocomplete-debug.js +3009 -0
  76. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/autocomplete-min.js +12 -0
  77. data/vendor/assets/javascripts/yui-2.8.1/build/autocomplete/autocomplete.js +2966 -0
  78. data/vendor/assets/javascripts/yui-2.8.1/build/base/base-min.css +7 -0
  79. data/vendor/assets/javascripts/yui-2.8.1/build/base/base.css +131 -0
  80. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/button-core.css +44 -0
  81. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/button-skin.css +219 -0
  82. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/button.css +7 -0
  83. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/menu-button-arrow-disabled.png +0 -0
  84. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/menu-button-arrow.png +0 -0
  85. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-active.png +0 -0
  86. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-disabled.png +0 -0
  87. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-focus.png +0 -0
  88. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow-hover.png +0 -0
  89. data/vendor/assets/javascripts/yui-2.8.1/build/button/assets/skins/sam/split-button-arrow.png +0 -0
  90. data/vendor/assets/javascripts/yui-2.8.1/build/button/button-debug.js +4694 -0
  91. data/vendor/assets/javascripts/yui-2.8.1/build/button/button-min.js +11 -0
  92. data/vendor/assets/javascripts/yui-2.8.1/build/button/button.js +4633 -0
  93. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calendar-core.css +132 -0
  94. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calendar.css +320 -0
  95. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calgrad.png +0 -0
  96. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/callt.gif +0 -0
  97. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calrt.gif +0 -0
  98. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/calx.gif +0 -0
  99. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/skins/sam/calendar-skin.css +361 -0
  100. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/assets/skins/sam/calendar.css +8 -0
  101. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/calendar-debug.js +7324 -0
  102. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/calendar-min.js +18 -0
  103. data/vendor/assets/javascripts/yui-2.8.1/build/calendar/calendar.js +7294 -0
  104. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/ajax-loader.gif +0 -0
  105. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/carousel-core.css +88 -0
  106. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/skins/sam/ajax-loader.gif +0 -0
  107. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/skins/sam/carousel-skin.css +142 -0
  108. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/assets/skins/sam/carousel.css +7 -0
  109. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/carousel-debug.js +4390 -0
  110. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/carousel-min.js +12 -0
  111. data/vendor/assets/javascripts/yui-2.8.1/build/carousel/carousel.js +4349 -0
  112. data/vendor/assets/javascripts/yui-2.8.1/build/charts/assets/charts.swf +0 -0
  113. data/vendor/assets/javascripts/yui-2.8.1/build/charts/charts-debug.js +2061 -0
  114. data/vendor/assets/javascripts/yui-2.8.1/build/charts/charts-min.js +9 -0
  115. data/vendor/assets/javascripts/yui-2.8.1/build/charts/charts.js +2060 -0
  116. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/colorpicker-core.css +6 -0
  117. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/hue_thumb.png +0 -0
  118. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/picker_mask.png +0 -0
  119. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/picker_thumb.png +0 -0
  120. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/colorpicker-skin.css +105 -0
  121. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/colorpicker.css +7 -0
  122. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/hue_bg.png +0 -0
  123. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/assets/skins/sam/picker_mask.png +0 -0
  124. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/colorpicker-debug.js +1783 -0
  125. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/colorpicker-min.js +9 -0
  126. data/vendor/assets/javascripts/yui-2.8.1/build/colorpicker/colorpicker.js +1763 -0
  127. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection-debug.js +1576 -0
  128. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection-min.js +9 -0
  129. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection.js +1546 -0
  130. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection.swf +0 -0
  131. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection_core-debug.js +980 -0
  132. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection_core-min.js +8 -0
  133. data/vendor/assets/javascripts/yui-2.8.1/build/connection/connection_core.js +957 -0
  134. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/alrt16_1.gif +0 -0
  135. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/blck16_1.gif +0 -0
  136. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/close12_1.gif +0 -0
  137. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/container-core.css +176 -0
  138. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/container.css +324 -0
  139. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/hlp16_1.gif +0 -0
  140. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/info16_1.gif +0 -0
  141. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/skins/sam/container-skin.css +242 -0
  142. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/skins/sam/container.css +7 -0
  143. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/tip16_1.gif +0 -0
  144. data/vendor/assets/javascripts/yui-2.8.1/build/container/assets/warn16_1.gif +0 -0
  145. data/vendor/assets/javascripts/yui-2.8.1/build/container/container-debug.js +9076 -0
  146. data/vendor/assets/javascripts/yui-2.8.1/build/container/container-min.js +19 -0
  147. data/vendor/assets/javascripts/yui-2.8.1/build/container/container.js +9052 -0
  148. data/vendor/assets/javascripts/yui-2.8.1/build/container/container_core-debug.js +5136 -0
  149. data/vendor/assets/javascripts/yui-2.8.1/build/container/container_core-min.js +14 -0
  150. data/vendor/assets/javascripts/yui-2.8.1/build/container/container_core.js +5126 -0
  151. data/vendor/assets/javascripts/yui-2.8.1/build/cookie/cookie-debug.js +482 -0
  152. data/vendor/assets/javascripts/yui-2.8.1/build/cookie/cookie-min.js +7 -0
  153. data/vendor/assets/javascripts/yui-2.8.1/build/cookie/cookie.js +482 -0
  154. data/vendor/assets/javascripts/yui-2.8.1/build/datasource/datasource-debug.js +3067 -0
  155. data/vendor/assets/javascripts/yui-2.8.1/build/datasource/datasource-min.js +12 -0
  156. data/vendor/assets/javascripts/yui-2.8.1/build/datasource/datasource.js +2996 -0
  157. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/datatable-core.css +93 -0
  158. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/datatable.css +49 -0
  159. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/datatable-skin.css +240 -0
  160. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/datatable.css +8 -0
  161. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/dt-arrow-dn.png +0 -0
  162. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/assets/skins/sam/dt-arrow-up.png +0 -0
  163. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/datatable-debug.js +17360 -0
  164. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/datatable-min.js +29 -0
  165. data/vendor/assets/javascripts/yui-2.8.1/build/datatable/datatable.js +17122 -0
  166. data/vendor/assets/javascripts/yui-2.8.1/build/datemath/datemath-debug.js +408 -0
  167. data/vendor/assets/javascripts/yui-2.8.1/build/datemath/datemath-min.js +7 -0
  168. data/vendor/assets/javascripts/yui-2.8.1/build/datemath/datemath.js +408 -0
  169. data/vendor/assets/javascripts/yui-2.8.1/build/dom/dom-debug.js +1872 -0
  170. data/vendor/assets/javascripts/yui-2.8.1/build/dom/dom-min.js +9 -0
  171. data/vendor/assets/javascripts/yui-2.8.1/build/dom/dom.js +1832 -0
  172. data/vendor/assets/javascripts/yui-2.8.1/build/dragdrop/dragdrop-debug.js +3710 -0
  173. data/vendor/assets/javascripts/yui-2.8.1/build/dragdrop/dragdrop-min.js +10 -0
  174. data/vendor/assets/javascripts/yui-2.8.1/build/dragdrop/dragdrop.js +3601 -0
  175. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/editor-core.css +602 -0
  176. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/simpleeditor-core.css +602 -0
  177. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/blankimage.png +0 -0
  178. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-knob.gif +0 -0
  179. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-skin.css +711 -0
  180. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-sprite-active.gif +0 -0
  181. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor-sprite.gif +0 -0
  182. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/editor.css +10 -0
  183. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/simpleeditor-skin.css +711 -0
  184. data/vendor/assets/javascripts/yui-2.8.1/build/editor/assets/skins/sam/simpleeditor.css +10 -0
  185. data/vendor/assets/javascripts/yui-2.8.1/build/editor/editor-debug.js +9557 -0
  186. data/vendor/assets/javascripts/yui-2.8.1/build/editor/editor-min.js +30 -0
  187. data/vendor/assets/javascripts/yui-2.8.1/build/editor/editor.js +9447 -0
  188. data/vendor/assets/javascripts/yui-2.8.1/build/editor/simpleeditor-debug.js +7493 -0
  189. data/vendor/assets/javascripts/yui-2.8.1/build/editor/simpleeditor-min.js +24 -0
  190. data/vendor/assets/javascripts/yui-2.8.1/build/editor/simpleeditor.js +7406 -0
  191. data/vendor/assets/javascripts/yui-2.8.1/build/element-delegate/element-delegate-debug.js +141 -0
  192. data/vendor/assets/javascripts/yui-2.8.1/build/element-delegate/element-delegate-min.js +7 -0
  193. data/vendor/assets/javascripts/yui-2.8.1/build/element-delegate/element-delegate.js +138 -0
  194. data/vendor/assets/javascripts/yui-2.8.1/build/element/element-debug.js +1106 -0
  195. data/vendor/assets/javascripts/yui-2.8.1/build/element/element-min.js +8 -0
  196. data/vendor/assets/javascripts/yui-2.8.1/build/element/element.js +1090 -0
  197. data/vendor/assets/javascripts/yui-2.8.1/build/event-delegate/event-delegate-debug.js +283 -0
  198. data/vendor/assets/javascripts/yui-2.8.1/build/event-delegate/event-delegate-min.js +7 -0
  199. data/vendor/assets/javascripts/yui-2.8.1/build/event-delegate/event-delegate.js +281 -0
  200. data/vendor/assets/javascripts/yui-2.8.1/build/event-mouseenter/event-mouseenter-debug.js +219 -0
  201. data/vendor/assets/javascripts/yui-2.8.1/build/event-mouseenter/event-mouseenter-min.js +7 -0
  202. data/vendor/assets/javascripts/yui-2.8.1/build/event-mouseenter/event-mouseenter.js +219 -0
  203. data/vendor/assets/javascripts/yui-2.8.1/build/event-simulate/event-simulate-debug.js +622 -0
  204. data/vendor/assets/javascripts/yui-2.8.1/build/event-simulate/event-simulate-min.js +7 -0
  205. data/vendor/assets/javascripts/yui-2.8.1/build/event-simulate/event-simulate.js +622 -0
  206. data/vendor/assets/javascripts/yui-2.8.1/build/event/event-debug.js +2524 -0
  207. data/vendor/assets/javascripts/yui-2.8.1/build/event/event-min.js +11 -0
  208. data/vendor/assets/javascripts/yui-2.8.1/build/event/event.js +2500 -0
  209. data/vendor/assets/javascripts/yui-2.8.1/build/fonts/fonts-min.css +7 -0
  210. data/vendor/assets/javascripts/yui-2.8.1/build/fonts/fonts.css +56 -0
  211. data/vendor/assets/javascripts/yui-2.8.1/build/get/get-debug.js +773 -0
  212. data/vendor/assets/javascripts/yui-2.8.1/build/get/get-min.js +7 -0
  213. data/vendor/assets/javascripts/yui-2.8.1/build/get/get.js +755 -0
  214. data/vendor/assets/javascripts/yui-2.8.1/build/grids/grids-min.css +7 -0
  215. data/vendor/assets/javascripts/yui-2.8.1/build/grids/grids.css +467 -0
  216. data/vendor/assets/javascripts/yui-2.8.1/build/history/assets/blank.html +1 -0
  217. data/vendor/assets/javascripts/yui-2.8.1/build/history/history-debug.js +808 -0
  218. data/vendor/assets/javascripts/yui-2.8.1/build/history/history-min.js +7 -0
  219. data/vendor/assets/javascripts/yui-2.8.1/build/history/history.js +808 -0
  220. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/assets/imagecropper-core.css +33 -0
  221. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/assets/skins/sam/imagecropper-skin.css +16 -0
  222. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/assets/skins/sam/imagecropper.css +7 -0
  223. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/imagecropper-debug.js +907 -0
  224. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/imagecropper-min.js +8 -0
  225. data/vendor/assets/javascripts/yui-2.8.1/build/imagecropper/imagecropper.js +889 -0
  226. data/vendor/assets/javascripts/yui-2.8.1/build/imageloader/imageloader-debug.js +487 -0
  227. data/vendor/assets/javascripts/yui-2.8.1/build/imageloader/imageloader-min.js +7 -0
  228. data/vendor/assets/javascripts/yui-2.8.1/build/imageloader/imageloader.js +481 -0
  229. data/vendor/assets/javascripts/yui-2.8.1/build/json/json-debug.js +538 -0
  230. data/vendor/assets/javascripts/yui-2.8.1/build/json/json-min.js +7 -0
  231. data/vendor/assets/javascripts/yui-2.8.1/build/json/json.js +538 -0
  232. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/layout-core.css +158 -0
  233. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/skins/sam/layout-skin.css +207 -0
  234. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/skins/sam/layout.css +7 -0
  235. data/vendor/assets/javascripts/yui-2.8.1/build/layout/assets/skins/sam/layout_sprite.png +0 -0
  236. data/vendor/assets/javascripts/yui-2.8.1/build/layout/layout-debug.js +2305 -0
  237. data/vendor/assets/javascripts/yui-2.8.1/build/layout/layout-min.js +11 -0
  238. data/vendor/assets/javascripts/yui-2.8.1/build/layout/layout.js +2290 -0
  239. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/logger-core.css +7 -0
  240. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/logger.css +57 -0
  241. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/skins/sam/logger-skin.css +55 -0
  242. data/vendor/assets/javascripts/yui-2.8.1/build/logger/assets/skins/sam/logger.css +7 -0
  243. data/vendor/assets/javascripts/yui-2.8.1/build/logger/logger-debug.js +2104 -0
  244. data/vendor/assets/javascripts/yui-2.8.1/build/logger/logger-min.js +9 -0
  245. data/vendor/assets/javascripts/yui-2.8.1/build/logger/logger.js +2104 -0
  246. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu-core.css +242 -0
  247. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu.css +503 -0
  248. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_down_arrow.png +0 -0
  249. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_down_arrow_disabled.png +0 -0
  250. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_up_arrow.png +0 -0
  251. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menu_up_arrow_disabled.png +0 -0
  252. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menubaritem_submenuindicator.png +0 -0
  253. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menubaritem_submenuindicator_disabled.png +0 -0
  254. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menubaritem_submenuindicator_selected.png +0 -0
  255. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_checkbox.png +0 -0
  256. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_checkbox_disabled.png +0 -0
  257. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_checkbox_selected.png +0 -0
  258. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_submenuindicator.png +0 -0
  259. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_submenuindicator_disabled.png +0 -0
  260. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/menuitem_submenuindicator_selected.png +0 -0
  261. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menu-skin.css +339 -0
  262. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menu.css +7 -0
  263. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menubaritem_submenuindicator.png +0 -0
  264. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menubaritem_submenuindicator_disabled.png +0 -0
  265. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_checkbox.png +0 -0
  266. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_checkbox_disabled.png +0 -0
  267. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_submenuindicator.png +0 -0
  268. data/vendor/assets/javascripts/yui-2.8.1/build/menu/assets/skins/sam/menuitem_submenuindicator_disabled.png +0 -0
  269. data/vendor/assets/javascripts/yui-2.8.1/build/menu/menu-debug.js +9870 -0
  270. data/vendor/assets/javascripts/yui-2.8.1/build/menu/menu-min.js +16 -0
  271. data/vendor/assets/javascripts/yui-2.8.1/build/menu/menu.js +9823 -0
  272. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/assets/paginator-core.css +6 -0
  273. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/assets/skins/sam/paginator-skin.css +78 -0
  274. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/assets/skins/sam/paginator.css +7 -0
  275. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/paginator-debug.js +2393 -0
  276. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/paginator-min.js +10 -0
  277. data/vendor/assets/javascripts/yui-2.8.1/build/paginator/paginator.js +2393 -0
  278. data/vendor/assets/javascripts/yui-2.8.1/build/profiler/profiler-debug.js +557 -0
  279. data/vendor/assets/javascripts/yui-2.8.1/build/profiler/profiler-min.js +7 -0
  280. data/vendor/assets/javascripts/yui-2.8.1/build/profiler/profiler.js +557 -0
  281. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/profilerviewer-core.css +6 -0
  282. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/asc.gif +0 -0
  283. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/desc.gif +0 -0
  284. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/header_background.png +0 -0
  285. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/profilerviewer-skin.css +167 -0
  286. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/profilerviewer.css +7 -0
  287. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/assets/skins/sam/wait.gif +0 -0
  288. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/profilerviewer-debug.js +1229 -0
  289. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/profilerviewer-min.js +9 -0
  290. data/vendor/assets/javascripts/yui-2.8.1/build/profilerviewer/profilerviewer.js +1192 -0
  291. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/progressbar-core.css +85 -0
  292. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/back-h.png +0 -0
  293. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/back-v.png +0 -0
  294. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/bar-h.png +0 -0
  295. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/bar-v.png +0 -0
  296. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/progressbar-skin.css +56 -0
  297. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/assets/skins/sam/progressbar.css +7 -0
  298. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/progressbar-debug.js +691 -0
  299. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/progressbar-min.js +8 -0
  300. data/vendor/assets/javascripts/yui-2.8.1/build/progressbar/progressbar.js +677 -0
  301. data/vendor/assets/javascripts/yui-2.8.1/build/reset-fonts-grids/reset-fonts-grids.css +7 -0
  302. data/vendor/assets/javascripts/yui-2.8.1/build/reset-fonts/reset-fonts.css +7 -0
  303. data/vendor/assets/javascripts/yui-2.8.1/build/reset/reset-min.css +7 -0
  304. data/vendor/assets/javascripts/yui-2.8.1/build/reset/reset.css +142 -0
  305. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/resize-core.css +173 -0
  306. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/skins/sam/layout_sprite.png +0 -0
  307. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/skins/sam/resize-skin.css +142 -0
  308. data/vendor/assets/javascripts/yui-2.8.1/build/resize/assets/skins/sam/resize.css +7 -0
  309. data/vendor/assets/javascripts/yui-2.8.1/build/resize/resize-debug.js +1749 -0
  310. data/vendor/assets/javascripts/yui-2.8.1/build/resize/resize-min.js +10 -0
  311. data/vendor/assets/javascripts/yui-2.8.1/build/resize/resize.js +1689 -0
  312. data/vendor/assets/javascripts/yui-2.8.1/build/selector/selector-debug.js +651 -0
  313. data/vendor/assets/javascripts/yui-2.8.1/build/selector/selector-min.js +8 -0
  314. data/vendor/assets/javascripts/yui-2.8.1/build/selector/selector.js +644 -0
  315. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-fader.gif +0 -0
  316. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-h.gif +0 -0
  317. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-v-e.gif +0 -0
  318. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/bg-v.gif +0 -0
  319. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/left-thumb.png +0 -0
  320. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/right-thumb.png +0 -0
  321. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/bg-h.gif +0 -0
  322. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/bg-v.gif +0 -0
  323. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/slider-skin.css +24 -0
  324. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/skins/sam/slider.css +7 -0
  325. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/slider-core.css +17 -0
  326. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/slider-skin.css +20 -0
  327. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-bar.gif +0 -0
  328. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-e.gif +0 -0
  329. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-fader.gif +0 -0
  330. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-n.gif +0 -0
  331. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-s.gif +0 -0
  332. data/vendor/assets/javascripts/yui-2.8.1/build/slider/assets/thumb-w.gif +0 -0
  333. data/vendor/assets/javascripts/yui-2.8.1/build/slider/slider-debug.js +2114 -0
  334. data/vendor/assets/javascripts/yui-2.8.1/build/slider/slider-min.js +9 -0
  335. data/vendor/assets/javascripts/yui-2.8.1/build/slider/slider.js +2068 -0
  336. data/vendor/assets/javascripts/yui-2.8.1/build/storage/storage-debug.js +1185 -0
  337. data/vendor/assets/javascripts/yui-2.8.1/build/storage/storage-min.js +8 -0
  338. data/vendor/assets/javascripts/yui-2.8.1/build/storage/storage.js +1183 -0
  339. data/vendor/assets/javascripts/yui-2.8.1/build/stylesheet/stylesheet-debug.js +648 -0
  340. data/vendor/assets/javascripts/yui-2.8.1/build/stylesheet/stylesheet-min.js +7 -0
  341. data/vendor/assets/javascripts/yui-2.8.1/build/stylesheet/stylesheet.js +645 -0
  342. data/vendor/assets/javascripts/yui-2.8.1/build/swf/swf-debug.js +269 -0
  343. data/vendor/assets/javascripts/yui-2.8.1/build/swf/swf-min.js +7 -0
  344. data/vendor/assets/javascripts/yui-2.8.1/build/swf/swf.js +268 -0
  345. data/vendor/assets/javascripts/yui-2.8.1/build/swfdetect/swfdetect-debug.js +93 -0
  346. data/vendor/assets/javascripts/yui-2.8.1/build/swfdetect/swfdetect-min.js +7 -0
  347. data/vendor/assets/javascripts/yui-2.8.1/build/swfdetect/swfdetect.js +93 -0
  348. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swf.js +238 -0
  349. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore-debug.js +470 -0
  350. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore-min.js +7 -0
  351. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore.js +453 -0
  352. data/vendor/assets/javascripts/yui-2.8.1/build/swfstore/swfstore.swf +0 -0
  353. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/border_tabs.css +54 -0
  354. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/loading.gif +0 -0
  355. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/skin-sam.css +77 -0
  356. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/skins/sam/tabview-skin.css +186 -0
  357. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/skins/sam/tabview.css +8 -0
  358. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/tabview-core.css +133 -0
  359. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/assets/tabview.css +77 -0
  360. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/tabview-debug.js +995 -0
  361. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/tabview-min.js +8 -0
  362. data/vendor/assets/javascripts/yui-2.8.1/build/tabview/tabview.js +987 -0
  363. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/check0.gif +0 -0
  364. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/check1.gif +0 -0
  365. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/check2.gif +0 -0
  366. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/loading.gif +0 -0
  367. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview-loading.gif +0 -0
  368. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview-skin.css +249 -0
  369. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview-sprite.gif +0 -0
  370. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/skins/sam/treeview.css +7 -0
  371. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/assets/treeview-core.css +6 -0
  372. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/treeview-debug.js +4058 -0
  373. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/treeview-min.js +12 -0
  374. data/vendor/assets/javascripts/yui-2.8.1/build/treeview/treeview.js +3989 -0
  375. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/assets/uploader.swf +0 -0
  376. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/uploader-debug.js +1072 -0
  377. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/uploader-min.js +15 -0
  378. data/vendor/assets/javascripts/yui-2.8.1/build/uploader/uploader.js +1069 -0
  379. data/vendor/assets/javascripts/yui-2.8.1/build/utilities/utilities.js +39 -0
  380. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo-dom-event/yahoo-dom-event.js +14 -0
  381. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo/yahoo-debug.js +1075 -0
  382. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo/yahoo-min.js +7 -0
  383. data/vendor/assets/javascripts/yui-2.8.1/build/yahoo/yahoo.js +1075 -0
  384. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader-dom-event/yuiloader-dom-event.js +17 -0
  385. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader/yuiloader-debug.js +3879 -0
  386. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader/yuiloader-min.js +10 -0
  387. data/vendor/assets/javascripts/yui-2.8.1/build/yuiloader/yuiloader.js +3879 -0
  388. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/skins/sam/yuitest-skin.css +7 -0
  389. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/skins/sam/yuitest.css +7 -0
  390. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/testlogger.css +7 -0
  391. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/assets/yuitest-core.css +7 -0
  392. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest-debug.js +2741 -0
  393. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest-min.js +10 -0
  394. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest.js +2741 -0
  395. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest_core-debug.js +1976 -0
  396. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest_core-min.js +9 -0
  397. data/vendor/assets/javascripts/yui-2.8.1/build/yuitest/yuitest_core.js +1976 -0
  398. metadata +470 -0
@@ -0,0 +1,3710 @@
1
+ /*
2
+ Copyright (c) 2010, Yahoo! Inc. All rights reserved.
3
+ Code licensed under the BSD License:
4
+ http://developer.yahoo.com/yui/license.html
5
+ version: 2.8.1
6
+ */
7
+ /**
8
+ * The drag and drop utility provides a framework for building drag and drop
9
+ * applications. In addition to enabling drag and drop for specific elements,
10
+ * the drag and drop elements are tracked by the manager class, and the
11
+ * interactions between the various elements are tracked during the drag and
12
+ * the implementing code is notified about these important moments.
13
+ * @module dragdrop
14
+ * @title Drag and Drop
15
+ * @requires yahoo,dom,event
16
+ * @namespace YAHOO.util
17
+ */
18
+
19
+ // Only load the library once. Rewriting the manager class would orphan
20
+ // existing drag and drop instances.
21
+ if (!YAHOO.util.DragDropMgr) {
22
+
23
+ /**
24
+ * DragDropMgr is a singleton that tracks the element interaction for
25
+ * all DragDrop items in the window. Generally, you will not call
26
+ * this class directly, but it does have helper methods that could
27
+ * be useful in your DragDrop implementations.
28
+ * @class DragDropMgr
29
+ * @static
30
+ */
31
+ YAHOO.util.DragDropMgr = function() {
32
+
33
+ var Event = YAHOO.util.Event,
34
+ Dom = YAHOO.util.Dom;
35
+
36
+ return {
37
+ /**
38
+ * This property is used to turn on global use of the shim element on all DragDrop instances, defaults to false for backcompat. (Use: YAHOO.util.DDM.useShim = true)
39
+ * @property useShim
40
+ * @type Boolean
41
+ * @static
42
+ */
43
+ useShim: false,
44
+ /**
45
+ * This property is used to determine if the shim is active over the screen, default false.
46
+ * @private
47
+ * @property _shimActive
48
+ * @type Boolean
49
+ * @static
50
+ */
51
+ _shimActive: false,
52
+ /**
53
+ * This property is used when useShim is set on a DragDrop object to store the current state of DDM.useShim so it can be reset when a drag operation is done.
54
+ * @private
55
+ * @property _shimState
56
+ * @type Boolean
57
+ * @static
58
+ */
59
+ _shimState: false,
60
+ /**
61
+ * This property is used when useShim is set to true, it will set the opacity on the shim to .5 for debugging. Use: (YAHOO.util.DDM._debugShim = true;)
62
+ * @private
63
+ * @property _debugShim
64
+ * @type Boolean
65
+ * @static
66
+ */
67
+ _debugShim: false,
68
+ /**
69
+ * This method will create a shim element (giving it the id of yui-ddm-shim), it also attaches the mousemove and mouseup listeners to it and attaches a scroll listener on the window
70
+ * @private
71
+ * @method _sizeShim
72
+ * @static
73
+ */
74
+ _createShim: function() {
75
+ YAHOO.log('Creating Shim Element', 'info', 'DragDropMgr');
76
+ var s = document.createElement('div');
77
+ s.id = 'yui-ddm-shim';
78
+ if (document.body.firstChild) {
79
+ document.body.insertBefore(s, document.body.firstChild);
80
+ } else {
81
+ document.body.appendChild(s);
82
+ }
83
+ s.style.display = 'none';
84
+ s.style.backgroundColor = 'red';
85
+ s.style.position = 'absolute';
86
+ s.style.zIndex = '99999';
87
+ Dom.setStyle(s, 'opacity', '0');
88
+ this._shim = s;
89
+ Event.on(s, "mouseup", this.handleMouseUp, this, true);
90
+ Event.on(s, "mousemove", this.handleMouseMove, this, true);
91
+ Event.on(window, 'scroll', this._sizeShim, this, true);
92
+ },
93
+ /**
94
+ * This method will size the shim, called from activate and on window scroll event
95
+ * @private
96
+ * @method _sizeShim
97
+ * @static
98
+ */
99
+ _sizeShim: function() {
100
+ if (this._shimActive) {
101
+ YAHOO.log('Sizing Shim', 'info', 'DragDropMgr');
102
+ var s = this._shim;
103
+ s.style.height = Dom.getDocumentHeight() + 'px';
104
+ s.style.width = Dom.getDocumentWidth() + 'px';
105
+ s.style.top = '0';
106
+ s.style.left = '0';
107
+ }
108
+ },
109
+ /**
110
+ * This method will create the shim element if needed, then show the shim element, size the element and set the _shimActive property to true
111
+ * @private
112
+ * @method _activateShim
113
+ * @static
114
+ */
115
+ _activateShim: function() {
116
+ if (this.useShim) {
117
+ YAHOO.log('Activating Shim', 'info', 'DragDropMgr');
118
+ if (!this._shim) {
119
+ this._createShim();
120
+ }
121
+ this._shimActive = true;
122
+ var s = this._shim,
123
+ o = '0';
124
+ if (this._debugShim) {
125
+ o = '.5';
126
+ }
127
+ Dom.setStyle(s, 'opacity', o);
128
+ this._sizeShim();
129
+ s.style.display = 'block';
130
+ }
131
+ },
132
+ /**
133
+ * This method will hide the shim element and set the _shimActive property to false
134
+ * @private
135
+ * @method _deactivateShim
136
+ * @static
137
+ */
138
+ _deactivateShim: function() {
139
+ YAHOO.log('Deactivating Shim', 'info', 'DragDropMgr');
140
+ this._shim.style.display = 'none';
141
+ this._shimActive = false;
142
+ },
143
+ /**
144
+ * The HTML element created to use as a shim over the document to track mouse movements
145
+ * @private
146
+ * @property _shim
147
+ * @type HTMLElement
148
+ * @static
149
+ */
150
+ _shim: null,
151
+ /**
152
+ * Two dimensional Array of registered DragDrop objects. The first
153
+ * dimension is the DragDrop item group, the second the DragDrop
154
+ * object.
155
+ * @property ids
156
+ * @type {string: string}
157
+ * @private
158
+ * @static
159
+ */
160
+ ids: {},
161
+
162
+ /**
163
+ * Array of element ids defined as drag handles. Used to determine
164
+ * if the element that generated the mousedown event is actually the
165
+ * handle and not the html element itself.
166
+ * @property handleIds
167
+ * @type {string: string}
168
+ * @private
169
+ * @static
170
+ */
171
+ handleIds: {},
172
+
173
+ /**
174
+ * the DragDrop object that is currently being dragged
175
+ * @property dragCurrent
176
+ * @type DragDrop
177
+ * @private
178
+ * @static
179
+ **/
180
+ dragCurrent: null,
181
+
182
+ /**
183
+ * the DragDrop object(s) that are being hovered over
184
+ * @property dragOvers
185
+ * @type Array
186
+ * @private
187
+ * @static
188
+ */
189
+ dragOvers: {},
190
+
191
+ /**
192
+ * the X distance between the cursor and the object being dragged
193
+ * @property deltaX
194
+ * @type int
195
+ * @private
196
+ * @static
197
+ */
198
+ deltaX: 0,
199
+
200
+ /**
201
+ * the Y distance between the cursor and the object being dragged
202
+ * @property deltaY
203
+ * @type int
204
+ * @private
205
+ * @static
206
+ */
207
+ deltaY: 0,
208
+
209
+ /**
210
+ * Flag to determine if we should prevent the default behavior of the
211
+ * events we define. By default this is true, but this can be set to
212
+ * false if you need the default behavior (not recommended)
213
+ * @property preventDefault
214
+ * @type boolean
215
+ * @static
216
+ */
217
+ preventDefault: true,
218
+
219
+ /**
220
+ * Flag to determine if we should stop the propagation of the events
221
+ * we generate. This is true by default but you may want to set it to
222
+ * false if the html element contains other features that require the
223
+ * mouse click.
224
+ * @property stopPropagation
225
+ * @type boolean
226
+ * @static
227
+ */
228
+ stopPropagation: true,
229
+
230
+ /**
231
+ * Internal flag that is set to true when drag and drop has been
232
+ * initialized
233
+ * @property initialized
234
+ * @private
235
+ * @static
236
+ */
237
+ initialized: false,
238
+
239
+ /**
240
+ * All drag and drop can be disabled.
241
+ * @property locked
242
+ * @private
243
+ * @static
244
+ */
245
+ locked: false,
246
+
247
+ /**
248
+ * Provides additional information about the the current set of
249
+ * interactions. Can be accessed from the event handlers. It
250
+ * contains the following properties:
251
+ *
252
+ * out: onDragOut interactions
253
+ * enter: onDragEnter interactions
254
+ * over: onDragOver interactions
255
+ * drop: onDragDrop interactions
256
+ * point: The location of the cursor
257
+ * draggedRegion: The location of dragged element at the time
258
+ * of the interaction
259
+ * sourceRegion: The location of the source elemtn at the time
260
+ * of the interaction
261
+ * validDrop: boolean
262
+ * @property interactionInfo
263
+ * @type object
264
+ * @static
265
+ */
266
+ interactionInfo: null,
267
+
268
+ /**
269
+ * Called the first time an element is registered.
270
+ * @method init
271
+ * @private
272
+ * @static
273
+ */
274
+ init: function() {
275
+ this.initialized = true;
276
+ },
277
+
278
+ /**
279
+ * In point mode, drag and drop interaction is defined by the
280
+ * location of the cursor during the drag/drop
281
+ * @property POINT
282
+ * @type int
283
+ * @static
284
+ * @final
285
+ */
286
+ POINT: 0,
287
+
288
+ /**
289
+ * In intersect mode, drag and drop interaction is defined by the
290
+ * cursor position or the amount of overlap of two or more drag and
291
+ * drop objects.
292
+ * @property INTERSECT
293
+ * @type int
294
+ * @static
295
+ * @final
296
+ */
297
+ INTERSECT: 1,
298
+
299
+ /**
300
+ * In intersect mode, drag and drop interaction is defined only by the
301
+ * overlap of two or more drag and drop objects.
302
+ * @property STRICT_INTERSECT
303
+ * @type int
304
+ * @static
305
+ * @final
306
+ */
307
+ STRICT_INTERSECT: 2,
308
+
309
+ /**
310
+ * The current drag and drop mode. Default: POINT
311
+ * @property mode
312
+ * @type int
313
+ * @static
314
+ */
315
+ mode: 0,
316
+
317
+ /**
318
+ * Runs method on all drag and drop objects
319
+ * @method _execOnAll
320
+ * @private
321
+ * @static
322
+ */
323
+ _execOnAll: function(sMethod, args) {
324
+ for (var i in this.ids) {
325
+ for (var j in this.ids[i]) {
326
+ var oDD = this.ids[i][j];
327
+ if (! this.isTypeOfDD(oDD)) {
328
+ continue;
329
+ }
330
+ oDD[sMethod].apply(oDD, args);
331
+ }
332
+ }
333
+ },
334
+
335
+ /**
336
+ * Drag and drop initialization. Sets up the global event handlers
337
+ * @method _onLoad
338
+ * @private
339
+ * @static
340
+ */
341
+ _onLoad: function() {
342
+
343
+ this.init();
344
+
345
+ YAHOO.log("DragDropMgr onload", "info", "DragDropMgr");
346
+ Event.on(document, "mouseup", this.handleMouseUp, this, true);
347
+ Event.on(document, "mousemove", this.handleMouseMove, this, true);
348
+ Event.on(window, "unload", this._onUnload, this, true);
349
+ Event.on(window, "resize", this._onResize, this, true);
350
+ // Event.on(window, "mouseout", this._test);
351
+
352
+ },
353
+
354
+ /**
355
+ * Reset constraints on all drag and drop objs
356
+ * @method _onResize
357
+ * @private
358
+ * @static
359
+ */
360
+ _onResize: function(e) {
361
+ YAHOO.log("window resize", "info", "DragDropMgr");
362
+ this._execOnAll("resetConstraints", []);
363
+ },
364
+
365
+ /**
366
+ * Lock all drag and drop functionality
367
+ * @method lock
368
+ * @static
369
+ */
370
+ lock: function() { this.locked = true; },
371
+
372
+ /**
373
+ * Unlock all drag and drop functionality
374
+ * @method unlock
375
+ * @static
376
+ */
377
+ unlock: function() { this.locked = false; },
378
+
379
+ /**
380
+ * Is drag and drop locked?
381
+ * @method isLocked
382
+ * @return {boolean} True if drag and drop is locked, false otherwise.
383
+ * @static
384
+ */
385
+ isLocked: function() { return this.locked; },
386
+
387
+ /**
388
+ * Location cache that is set for all drag drop objects when a drag is
389
+ * initiated, cleared when the drag is finished.
390
+ * @property locationCache
391
+ * @private
392
+ * @static
393
+ */
394
+ locationCache: {},
395
+
396
+ /**
397
+ * Set useCache to false if you want to force object the lookup of each
398
+ * drag and drop linked element constantly during a drag.
399
+ * @property useCache
400
+ * @type boolean
401
+ * @static
402
+ */
403
+ useCache: true,
404
+
405
+ /**
406
+ * The number of pixels that the mouse needs to move after the
407
+ * mousedown before the drag is initiated. Default=3;
408
+ * @property clickPixelThresh
409
+ * @type int
410
+ * @static
411
+ */
412
+ clickPixelThresh: 3,
413
+
414
+ /**
415
+ * The number of milliseconds after the mousedown event to initiate the
416
+ * drag if we don't get a mouseup event. Default=1000
417
+ * @property clickTimeThresh
418
+ * @type int
419
+ * @static
420
+ */
421
+ clickTimeThresh: 1000,
422
+
423
+ /**
424
+ * Flag that indicates that either the drag pixel threshold or the
425
+ * mousdown time threshold has been met
426
+ * @property dragThreshMet
427
+ * @type boolean
428
+ * @private
429
+ * @static
430
+ */
431
+ dragThreshMet: false,
432
+
433
+ /**
434
+ * Timeout used for the click time threshold
435
+ * @property clickTimeout
436
+ * @type Object
437
+ * @private
438
+ * @static
439
+ */
440
+ clickTimeout: null,
441
+
442
+ /**
443
+ * The X position of the mousedown event stored for later use when a
444
+ * drag threshold is met.
445
+ * @property startX
446
+ * @type int
447
+ * @private
448
+ * @static
449
+ */
450
+ startX: 0,
451
+
452
+ /**
453
+ * The Y position of the mousedown event stored for later use when a
454
+ * drag threshold is met.
455
+ * @property startY
456
+ * @type int
457
+ * @private
458
+ * @static
459
+ */
460
+ startY: 0,
461
+
462
+ /**
463
+ * Flag to determine if the drag event was fired from the click timeout and
464
+ * not the mouse move threshold.
465
+ * @property fromTimeout
466
+ * @type boolean
467
+ * @private
468
+ * @static
469
+ */
470
+ fromTimeout: false,
471
+
472
+ /**
473
+ * Each DragDrop instance must be registered with the DragDropMgr.
474
+ * This is executed in DragDrop.init()
475
+ * @method regDragDrop
476
+ * @param {DragDrop} oDD the DragDrop object to register
477
+ * @param {String} sGroup the name of the group this element belongs to
478
+ * @static
479
+ */
480
+ regDragDrop: function(oDD, sGroup) {
481
+ if (!this.initialized) { this.init(); }
482
+
483
+ if (!this.ids[sGroup]) {
484
+ this.ids[sGroup] = {};
485
+ }
486
+ this.ids[sGroup][oDD.id] = oDD;
487
+ },
488
+
489
+ /**
490
+ * Removes the supplied dd instance from the supplied group. Executed
491
+ * by DragDrop.removeFromGroup, so don't call this function directly.
492
+ * @method removeDDFromGroup
493
+ * @private
494
+ * @static
495
+ */
496
+ removeDDFromGroup: function(oDD, sGroup) {
497
+ if (!this.ids[sGroup]) {
498
+ this.ids[sGroup] = {};
499
+ }
500
+
501
+ var obj = this.ids[sGroup];
502
+ if (obj && obj[oDD.id]) {
503
+ delete obj[oDD.id];
504
+ }
505
+ },
506
+
507
+ /**
508
+ * Unregisters a drag and drop item. This is executed in
509
+ * DragDrop.unreg, use that method instead of calling this directly.
510
+ * @method _remove
511
+ * @private
512
+ * @static
513
+ */
514
+ _remove: function(oDD) {
515
+ for (var g in oDD.groups) {
516
+ if (g) {
517
+ var item = this.ids[g];
518
+ if (item && item[oDD.id]) {
519
+ delete item[oDD.id];
520
+ }
521
+ }
522
+
523
+ }
524
+ delete this.handleIds[oDD.id];
525
+ },
526
+
527
+ /**
528
+ * Each DragDrop handle element must be registered. This is done
529
+ * automatically when executing DragDrop.setHandleElId()
530
+ * @method regHandle
531
+ * @param {String} sDDId the DragDrop id this element is a handle for
532
+ * @param {String} sHandleId the id of the element that is the drag
533
+ * handle
534
+ * @static
535
+ */
536
+ regHandle: function(sDDId, sHandleId) {
537
+ if (!this.handleIds[sDDId]) {
538
+ this.handleIds[sDDId] = {};
539
+ }
540
+ this.handleIds[sDDId][sHandleId] = sHandleId;
541
+ },
542
+
543
+ /**
544
+ * Utility function to determine if a given element has been
545
+ * registered as a drag drop item.
546
+ * @method isDragDrop
547
+ * @param {String} id the element id to check
548
+ * @return {boolean} true if this element is a DragDrop item,
549
+ * false otherwise
550
+ * @static
551
+ */
552
+ isDragDrop: function(id) {
553
+ return ( this.getDDById(id) ) ? true : false;
554
+ },
555
+
556
+ /**
557
+ * Returns the drag and drop instances that are in all groups the
558
+ * passed in instance belongs to.
559
+ * @method getRelated
560
+ * @param {DragDrop} p_oDD the obj to get related data for
561
+ * @param {boolean} bTargetsOnly if true, only return targetable objs
562
+ * @return {DragDrop[]} the related instances
563
+ * @static
564
+ */
565
+ getRelated: function(p_oDD, bTargetsOnly) {
566
+ var oDDs = [];
567
+ for (var i in p_oDD.groups) {
568
+ for (var j in this.ids[i]) {
569
+ var dd = this.ids[i][j];
570
+ if (! this.isTypeOfDD(dd)) {
571
+ continue;
572
+ }
573
+ if (!bTargetsOnly || dd.isTarget) {
574
+ oDDs[oDDs.length] = dd;
575
+ }
576
+ }
577
+ }
578
+
579
+ return oDDs;
580
+ },
581
+
582
+ /**
583
+ * Returns true if the specified dd target is a legal target for
584
+ * the specifice drag obj
585
+ * @method isLegalTarget
586
+ * @param {DragDrop} the drag obj
587
+ * @param {DragDrop} the target
588
+ * @return {boolean} true if the target is a legal target for the
589
+ * dd obj
590
+ * @static
591
+ */
592
+ isLegalTarget: function (oDD, oTargetDD) {
593
+ var targets = this.getRelated(oDD, true);
594
+ for (var i=0, len=targets.length;i<len;++i) {
595
+ if (targets[i].id == oTargetDD.id) {
596
+ return true;
597
+ }
598
+ }
599
+
600
+ return false;
601
+ },
602
+
603
+ /**
604
+ * My goal is to be able to transparently determine if an object is
605
+ * typeof DragDrop, and the exact subclass of DragDrop. typeof
606
+ * returns "object", oDD.constructor.toString() always returns
607
+ * "DragDrop" and not the name of the subclass. So for now it just
608
+ * evaluates a well-known variable in DragDrop.
609
+ * @method isTypeOfDD
610
+ * @param {Object} the object to evaluate
611
+ * @return {boolean} true if typeof oDD = DragDrop
612
+ * @static
613
+ */
614
+ isTypeOfDD: function (oDD) {
615
+ return (oDD && oDD.__ygDragDrop);
616
+ },
617
+
618
+ /**
619
+ * Utility function to determine if a given element has been
620
+ * registered as a drag drop handle for the given Drag Drop object.
621
+ * @method isHandle
622
+ * @param {String} id the element id to check
623
+ * @return {boolean} true if this element is a DragDrop handle, false
624
+ * otherwise
625
+ * @static
626
+ */
627
+ isHandle: function(sDDId, sHandleId) {
628
+ return ( this.handleIds[sDDId] &&
629
+ this.handleIds[sDDId][sHandleId] );
630
+ },
631
+
632
+ /**
633
+ * Returns the DragDrop instance for a given id
634
+ * @method getDDById
635
+ * @param {String} id the id of the DragDrop object
636
+ * @return {DragDrop} the drag drop object, null if it is not found
637
+ * @static
638
+ */
639
+ getDDById: function(id) {
640
+ for (var i in this.ids) {
641
+ if (this.ids[i][id]) {
642
+ return this.ids[i][id];
643
+ }
644
+ }
645
+ return null;
646
+ },
647
+
648
+ /**
649
+ * Fired after a registered DragDrop object gets the mousedown event.
650
+ * Sets up the events required to track the object being dragged
651
+ * @method handleMouseDown
652
+ * @param {Event} e the event
653
+ * @param oDD the DragDrop object being dragged
654
+ * @private
655
+ * @static
656
+ */
657
+ handleMouseDown: function(e, oDD) {
658
+ //this._activateShim();
659
+
660
+ this.currentTarget = YAHOO.util.Event.getTarget(e);
661
+
662
+ this.dragCurrent = oDD;
663
+
664
+ var el = oDD.getEl();
665
+
666
+ // track start position
667
+ this.startX = YAHOO.util.Event.getPageX(e);
668
+ this.startY = YAHOO.util.Event.getPageY(e);
669
+
670
+ this.deltaX = this.startX - el.offsetLeft;
671
+ this.deltaY = this.startY - el.offsetTop;
672
+
673
+ this.dragThreshMet = false;
674
+
675
+ this.clickTimeout = setTimeout(
676
+ function() {
677
+ var DDM = YAHOO.util.DDM;
678
+ DDM.startDrag(DDM.startX, DDM.startY);
679
+ DDM.fromTimeout = true;
680
+ },
681
+ this.clickTimeThresh );
682
+ },
683
+
684
+ /**
685
+ * Fired when either the drag pixel threshold or the mousedown hold
686
+ * time threshold has been met.
687
+ * @method startDrag
688
+ * @param x {int} the X position of the original mousedown
689
+ * @param y {int} the Y position of the original mousedown
690
+ * @static
691
+ */
692
+ startDrag: function(x, y) {
693
+ if (this.dragCurrent && this.dragCurrent.useShim) {
694
+ this._shimState = this.useShim;
695
+ this.useShim = true;
696
+ }
697
+ this._activateShim();
698
+ YAHOO.log("firing drag start events", "info", "DragDropMgr");
699
+ clearTimeout(this.clickTimeout);
700
+ var dc = this.dragCurrent;
701
+ if (dc && dc.events.b4StartDrag) {
702
+ dc.b4StartDrag(x, y);
703
+ dc.fireEvent('b4StartDragEvent', { x: x, y: y });
704
+ }
705
+ if (dc && dc.events.startDrag) {
706
+ dc.startDrag(x, y);
707
+ dc.fireEvent('startDragEvent', { x: x, y: y });
708
+ }
709
+ this.dragThreshMet = true;
710
+ },
711
+
712
+ /**
713
+ * Internal function to handle the mouseup event. Will be invoked
714
+ * from the context of the document.
715
+ * @method handleMouseUp
716
+ * @param {Event} e the event
717
+ * @private
718
+ * @static
719
+ */
720
+ handleMouseUp: function(e) {
721
+ if (this.dragCurrent) {
722
+ clearTimeout(this.clickTimeout);
723
+
724
+ if (this.dragThreshMet) {
725
+ YAHOO.log("mouseup detected - completing drag", "info", "DragDropMgr");
726
+ if (this.fromTimeout) {
727
+ YAHOO.log('fromTimeout is true (mouse didn\'t move), call handleMouseMove so we can get the dragOver event', 'info', 'DragDropMgr');
728
+ this.fromTimeout = false;
729
+ this.handleMouseMove(e);
730
+ }
731
+ this.fromTimeout = false;
732
+ this.fireEvents(e, true);
733
+ } else {
734
+ YAHOO.log("drag threshold not met", "info", "DragDropMgr");
735
+ }
736
+
737
+ this.stopDrag(e);
738
+
739
+ this.stopEvent(e);
740
+ }
741
+ },
742
+
743
+ /**
744
+ * Utility to stop event propagation and event default, if these
745
+ * features are turned on.
746
+ * @method stopEvent
747
+ * @param {Event} e the event as returned by this.getEvent()
748
+ * @static
749
+ */
750
+ stopEvent: function(e) {
751
+ if (this.stopPropagation) {
752
+ YAHOO.util.Event.stopPropagation(e);
753
+ }
754
+
755
+ if (this.preventDefault) {
756
+ YAHOO.util.Event.preventDefault(e);
757
+ }
758
+ },
759
+
760
+ /**
761
+ * Ends the current drag, cleans up the state, and fires the endDrag
762
+ * and mouseUp events. Called internally when a mouseup is detected
763
+ * during the drag. Can be fired manually during the drag by passing
764
+ * either another event (such as the mousemove event received in onDrag)
765
+ * or a fake event with pageX and pageY defined (so that endDrag and
766
+ * onMouseUp have usable position data.). Alternatively, pass true
767
+ * for the silent parameter so that the endDrag and onMouseUp events
768
+ * are skipped (so no event data is needed.)
769
+ *
770
+ * @method stopDrag
771
+ * @param {Event} e the mouseup event, another event (or a fake event)
772
+ * with pageX and pageY defined, or nothing if the
773
+ * silent parameter is true
774
+ * @param {boolean} silent skips the enddrag and mouseup events if true
775
+ * @static
776
+ */
777
+ stopDrag: function(e, silent) {
778
+ // YAHOO.log("mouseup - removing event handlers");
779
+ var dc = this.dragCurrent;
780
+ // Fire the drag end event for the item that was dragged
781
+ if (dc && !silent) {
782
+ if (this.dragThreshMet) {
783
+ YAHOO.log("firing endDrag events", "info", "DragDropMgr");
784
+ if (dc.events.b4EndDrag) {
785
+ dc.b4EndDrag(e);
786
+ dc.fireEvent('b4EndDragEvent', { e: e });
787
+ }
788
+ if (dc.events.endDrag) {
789
+ dc.endDrag(e);
790
+ dc.fireEvent('endDragEvent', { e: e });
791
+ }
792
+ }
793
+ if (dc.events.mouseUp) {
794
+ YAHOO.log("firing dragdrop onMouseUp event", "info", "DragDropMgr");
795
+ dc.onMouseUp(e);
796
+ dc.fireEvent('mouseUpEvent', { e: e });
797
+ }
798
+ }
799
+
800
+ if (this._shimActive) {
801
+ this._deactivateShim();
802
+ if (this.dragCurrent && this.dragCurrent.useShim) {
803
+ this.useShim = this._shimState;
804
+ this._shimState = false;
805
+ }
806
+ }
807
+
808
+ this.dragCurrent = null;
809
+ this.dragOvers = {};
810
+ },
811
+
812
+ /**
813
+ * Internal function to handle the mousemove event. Will be invoked
814
+ * from the context of the html element.
815
+ *
816
+ * @TODO figure out what we can do about mouse events lost when the
817
+ * user drags objects beyond the window boundary. Currently we can
818
+ * detect this in internet explorer by verifying that the mouse is
819
+ * down during the mousemove event. Firefox doesn't give us the
820
+ * button state on the mousemove event.
821
+ * @method handleMouseMove
822
+ * @param {Event} e the event
823
+ * @private
824
+ * @static
825
+ */
826
+ handleMouseMove: function(e) {
827
+ //YAHOO.log("handlemousemove");
828
+
829
+ var dc = this.dragCurrent;
830
+ if (dc) {
831
+ // YAHOO.log("no current drag obj");
832
+
833
+ // var button = e.which || e.button;
834
+ // YAHOO.log("which: " + e.which + ", button: "+ e.button);
835
+
836
+ // check for IE mouseup outside of page boundary
837
+ if (YAHOO.util.Event.isIE && !e.button) {
838
+ YAHOO.log("button failure", "info", "DragDropMgr");
839
+ this.stopEvent(e);
840
+ return this.handleMouseUp(e);
841
+ } else {
842
+ if (e.clientX < 0 || e.clientY < 0) {
843
+ //This will stop the element from leaving the viewport in FF, Opera & Safari
844
+ //Not turned on yet
845
+ //YAHOO.log("Either clientX or clientY is negative, stop the event.", "info", "DragDropMgr");
846
+ //this.stopEvent(e);
847
+ //return false;
848
+ }
849
+ }
850
+
851
+ if (!this.dragThreshMet) {
852
+ var diffX = Math.abs(this.startX - YAHOO.util.Event.getPageX(e));
853
+ var diffY = Math.abs(this.startY - YAHOO.util.Event.getPageY(e));
854
+ // YAHOO.log("diffX: " + diffX + "diffY: " + diffY);
855
+ if (diffX > this.clickPixelThresh ||
856
+ diffY > this.clickPixelThresh) {
857
+ YAHOO.log("pixel threshold met", "info", "DragDropMgr");
858
+ this.startDrag(this.startX, this.startY);
859
+ }
860
+ }
861
+
862
+ if (this.dragThreshMet) {
863
+ if (dc && dc.events.b4Drag) {
864
+ dc.b4Drag(e);
865
+ dc.fireEvent('b4DragEvent', { e: e});
866
+ }
867
+ if (dc && dc.events.drag) {
868
+ dc.onDrag(e);
869
+ dc.fireEvent('dragEvent', { e: e});
870
+ }
871
+ if (dc) {
872
+ this.fireEvents(e, false);
873
+ }
874
+ }
875
+
876
+ this.stopEvent(e);
877
+ }
878
+ },
879
+
880
+ /**
881
+ * Iterates over all of the DragDrop elements to find ones we are
882
+ * hovering over or dropping on
883
+ * @method fireEvents
884
+ * @param {Event} e the event
885
+ * @param {boolean} isDrop is this a drop op or a mouseover op?
886
+ * @private
887
+ * @static
888
+ */
889
+ fireEvents: function(e, isDrop) {
890
+ var dc = this.dragCurrent;
891
+
892
+ // If the user did the mouse up outside of the window, we could
893
+ // get here even though we have ended the drag.
894
+ // If the config option dragOnly is true, bail out and don't fire the events
895
+ if (!dc || dc.isLocked() || dc.dragOnly) {
896
+ return;
897
+ }
898
+
899
+ var x = YAHOO.util.Event.getPageX(e),
900
+ y = YAHOO.util.Event.getPageY(e),
901
+ pt = new YAHOO.util.Point(x,y),
902
+ pos = dc.getTargetCoord(pt.x, pt.y),
903
+ el = dc.getDragEl(),
904
+ events = ['out', 'over', 'drop', 'enter'],
905
+ curRegion = new YAHOO.util.Region( pos.y,
906
+ pos.x + el.offsetWidth,
907
+ pos.y + el.offsetHeight,
908
+ pos.x ),
909
+
910
+ oldOvers = [], // cache the previous dragOver array
911
+ inGroupsObj = {},
912
+ inGroups = [],
913
+ data = {
914
+ outEvts: [],
915
+ overEvts: [],
916
+ dropEvts: [],
917
+ enterEvts: []
918
+ };
919
+
920
+
921
+ // Check to see if the object(s) we were hovering over is no longer
922
+ // being hovered over so we can fire the onDragOut event
923
+ for (var i in this.dragOvers) {
924
+
925
+ var ddo = this.dragOvers[i];
926
+
927
+ if (! this.isTypeOfDD(ddo)) {
928
+ continue;
929
+ }
930
+ if (! this.isOverTarget(pt, ddo, this.mode, curRegion)) {
931
+ data.outEvts.push( ddo );
932
+ }
933
+
934
+ oldOvers[i] = true;
935
+ delete this.dragOvers[i];
936
+ }
937
+
938
+ for (var sGroup in dc.groups) {
939
+ // YAHOO.log("Processing group " + sGroup);
940
+
941
+ if ("string" != typeof sGroup) {
942
+ continue;
943
+ }
944
+
945
+ for (i in this.ids[sGroup]) {
946
+ var oDD = this.ids[sGroup][i];
947
+ if (! this.isTypeOfDD(oDD)) {
948
+ continue;
949
+ }
950
+
951
+ if (oDD.isTarget && !oDD.isLocked() && oDD != dc) {
952
+ if (this.isOverTarget(pt, oDD, this.mode, curRegion)) {
953
+ inGroupsObj[sGroup] = true;
954
+ // look for drop interactions
955
+ if (isDrop) {
956
+ data.dropEvts.push( oDD );
957
+ // look for drag enter and drag over interactions
958
+ } else {
959
+
960
+ // initial drag over: dragEnter fires
961
+ if (!oldOvers[oDD.id]) {
962
+ data.enterEvts.push( oDD );
963
+ // subsequent drag overs: dragOver fires
964
+ } else {
965
+ data.overEvts.push( oDD );
966
+ }
967
+
968
+ this.dragOvers[oDD.id] = oDD;
969
+ }
970
+ }
971
+ }
972
+ }
973
+ }
974
+
975
+ this.interactionInfo = {
976
+ out: data.outEvts,
977
+ enter: data.enterEvts,
978
+ over: data.overEvts,
979
+ drop: data.dropEvts,
980
+ point: pt,
981
+ draggedRegion: curRegion,
982
+ sourceRegion: this.locationCache[dc.id],
983
+ validDrop: isDrop
984
+ };
985
+
986
+
987
+ for (var inG in inGroupsObj) {
988
+ inGroups.push(inG);
989
+ }
990
+
991
+ // notify about a drop that did not find a target
992
+ if (isDrop && !data.dropEvts.length) {
993
+ YAHOO.log(dc.id + " dropped, but not on a target", "info", "DragDropMgr");
994
+ this.interactionInfo.validDrop = false;
995
+ if (dc.events.invalidDrop) {
996
+ dc.onInvalidDrop(e);
997
+ dc.fireEvent('invalidDropEvent', { e: e });
998
+ }
999
+ }
1000
+ for (i = 0; i < events.length; i++) {
1001
+ var tmp = null;
1002
+ if (data[events[i] + 'Evts']) {
1003
+ tmp = data[events[i] + 'Evts'];
1004
+ }
1005
+ if (tmp && tmp.length) {
1006
+ var type = events[i].charAt(0).toUpperCase() + events[i].substr(1),
1007
+ ev = 'onDrag' + type,
1008
+ b4 = 'b4Drag' + type,
1009
+ cev = 'drag' + type + 'Event',
1010
+ check = 'drag' + type;
1011
+ if (this.mode) {
1012
+ YAHOO.log(dc.id + ' ' + ev + ': ' + tmp, "info", "DragDropMgr");
1013
+ if (dc.events[b4]) {
1014
+ dc[b4](e, tmp, inGroups);
1015
+ dc.fireEvent(b4 + 'Event', { event: e, info: tmp, group: inGroups });
1016
+
1017
+ }
1018
+ if (dc.events[check]) {
1019
+ dc[ev](e, tmp, inGroups);
1020
+ dc.fireEvent(cev, { event: e, info: tmp, group: inGroups });
1021
+ }
1022
+ } else {
1023
+ for (var b = 0, len = tmp.length; b < len; ++b) {
1024
+ YAHOO.log(dc.id + ' ' + ev + ': ' + tmp[b].id, "info", "DragDropMgr");
1025
+ if (dc.events[b4]) {
1026
+ dc[b4](e, tmp[b].id, inGroups[0]);
1027
+ dc.fireEvent(b4 + 'Event', { event: e, info: tmp[b].id, group: inGroups[0] });
1028
+ }
1029
+ if (dc.events[check]) {
1030
+ dc[ev](e, tmp[b].id, inGroups[0]);
1031
+ dc.fireEvent(cev, { event: e, info: tmp[b].id, group: inGroups[0] });
1032
+ }
1033
+ }
1034
+ }
1035
+ }
1036
+ }
1037
+ },
1038
+
1039
+ /**
1040
+ * Helper function for getting the best match from the list of drag
1041
+ * and drop objects returned by the drag and drop events when we are
1042
+ * in INTERSECT mode. It returns either the first object that the
1043
+ * cursor is over, or the object that has the greatest overlap with
1044
+ * the dragged element.
1045
+ * @method getBestMatch
1046
+ * @param {DragDrop[]} dds The array of drag and drop objects
1047
+ * targeted
1048
+ * @return {DragDrop} The best single match
1049
+ * @static
1050
+ */
1051
+ getBestMatch: function(dds) {
1052
+ var winner = null;
1053
+
1054
+ var len = dds.length;
1055
+
1056
+ if (len == 1) {
1057
+ winner = dds[0];
1058
+ } else {
1059
+ // Loop through the targeted items
1060
+ for (var i=0; i<len; ++i) {
1061
+ var dd = dds[i];
1062
+ // If the cursor is over the object, it wins. If the
1063
+ // cursor is over multiple matches, the first one we come
1064
+ // to wins.
1065
+ if (this.mode == this.INTERSECT && dd.cursorIsOver) {
1066
+ winner = dd;
1067
+ break;
1068
+ // Otherwise the object with the most overlap wins
1069
+ } else {
1070
+ if (!winner || !winner.overlap || (dd.overlap &&
1071
+ winner.overlap.getArea() < dd.overlap.getArea())) {
1072
+ winner = dd;
1073
+ }
1074
+ }
1075
+ }
1076
+ }
1077
+
1078
+ return winner;
1079
+ },
1080
+
1081
+ /**
1082
+ * Refreshes the cache of the top-left and bottom-right points of the
1083
+ * drag and drop objects in the specified group(s). This is in the
1084
+ * format that is stored in the drag and drop instance, so typical
1085
+ * usage is:
1086
+ * <code>
1087
+ * YAHOO.util.DragDropMgr.refreshCache(ddinstance.groups);
1088
+ * </code>
1089
+ * Alternatively:
1090
+ * <code>
1091
+ * YAHOO.util.DragDropMgr.refreshCache({group1:true, group2:true});
1092
+ * </code>
1093
+ * @TODO this really should be an indexed array. Alternatively this
1094
+ * method could accept both.
1095
+ * @method refreshCache
1096
+ * @param {Object} groups an associative array of groups to refresh
1097
+ * @static
1098
+ */
1099
+ refreshCache: function(groups) {
1100
+ YAHOO.log("refreshing element location cache", "info", "DragDropMgr");
1101
+
1102
+ // refresh everything if group array is not provided
1103
+ var g = groups || this.ids;
1104
+
1105
+ for (var sGroup in g) {
1106
+ if ("string" != typeof sGroup) {
1107
+ continue;
1108
+ }
1109
+ for (var i in this.ids[sGroup]) {
1110
+ var oDD = this.ids[sGroup][i];
1111
+
1112
+ if (this.isTypeOfDD(oDD)) {
1113
+ var loc = this.getLocation(oDD);
1114
+ if (loc) {
1115
+ this.locationCache[oDD.id] = loc;
1116
+ } else {
1117
+ delete this.locationCache[oDD.id];
1118
+ YAHOO.log("Could not get the loc for " + oDD.id, "warn", "DragDropMgr");
1119
+ }
1120
+ }
1121
+ }
1122
+ }
1123
+ },
1124
+
1125
+ /**
1126
+ * This checks to make sure an element exists and is in the DOM. The
1127
+ * main purpose is to handle cases where innerHTML is used to remove
1128
+ * drag and drop objects from the DOM. IE provides an 'unspecified
1129
+ * error' when trying to access the offsetParent of such an element
1130
+ * @method verifyEl
1131
+ * @param {HTMLElement} el the element to check
1132
+ * @return {boolean} true if the element looks usable
1133
+ * @static
1134
+ */
1135
+ verifyEl: function(el) {
1136
+ try {
1137
+ if (el) {
1138
+ var parent = el.offsetParent;
1139
+ if (parent) {
1140
+ return true;
1141
+ }
1142
+ }
1143
+ } catch(e) {
1144
+ YAHOO.log("detected problem with an element", "info", "DragDropMgr");
1145
+ }
1146
+
1147
+ return false;
1148
+ },
1149
+
1150
+ /**
1151
+ * Returns a Region object containing the drag and drop element's position
1152
+ * and size, including the padding configured for it
1153
+ * @method getLocation
1154
+ * @param {DragDrop} oDD the drag and drop object to get the
1155
+ * location for
1156
+ * @return {YAHOO.util.Region} a Region object representing the total area
1157
+ * the element occupies, including any padding
1158
+ * the instance is configured for.
1159
+ * @static
1160
+ */
1161
+ getLocation: function(oDD) {
1162
+ if (! this.isTypeOfDD(oDD)) {
1163
+ YAHOO.log(oDD + " is not a DD obj", "info", "DragDropMgr");
1164
+ return null;
1165
+ }
1166
+
1167
+ var el = oDD.getEl(), pos, x1, x2, y1, y2, t, r, b, l;
1168
+
1169
+ try {
1170
+ pos= YAHOO.util.Dom.getXY(el);
1171
+ } catch (e) { }
1172
+
1173
+ if (!pos) {
1174
+ YAHOO.log("getXY failed", "info", "DragDropMgr");
1175
+ return null;
1176
+ }
1177
+
1178
+ x1 = pos[0];
1179
+ x2 = x1 + el.offsetWidth;
1180
+ y1 = pos[1];
1181
+ y2 = y1 + el.offsetHeight;
1182
+
1183
+ t = y1 - oDD.padding[0];
1184
+ r = x2 + oDD.padding[1];
1185
+ b = y2 + oDD.padding[2];
1186
+ l = x1 - oDD.padding[3];
1187
+
1188
+ return new YAHOO.util.Region( t, r, b, l );
1189
+ },
1190
+
1191
+ /**
1192
+ * Checks the cursor location to see if it over the target
1193
+ * @method isOverTarget
1194
+ * @param {YAHOO.util.Point} pt The point to evaluate
1195
+ * @param {DragDrop} oTarget the DragDrop object we are inspecting
1196
+ * @param {boolean} intersect true if we are in intersect mode
1197
+ * @param {YAHOO.util.Region} pre-cached location of the dragged element
1198
+ * @return {boolean} true if the mouse is over the target
1199
+ * @private
1200
+ * @static
1201
+ */
1202
+ isOverTarget: function(pt, oTarget, intersect, curRegion) {
1203
+ // use cache if available
1204
+ var loc = this.locationCache[oTarget.id];
1205
+ if (!loc || !this.useCache) {
1206
+ YAHOO.log("cache not populated", "info", "DragDropMgr");
1207
+ loc = this.getLocation(oTarget);
1208
+ this.locationCache[oTarget.id] = loc;
1209
+
1210
+ YAHOO.log("cache: " + loc, "info", "DragDropMgr");
1211
+ }
1212
+
1213
+ if (!loc) {
1214
+ YAHOO.log("could not get the location of the element", "info", "DragDropMgr");
1215
+ return false;
1216
+ }
1217
+
1218
+ //YAHOO.log("loc: " + loc + ", pt: " + pt);
1219
+ oTarget.cursorIsOver = loc.contains( pt );
1220
+
1221
+ // DragDrop is using this as a sanity check for the initial mousedown
1222
+ // in this case we are done. In POINT mode, if the drag obj has no
1223
+ // contraints, we are done. Otherwise we need to evaluate the
1224
+ // region the target as occupies to determine if the dragged element
1225
+ // overlaps with it.
1226
+
1227
+ var dc = this.dragCurrent;
1228
+ if (!dc || (!intersect && !dc.constrainX && !dc.constrainY)) {
1229
+
1230
+ //if (oTarget.cursorIsOver) {
1231
+ //YAHOO.log("over " + oTarget + ", " + loc + ", " + pt, "warn");
1232
+ //}
1233
+ return oTarget.cursorIsOver;
1234
+ }
1235
+
1236
+ oTarget.overlap = null;
1237
+
1238
+
1239
+ // Get the current location of the drag element, this is the
1240
+ // location of the mouse event less the delta that represents
1241
+ // where the original mousedown happened on the element. We
1242
+ // need to consider constraints and ticks as well.
1243
+
1244
+ if (!curRegion) {
1245
+ var pos = dc.getTargetCoord(pt.x, pt.y);
1246
+ var el = dc.getDragEl();
1247
+ curRegion = new YAHOO.util.Region( pos.y,
1248
+ pos.x + el.offsetWidth,
1249
+ pos.y + el.offsetHeight,
1250
+ pos.x );
1251
+ }
1252
+
1253
+ var overlap = curRegion.intersect(loc);
1254
+
1255
+ if (overlap) {
1256
+ oTarget.overlap = overlap;
1257
+ return (intersect) ? true : oTarget.cursorIsOver;
1258
+ } else {
1259
+ return false;
1260
+ }
1261
+ },
1262
+
1263
+ /**
1264
+ * unload event handler
1265
+ * @method _onUnload
1266
+ * @private
1267
+ * @static
1268
+ */
1269
+ _onUnload: function(e, me) {
1270
+ this.unregAll();
1271
+ },
1272
+
1273
+ /**
1274
+ * Cleans up the drag and drop events and objects.
1275
+ * @method unregAll
1276
+ * @private
1277
+ * @static
1278
+ */
1279
+ unregAll: function() {
1280
+ YAHOO.log("unregister all", "info", "DragDropMgr");
1281
+
1282
+ if (this.dragCurrent) {
1283
+ this.stopDrag();
1284
+ this.dragCurrent = null;
1285
+ }
1286
+
1287
+ this._execOnAll("unreg", []);
1288
+
1289
+ //for (var i in this.elementCache) {
1290
+ //delete this.elementCache[i];
1291
+ //}
1292
+ //this.elementCache = {};
1293
+
1294
+ this.ids = {};
1295
+ },
1296
+
1297
+ /**
1298
+ * A cache of DOM elements
1299
+ * @property elementCache
1300
+ * @private
1301
+ * @static
1302
+ * @deprecated elements are not cached now
1303
+ */
1304
+ elementCache: {},
1305
+
1306
+ /**
1307
+ * Get the wrapper for the DOM element specified
1308
+ * @method getElWrapper
1309
+ * @param {String} id the id of the element to get
1310
+ * @return {YAHOO.util.DDM.ElementWrapper} the wrapped element
1311
+ * @private
1312
+ * @deprecated This wrapper isn't that useful
1313
+ * @static
1314
+ */
1315
+ getElWrapper: function(id) {
1316
+ var oWrapper = this.elementCache[id];
1317
+ if (!oWrapper || !oWrapper.el) {
1318
+ oWrapper = this.elementCache[id] =
1319
+ new this.ElementWrapper(YAHOO.util.Dom.get(id));
1320
+ }
1321
+ return oWrapper;
1322
+ },
1323
+
1324
+ /**
1325
+ * Returns the actual DOM element
1326
+ * @method getElement
1327
+ * @param {String} id the id of the elment to get
1328
+ * @return {Object} The element
1329
+ * @deprecated use YAHOO.util.Dom.get instead
1330
+ * @static
1331
+ */
1332
+ getElement: function(id) {
1333
+ return YAHOO.util.Dom.get(id);
1334
+ },
1335
+
1336
+ /**
1337
+ * Returns the style property for the DOM element (i.e.,
1338
+ * document.getElById(id).style)
1339
+ * @method getCss
1340
+ * @param {String} id the id of the elment to get
1341
+ * @return {Object} The style property of the element
1342
+ * @deprecated use YAHOO.util.Dom instead
1343
+ * @static
1344
+ */
1345
+ getCss: function(id) {
1346
+ var el = YAHOO.util.Dom.get(id);
1347
+ return (el) ? el.style : null;
1348
+ },
1349
+
1350
+ /**
1351
+ * Inner class for cached elements
1352
+ * @class DragDropMgr.ElementWrapper
1353
+ * @for DragDropMgr
1354
+ * @private
1355
+ * @deprecated
1356
+ */
1357
+ ElementWrapper: function(el) {
1358
+ /**
1359
+ * The element
1360
+ * @property el
1361
+ */
1362
+ this.el = el || null;
1363
+ /**
1364
+ * The element id
1365
+ * @property id
1366
+ */
1367
+ this.id = this.el && el.id;
1368
+ /**
1369
+ * A reference to the style property
1370
+ * @property css
1371
+ */
1372
+ this.css = this.el && el.style;
1373
+ },
1374
+
1375
+ /**
1376
+ * Returns the X position of an html element
1377
+ * @method getPosX
1378
+ * @param el the element for which to get the position
1379
+ * @return {int} the X coordinate
1380
+ * @for DragDropMgr
1381
+ * @deprecated use YAHOO.util.Dom.getX instead
1382
+ * @static
1383
+ */
1384
+ getPosX: function(el) {
1385
+ return YAHOO.util.Dom.getX(el);
1386
+ },
1387
+
1388
+ /**
1389
+ * Returns the Y position of an html element
1390
+ * @method getPosY
1391
+ * @param el the element for which to get the position
1392
+ * @return {int} the Y coordinate
1393
+ * @deprecated use YAHOO.util.Dom.getY instead
1394
+ * @static
1395
+ */
1396
+ getPosY: function(el) {
1397
+ return YAHOO.util.Dom.getY(el);
1398
+ },
1399
+
1400
+ /**
1401
+ * Swap two nodes. In IE, we use the native method, for others we
1402
+ * emulate the IE behavior
1403
+ * @method swapNode
1404
+ * @param n1 the first node to swap
1405
+ * @param n2 the other node to swap
1406
+ * @static
1407
+ */
1408
+ swapNode: function(n1, n2) {
1409
+ if (n1.swapNode) {
1410
+ n1.swapNode(n2);
1411
+ } else {
1412
+ var p = n2.parentNode;
1413
+ var s = n2.nextSibling;
1414
+
1415
+ if (s == n1) {
1416
+ p.insertBefore(n1, n2);
1417
+ } else if (n2 == n1.nextSibling) {
1418
+ p.insertBefore(n2, n1);
1419
+ } else {
1420
+ n1.parentNode.replaceChild(n2, n1);
1421
+ p.insertBefore(n1, s);
1422
+ }
1423
+ }
1424
+ },
1425
+
1426
+ /**
1427
+ * Returns the current scroll position
1428
+ * @method getScroll
1429
+ * @private
1430
+ * @static
1431
+ */
1432
+ getScroll: function () {
1433
+ var t, l, dde=document.documentElement, db=document.body;
1434
+ if (dde && (dde.scrollTop || dde.scrollLeft)) {
1435
+ t = dde.scrollTop;
1436
+ l = dde.scrollLeft;
1437
+ } else if (db) {
1438
+ t = db.scrollTop;
1439
+ l = db.scrollLeft;
1440
+ } else {
1441
+ YAHOO.log("could not get scroll property", "info", "DragDropMgr");
1442
+ }
1443
+ return { top: t, left: l };
1444
+ },
1445
+
1446
+ /**
1447
+ * Returns the specified element style property
1448
+ * @method getStyle
1449
+ * @param {HTMLElement} el the element
1450
+ * @param {string} styleProp the style property
1451
+ * @return {string} The value of the style property
1452
+ * @deprecated use YAHOO.util.Dom.getStyle
1453
+ * @static
1454
+ */
1455
+ getStyle: function(el, styleProp) {
1456
+ return YAHOO.util.Dom.getStyle(el, styleProp);
1457
+ },
1458
+
1459
+ /**
1460
+ * Gets the scrollTop
1461
+ * @method getScrollTop
1462
+ * @return {int} the document's scrollTop
1463
+ * @static
1464
+ */
1465
+ getScrollTop: function () { return this.getScroll().top; },
1466
+
1467
+ /**
1468
+ * Gets the scrollLeft
1469
+ * @method getScrollLeft
1470
+ * @return {int} the document's scrollTop
1471
+ * @static
1472
+ */
1473
+ getScrollLeft: function () { return this.getScroll().left; },
1474
+
1475
+ /**
1476
+ * Sets the x/y position of an element to the location of the
1477
+ * target element.
1478
+ * @method moveToEl
1479
+ * @param {HTMLElement} moveEl The element to move
1480
+ * @param {HTMLElement} targetEl The position reference element
1481
+ * @static
1482
+ */
1483
+ moveToEl: function (moveEl, targetEl) {
1484
+ var aCoord = YAHOO.util.Dom.getXY(targetEl);
1485
+ YAHOO.log("moveToEl: " + aCoord, "info", "DragDropMgr");
1486
+ YAHOO.util.Dom.setXY(moveEl, aCoord);
1487
+ },
1488
+
1489
+ /**
1490
+ * Gets the client height
1491
+ * @method getClientHeight
1492
+ * @return {int} client height in px
1493
+ * @deprecated use YAHOO.util.Dom.getViewportHeight instead
1494
+ * @static
1495
+ */
1496
+ getClientHeight: function() {
1497
+ return YAHOO.util.Dom.getViewportHeight();
1498
+ },
1499
+
1500
+ /**
1501
+ * Gets the client width
1502
+ * @method getClientWidth
1503
+ * @return {int} client width in px
1504
+ * @deprecated use YAHOO.util.Dom.getViewportWidth instead
1505
+ * @static
1506
+ */
1507
+ getClientWidth: function() {
1508
+ return YAHOO.util.Dom.getViewportWidth();
1509
+ },
1510
+
1511
+ /**
1512
+ * Numeric array sort function
1513
+ * @method numericSort
1514
+ * @static
1515
+ */
1516
+ numericSort: function(a, b) { return (a - b); },
1517
+
1518
+ /**
1519
+ * Internal counter
1520
+ * @property _timeoutCount
1521
+ * @private
1522
+ * @static
1523
+ */
1524
+ _timeoutCount: 0,
1525
+
1526
+ /**
1527
+ * Trying to make the load order less important. Without this we get
1528
+ * an error if this file is loaded before the Event Utility.
1529
+ * @method _addListeners
1530
+ * @private
1531
+ * @static
1532
+ */
1533
+ _addListeners: function() {
1534
+ var DDM = YAHOO.util.DDM;
1535
+ if ( YAHOO.util.Event && document ) {
1536
+ DDM._onLoad();
1537
+ } else {
1538
+ if (DDM._timeoutCount > 2000) {
1539
+ YAHOO.log("DragDrop requires the Event Utility", "error", "DragDropMgr");
1540
+ } else {
1541
+ setTimeout(DDM._addListeners, 10);
1542
+ if (document && document.body) {
1543
+ DDM._timeoutCount += 1;
1544
+ }
1545
+ }
1546
+ }
1547
+ },
1548
+
1549
+ /**
1550
+ * Recursively searches the immediate parent and all child nodes for
1551
+ * the handle element in order to determine wheter or not it was
1552
+ * clicked.
1553
+ * @method handleWasClicked
1554
+ * @param node the html element to inspect
1555
+ * @static
1556
+ */
1557
+ handleWasClicked: function(node, id) {
1558
+ if (this.isHandle(id, node.id)) {
1559
+ YAHOO.log("clicked node is a handle", "info", "DragDropMgr");
1560
+ return true;
1561
+ } else {
1562
+ // check to see if this is a text node child of the one we want
1563
+ var p = node.parentNode;
1564
+ // YAHOO.log("p: " + p);
1565
+
1566
+ while (p) {
1567
+ if (this.isHandle(id, p.id)) {
1568
+ return true;
1569
+ } else {
1570
+ YAHOO.log(p.id + " is not a handle", "info", "DragDropMgr");
1571
+ p = p.parentNode;
1572
+ }
1573
+ }
1574
+ }
1575
+
1576
+ return false;
1577
+ }
1578
+
1579
+ };
1580
+
1581
+ }();
1582
+
1583
+ // shorter alias, save a few bytes
1584
+ YAHOO.util.DDM = YAHOO.util.DragDropMgr;
1585
+ YAHOO.util.DDM._addListeners();
1586
+
1587
+ }
1588
+
1589
+ (function() {
1590
+
1591
+ var Event=YAHOO.util.Event;
1592
+ var Dom=YAHOO.util.Dom;
1593
+
1594
+ /**
1595
+ * Defines the interface and base operation of items that that can be
1596
+ * dragged or can be drop targets. It was designed to be extended, overriding
1597
+ * the event handlers for startDrag, onDrag, onDragOver, onDragOut.
1598
+ * Up to three html elements can be associated with a DragDrop instance:
1599
+ * <ul>
1600
+ * <li>linked element: the element that is passed into the constructor.
1601
+ * This is the element which defines the boundaries for interaction with
1602
+ * other DragDrop objects.</li>
1603
+ * <li>handle element(s): The drag operation only occurs if the element that
1604
+ * was clicked matches a handle element. By default this is the linked
1605
+ * element, but there are times that you will want only a portion of the
1606
+ * linked element to initiate the drag operation, and the setHandleElId()
1607
+ * method provides a way to define this.</li>
1608
+ * <li>drag element: this represents an the element that would be moved along
1609
+ * with the cursor during a drag operation. By default, this is the linked
1610
+ * element itself as in {@link YAHOO.util.DD}. setDragElId() lets you define
1611
+ * a separate element that would be moved, as in {@link YAHOO.util.DDProxy}
1612
+ * </li>
1613
+ * </ul>
1614
+ * This class should not be instantiated until the onload event to ensure that
1615
+ * the associated elements are available.
1616
+ * The following would define a DragDrop obj that would interact with any
1617
+ * other DragDrop obj in the "group1" group:
1618
+ * <pre>
1619
+ * dd = new YAHOO.util.DragDrop("div1", "group1");
1620
+ * </pre>
1621
+ * Since none of the event handlers have been implemented, nothing would
1622
+ * actually happen if you were to run the code above. Normally you would
1623
+ * override this class or one of the default implementations, but you can
1624
+ * also override the methods you want on an instance of the class...
1625
+ * <pre>
1626
+ * dd.onDragDrop = function(e, id) {
1627
+ * &nbsp;&nbsp;alert("dd was dropped on " + id);
1628
+ * }
1629
+ * </pre>
1630
+ * @namespace YAHOO.util
1631
+ * @class DragDrop
1632
+ * @constructor
1633
+ * @param {String} id of the element that is linked to this instance
1634
+ * @param {String} sGroup the group of related DragDrop objects
1635
+ * @param {object} config an object containing configurable attributes
1636
+ * Valid properties for DragDrop:
1637
+ * padding, isTarget, maintainOffset, primaryButtonOnly,
1638
+ */
1639
+ YAHOO.util.DragDrop = function(id, sGroup, config) {
1640
+ if (id) {
1641
+ this.init(id, sGroup, config);
1642
+ }
1643
+ };
1644
+
1645
+ YAHOO.util.DragDrop.prototype = {
1646
+ /**
1647
+ * An Object Literal containing the events that we will be using: mouseDown, b4MouseDown, mouseUp, b4StartDrag, startDrag, b4EndDrag, endDrag, mouseUp, drag, b4Drag, invalidDrop, b4DragOut, dragOut, dragEnter, b4DragOver, dragOver, b4DragDrop, dragDrop
1648
+ * By setting any of these to false, then event will not be fired.
1649
+ * @property events
1650
+ * @type object
1651
+ */
1652
+ events: null,
1653
+ /**
1654
+ * @method on
1655
+ * @description Shortcut for EventProvider.subscribe, see <a href="YAHOO.util.EventProvider.html#subscribe">YAHOO.util.EventProvider.subscribe</a>
1656
+ */
1657
+ on: function() {
1658
+ this.subscribe.apply(this, arguments);
1659
+ },
1660
+ /**
1661
+ * The id of the element associated with this object. This is what we
1662
+ * refer to as the "linked element" because the size and position of
1663
+ * this element is used to determine when the drag and drop objects have
1664
+ * interacted.
1665
+ * @property id
1666
+ * @type String
1667
+ */
1668
+ id: null,
1669
+
1670
+ /**
1671
+ * Configuration attributes passed into the constructor
1672
+ * @property config
1673
+ * @type object
1674
+ */
1675
+ config: null,
1676
+
1677
+ /**
1678
+ * The id of the element that will be dragged. By default this is same
1679
+ * as the linked element , but could be changed to another element. Ex:
1680
+ * YAHOO.util.DDProxy
1681
+ * @property dragElId
1682
+ * @type String
1683
+ * @private
1684
+ */
1685
+ dragElId: null,
1686
+
1687
+ /**
1688
+ * the id of the element that initiates the drag operation. By default
1689
+ * this is the linked element, but could be changed to be a child of this
1690
+ * element. This lets us do things like only starting the drag when the
1691
+ * header element within the linked html element is clicked.
1692
+ * @property handleElId
1693
+ * @type String
1694
+ * @private
1695
+ */
1696
+ handleElId: null,
1697
+
1698
+ /**
1699
+ * An associative array of HTML tags that will be ignored if clicked.
1700
+ * @property invalidHandleTypes
1701
+ * @type {string: string}
1702
+ */
1703
+ invalidHandleTypes: null,
1704
+
1705
+ /**
1706
+ * An associative array of ids for elements that will be ignored if clicked
1707
+ * @property invalidHandleIds
1708
+ * @type {string: string}
1709
+ */
1710
+ invalidHandleIds: null,
1711
+
1712
+ /**
1713
+ * An indexted array of css class names for elements that will be ignored
1714
+ * if clicked.
1715
+ * @property invalidHandleClasses
1716
+ * @type string[]
1717
+ */
1718
+ invalidHandleClasses: null,
1719
+
1720
+ /**
1721
+ * The linked element's absolute X position at the time the drag was
1722
+ * started
1723
+ * @property startPageX
1724
+ * @type int
1725
+ * @private
1726
+ */
1727
+ startPageX: 0,
1728
+
1729
+ /**
1730
+ * The linked element's absolute X position at the time the drag was
1731
+ * started
1732
+ * @property startPageY
1733
+ * @type int
1734
+ * @private
1735
+ */
1736
+ startPageY: 0,
1737
+
1738
+ /**
1739
+ * The group defines a logical collection of DragDrop objects that are
1740
+ * related. Instances only get events when interacting with other
1741
+ * DragDrop object in the same group. This lets us define multiple
1742
+ * groups using a single DragDrop subclass if we want.
1743
+ * @property groups
1744
+ * @type {string: string}
1745
+ */
1746
+ groups: null,
1747
+
1748
+ /**
1749
+ * Individual drag/drop instances can be locked. This will prevent
1750
+ * onmousedown start drag.
1751
+ * @property locked
1752
+ * @type boolean
1753
+ * @private
1754
+ */
1755
+ locked: false,
1756
+
1757
+ /**
1758
+ * Lock this instance
1759
+ * @method lock
1760
+ */
1761
+ lock: function() { this.locked = true; },
1762
+
1763
+ /**
1764
+ * Unlock this instace
1765
+ * @method unlock
1766
+ */
1767
+ unlock: function() { this.locked = false; },
1768
+
1769
+ /**
1770
+ * By default, all instances can be a drop target. This can be disabled by
1771
+ * setting isTarget to false.
1772
+ * @property isTarget
1773
+ * @type boolean
1774
+ */
1775
+ isTarget: true,
1776
+
1777
+ /**
1778
+ * The padding configured for this drag and drop object for calculating
1779
+ * the drop zone intersection with this object.
1780
+ * @property padding
1781
+ * @type int[]
1782
+ */
1783
+ padding: null,
1784
+ /**
1785
+ * If this flag is true, do not fire drop events. The element is a drag only element (for movement not dropping)
1786
+ * @property dragOnly
1787
+ * @type Boolean
1788
+ */
1789
+ dragOnly: false,
1790
+
1791
+ /**
1792
+ * If this flag is true, a shim will be placed over the screen/viewable area to track mouse events. Should help with dragging elements over iframes and other controls.
1793
+ * @property useShim
1794
+ * @type Boolean
1795
+ */
1796
+ useShim: false,
1797
+
1798
+ /**
1799
+ * Cached reference to the linked element
1800
+ * @property _domRef
1801
+ * @private
1802
+ */
1803
+ _domRef: null,
1804
+
1805
+ /**
1806
+ * Internal typeof flag
1807
+ * @property __ygDragDrop
1808
+ * @private
1809
+ */
1810
+ __ygDragDrop: true,
1811
+
1812
+ /**
1813
+ * Set to true when horizontal contraints are applied
1814
+ * @property constrainX
1815
+ * @type boolean
1816
+ * @private
1817
+ */
1818
+ constrainX: false,
1819
+
1820
+ /**
1821
+ * Set to true when vertical contraints are applied
1822
+ * @property constrainY
1823
+ * @type boolean
1824
+ * @private
1825
+ */
1826
+ constrainY: false,
1827
+
1828
+ /**
1829
+ * The left constraint
1830
+ * @property minX
1831
+ * @type int
1832
+ * @private
1833
+ */
1834
+ minX: 0,
1835
+
1836
+ /**
1837
+ * The right constraint
1838
+ * @property maxX
1839
+ * @type int
1840
+ * @private
1841
+ */
1842
+ maxX: 0,
1843
+
1844
+ /**
1845
+ * The up constraint
1846
+ * @property minY
1847
+ * @type int
1848
+ * @type int
1849
+ * @private
1850
+ */
1851
+ minY: 0,
1852
+
1853
+ /**
1854
+ * The down constraint
1855
+ * @property maxY
1856
+ * @type int
1857
+ * @private
1858
+ */
1859
+ maxY: 0,
1860
+
1861
+ /**
1862
+ * The difference between the click position and the source element's location
1863
+ * @property deltaX
1864
+ * @type int
1865
+ * @private
1866
+ */
1867
+ deltaX: 0,
1868
+
1869
+ /**
1870
+ * The difference between the click position and the source element's location
1871
+ * @property deltaY
1872
+ * @type int
1873
+ * @private
1874
+ */
1875
+ deltaY: 0,
1876
+
1877
+ /**
1878
+ * Maintain offsets when we resetconstraints. Set to true when you want
1879
+ * the position of the element relative to its parent to stay the same
1880
+ * when the page changes
1881
+ *
1882
+ * @property maintainOffset
1883
+ * @type boolean
1884
+ */
1885
+ maintainOffset: false,
1886
+
1887
+ /**
1888
+ * Array of pixel locations the element will snap to if we specified a
1889
+ * horizontal graduation/interval. This array is generated automatically
1890
+ * when you define a tick interval.
1891
+ * @property xTicks
1892
+ * @type int[]
1893
+ */
1894
+ xTicks: null,
1895
+
1896
+ /**
1897
+ * Array of pixel locations the element will snap to if we specified a
1898
+ * vertical graduation/interval. This array is generated automatically
1899
+ * when you define a tick interval.
1900
+ * @property yTicks
1901
+ * @type int[]
1902
+ */
1903
+ yTicks: null,
1904
+
1905
+ /**
1906
+ * By default the drag and drop instance will only respond to the primary
1907
+ * button click (left button for a right-handed mouse). Set to true to
1908
+ * allow drag and drop to start with any mouse click that is propogated
1909
+ * by the browser
1910
+ * @property primaryButtonOnly
1911
+ * @type boolean
1912
+ */
1913
+ primaryButtonOnly: true,
1914
+
1915
+ /**
1916
+ * The availabe property is false until the linked dom element is accessible.
1917
+ * @property available
1918
+ * @type boolean
1919
+ */
1920
+ available: false,
1921
+
1922
+ /**
1923
+ * By default, drags can only be initiated if the mousedown occurs in the
1924
+ * region the linked element is. This is done in part to work around a
1925
+ * bug in some browsers that mis-report the mousedown if the previous
1926
+ * mouseup happened outside of the window. This property is set to true
1927
+ * if outer handles are defined.
1928
+ *
1929
+ * @property hasOuterHandles
1930
+ * @type boolean
1931
+ * @default false
1932
+ */
1933
+ hasOuterHandles: false,
1934
+
1935
+ /**
1936
+ * Property that is assigned to a drag and drop object when testing to
1937
+ * see if it is being targeted by another dd object. This property
1938
+ * can be used in intersect mode to help determine the focus of
1939
+ * the mouse interaction. DDM.getBestMatch uses this property first to
1940
+ * determine the closest match in INTERSECT mode when multiple targets
1941
+ * are part of the same interaction.
1942
+ * @property cursorIsOver
1943
+ * @type boolean
1944
+ */
1945
+ cursorIsOver: false,
1946
+
1947
+ /**
1948
+ * Property that is assigned to a drag and drop object when testing to
1949
+ * see if it is being targeted by another dd object. This is a region
1950
+ * that represents the area the draggable element overlaps this target.
1951
+ * DDM.getBestMatch uses this property to compare the size of the overlap
1952
+ * to that of other targets in order to determine the closest match in
1953
+ * INTERSECT mode when multiple targets are part of the same interaction.
1954
+ * @property overlap
1955
+ * @type YAHOO.util.Region
1956
+ */
1957
+ overlap: null,
1958
+
1959
+ /**
1960
+ * Code that executes immediately before the startDrag event
1961
+ * @method b4StartDrag
1962
+ * @private
1963
+ */
1964
+ b4StartDrag: function(x, y) { },
1965
+
1966
+ /**
1967
+ * Abstract method called after a drag/drop object is clicked
1968
+ * and the drag or mousedown time thresholds have beeen met.
1969
+ * @method startDrag
1970
+ * @param {int} X click location
1971
+ * @param {int} Y click location
1972
+ */
1973
+ startDrag: function(x, y) { /* override this */ },
1974
+
1975
+ /**
1976
+ * Code that executes immediately before the onDrag event
1977
+ * @method b4Drag
1978
+ * @private
1979
+ */
1980
+ b4Drag: function(e) { },
1981
+
1982
+ /**
1983
+ * Abstract method called during the onMouseMove event while dragging an
1984
+ * object.
1985
+ * @method onDrag
1986
+ * @param {Event} e the mousemove event
1987
+ */
1988
+ onDrag: function(e) { /* override this */ },
1989
+
1990
+ /**
1991
+ * Abstract method called when this element fist begins hovering over
1992
+ * another DragDrop obj
1993
+ * @method onDragEnter
1994
+ * @param {Event} e the mousemove event
1995
+ * @param {String|DragDrop[]} id In POINT mode, the element
1996
+ * id this is hovering over. In INTERSECT mode, an array of one or more
1997
+ * dragdrop items being hovered over.
1998
+ */
1999
+ onDragEnter: function(e, id) { /* override this */ },
2000
+
2001
+ /**
2002
+ * Code that executes immediately before the onDragOver event
2003
+ * @method b4DragOver
2004
+ * @private
2005
+ */
2006
+ b4DragOver: function(e) { },
2007
+
2008
+ /**
2009
+ * Abstract method called when this element is hovering over another
2010
+ * DragDrop obj
2011
+ * @method onDragOver
2012
+ * @param {Event} e the mousemove event
2013
+ * @param {String|DragDrop[]} id In POINT mode, the element
2014
+ * id this is hovering over. In INTERSECT mode, an array of dd items
2015
+ * being hovered over.
2016
+ */
2017
+ onDragOver: function(e, id) { /* override this */ },
2018
+
2019
+ /**
2020
+ * Code that executes immediately before the onDragOut event
2021
+ * @method b4DragOut
2022
+ * @private
2023
+ */
2024
+ b4DragOut: function(e) { },
2025
+
2026
+ /**
2027
+ * Abstract method called when we are no longer hovering over an element
2028
+ * @method onDragOut
2029
+ * @param {Event} e the mousemove event
2030
+ * @param {String|DragDrop[]} id In POINT mode, the element
2031
+ * id this was hovering over. In INTERSECT mode, an array of dd items
2032
+ * that the mouse is no longer over.
2033
+ */
2034
+ onDragOut: function(e, id) { /* override this */ },
2035
+
2036
+ /**
2037
+ * Code that executes immediately before the onDragDrop event
2038
+ * @method b4DragDrop
2039
+ * @private
2040
+ */
2041
+ b4DragDrop: function(e) { },
2042
+
2043
+ /**
2044
+ * Abstract method called when this item is dropped on another DragDrop
2045
+ * obj
2046
+ * @method onDragDrop
2047
+ * @param {Event} e the mouseup event
2048
+ * @param {String|DragDrop[]} id In POINT mode, the element
2049
+ * id this was dropped on. In INTERSECT mode, an array of dd items this
2050
+ * was dropped on.
2051
+ */
2052
+ onDragDrop: function(e, id) { /* override this */ },
2053
+
2054
+ /**
2055
+ * Abstract method called when this item is dropped on an area with no
2056
+ * drop target
2057
+ * @method onInvalidDrop
2058
+ * @param {Event} e the mouseup event
2059
+ */
2060
+ onInvalidDrop: function(e) { /* override this */ },
2061
+
2062
+ /**
2063
+ * Code that executes immediately before the endDrag event
2064
+ * @method b4EndDrag
2065
+ * @private
2066
+ */
2067
+ b4EndDrag: function(e) { },
2068
+
2069
+ /**
2070
+ * Fired when we are done dragging the object
2071
+ * @method endDrag
2072
+ * @param {Event} e the mouseup event
2073
+ */
2074
+ endDrag: function(e) { /* override this */ },
2075
+
2076
+ /**
2077
+ * Code executed immediately before the onMouseDown event
2078
+ * @method b4MouseDown
2079
+ * @param {Event} e the mousedown event
2080
+ * @private
2081
+ */
2082
+ b4MouseDown: function(e) { },
2083
+
2084
+ /**
2085
+ * Event handler that fires when a drag/drop obj gets a mousedown
2086
+ * @method onMouseDown
2087
+ * @param {Event} e the mousedown event
2088
+ */
2089
+ onMouseDown: function(e) { /* override this */ },
2090
+
2091
+ /**
2092
+ * Event handler that fires when a drag/drop obj gets a mouseup
2093
+ * @method onMouseUp
2094
+ * @param {Event} e the mouseup event
2095
+ */
2096
+ onMouseUp: function(e) { /* override this */ },
2097
+
2098
+ /**
2099
+ * Override the onAvailable method to do what is needed after the initial
2100
+ * position was determined.
2101
+ * @method onAvailable
2102
+ */
2103
+ onAvailable: function () {
2104
+ //this.logger.log("onAvailable (base)");
2105
+ },
2106
+
2107
+ /**
2108
+ * Returns a reference to the linked element
2109
+ * @method getEl
2110
+ * @return {HTMLElement} the html element
2111
+ */
2112
+ getEl: function() {
2113
+ if (!this._domRef) {
2114
+ this._domRef = Dom.get(this.id);
2115
+ }
2116
+
2117
+ return this._domRef;
2118
+ },
2119
+
2120
+ /**
2121
+ * Returns a reference to the actual element to drag. By default this is
2122
+ * the same as the html element, but it can be assigned to another
2123
+ * element. An example of this can be found in YAHOO.util.DDProxy
2124
+ * @method getDragEl
2125
+ * @return {HTMLElement} the html element
2126
+ */
2127
+ getDragEl: function() {
2128
+ return Dom.get(this.dragElId);
2129
+ },
2130
+
2131
+ /**
2132
+ * Sets up the DragDrop object. Must be called in the constructor of any
2133
+ * YAHOO.util.DragDrop subclass
2134
+ * @method init
2135
+ * @param id the id of the linked element
2136
+ * @param {String} sGroup the group of related items
2137
+ * @param {object} config configuration attributes
2138
+ */
2139
+ init: function(id, sGroup, config) {
2140
+ this.initTarget(id, sGroup, config);
2141
+ Event.on(this._domRef || this.id, "mousedown",
2142
+ this.handleMouseDown, this, true);
2143
+
2144
+ // Event.on(this.id, "selectstart", Event.preventDefault);
2145
+ for (var i in this.events) {
2146
+ this.createEvent(i + 'Event');
2147
+ }
2148
+
2149
+ },
2150
+
2151
+ /**
2152
+ * Initializes Targeting functionality only... the object does not
2153
+ * get a mousedown handler.
2154
+ * @method initTarget
2155
+ * @param id the id of the linked element
2156
+ * @param {String} sGroup the group of related items
2157
+ * @param {object} config configuration attributes
2158
+ */
2159
+ initTarget: function(id, sGroup, config) {
2160
+
2161
+ // configuration attributes
2162
+ this.config = config || {};
2163
+
2164
+ this.events = {};
2165
+
2166
+ // create a local reference to the drag and drop manager
2167
+ this.DDM = YAHOO.util.DDM;
2168
+
2169
+ // initialize the groups object
2170
+ this.groups = {};
2171
+
2172
+ // assume that we have an element reference instead of an id if the
2173
+ // parameter is not a string
2174
+ if (typeof id !== "string") {
2175
+ YAHOO.log("id is not a string, assuming it is an HTMLElement");
2176
+ this._domRef = id;
2177
+ id = Dom.generateId(id);
2178
+ }
2179
+
2180
+ // set the id
2181
+ this.id = id;
2182
+
2183
+ // add to an interaction group
2184
+ this.addToGroup((sGroup) ? sGroup : "default");
2185
+
2186
+ // We don't want to register this as the handle with the manager
2187
+ // so we just set the id rather than calling the setter.
2188
+ this.handleElId = id;
2189
+
2190
+ Event.onAvailable(id, this.handleOnAvailable, this, true);
2191
+
2192
+ // create a logger instance
2193
+ this.logger = (YAHOO.widget.LogWriter) ?
2194
+ new YAHOO.widget.LogWriter(this.toString()) : YAHOO;
2195
+
2196
+ // the linked element is the element that gets dragged by default
2197
+ this.setDragElId(id);
2198
+
2199
+ // by default, clicked anchors will not start drag operations.
2200
+ // @TODO what else should be here? Probably form fields.
2201
+ this.invalidHandleTypes = { A: "A" };
2202
+ this.invalidHandleIds = {};
2203
+ this.invalidHandleClasses = [];
2204
+
2205
+ this.applyConfig();
2206
+ },
2207
+
2208
+ /**
2209
+ * Applies the configuration parameters that were passed into the constructor.
2210
+ * This is supposed to happen at each level through the inheritance chain. So
2211
+ * a DDProxy implentation will execute apply config on DDProxy, DD, and
2212
+ * DragDrop in order to get all of the parameters that are available in
2213
+ * each object.
2214
+ * @method applyConfig
2215
+ */
2216
+ applyConfig: function() {
2217
+ this.events = {
2218
+ mouseDown: true,
2219
+ b4MouseDown: true,
2220
+ mouseUp: true,
2221
+ b4StartDrag: true,
2222
+ startDrag: true,
2223
+ b4EndDrag: true,
2224
+ endDrag: true,
2225
+ drag: true,
2226
+ b4Drag: true,
2227
+ invalidDrop: true,
2228
+ b4DragOut: true,
2229
+ dragOut: true,
2230
+ dragEnter: true,
2231
+ b4DragOver: true,
2232
+ dragOver: true,
2233
+ b4DragDrop: true,
2234
+ dragDrop: true
2235
+ };
2236
+
2237
+ if (this.config.events) {
2238
+ for (var i in this.config.events) {
2239
+ if (this.config.events[i] === false) {
2240
+ this.events[i] = false;
2241
+ }
2242
+ }
2243
+ }
2244
+
2245
+
2246
+ // configurable properties:
2247
+ // padding, isTarget, maintainOffset, primaryButtonOnly
2248
+ this.padding = this.config.padding || [0, 0, 0, 0];
2249
+ this.isTarget = (this.config.isTarget !== false);
2250
+ this.maintainOffset = (this.config.maintainOffset);
2251
+ this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
2252
+ this.dragOnly = ((this.config.dragOnly === true) ? true : false);
2253
+ this.useShim = ((this.config.useShim === true) ? true : false);
2254
+ },
2255
+
2256
+ /**
2257
+ * Executed when the linked element is available
2258
+ * @method handleOnAvailable
2259
+ * @private
2260
+ */
2261
+ handleOnAvailable: function() {
2262
+ //this.logger.log("handleOnAvailable");
2263
+ this.available = true;
2264
+ this.resetConstraints();
2265
+ this.onAvailable();
2266
+ },
2267
+
2268
+ /**
2269
+ * Configures the padding for the target zone in px. Effectively expands
2270
+ * (or reduces) the virtual object size for targeting calculations.
2271
+ * Supports css-style shorthand; if only one parameter is passed, all sides
2272
+ * will have that padding, and if only two are passed, the top and bottom
2273
+ * will have the first param, the left and right the second.
2274
+ * @method setPadding
2275
+ * @param {int} iTop Top pad
2276
+ * @param {int} iRight Right pad
2277
+ * @param {int} iBot Bot pad
2278
+ * @param {int} iLeft Left pad
2279
+ */
2280
+ setPadding: function(iTop, iRight, iBot, iLeft) {
2281
+ // this.padding = [iLeft, iRight, iTop, iBot];
2282
+ if (!iRight && 0 !== iRight) {
2283
+ this.padding = [iTop, iTop, iTop, iTop];
2284
+ } else if (!iBot && 0 !== iBot) {
2285
+ this.padding = [iTop, iRight, iTop, iRight];
2286
+ } else {
2287
+ this.padding = [iTop, iRight, iBot, iLeft];
2288
+ }
2289
+ },
2290
+
2291
+ /**
2292
+ * Stores the initial placement of the linked element.
2293
+ * @method setInitialPosition
2294
+ * @param {int} diffX the X offset, default 0
2295
+ * @param {int} diffY the Y offset, default 0
2296
+ * @private
2297
+ */
2298
+ setInitPosition: function(diffX, diffY) {
2299
+ var el = this.getEl();
2300
+
2301
+ if (!this.DDM.verifyEl(el)) {
2302
+ if (el && el.style && (el.style.display == 'none')) {
2303
+ this.logger.log(this.id + " can not get initial position, element style is display: none");
2304
+ } else {
2305
+ this.logger.log(this.id + " element is broken");
2306
+ }
2307
+ return;
2308
+ }
2309
+
2310
+ var dx = diffX || 0;
2311
+ var dy = diffY || 0;
2312
+
2313
+ var p = Dom.getXY( el );
2314
+
2315
+ this.initPageX = p[0] - dx;
2316
+ this.initPageY = p[1] - dy;
2317
+
2318
+ this.lastPageX = p[0];
2319
+ this.lastPageY = p[1];
2320
+
2321
+ this.logger.log(this.id + " initial position: " + this.initPageX +
2322
+ ", " + this.initPageY);
2323
+
2324
+
2325
+ this.setStartPosition(p);
2326
+ },
2327
+
2328
+ /**
2329
+ * Sets the start position of the element. This is set when the obj
2330
+ * is initialized, the reset when a drag is started.
2331
+ * @method setStartPosition
2332
+ * @param pos current position (from previous lookup)
2333
+ * @private
2334
+ */
2335
+ setStartPosition: function(pos) {
2336
+ var p = pos || Dom.getXY(this.getEl());
2337
+
2338
+ this.deltaSetXY = null;
2339
+
2340
+ this.startPageX = p[0];
2341
+ this.startPageY = p[1];
2342
+ },
2343
+
2344
+ /**
2345
+ * Add this instance to a group of related drag/drop objects. All
2346
+ * instances belong to at least one group, and can belong to as many
2347
+ * groups as needed.
2348
+ * @method addToGroup
2349
+ * @param sGroup {string} the name of the group
2350
+ */
2351
+ addToGroup: function(sGroup) {
2352
+ this.groups[sGroup] = true;
2353
+ this.DDM.regDragDrop(this, sGroup);
2354
+ },
2355
+
2356
+ /**
2357
+ * Remove's this instance from the supplied interaction group
2358
+ * @method removeFromGroup
2359
+ * @param {string} sGroup The group to drop
2360
+ */
2361
+ removeFromGroup: function(sGroup) {
2362
+ this.logger.log("Removing from group: " + sGroup);
2363
+ if (this.groups[sGroup]) {
2364
+ delete this.groups[sGroup];
2365
+ }
2366
+
2367
+ this.DDM.removeDDFromGroup(this, sGroup);
2368
+ },
2369
+
2370
+ /**
2371
+ * Allows you to specify that an element other than the linked element
2372
+ * will be moved with the cursor during a drag
2373
+ * @method setDragElId
2374
+ * @param id {string} the id of the element that will be used to initiate the drag
2375
+ */
2376
+ setDragElId: function(id) {
2377
+ this.dragElId = id;
2378
+ },
2379
+
2380
+ /**
2381
+ * Allows you to specify a child of the linked element that should be
2382
+ * used to initiate the drag operation. An example of this would be if
2383
+ * you have a content div with text and links. Clicking anywhere in the
2384
+ * content area would normally start the drag operation. Use this method
2385
+ * to specify that an element inside of the content div is the element
2386
+ * that starts the drag operation.
2387
+ * @method setHandleElId
2388
+ * @param id {string} the id of the element that will be used to
2389
+ * initiate the drag.
2390
+ */
2391
+ setHandleElId: function(id) {
2392
+ if (typeof id !== "string") {
2393
+ YAHOO.log("id is not a string, assuming it is an HTMLElement");
2394
+ id = Dom.generateId(id);
2395
+ }
2396
+ this.handleElId = id;
2397
+ this.DDM.regHandle(this.id, id);
2398
+ },
2399
+
2400
+ /**
2401
+ * Allows you to set an element outside of the linked element as a drag
2402
+ * handle
2403
+ * @method setOuterHandleElId
2404
+ * @param id the id of the element that will be used to initiate the drag
2405
+ */
2406
+ setOuterHandleElId: function(id) {
2407
+ if (typeof id !== "string") {
2408
+ YAHOO.log("id is not a string, assuming it is an HTMLElement");
2409
+ id = Dom.generateId(id);
2410
+ }
2411
+ this.logger.log("Adding outer handle event: " + id);
2412
+ Event.on(id, "mousedown",
2413
+ this.handleMouseDown, this, true);
2414
+ this.setHandleElId(id);
2415
+
2416
+ this.hasOuterHandles = true;
2417
+ },
2418
+
2419
+ /**
2420
+ * Remove all drag and drop hooks for this element
2421
+ * @method unreg
2422
+ */
2423
+ unreg: function() {
2424
+ this.logger.log("DragDrop obj cleanup " + this.id);
2425
+ Event.removeListener(this.id, "mousedown",
2426
+ this.handleMouseDown);
2427
+ this._domRef = null;
2428
+ this.DDM._remove(this);
2429
+ },
2430
+
2431
+ /**
2432
+ * Returns true if this instance is locked, or the drag drop mgr is locked
2433
+ * (meaning that all drag/drop is disabled on the page.)
2434
+ * @method isLocked
2435
+ * @return {boolean} true if this obj or all drag/drop is locked, else
2436
+ * false
2437
+ */
2438
+ isLocked: function() {
2439
+ return (this.DDM.isLocked() || this.locked);
2440
+ },
2441
+
2442
+ /**
2443
+ * Fired when this object is clicked
2444
+ * @method handleMouseDown
2445
+ * @param {Event} e
2446
+ * @param {YAHOO.util.DragDrop} oDD the clicked dd object (this dd obj)
2447
+ * @private
2448
+ */
2449
+ handleMouseDown: function(e, oDD) {
2450
+
2451
+ var button = e.which || e.button;
2452
+ this.logger.log("button: " + button);
2453
+
2454
+ if (this.primaryButtonOnly && button > 1) {
2455
+ this.logger.log("Mousedown was not produced by the primary button");
2456
+ return;
2457
+ }
2458
+
2459
+ if (this.isLocked()) {
2460
+ this.logger.log("Drag and drop is disabled, aborting");
2461
+ return;
2462
+ }
2463
+
2464
+ this.logger.log("mousedown " + this.id);
2465
+
2466
+ this.logger.log("firing onMouseDown events");
2467
+
2468
+ // firing the mousedown events prior to calculating positions
2469
+ var b4Return = this.b4MouseDown(e),
2470
+ b4Return2 = true;
2471
+
2472
+ if (this.events.b4MouseDown) {
2473
+ b4Return2 = this.fireEvent('b4MouseDownEvent', e);
2474
+ }
2475
+ var mDownReturn = this.onMouseDown(e),
2476
+ mDownReturn2 = true;
2477
+ if (this.events.mouseDown) {
2478
+ mDownReturn2 = this.fireEvent('mouseDownEvent', e);
2479
+ }
2480
+
2481
+ if ((b4Return === false) || (mDownReturn === false) || (b4Return2 === false) || (mDownReturn2 === false)) {
2482
+ this.logger.log('b4MouseDown or onMouseDown returned false, exiting drag');
2483
+ return;
2484
+ }
2485
+
2486
+ this.DDM.refreshCache(this.groups);
2487
+ // var self = this;
2488
+ // setTimeout( function() { self.DDM.refreshCache(self.groups); }, 0);
2489
+
2490
+ // Only process the event if we really clicked within the linked
2491
+ // element. The reason we make this check is that in the case that
2492
+ // another element was moved between the clicked element and the
2493
+ // cursor in the time between the mousedown and mouseup events. When
2494
+ // this happens, the element gets the next mousedown event
2495
+ // regardless of where on the screen it happened.
2496
+ var pt = new YAHOO.util.Point(Event.getPageX(e), Event.getPageY(e));
2497
+ if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) ) {
2498
+ this.logger.log("Click was not over the element: " + this.id);
2499
+ } else {
2500
+ if (this.clickValidator(e)) {
2501
+
2502
+ this.logger.log("click was a valid handle");
2503
+
2504
+ // set the initial element position
2505
+ this.setStartPosition();
2506
+
2507
+ // start tracking mousemove distance and mousedown time to
2508
+ // determine when to start the actual drag
2509
+ this.DDM.handleMouseDown(e, this);
2510
+
2511
+ // this mousedown is mine
2512
+ this.DDM.stopEvent(e);
2513
+ } else {
2514
+
2515
+ this.logger.log("clickValidator returned false, drag not initiated");
2516
+
2517
+ }
2518
+ }
2519
+ },
2520
+
2521
+ /**
2522
+ * @method clickValidator
2523
+ * @description Method validates that the clicked element
2524
+ * was indeed the handle or a valid child of the handle
2525
+ * @param {Event} e
2526
+ */
2527
+ clickValidator: function(e) {
2528
+ var target = YAHOO.util.Event.getTarget(e);
2529
+ return ( this.isValidHandleChild(target) &&
2530
+ (this.id == this.handleElId ||
2531
+ this.DDM.handleWasClicked(target, this.id)) );
2532
+ },
2533
+
2534
+ /**
2535
+ * Finds the location the element should be placed if we want to move
2536
+ * it to where the mouse location less the click offset would place us.
2537
+ * @method getTargetCoord
2538
+ * @param {int} iPageX the X coordinate of the click
2539
+ * @param {int} iPageY the Y coordinate of the click
2540
+ * @return an object that contains the coordinates (Object.x and Object.y)
2541
+ * @private
2542
+ */
2543
+ getTargetCoord: function(iPageX, iPageY) {
2544
+
2545
+ // this.logger.log("getTargetCoord: " + iPageX + ", " + iPageY);
2546
+
2547
+ var x = iPageX - this.deltaX;
2548
+ var y = iPageY - this.deltaY;
2549
+
2550
+ if (this.constrainX) {
2551
+ if (x < this.minX) { x = this.minX; }
2552
+ if (x > this.maxX) { x = this.maxX; }
2553
+ }
2554
+
2555
+ if (this.constrainY) {
2556
+ if (y < this.minY) { y = this.minY; }
2557
+ if (y > this.maxY) { y = this.maxY; }
2558
+ }
2559
+
2560
+ x = this.getTick(x, this.xTicks);
2561
+ y = this.getTick(y, this.yTicks);
2562
+
2563
+ // this.logger.log("getTargetCoord " +
2564
+ // " iPageX: " + iPageX +
2565
+ // " iPageY: " + iPageY +
2566
+ // " x: " + x + ", y: " + y);
2567
+
2568
+ return {x:x, y:y};
2569
+ },
2570
+
2571
+ /**
2572
+ * Allows you to specify a tag name that should not start a drag operation
2573
+ * when clicked. This is designed to facilitate embedding links within a
2574
+ * drag handle that do something other than start the drag.
2575
+ * @method addInvalidHandleType
2576
+ * @param {string} tagName the type of element to exclude
2577
+ */
2578
+ addInvalidHandleType: function(tagName) {
2579
+ var type = tagName.toUpperCase();
2580
+ this.invalidHandleTypes[type] = type;
2581
+ },
2582
+
2583
+ /**
2584
+ * Lets you to specify an element id for a child of a drag handle
2585
+ * that should not initiate a drag
2586
+ * @method addInvalidHandleId
2587
+ * @param {string} id the element id of the element you wish to ignore
2588
+ */
2589
+ addInvalidHandleId: function(id) {
2590
+ if (typeof id !== "string") {
2591
+ YAHOO.log("id is not a string, assuming it is an HTMLElement");
2592
+ id = Dom.generateId(id);
2593
+ }
2594
+ this.invalidHandleIds[id] = id;
2595
+ },
2596
+
2597
+
2598
+ /**
2599
+ * Lets you specify a css class of elements that will not initiate a drag
2600
+ * @method addInvalidHandleClass
2601
+ * @param {string} cssClass the class of the elements you wish to ignore
2602
+ */
2603
+ addInvalidHandleClass: function(cssClass) {
2604
+ this.invalidHandleClasses.push(cssClass);
2605
+ },
2606
+
2607
+ /**
2608
+ * Unsets an excluded tag name set by addInvalidHandleType
2609
+ * @method removeInvalidHandleType
2610
+ * @param {string} tagName the type of element to unexclude
2611
+ */
2612
+ removeInvalidHandleType: function(tagName) {
2613
+ var type = tagName.toUpperCase();
2614
+ // this.invalidHandleTypes[type] = null;
2615
+ delete this.invalidHandleTypes[type];
2616
+ },
2617
+
2618
+ /**
2619
+ * Unsets an invalid handle id
2620
+ * @method removeInvalidHandleId
2621
+ * @param {string} id the id of the element to re-enable
2622
+ */
2623
+ removeInvalidHandleId: function(id) {
2624
+ if (typeof id !== "string") {
2625
+ YAHOO.log("id is not a string, assuming it is an HTMLElement");
2626
+ id = Dom.generateId(id);
2627
+ }
2628
+ delete this.invalidHandleIds[id];
2629
+ },
2630
+
2631
+ /**
2632
+ * Unsets an invalid css class
2633
+ * @method removeInvalidHandleClass
2634
+ * @param {string} cssClass the class of the element(s) you wish to
2635
+ * re-enable
2636
+ */
2637
+ removeInvalidHandleClass: function(cssClass) {
2638
+ for (var i=0, len=this.invalidHandleClasses.length; i<len; ++i) {
2639
+ if (this.invalidHandleClasses[i] == cssClass) {
2640
+ delete this.invalidHandleClasses[i];
2641
+ }
2642
+ }
2643
+ },
2644
+
2645
+ /**
2646
+ * Checks the tag exclusion list to see if this click should be ignored
2647
+ * @method isValidHandleChild
2648
+ * @param {HTMLElement} node the HTMLElement to evaluate
2649
+ * @return {boolean} true if this is a valid tag type, false if not
2650
+ */
2651
+ isValidHandleChild: function(node) {
2652
+
2653
+ var valid = true;
2654
+ // var n = (node.nodeName == "#text") ? node.parentNode : node;
2655
+ var nodeName;
2656
+ try {
2657
+ nodeName = node.nodeName.toUpperCase();
2658
+ } catch(e) {
2659
+ nodeName = node.nodeName;
2660
+ }
2661
+ valid = valid && !this.invalidHandleTypes[nodeName];
2662
+ valid = valid && !this.invalidHandleIds[node.id];
2663
+
2664
+ for (var i=0, len=this.invalidHandleClasses.length; valid && i<len; ++i) {
2665
+ valid = !Dom.hasClass(node, this.invalidHandleClasses[i]);
2666
+ }
2667
+
2668
+ this.logger.log("Valid handle? ... " + valid);
2669
+
2670
+ return valid;
2671
+
2672
+ },
2673
+
2674
+ /**
2675
+ * Create the array of horizontal tick marks if an interval was specified
2676
+ * in setXConstraint().
2677
+ * @method setXTicks
2678
+ * @private
2679
+ */
2680
+ setXTicks: function(iStartX, iTickSize) {
2681
+ this.xTicks = [];
2682
+ this.xTickSize = iTickSize;
2683
+
2684
+ var tickMap = {};
2685
+
2686
+ for (var i = this.initPageX; i >= this.minX; i = i - iTickSize) {
2687
+ if (!tickMap[i]) {
2688
+ this.xTicks[this.xTicks.length] = i;
2689
+ tickMap[i] = true;
2690
+ }
2691
+ }
2692
+
2693
+ for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) {
2694
+ if (!tickMap[i]) {
2695
+ this.xTicks[this.xTicks.length] = i;
2696
+ tickMap[i] = true;
2697
+ }
2698
+ }
2699
+
2700
+ this.xTicks.sort(this.DDM.numericSort) ;
2701
+ this.logger.log("xTicks: " + this.xTicks.join());
2702
+ },
2703
+
2704
+ /**
2705
+ * Create the array of vertical tick marks if an interval was specified in
2706
+ * setYConstraint().
2707
+ * @method setYTicks
2708
+ * @private
2709
+ */
2710
+ setYTicks: function(iStartY, iTickSize) {
2711
+ // this.logger.log("setYTicks: " + iStartY + ", " + iTickSize
2712
+ // + ", " + this.initPageY + ", " + this.minY + ", " + this.maxY );
2713
+ this.yTicks = [];
2714
+ this.yTickSize = iTickSize;
2715
+
2716
+ var tickMap = {};
2717
+
2718
+ for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) {
2719
+ if (!tickMap[i]) {
2720
+ this.yTicks[this.yTicks.length] = i;
2721
+ tickMap[i] = true;
2722
+ }
2723
+ }
2724
+
2725
+ for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) {
2726
+ if (!tickMap[i]) {
2727
+ this.yTicks[this.yTicks.length] = i;
2728
+ tickMap[i] = true;
2729
+ }
2730
+ }
2731
+
2732
+ this.yTicks.sort(this.DDM.numericSort) ;
2733
+ this.logger.log("yTicks: " + this.yTicks.join());
2734
+ },
2735
+
2736
+ /**
2737
+ * By default, the element can be dragged any place on the screen. Use
2738
+ * this method to limit the horizontal travel of the element. Pass in
2739
+ * 0,0 for the parameters if you want to lock the drag to the y axis.
2740
+ * @method setXConstraint
2741
+ * @param {int} iLeft the number of pixels the element can move to the left
2742
+ * @param {int} iRight the number of pixels the element can move to the
2743
+ * right
2744
+ * @param {int} iTickSize optional parameter for specifying that the
2745
+ * element
2746
+ * should move iTickSize pixels at a time.
2747
+ */
2748
+ setXConstraint: function(iLeft, iRight, iTickSize) {
2749
+ this.leftConstraint = parseInt(iLeft, 10);
2750
+ this.rightConstraint = parseInt(iRight, 10);
2751
+
2752
+ this.minX = this.initPageX - this.leftConstraint;
2753
+ this.maxX = this.initPageX + this.rightConstraint;
2754
+ if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }
2755
+
2756
+ this.constrainX = true;
2757
+ this.logger.log("initPageX:" + this.initPageX + " minX:" + this.minX +
2758
+ " maxX:" + this.maxX);
2759
+ },
2760
+
2761
+ /**
2762
+ * Clears any constraints applied to this instance. Also clears ticks
2763
+ * since they can't exist independent of a constraint at this time.
2764
+ * @method clearConstraints
2765
+ */
2766
+ clearConstraints: function() {
2767
+ this.logger.log("Clearing constraints");
2768
+ this.constrainX = false;
2769
+ this.constrainY = false;
2770
+ this.clearTicks();
2771
+ },
2772
+
2773
+ /**
2774
+ * Clears any tick interval defined for this instance
2775
+ * @method clearTicks
2776
+ */
2777
+ clearTicks: function() {
2778
+ this.logger.log("Clearing ticks");
2779
+ this.xTicks = null;
2780
+ this.yTicks = null;
2781
+ this.xTickSize = 0;
2782
+ this.yTickSize = 0;
2783
+ },
2784
+
2785
+ /**
2786
+ * By default, the element can be dragged any place on the screen. Set
2787
+ * this to limit the vertical travel of the element. Pass in 0,0 for the
2788
+ * parameters if you want to lock the drag to the x axis.
2789
+ * @method setYConstraint
2790
+ * @param {int} iUp the number of pixels the element can move up
2791
+ * @param {int} iDown the number of pixels the element can move down
2792
+ * @param {int} iTickSize optional parameter for specifying that the
2793
+ * element should move iTickSize pixels at a time.
2794
+ */
2795
+ setYConstraint: function(iUp, iDown, iTickSize) {
2796
+ this.logger.log("setYConstraint: " + iUp + "," + iDown + "," + iTickSize);
2797
+ this.topConstraint = parseInt(iUp, 10);
2798
+ this.bottomConstraint = parseInt(iDown, 10);
2799
+
2800
+ this.minY = this.initPageY - this.topConstraint;
2801
+ this.maxY = this.initPageY + this.bottomConstraint;
2802
+ if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }
2803
+
2804
+ this.constrainY = true;
2805
+
2806
+ this.logger.log("initPageY:" + this.initPageY + " minY:" + this.minY +
2807
+ " maxY:" + this.maxY);
2808
+ },
2809
+
2810
+ /**
2811
+ * resetConstraints must be called if you manually reposition a dd element.
2812
+ * @method resetConstraints
2813
+ */
2814
+ resetConstraints: function() {
2815
+
2816
+ //this.logger.log("resetConstraints");
2817
+
2818
+ // Maintain offsets if necessary
2819
+ if (this.initPageX || this.initPageX === 0) {
2820
+ //this.logger.log("init pagexy: " + this.initPageX + ", " +
2821
+ //this.initPageY);
2822
+ //this.logger.log("last pagexy: " + this.lastPageX + ", " +
2823
+ //this.lastPageY);
2824
+ // figure out how much this thing has moved
2825
+ var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;
2826
+ var dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;
2827
+
2828
+ this.setInitPosition(dx, dy);
2829
+
2830
+ // This is the first time we have detected the element's position
2831
+ } else {
2832
+ this.setInitPosition();
2833
+ }
2834
+
2835
+ if (this.constrainX) {
2836
+ this.setXConstraint( this.leftConstraint,
2837
+ this.rightConstraint,
2838
+ this.xTickSize );
2839
+ }
2840
+
2841
+ if (this.constrainY) {
2842
+ this.setYConstraint( this.topConstraint,
2843
+ this.bottomConstraint,
2844
+ this.yTickSize );
2845
+ }
2846
+ },
2847
+
2848
+ /**
2849
+ * Normally the drag element is moved pixel by pixel, but we can specify
2850
+ * that it move a number of pixels at a time. This method resolves the
2851
+ * location when we have it set up like this.
2852
+ * @method getTick
2853
+ * @param {int} val where we want to place the object
2854
+ * @param {int[]} tickArray sorted array of valid points
2855
+ * @return {int} the closest tick
2856
+ * @private
2857
+ */
2858
+ getTick: function(val, tickArray) {
2859
+
2860
+ if (!tickArray) {
2861
+ // If tick interval is not defined, it is effectively 1 pixel,
2862
+ // so we return the value passed to us.
2863
+ return val;
2864
+ } else if (tickArray[0] >= val) {
2865
+ // The value is lower than the first tick, so we return the first
2866
+ // tick.
2867
+ return tickArray[0];
2868
+ } else {
2869
+ for (var i=0, len=tickArray.length; i<len; ++i) {
2870
+ var next = i + 1;
2871
+ if (tickArray[next] && tickArray[next] >= val) {
2872
+ var diff1 = val - tickArray[i];
2873
+ var diff2 = tickArray[next] - val;
2874
+ return (diff2 > diff1) ? tickArray[i] : tickArray[next];
2875
+ }
2876
+ }
2877
+
2878
+ // The value is larger than the last tick, so we return the last
2879
+ // tick.
2880
+ return tickArray[tickArray.length - 1];
2881
+ }
2882
+ },
2883
+
2884
+ /**
2885
+ * toString method
2886
+ * @method toString
2887
+ * @return {string} string representation of the dd obj
2888
+ */
2889
+ toString: function() {
2890
+ return ("DragDrop " + this.id);
2891
+ }
2892
+
2893
+ };
2894
+ YAHOO.augment(YAHOO.util.DragDrop, YAHOO.util.EventProvider);
2895
+
2896
+ /**
2897
+ * @event mouseDownEvent
2898
+ * @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
2899
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2900
+ */
2901
+
2902
+ /**
2903
+ * @event b4MouseDownEvent
2904
+ * @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
2905
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2906
+ */
2907
+
2908
+ /**
2909
+ * @event mouseUpEvent
2910
+ * @description Fired from inside DragDropMgr when the drag operation is finished.
2911
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2912
+ */
2913
+
2914
+ /**
2915
+ * @event b4StartDragEvent
2916
+ * @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
2917
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2918
+ */
2919
+
2920
+ /**
2921
+ * @event startDragEvent
2922
+ * @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown.
2923
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2924
+ */
2925
+
2926
+ /**
2927
+ * @event b4EndDragEvent
2928
+ * @description Fires before the endDragEvent. Returning false will cancel.
2929
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2930
+ */
2931
+
2932
+ /**
2933
+ * @event endDragEvent
2934
+ * @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
2935
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2936
+ */
2937
+
2938
+ /**
2939
+ * @event dragEvent
2940
+ * @description Occurs every mousemove event while dragging.
2941
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2942
+ */
2943
+ /**
2944
+ * @event b4DragEvent
2945
+ * @description Fires before the dragEvent.
2946
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2947
+ */
2948
+ /**
2949
+ * @event invalidDropEvent
2950
+ * @description Fires when the dragged objects is dropped in a location that contains no drop targets.
2951
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2952
+ */
2953
+ /**
2954
+ * @event b4DragOutEvent
2955
+ * @description Fires before the dragOutEvent
2956
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2957
+ */
2958
+ /**
2959
+ * @event dragOutEvent
2960
+ * @description Fires when a dragged object is no longer over an object that had the onDragEnter fire.
2961
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2962
+ */
2963
+ /**
2964
+ * @event dragEnterEvent
2965
+ * @description Occurs when the dragged object first interacts with another targettable drag and drop object.
2966
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2967
+ */
2968
+ /**
2969
+ * @event b4DragOverEvent
2970
+ * @description Fires before the dragOverEvent.
2971
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2972
+ */
2973
+ /**
2974
+ * @event dragOverEvent
2975
+ * @description Fires every mousemove event while over a drag and drop object.
2976
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2977
+ */
2978
+ /**
2979
+ * @event b4DragDropEvent
2980
+ * @description Fires before the dragDropEvent
2981
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2982
+ */
2983
+ /**
2984
+ * @event dragDropEvent
2985
+ * @description Fires when the dragged objects is dropped on another.
2986
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
2987
+ */
2988
+ })();
2989
+ /**
2990
+ * A DragDrop implementation where the linked element follows the
2991
+ * mouse cursor during a drag.
2992
+ * @class DD
2993
+ * @extends YAHOO.util.DragDrop
2994
+ * @constructor
2995
+ * @param {String} id the id of the linked element
2996
+ * @param {String} sGroup the group of related DragDrop items
2997
+ * @param {object} config an object containing configurable attributes
2998
+ * Valid properties for DD:
2999
+ * scroll
3000
+ */
3001
+ YAHOO.util.DD = function(id, sGroup, config) {
3002
+ if (id) {
3003
+ this.init(id, sGroup, config);
3004
+ }
3005
+ };
3006
+
3007
+ YAHOO.extend(YAHOO.util.DD, YAHOO.util.DragDrop, {
3008
+
3009
+ /**
3010
+ * When set to true, the utility automatically tries to scroll the browser
3011
+ * window when a drag and drop element is dragged near the viewport boundary.
3012
+ * Defaults to true.
3013
+ * @property scroll
3014
+ * @type boolean
3015
+ */
3016
+ scroll: true,
3017
+
3018
+ /**
3019
+ * Sets the pointer offset to the distance between the linked element's top
3020
+ * left corner and the location the element was clicked
3021
+ * @method autoOffset
3022
+ * @param {int} iPageX the X coordinate of the click
3023
+ * @param {int} iPageY the Y coordinate of the click
3024
+ */
3025
+ autoOffset: function(iPageX, iPageY) {
3026
+ var x = iPageX - this.startPageX;
3027
+ var y = iPageY - this.startPageY;
3028
+ this.setDelta(x, y);
3029
+ // this.logger.log("autoOffset el pos: " + aCoord + ", delta: " + x + "," + y);
3030
+ },
3031
+
3032
+ /**
3033
+ * Sets the pointer offset. You can call this directly to force the
3034
+ * offset to be in a particular location (e.g., pass in 0,0 to set it
3035
+ * to the center of the object, as done in YAHOO.widget.Slider)
3036
+ * @method setDelta
3037
+ * @param {int} iDeltaX the distance from the left
3038
+ * @param {int} iDeltaY the distance from the top
3039
+ */
3040
+ setDelta: function(iDeltaX, iDeltaY) {
3041
+ this.deltaX = iDeltaX;
3042
+ this.deltaY = iDeltaY;
3043
+ this.logger.log("deltaX:" + this.deltaX + ", deltaY:" + this.deltaY);
3044
+ },
3045
+
3046
+ /**
3047
+ * Sets the drag element to the location of the mousedown or click event,
3048
+ * maintaining the cursor location relative to the location on the element
3049
+ * that was clicked. Override this if you want to place the element in a
3050
+ * location other than where the cursor is.
3051
+ * @method setDragElPos
3052
+ * @param {int} iPageX the X coordinate of the mousedown or drag event
3053
+ * @param {int} iPageY the Y coordinate of the mousedown or drag event
3054
+ */
3055
+ setDragElPos: function(iPageX, iPageY) {
3056
+ // the first time we do this, we are going to check to make sure
3057
+ // the element has css positioning
3058
+
3059
+ var el = this.getDragEl();
3060
+ this.alignElWithMouse(el, iPageX, iPageY);
3061
+ },
3062
+
3063
+ /**
3064
+ * Sets the element to the location of the mousedown or click event,
3065
+ * maintaining the cursor location relative to the location on the element
3066
+ * that was clicked. Override this if you want to place the element in a
3067
+ * location other than where the cursor is.
3068
+ * @method alignElWithMouse
3069
+ * @param {HTMLElement} el the element to move
3070
+ * @param {int} iPageX the X coordinate of the mousedown or drag event
3071
+ * @param {int} iPageY the Y coordinate of the mousedown or drag event
3072
+ */
3073
+ alignElWithMouse: function(el, iPageX, iPageY) {
3074
+ var oCoord = this.getTargetCoord(iPageX, iPageY);
3075
+ // this.logger.log("****alignElWithMouse : " + el.id + ", " + aCoord + ", " + el.style.display);
3076
+
3077
+ if (!this.deltaSetXY) {
3078
+ var aCoord = [oCoord.x, oCoord.y];
3079
+ YAHOO.util.Dom.setXY(el, aCoord);
3080
+
3081
+ var newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
3082
+ var newTop = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
3083
+
3084
+ this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ];
3085
+ } else {
3086
+ YAHOO.util.Dom.setStyle(el, "left", (oCoord.x + this.deltaSetXY[0]) + "px");
3087
+ YAHOO.util.Dom.setStyle(el, "top", (oCoord.y + this.deltaSetXY[1]) + "px");
3088
+ }
3089
+
3090
+ this.cachePosition(oCoord.x, oCoord.y);
3091
+ var self = this;
3092
+ setTimeout(function() {
3093
+ self.autoScroll.call(self, oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth);
3094
+ }, 0);
3095
+ },
3096
+
3097
+ /**
3098
+ * Saves the most recent position so that we can reset the constraints and
3099
+ * tick marks on-demand. We need to know this so that we can calculate the
3100
+ * number of pixels the element is offset from its original position.
3101
+ * @method cachePosition
3102
+ * @param iPageX the current x position (optional, this just makes it so we
3103
+ * don't have to look it up again)
3104
+ * @param iPageY the current y position (optional, this just makes it so we
3105
+ * don't have to look it up again)
3106
+ */
3107
+ cachePosition: function(iPageX, iPageY) {
3108
+ if (iPageX) {
3109
+ this.lastPageX = iPageX;
3110
+ this.lastPageY = iPageY;
3111
+ } else {
3112
+ var aCoord = YAHOO.util.Dom.getXY(this.getEl());
3113
+ this.lastPageX = aCoord[0];
3114
+ this.lastPageY = aCoord[1];
3115
+ }
3116
+ },
3117
+
3118
+ /**
3119
+ * Auto-scroll the window if the dragged object has been moved beyond the
3120
+ * visible window boundary.
3121
+ * @method autoScroll
3122
+ * @param {int} x the drag element's x position
3123
+ * @param {int} y the drag element's y position
3124
+ * @param {int} h the height of the drag element
3125
+ * @param {int} w the width of the drag element
3126
+ * @private
3127
+ */
3128
+ autoScroll: function(x, y, h, w) {
3129
+
3130
+ if (this.scroll) {
3131
+ // The client height
3132
+ var clientH = this.DDM.getClientHeight();
3133
+
3134
+ // The client width
3135
+ var clientW = this.DDM.getClientWidth();
3136
+
3137
+ // The amt scrolled down
3138
+ var st = this.DDM.getScrollTop();
3139
+
3140
+ // The amt scrolled right
3141
+ var sl = this.DDM.getScrollLeft();
3142
+
3143
+ // Location of the bottom of the element
3144
+ var bot = h + y;
3145
+
3146
+ // Location of the right of the element
3147
+ var right = w + x;
3148
+
3149
+ // The distance from the cursor to the bottom of the visible area,
3150
+ // adjusted so that we don't scroll if the cursor is beyond the
3151
+ // element drag constraints
3152
+ var toBot = (clientH + st - y - this.deltaY);
3153
+
3154
+ // The distance from the cursor to the right of the visible area
3155
+ var toRight = (clientW + sl - x - this.deltaX);
3156
+
3157
+ // this.logger.log( " x: " + x + " y: " + y + " h: " + h +
3158
+ // " clientH: " + clientH + " clientW: " + clientW +
3159
+ // " st: " + st + " sl: " + sl + " bot: " + bot +
3160
+ // " right: " + right + " toBot: " + toBot + " toRight: " + toRight);
3161
+
3162
+ // How close to the edge the cursor must be before we scroll
3163
+ // var thresh = (document.all) ? 100 : 40;
3164
+ var thresh = 40;
3165
+
3166
+ // How many pixels to scroll per autoscroll op. This helps to reduce
3167
+ // clunky scrolling. IE is more sensitive about this ... it needs this
3168
+ // value to be higher.
3169
+ var scrAmt = (document.all) ? 80 : 30;
3170
+
3171
+ // Scroll down if we are near the bottom of the visible page and the
3172
+ // obj extends below the crease
3173
+ if ( bot > clientH && toBot < thresh ) {
3174
+ window.scrollTo(sl, st + scrAmt);
3175
+ }
3176
+
3177
+ // Scroll up if the window is scrolled down and the top of the object
3178
+ // goes above the top border
3179
+ if ( y < st && st > 0 && y - st < thresh ) {
3180
+ window.scrollTo(sl, st - scrAmt);
3181
+ }
3182
+
3183
+ // Scroll right if the obj is beyond the right border and the cursor is
3184
+ // near the border.
3185
+ if ( right > clientW && toRight < thresh ) {
3186
+ window.scrollTo(sl + scrAmt, st);
3187
+ }
3188
+
3189
+ // Scroll left if the window has been scrolled to the right and the obj
3190
+ // extends past the left border
3191
+ if ( x < sl && sl > 0 && x - sl < thresh ) {
3192
+ window.scrollTo(sl - scrAmt, st);
3193
+ }
3194
+ }
3195
+ },
3196
+
3197
+ /*
3198
+ * Sets up config options specific to this class. Overrides
3199
+ * YAHOO.util.DragDrop, but all versions of this method through the
3200
+ * inheritance chain are called
3201
+ */
3202
+ applyConfig: function() {
3203
+ YAHOO.util.DD.superclass.applyConfig.call(this);
3204
+ this.scroll = (this.config.scroll !== false);
3205
+ },
3206
+
3207
+ /*
3208
+ * Event that fires prior to the onMouseDown event. Overrides
3209
+ * YAHOO.util.DragDrop.
3210
+ */
3211
+ b4MouseDown: function(e) {
3212
+ this.setStartPosition();
3213
+ // this.resetConstraints();
3214
+ this.autoOffset(YAHOO.util.Event.getPageX(e),
3215
+ YAHOO.util.Event.getPageY(e));
3216
+ },
3217
+
3218
+ /*
3219
+ * Event that fires prior to the onDrag event. Overrides
3220
+ * YAHOO.util.DragDrop.
3221
+ */
3222
+ b4Drag: function(e) {
3223
+ this.setDragElPos(YAHOO.util.Event.getPageX(e),
3224
+ YAHOO.util.Event.getPageY(e));
3225
+ },
3226
+
3227
+ toString: function() {
3228
+ return ("DD " + this.id);
3229
+ }
3230
+
3231
+ //////////////////////////////////////////////////////////////////////////
3232
+ // Debugging ygDragDrop events that can be overridden
3233
+ //////////////////////////////////////////////////////////////////////////
3234
+ /*
3235
+ startDrag: function(x, y) {
3236
+ this.logger.log(this.id.toString() + " startDrag");
3237
+ },
3238
+
3239
+ onDrag: function(e) {
3240
+ this.logger.log(this.id.toString() + " onDrag");
3241
+ },
3242
+
3243
+ onDragEnter: function(e, id) {
3244
+ this.logger.log(this.id.toString() + " onDragEnter: " + id);
3245
+ },
3246
+
3247
+ onDragOver: function(e, id) {
3248
+ this.logger.log(this.id.toString() + " onDragOver: " + id);
3249
+ },
3250
+
3251
+ onDragOut: function(e, id) {
3252
+ this.logger.log(this.id.toString() + " onDragOut: " + id);
3253
+ },
3254
+
3255
+ onDragDrop: function(e, id) {
3256
+ this.logger.log(this.id.toString() + " onDragDrop: " + id);
3257
+ },
3258
+
3259
+ endDrag: function(e) {
3260
+ this.logger.log(this.id.toString() + " endDrag");
3261
+ }
3262
+
3263
+ */
3264
+
3265
+ /**
3266
+ * @event mouseDownEvent
3267
+ * @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
3268
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3269
+ */
3270
+
3271
+ /**
3272
+ * @event b4MouseDownEvent
3273
+ * @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
3274
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3275
+ */
3276
+
3277
+ /**
3278
+ * @event mouseUpEvent
3279
+ * @description Fired from inside DragDropMgr when the drag operation is finished.
3280
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3281
+ */
3282
+
3283
+ /**
3284
+ * @event b4StartDragEvent
3285
+ * @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
3286
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3287
+ */
3288
+
3289
+ /**
3290
+ * @event startDragEvent
3291
+ * @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown.
3292
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3293
+ */
3294
+
3295
+ /**
3296
+ * @event b4EndDragEvent
3297
+ * @description Fires before the endDragEvent. Returning false will cancel.
3298
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3299
+ */
3300
+
3301
+ /**
3302
+ * @event endDragEvent
3303
+ * @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
3304
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3305
+ */
3306
+
3307
+ /**
3308
+ * @event dragEvent
3309
+ * @description Occurs every mousemove event while dragging.
3310
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3311
+ */
3312
+ /**
3313
+ * @event b4DragEvent
3314
+ * @description Fires before the dragEvent.
3315
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3316
+ */
3317
+ /**
3318
+ * @event invalidDropEvent
3319
+ * @description Fires when the dragged objects is dropped in a location that contains no drop targets.
3320
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3321
+ */
3322
+ /**
3323
+ * @event b4DragOutEvent
3324
+ * @description Fires before the dragOutEvent
3325
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3326
+ */
3327
+ /**
3328
+ * @event dragOutEvent
3329
+ * @description Fires when a dragged object is no longer over an object that had the onDragEnter fire.
3330
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3331
+ */
3332
+ /**
3333
+ * @event dragEnterEvent
3334
+ * @description Occurs when the dragged object first interacts with another targettable drag and drop object.
3335
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3336
+ */
3337
+ /**
3338
+ * @event b4DragOverEvent
3339
+ * @description Fires before the dragOverEvent.
3340
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3341
+ */
3342
+ /**
3343
+ * @event dragOverEvent
3344
+ * @description Fires every mousemove event while over a drag and drop object.
3345
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3346
+ */
3347
+ /**
3348
+ * @event b4DragDropEvent
3349
+ * @description Fires before the dragDropEvent
3350
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3351
+ */
3352
+ /**
3353
+ * @event dragDropEvent
3354
+ * @description Fires when the dragged objects is dropped on another.
3355
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3356
+ */
3357
+ });
3358
+ /**
3359
+ * A DragDrop implementation that inserts an empty, bordered div into
3360
+ * the document that follows the cursor during drag operations. At the time of
3361
+ * the click, the frame div is resized to the dimensions of the linked html
3362
+ * element, and moved to the exact location of the linked element.
3363
+ *
3364
+ * References to the "frame" element refer to the single proxy element that
3365
+ * was created to be dragged in place of all DDProxy elements on the
3366
+ * page.
3367
+ *
3368
+ * @class DDProxy
3369
+ * @extends YAHOO.util.DD
3370
+ * @constructor
3371
+ * @param {String} id the id of the linked html element
3372
+ * @param {String} sGroup the group of related DragDrop objects
3373
+ * @param {object} config an object containing configurable attributes
3374
+ * Valid properties for DDProxy in addition to those in DragDrop:
3375
+ * resizeFrame, centerFrame, dragElId
3376
+ */
3377
+ YAHOO.util.DDProxy = function(id, sGroup, config) {
3378
+ if (id) {
3379
+ this.init(id, sGroup, config);
3380
+ this.initFrame();
3381
+ }
3382
+ };
3383
+
3384
+ /**
3385
+ * The default drag frame div id
3386
+ * @property YAHOO.util.DDProxy.dragElId
3387
+ * @type String
3388
+ * @static
3389
+ */
3390
+ YAHOO.util.DDProxy.dragElId = "ygddfdiv";
3391
+
3392
+ YAHOO.extend(YAHOO.util.DDProxy, YAHOO.util.DD, {
3393
+
3394
+ /**
3395
+ * By default we resize the drag frame to be the same size as the element
3396
+ * we want to drag (this is to get the frame effect). We can turn it off
3397
+ * if we want a different behavior.
3398
+ * @property resizeFrame
3399
+ * @type boolean
3400
+ */
3401
+ resizeFrame: true,
3402
+
3403
+ /**
3404
+ * By default the frame is positioned exactly where the drag element is, so
3405
+ * we use the cursor offset provided by YAHOO.util.DD. Another option that works only if
3406
+ * you do not have constraints on the obj is to have the drag frame centered
3407
+ * around the cursor. Set centerFrame to true for this effect.
3408
+ * @property centerFrame
3409
+ * @type boolean
3410
+ */
3411
+ centerFrame: false,
3412
+
3413
+ /**
3414
+ * Creates the proxy element if it does not yet exist
3415
+ * @method createFrame
3416
+ */
3417
+ createFrame: function() {
3418
+ var self=this, body=document.body;
3419
+
3420
+ if (!body || !body.firstChild) {
3421
+ setTimeout( function() { self.createFrame(); }, 50 );
3422
+ return;
3423
+ }
3424
+
3425
+ var div=this.getDragEl(), Dom=YAHOO.util.Dom;
3426
+
3427
+ if (!div) {
3428
+ div = document.createElement("div");
3429
+ div.id = this.dragElId;
3430
+ var s = div.style;
3431
+
3432
+ s.position = "absolute";
3433
+ s.visibility = "hidden";
3434
+ s.cursor = "move";
3435
+ s.border = "2px solid #aaa";
3436
+ s.zIndex = 999;
3437
+ s.height = "25px";
3438
+ s.width = "25px";
3439
+
3440
+ var _data = document.createElement('div');
3441
+ Dom.setStyle(_data, 'height', '100%');
3442
+ Dom.setStyle(_data, 'width', '100%');
3443
+ /**
3444
+ * If the proxy element has no background-color, then it is considered to the "transparent" by Internet Explorer.
3445
+ * Since it is "transparent" then the events pass through it to the iframe below.
3446
+ * So creating a "fake" div inside the proxy element and giving it a background-color, then setting it to an
3447
+ * opacity of 0, it appears to not be there, however IE still thinks that it is so the events never pass through.
3448
+ */
3449
+ Dom.setStyle(_data, 'background-color', '#ccc');
3450
+ Dom.setStyle(_data, 'opacity', '0');
3451
+ div.appendChild(_data);
3452
+
3453
+ // appendChild can blow up IE if invoked prior to the window load event
3454
+ // while rendering a table. It is possible there are other scenarios
3455
+ // that would cause this to happen as well.
3456
+ body.insertBefore(div, body.firstChild);
3457
+ }
3458
+ },
3459
+
3460
+ /**
3461
+ * Initialization for the drag frame element. Must be called in the
3462
+ * constructor of all subclasses
3463
+ * @method initFrame
3464
+ */
3465
+ initFrame: function() {
3466
+ this.createFrame();
3467
+ },
3468
+
3469
+ applyConfig: function() {
3470
+ //this.logger.log("DDProxy applyConfig");
3471
+ YAHOO.util.DDProxy.superclass.applyConfig.call(this);
3472
+
3473
+ this.resizeFrame = (this.config.resizeFrame !== false);
3474
+ this.centerFrame = (this.config.centerFrame);
3475
+ this.setDragElId(this.config.dragElId || YAHOO.util.DDProxy.dragElId);
3476
+ },
3477
+
3478
+ /**
3479
+ * Resizes the drag frame to the dimensions of the clicked object, positions
3480
+ * it over the object, and finally displays it
3481
+ * @method showFrame
3482
+ * @param {int} iPageX X click position
3483
+ * @param {int} iPageY Y click position
3484
+ * @private
3485
+ */
3486
+ showFrame: function(iPageX, iPageY) {
3487
+ var el = this.getEl();
3488
+ var dragEl = this.getDragEl();
3489
+ var s = dragEl.style;
3490
+
3491
+ this._resizeProxy();
3492
+
3493
+ if (this.centerFrame) {
3494
+ this.setDelta( Math.round(parseInt(s.width, 10)/2),
3495
+ Math.round(parseInt(s.height, 10)/2) );
3496
+ }
3497
+
3498
+ this.setDragElPos(iPageX, iPageY);
3499
+
3500
+ YAHOO.util.Dom.setStyle(dragEl, "visibility", "visible");
3501
+ },
3502
+
3503
+ /**
3504
+ * The proxy is automatically resized to the dimensions of the linked
3505
+ * element when a drag is initiated, unless resizeFrame is set to false
3506
+ * @method _resizeProxy
3507
+ * @private
3508
+ */
3509
+ _resizeProxy: function() {
3510
+ if (this.resizeFrame) {
3511
+ var DOM = YAHOO.util.Dom;
3512
+ var el = this.getEl();
3513
+ var dragEl = this.getDragEl();
3514
+
3515
+ var bt = parseInt( DOM.getStyle(dragEl, "borderTopWidth" ), 10);
3516
+ var br = parseInt( DOM.getStyle(dragEl, "borderRightWidth" ), 10);
3517
+ var bb = parseInt( DOM.getStyle(dragEl, "borderBottomWidth" ), 10);
3518
+ var bl = parseInt( DOM.getStyle(dragEl, "borderLeftWidth" ), 10);
3519
+
3520
+ if (isNaN(bt)) { bt = 0; }
3521
+ if (isNaN(br)) { br = 0; }
3522
+ if (isNaN(bb)) { bb = 0; }
3523
+ if (isNaN(bl)) { bl = 0; }
3524
+
3525
+ this.logger.log("proxy size: " + bt + " " + br + " " + bb + " " + bl);
3526
+
3527
+ var newWidth = Math.max(0, el.offsetWidth - br - bl);
3528
+ var newHeight = Math.max(0, el.offsetHeight - bt - bb);
3529
+
3530
+ this.logger.log("Resizing proxy element");
3531
+
3532
+ DOM.setStyle( dragEl, "width", newWidth + "px" );
3533
+ DOM.setStyle( dragEl, "height", newHeight + "px" );
3534
+ }
3535
+ },
3536
+
3537
+ // overrides YAHOO.util.DragDrop
3538
+ b4MouseDown: function(e) {
3539
+ this.setStartPosition();
3540
+ var x = YAHOO.util.Event.getPageX(e);
3541
+ var y = YAHOO.util.Event.getPageY(e);
3542
+ this.autoOffset(x, y);
3543
+
3544
+ // This causes the autoscroll code to kick off, which means autoscroll can
3545
+ // happen prior to the check for a valid drag handle.
3546
+ // this.setDragElPos(x, y);
3547
+ },
3548
+
3549
+ // overrides YAHOO.util.DragDrop
3550
+ b4StartDrag: function(x, y) {
3551
+ // show the drag frame
3552
+ this.logger.log("start drag show frame, x: " + x + ", y: " + y);
3553
+ this.showFrame(x, y);
3554
+ },
3555
+
3556
+ // overrides YAHOO.util.DragDrop
3557
+ b4EndDrag: function(e) {
3558
+ this.logger.log(this.id + " b4EndDrag");
3559
+ YAHOO.util.Dom.setStyle(this.getDragEl(), "visibility", "hidden");
3560
+ },
3561
+
3562
+ // overrides YAHOO.util.DragDrop
3563
+ // By default we try to move the element to the last location of the frame.
3564
+ // This is so that the default behavior mirrors that of YAHOO.util.DD.
3565
+ endDrag: function(e) {
3566
+ var DOM = YAHOO.util.Dom;
3567
+ this.logger.log(this.id + " endDrag");
3568
+ var lel = this.getEl();
3569
+ var del = this.getDragEl();
3570
+
3571
+ // Show the drag frame briefly so we can get its position
3572
+ // del.style.visibility = "";
3573
+ DOM.setStyle(del, "visibility", "");
3574
+
3575
+ // Hide the linked element before the move to get around a Safari
3576
+ // rendering bug.
3577
+ //lel.style.visibility = "hidden";
3578
+ DOM.setStyle(lel, "visibility", "hidden");
3579
+ YAHOO.util.DDM.moveToEl(lel, del);
3580
+ //del.style.visibility = "hidden";
3581
+ DOM.setStyle(del, "visibility", "hidden");
3582
+ //lel.style.visibility = "";
3583
+ DOM.setStyle(lel, "visibility", "");
3584
+ },
3585
+
3586
+ toString: function() {
3587
+ return ("DDProxy " + this.id);
3588
+ }
3589
+ /**
3590
+ * @event mouseDownEvent
3591
+ * @description Provides access to the mousedown event. The mousedown does not always result in a drag operation.
3592
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3593
+ */
3594
+
3595
+ /**
3596
+ * @event b4MouseDownEvent
3597
+ * @description Provides access to the mousedown event, before the mouseDownEvent gets fired. Returning false will cancel the drag.
3598
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3599
+ */
3600
+
3601
+ /**
3602
+ * @event mouseUpEvent
3603
+ * @description Fired from inside DragDropMgr when the drag operation is finished.
3604
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3605
+ */
3606
+
3607
+ /**
3608
+ * @event b4StartDragEvent
3609
+ * @description Fires before the startDragEvent, returning false will cancel the startDrag Event.
3610
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3611
+ */
3612
+
3613
+ /**
3614
+ * @event startDragEvent
3615
+ * @description Occurs after a mouse down and the drag threshold has been met. The drag threshold default is either 3 pixels of mouse movement or 1 full second of holding the mousedown.
3616
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3617
+ */
3618
+
3619
+ /**
3620
+ * @event b4EndDragEvent
3621
+ * @description Fires before the endDragEvent. Returning false will cancel.
3622
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3623
+ */
3624
+
3625
+ /**
3626
+ * @event endDragEvent
3627
+ * @description Fires on the mouseup event after a drag has been initiated (startDrag fired).
3628
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3629
+ */
3630
+
3631
+ /**
3632
+ * @event dragEvent
3633
+ * @description Occurs every mousemove event while dragging.
3634
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3635
+ */
3636
+ /**
3637
+ * @event b4DragEvent
3638
+ * @description Fires before the dragEvent.
3639
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3640
+ */
3641
+ /**
3642
+ * @event invalidDropEvent
3643
+ * @description Fires when the dragged objects is dropped in a location that contains no drop targets.
3644
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3645
+ */
3646
+ /**
3647
+ * @event b4DragOutEvent
3648
+ * @description Fires before the dragOutEvent
3649
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3650
+ */
3651
+ /**
3652
+ * @event dragOutEvent
3653
+ * @description Fires when a dragged object is no longer over an object that had the onDragEnter fire.
3654
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3655
+ */
3656
+ /**
3657
+ * @event dragEnterEvent
3658
+ * @description Occurs when the dragged object first interacts with another targettable drag and drop object.
3659
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3660
+ */
3661
+ /**
3662
+ * @event b4DragOverEvent
3663
+ * @description Fires before the dragOverEvent.
3664
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3665
+ */
3666
+ /**
3667
+ * @event dragOverEvent
3668
+ * @description Fires every mousemove event while over a drag and drop object.
3669
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3670
+ */
3671
+ /**
3672
+ * @event b4DragDropEvent
3673
+ * @description Fires before the dragDropEvent
3674
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3675
+ */
3676
+ /**
3677
+ * @event dragDropEvent
3678
+ * @description Fires when the dragged objects is dropped on another.
3679
+ * @type YAHOO.util.CustomEvent See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
3680
+ */
3681
+
3682
+ });
3683
+ /**
3684
+ * A DragDrop implementation that does not move, but can be a drop
3685
+ * target. You would get the same result by simply omitting implementation
3686
+ * for the event callbacks, but this way we reduce the processing cost of the
3687
+ * event listener and the callbacks.
3688
+ * @class DDTarget
3689
+ * @extends YAHOO.util.DragDrop
3690
+ * @constructor
3691
+ * @param {String} id the id of the element that is a drop target
3692
+ * @param {String} sGroup the group of related DragDrop objects
3693
+ * @param {object} config an object containing configurable attributes
3694
+ * Valid properties for DDTarget in addition to those in
3695
+ * DragDrop:
3696
+ * none
3697
+ */
3698
+ YAHOO.util.DDTarget = function(id, sGroup, config) {
3699
+ if (id) {
3700
+ this.initTarget(id, sGroup, config);
3701
+ }
3702
+ };
3703
+
3704
+ // YAHOO.util.DDTarget.prototype = new YAHOO.util.DragDrop();
3705
+ YAHOO.extend(YAHOO.util.DDTarget, YAHOO.util.DragDrop, {
3706
+ toString: function() {
3707
+ return ("DDTarget " + this.id);
3708
+ }
3709
+ });
3710
+ YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {version: "2.8.1", build: "19"});