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,24 @@
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
+ .yui-skin-sam .yui-h-slider {
8
+ background: url(bg-h.gif) no-repeat 5px 0;
9
+ height: 28px;
10
+ width: 228px;
11
+ }
12
+ .yui-skin-sam .yui-h-slider .yui-slider-thumb {
13
+ top: 4px;
14
+ }
15
+
16
+ .yui-skin-sam .yui-v-slider {
17
+ background: url(bg-v.gif) no-repeat 12px 0;
18
+ height: 228px;
19
+ width: 48px;
20
+ }
21
+ .yui-skin-sam .yui-region-slider {
22
+ height: 228px;
23
+ width: 228px;
24
+ }
@@ -0,0 +1,7 @@
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
+ .yui-h-slider,.yui-v-slider,.yui-region-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb,.yui-region-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}.yui-skin-sam .yui-region-slider{height:228px;width:228px;}
@@ -0,0 +1,17 @@
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
+ .yui-h-slider,
8
+ .yui-v-slider,
9
+ .yui-region-slider {
10
+ position: relative;
11
+ }
12
+ .yui-h-slider .yui-slider-thumb,
13
+ .yui-v-slider .yui-slider-thumb,
14
+ .yui-region-slider .yui-slider-thumb {
15
+ position: absolute;
16
+ cursor: default;
17
+ }
@@ -0,0 +1,20 @@
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
+ .yui-skin-sam .yui-h-slider {
8
+ background: url(bg-h.gif) no-repeat 5px 0;
9
+ height: 28px;
10
+ width: 228px;
11
+ }
12
+ .yui-skin-sam .yui-h-slider .yui-slider-thumb {
13
+ top: 4px;
14
+ }
15
+
16
+ .yui-skin-sam .yui-v-slider {
17
+ background: url(bg-v.gif) no-repeat 12px 0;
18
+ height: 228px;
19
+ width: 48px;
20
+ }
@@ -0,0 +1,2114 @@
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 Slider component is a UI control that enables the user to adjust
9
+ * values in a finite range along one or two axes. Typically, the Slider
10
+ * control is used in a web application as a rich, visual replacement
11
+ * for an input box that takes a number as input. The Slider control can
12
+ * also easily accommodate a second dimension, providing x,y output for
13
+ * a selection point chosen from a rectangular region.
14
+ *
15
+ * @module slider
16
+ * @title Slider Widget
17
+ * @namespace YAHOO.widget
18
+ * @requires yahoo,dom,dragdrop,event
19
+ * @optional animation
20
+ */
21
+ (function () {
22
+
23
+ var getXY = YAHOO.util.Dom.getXY,
24
+ Event = YAHOO.util.Event,
25
+ _AS = Array.prototype.slice;
26
+
27
+ /**
28
+ * A DragDrop implementation that can be used as a background for a
29
+ * slider. It takes a reference to the thumb instance
30
+ * so it can delegate some of the events to it. The goal is to make the
31
+ * thumb jump to the location on the background when the background is
32
+ * clicked.
33
+ *
34
+ * @class Slider
35
+ * @extends YAHOO.util.DragDrop
36
+ * @uses YAHOO.util.EventProvider
37
+ * @constructor
38
+ * @param {String} id The id of the element linked to this instance
39
+ * @param {String} sGroup The group of related DragDrop items
40
+ * @param {SliderThumb} oThumb The thumb for this slider
41
+ * @param {String} sType The type of slider (horiz, vert, region)
42
+ */
43
+ function Slider(sElementId, sGroup, oThumb, sType) {
44
+
45
+ Slider.ANIM_AVAIL = (!YAHOO.lang.isUndefined(YAHOO.util.Anim));
46
+
47
+ if (sElementId) {
48
+ this.init(sElementId, sGroup, true);
49
+ this.initSlider(sType);
50
+ this.initThumb(oThumb);
51
+ }
52
+ }
53
+
54
+ YAHOO.lang.augmentObject(Slider,{
55
+ /**
56
+ * Factory method for creating a horizontal slider
57
+ * @method YAHOO.widget.Slider.getHorizSlider
58
+ * @static
59
+ * @param {String} sBGElId the id of the slider's background element
60
+ * @param {String} sHandleElId the id of the thumb element
61
+ * @param {int} iLeft the number of pixels the element can move left
62
+ * @param {int} iRight the number of pixels the element can move right
63
+ * @param {int} iTickSize optional parameter for specifying that the element
64
+ * should move a certain number pixels at a time.
65
+ * @return {Slider} a horizontal slider control
66
+ */
67
+ getHorizSlider :
68
+ function (sBGElId, sHandleElId, iLeft, iRight, iTickSize) {
69
+ return new Slider(sBGElId, sBGElId,
70
+ new YAHOO.widget.SliderThumb(sHandleElId, sBGElId,
71
+ iLeft, iRight, 0, 0, iTickSize), "horiz");
72
+ },
73
+
74
+ /**
75
+ * Factory method for creating a vertical slider
76
+ * @method YAHOO.widget.Slider.getVertSlider
77
+ * @static
78
+ * @param {String} sBGElId the id of the slider's background element
79
+ * @param {String} sHandleElId the id of the thumb element
80
+ * @param {int} iUp the number of pixels the element can move up
81
+ * @param {int} iDown the number of pixels the element can move down
82
+ * @param {int} iTickSize optional parameter for specifying that the element
83
+ * should move a certain number pixels at a time.
84
+ * @return {Slider} a vertical slider control
85
+ */
86
+ getVertSlider :
87
+ function (sBGElId, sHandleElId, iUp, iDown, iTickSize) {
88
+ return new Slider(sBGElId, sBGElId,
89
+ new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 0, 0,
90
+ iUp, iDown, iTickSize), "vert");
91
+ },
92
+
93
+ /**
94
+ * Factory method for creating a slider region like the one in the color
95
+ * picker example
96
+ * @method YAHOO.widget.Slider.getSliderRegion
97
+ * @static
98
+ * @param {String} sBGElId the id of the slider's background element
99
+ * @param {String} sHandleElId the id of the thumb element
100
+ * @param {int} iLeft the number of pixels the element can move left
101
+ * @param {int} iRight the number of pixels the element can move right
102
+ * @param {int} iUp the number of pixels the element can move up
103
+ * @param {int} iDown the number of pixels the element can move down
104
+ * @param {int} iTickSize optional parameter for specifying that the element
105
+ * should move a certain number pixels at a time.
106
+ * @return {Slider} a slider region control
107
+ */
108
+ getSliderRegion :
109
+ function (sBGElId, sHandleElId, iLeft, iRight, iUp, iDown, iTickSize) {
110
+ return new Slider(sBGElId, sBGElId,
111
+ new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, iLeft, iRight,
112
+ iUp, iDown, iTickSize), "region");
113
+ },
114
+
115
+ /**
116
+ * Constant for valueChangeSource, indicating that the user clicked or
117
+ * dragged the slider to change the value.
118
+ * @property Slider.SOURCE_UI_EVENT
119
+ * @final
120
+ * @static
121
+ * @default 1
122
+ */
123
+ SOURCE_UI_EVENT : 1,
124
+
125
+ /**
126
+ * Constant for valueChangeSource, indicating that the value was altered
127
+ * by a programmatic call to setValue/setRegionValue.
128
+ * @property Slider.SOURCE_SET_VALUE
129
+ * @final
130
+ * @static
131
+ * @default 2
132
+ */
133
+ SOURCE_SET_VALUE : 2,
134
+
135
+ /**
136
+ * Constant for valueChangeSource, indicating that the value was altered
137
+ * by hitting any of the supported keyboard characters.
138
+ * @property Slider.SOURCE_KEY_EVENT
139
+ * @final
140
+ * @static
141
+ * @default 2
142
+ */
143
+ SOURCE_KEY_EVENT : 3,
144
+
145
+ /**
146
+ * By default, animation is available if the animation utility is detected.
147
+ * @property Slider.ANIM_AVAIL
148
+ * @static
149
+ * @type boolean
150
+ */
151
+ ANIM_AVAIL : false
152
+ },true);
153
+
154
+ YAHOO.extend(Slider, YAHOO.util.DragDrop, {
155
+
156
+ /**
157
+ * Tracks the state of the mouse button to aid in when events are fired.
158
+ *
159
+ * @property _mouseDown
160
+ * @type boolean
161
+ * @default false
162
+ * @private
163
+ */
164
+ _mouseDown : false,
165
+
166
+ /**
167
+ * Override the default setting of dragOnly to true.
168
+ * @property dragOnly
169
+ * @type boolean
170
+ * @default true
171
+ */
172
+ dragOnly : true,
173
+
174
+ /**
175
+ * Initializes the slider. Executed in the constructor
176
+ * @method initSlider
177
+ * @param {string} sType the type of slider (horiz, vert, region)
178
+ */
179
+ initSlider: function(sType) {
180
+
181
+ /**
182
+ * The type of the slider (horiz, vert, region)
183
+ * @property type
184
+ * @type string
185
+ */
186
+ this.type = sType;
187
+
188
+ //this.removeInvalidHandleType("A");
189
+
190
+ this.logger = new YAHOO.widget.LogWriter(this.toString());
191
+
192
+ /**
193
+ * Event the fires when the value of the control changes. If
194
+ * the control is animated the event will fire every point
195
+ * along the way.
196
+ * @event change
197
+ * @param {int} newOffset|x the new offset for normal sliders, or the new
198
+ * x offset for region sliders
199
+ * @param {int} y the number of pixels the thumb has moved on the y axis
200
+ * (region sliders only)
201
+ */
202
+ this.createEvent("change", this);
203
+
204
+ /**
205
+ * Event that fires at the beginning of a slider thumb move.
206
+ * @event slideStart
207
+ */
208
+ this.createEvent("slideStart", this);
209
+
210
+ /**
211
+ * Event that fires at the end of a slider thumb move
212
+ * @event slideEnd
213
+ */
214
+ this.createEvent("slideEnd", this);
215
+
216
+ /**
217
+ * Overrides the isTarget property in YAHOO.util.DragDrop
218
+ * @property isTarget
219
+ * @private
220
+ */
221
+ this.isTarget = false;
222
+
223
+ /**
224
+ * Flag that determines if the thumb will animate when moved
225
+ * @property animate
226
+ * @type boolean
227
+ */
228
+ this.animate = Slider.ANIM_AVAIL;
229
+
230
+ /**
231
+ * Set to false to disable a background click thumb move
232
+ * @property backgroundEnabled
233
+ * @type boolean
234
+ */
235
+ this.backgroundEnabled = true;
236
+
237
+ /**
238
+ * Adjustment factor for tick animation, the more ticks, the
239
+ * faster the animation (by default)
240
+ * @property tickPause
241
+ * @type int
242
+ */
243
+ this.tickPause = 40;
244
+
245
+ /**
246
+ * Enables the arrow, home and end keys, defaults to true.
247
+ * @property enableKeys
248
+ * @type boolean
249
+ */
250
+ this.enableKeys = true;
251
+
252
+ /**
253
+ * Specifies the number of pixels the arrow keys will move the slider.
254
+ * Default is 20.
255
+ * @property keyIncrement
256
+ * @type int
257
+ */
258
+ this.keyIncrement = 20;
259
+
260
+ /**
261
+ * moveComplete is set to true when the slider has moved to its final
262
+ * destination. For animated slider, this value can be checked in
263
+ * the onChange handler to make it possible to execute logic only
264
+ * when the move is complete rather than at all points along the way.
265
+ * Deprecated because this flag is only useful when the background is
266
+ * clicked and the slider is animated. If the user drags the thumb,
267
+ * the flag is updated when the drag is over ... the final onDrag event
268
+ * fires before the mouseup the ends the drag, so the implementer will
269
+ * never see it.
270
+ *
271
+ * @property moveComplete
272
+ * @type Boolean
273
+ * @deprecated use the slideEnd event instead
274
+ */
275
+ this.moveComplete = true;
276
+
277
+ /**
278
+ * If animation is configured, specifies the length of the animation
279
+ * in seconds.
280
+ * @property animationDuration
281
+ * @type int
282
+ * @default 0.2
283
+ */
284
+ this.animationDuration = 0.2;
285
+
286
+ /**
287
+ * Constant for valueChangeSource, indicating that the user clicked or
288
+ * dragged the slider to change the value.
289
+ * @property SOURCE_UI_EVENT
290
+ * @final
291
+ * @default 1
292
+ * @deprecated use static Slider.SOURCE_UI_EVENT
293
+ */
294
+ this.SOURCE_UI_EVENT = 1;
295
+
296
+ /**
297
+ * Constant for valueChangeSource, indicating that the value was altered
298
+ * by a programmatic call to setValue/setRegionValue.
299
+ * @property SOURCE_SET_VALUE
300
+ * @final
301
+ * @default 2
302
+ * @deprecated use static Slider.SOURCE_SET_VALUE
303
+ */
304
+ this.SOURCE_SET_VALUE = 2;
305
+
306
+ /**
307
+ * When the slider value changes, this property is set to identify where
308
+ * the update came from. This will be either 1, meaning the slider was
309
+ * clicked or dragged, or 2, meaning that it was set via a setValue() call.
310
+ * This can be used within event handlers to apply some of the logic only
311
+ * when dealing with one source or another.
312
+ * @property valueChangeSource
313
+ * @type int
314
+ * @since 2.3.0
315
+ */
316
+ this.valueChangeSource = 0;
317
+
318
+ /**
319
+ * Indicates whether or not events will be supressed for the current
320
+ * slide operation
321
+ * @property _silent
322
+ * @type boolean
323
+ * @private
324
+ */
325
+ this._silent = false;
326
+
327
+ /**
328
+ * Saved offset used to protect against NaN problems when slider is
329
+ * set to display:none
330
+ * @property lastOffset
331
+ * @type [int, int]
332
+ */
333
+ this.lastOffset = [0,0];
334
+ },
335
+
336
+ /**
337
+ * Initializes the slider's thumb. Executed in the constructor.
338
+ * @method initThumb
339
+ * @param {YAHOO.widget.SliderThumb} t the slider thumb
340
+ */
341
+ initThumb: function(t) {
342
+
343
+ var self = this;
344
+
345
+ /**
346
+ * A YAHOO.widget.SliderThumb instance that we will use to
347
+ * reposition the thumb when the background is clicked
348
+ * @property thumb
349
+ * @type YAHOO.widget.SliderThumb
350
+ */
351
+ this.thumb = t;
352
+
353
+ t.cacheBetweenDrags = true;
354
+
355
+ if (t._isHoriz && t.xTicks && t.xTicks.length) {
356
+ this.tickPause = Math.round(360 / t.xTicks.length);
357
+ } else if (t.yTicks && t.yTicks.length) {
358
+ this.tickPause = Math.round(360 / t.yTicks.length);
359
+ }
360
+
361
+ this.logger.log("tickPause: " + this.tickPause);
362
+
363
+ // delegate thumb methods
364
+ t.onAvailable = function() {
365
+ return self.setStartSliderState();
366
+ };
367
+ t.onMouseDown = function () {
368
+ self._mouseDown = true;
369
+ self.logger.log('thumb mousedown');
370
+ return self.focus();
371
+ };
372
+ t.startDrag = function() {
373
+ self.logger.log('thumb startDrag');
374
+ self._slideStart();
375
+ };
376
+ t.onDrag = function() {
377
+ self.logger.log('thumb drag');
378
+ self.fireEvents(true);
379
+ };
380
+ t.onMouseUp = function() {
381
+ self.thumbMouseUp();
382
+ };
383
+
384
+ },
385
+
386
+ /**
387
+ * Executed when the slider element is available
388
+ * @method onAvailable
389
+ */
390
+ onAvailable: function() {
391
+ this._bindKeyEvents();
392
+ },
393
+
394
+ /**
395
+ * Sets up the listeners for keydown and key press events.
396
+ *
397
+ * @method _bindKeyEvents
398
+ * @protected
399
+ */
400
+ _bindKeyEvents : function () {
401
+ Event.on(this.id, "keydown", this.handleKeyDown, this, true);
402
+ Event.on(this.id, "keypress", this.handleKeyPress, this, true);
403
+ },
404
+
405
+ /**
406
+ * Executed when a keypress event happens with the control focused.
407
+ * Prevents the default behavior for navigation keys. The actual
408
+ * logic for moving the slider thumb in response to a key event
409
+ * happens in handleKeyDown.
410
+ * @param {Event} e the keypress event
411
+ */
412
+ handleKeyPress: function(e) {
413
+ if (this.enableKeys) {
414
+ var kc = Event.getCharCode(e);
415
+
416
+ switch (kc) {
417
+ case 0x25: // left
418
+ case 0x26: // up
419
+ case 0x27: // right
420
+ case 0x28: // down
421
+ case 0x24: // home
422
+ case 0x23: // end
423
+ Event.preventDefault(e);
424
+ break;
425
+ default:
426
+ }
427
+ }
428
+ },
429
+
430
+ /**
431
+ * Executed when a keydown event happens with the control focused.
432
+ * Updates the slider value and display when the keypress is an
433
+ * arrow key, home, or end as long as enableKeys is set to true.
434
+ * @param {Event} e the keydown event
435
+ */
436
+ handleKeyDown: function(e) {
437
+ if (this.enableKeys) {
438
+ var kc = Event.getCharCode(e),
439
+ t = this.thumb,
440
+ h = this.getXValue(),
441
+ v = this.getYValue(),
442
+ changeValue = true;
443
+
444
+ switch (kc) {
445
+
446
+ // left
447
+ case 0x25: h -= this.keyIncrement; break;
448
+
449
+ // up
450
+ case 0x26: v -= this.keyIncrement; break;
451
+
452
+ // right
453
+ case 0x27: h += this.keyIncrement; break;
454
+
455
+ // down
456
+ case 0x28: v += this.keyIncrement; break;
457
+
458
+ // home
459
+ case 0x24: h = t.leftConstraint;
460
+ v = t.topConstraint;
461
+ break;
462
+
463
+ // end
464
+ case 0x23: h = t.rightConstraint;
465
+ v = t.bottomConstraint;
466
+ break;
467
+
468
+ default: changeValue = false;
469
+ }
470
+
471
+ if (changeValue) {
472
+ if (t._isRegion) {
473
+ this._setRegionValue(Slider.SOURCE_KEY_EVENT, h, v, true);
474
+ } else {
475
+ this._setValue(Slider.SOURCE_KEY_EVENT,
476
+ (t._isHoriz ? h : v), true);
477
+ }
478
+ Event.stopEvent(e);
479
+ }
480
+
481
+ }
482
+ },
483
+
484
+ /**
485
+ * Initialization that sets up the value offsets once the elements are ready
486
+ * @method setStartSliderState
487
+ */
488
+ setStartSliderState: function() {
489
+
490
+ this.logger.log("Fixing state");
491
+
492
+ this.setThumbCenterPoint();
493
+
494
+ /**
495
+ * The basline position of the background element, used
496
+ * to determine if the background has moved since the last
497
+ * operation.
498
+ * @property baselinePos
499
+ * @type [int, int]
500
+ */
501
+ this.baselinePos = getXY(this.getEl());
502
+
503
+ this.thumb.startOffset = this.thumb.getOffsetFromParent(this.baselinePos);
504
+
505
+ if (this.thumb._isRegion) {
506
+ if (this.deferredSetRegionValue) {
507
+ this._setRegionValue.apply(this, this.deferredSetRegionValue);
508
+ this.deferredSetRegionValue = null;
509
+ } else {
510
+ this.setRegionValue(0, 0, true, true, true);
511
+ }
512
+ } else {
513
+ if (this.deferredSetValue) {
514
+ this._setValue.apply(this, this.deferredSetValue);
515
+ this.deferredSetValue = null;
516
+ } else {
517
+ this.setValue(0, true, true, true);
518
+ }
519
+ }
520
+ },
521
+
522
+ /**
523
+ * When the thumb is available, we cache the centerpoint of the element so
524
+ * we can position the element correctly when the background is clicked
525
+ * @method setThumbCenterPoint
526
+ */
527
+ setThumbCenterPoint: function() {
528
+
529
+ var el = this.thumb.getEl();
530
+
531
+ if (el) {
532
+ /**
533
+ * The center of the slider element is stored so we can
534
+ * place it in the correct position when the background is clicked.
535
+ * @property thumbCenterPoint
536
+ * @type {"x": int, "y": int}
537
+ */
538
+ this.thumbCenterPoint = {
539
+ x: parseInt(el.offsetWidth/2, 10),
540
+ y: parseInt(el.offsetHeight/2, 10)
541
+ };
542
+ }
543
+
544
+ },
545
+
546
+ /**
547
+ * Locks the slider, overrides YAHOO.util.DragDrop
548
+ * @method lock
549
+ */
550
+ lock: function() {
551
+ this.logger.log("locking");
552
+ this.thumb.lock();
553
+ this.locked = true;
554
+ },
555
+
556
+ /**
557
+ * Unlocks the slider, overrides YAHOO.util.DragDrop
558
+ * @method unlock
559
+ */
560
+ unlock: function() {
561
+ this.logger.log("unlocking");
562
+ this.thumb.unlock();
563
+ this.locked = false;
564
+ },
565
+
566
+ /**
567
+ * Handles mouseup event on the thumb
568
+ * @method thumbMouseUp
569
+ * @private
570
+ */
571
+ thumbMouseUp: function() {
572
+ this._mouseDown = false;
573
+ this.logger.log("thumb mouseup");
574
+ if (!this.isLocked()) {
575
+ this.endMove();
576
+ }
577
+
578
+ },
579
+
580
+ onMouseUp: function() {
581
+ this._mouseDown = false;
582
+ this.logger.log("background mouseup");
583
+ if (this.backgroundEnabled && !this.isLocked()) {
584
+ this.endMove();
585
+ }
586
+ },
587
+
588
+ /**
589
+ * Returns a reference to this slider's thumb
590
+ * @method getThumb
591
+ * @return {SliderThumb} this slider's thumb
592
+ */
593
+ getThumb: function() {
594
+ return this.thumb;
595
+ },
596
+
597
+ /**
598
+ * Try to focus the element when clicked so we can add
599
+ * accessibility features
600
+ * @method focus
601
+ * @private
602
+ */
603
+ focus: function() {
604
+ this.logger.log("focus");
605
+ this.valueChangeSource = Slider.SOURCE_UI_EVENT;
606
+
607
+ // Focus the background element if possible
608
+ var el = this.getEl();
609
+
610
+ if (el.focus) {
611
+ try {
612
+ el.focus();
613
+ } catch(e) {
614
+ // Prevent permission denied unhandled exception in FF that can
615
+ // happen when setting focus while another element is handling
616
+ // the blur. @TODO this is still writing to the error log
617
+ // (unhandled error) in FF1.5 with strict error checking on.
618
+ }
619
+ }
620
+
621
+ this.verifyOffset();
622
+
623
+ return !this.isLocked();
624
+ },
625
+
626
+ /**
627
+ * Event that fires when the value of the slider has changed
628
+ * @method onChange
629
+ * @param {int} firstOffset the number of pixels the thumb has moved
630
+ * from its start position. Normal horizontal and vertical sliders will only
631
+ * have the firstOffset. Regions will have both, the first is the horizontal
632
+ * offset, the second the vertical.
633
+ * @param {int} secondOffset the y offset for region sliders
634
+ * @deprecated use instance.subscribe("change") instead
635
+ */
636
+ onChange: function (firstOffset, secondOffset) {
637
+ /* override me */
638
+ this.logger.log("onChange: " + firstOffset + ", " + secondOffset);
639
+ },
640
+
641
+ /**
642
+ * Event that fires when the at the beginning of the slider thumb move
643
+ * @method onSlideStart
644
+ * @deprecated use instance.subscribe("slideStart") instead
645
+ */
646
+ onSlideStart: function () {
647
+ /* override me */
648
+ this.logger.log("onSlideStart");
649
+ },
650
+
651
+ /**
652
+ * Event that fires at the end of a slider thumb move
653
+ * @method onSliderEnd
654
+ * @deprecated use instance.subscribe("slideEnd") instead
655
+ */
656
+ onSlideEnd: function () {
657
+ /* override me */
658
+ this.logger.log("onSlideEnd");
659
+ },
660
+
661
+ /**
662
+ * Returns the slider's thumb offset from the start position
663
+ * @method getValue
664
+ * @return {int} the current value
665
+ */
666
+ getValue: function () {
667
+ return this.thumb.getValue();
668
+ },
669
+
670
+ /**
671
+ * Returns the slider's thumb X offset from the start position
672
+ * @method getXValue
673
+ * @return {int} the current horizontal offset
674
+ */
675
+ getXValue: function () {
676
+ return this.thumb.getXValue();
677
+ },
678
+
679
+ /**
680
+ * Returns the slider's thumb Y offset from the start position
681
+ * @method getYValue
682
+ * @return {int} the current vertical offset
683
+ */
684
+ getYValue: function () {
685
+ return this.thumb.getYValue();
686
+ },
687
+
688
+ /**
689
+ * Provides a way to set the value of the slider in code.
690
+ *
691
+ * @method setValue
692
+ * @param {int} newOffset the number of pixels the thumb should be
693
+ * positioned away from the initial start point
694
+ * @param {boolean} skipAnim set to true to disable the animation
695
+ * for this move action (but not others).
696
+ * @param {boolean} force ignore the locked setting and set value anyway
697
+ * @param {boolean} silent when true, do not fire events
698
+ * @return {boolean} true if the move was performed, false if it failed
699
+ */
700
+ setValue: function() {
701
+ var args = _AS.call(arguments);
702
+ args.unshift(Slider.SOURCE_SET_VALUE);
703
+ return this._setValue.apply(this,args);
704
+ },
705
+
706
+ /**
707
+ * Worker function to execute the value set operation. Accepts type of
708
+ * set operation in addition to the usual setValue params.
709
+ *
710
+ * @method _setValue
711
+ * @param source {int} what triggered the set (e.g. Slider.SOURCE_SET_VALUE)
712
+ * @param {int} newOffset the number of pixels the thumb should be
713
+ * positioned away from the initial start point
714
+ * @param {boolean} skipAnim set to true to disable the animation
715
+ * for this move action (but not others).
716
+ * @param {boolean} force ignore the locked setting and set value anyway
717
+ * @param {boolean} silent when true, do not fire events
718
+ * @return {boolean} true if the move was performed, false if it failed
719
+ * @protected
720
+ */
721
+ _setValue: function(source, newOffset, skipAnim, force, silent) {
722
+ var t = this.thumb, newX, newY;
723
+
724
+ if (!t.available) {
725
+ this.logger.log("defer setValue until after onAvailble");
726
+ this.deferredSetValue = arguments;
727
+ return false;
728
+ }
729
+
730
+ if (this.isLocked() && !force) {
731
+ this.logger.log("Can't set the value, the control is locked");
732
+ return false;
733
+ }
734
+
735
+ if ( isNaN(newOffset) ) {
736
+ this.logger.log("setValue, Illegal argument: " + newOffset);
737
+ return false;
738
+ }
739
+
740
+ if (t._isRegion) {
741
+ this.logger.log("Call to setValue for region Slider ignored. Use setRegionValue","warn");
742
+ return false;
743
+ }
744
+
745
+ this.logger.log("setValue " + newOffset);
746
+
747
+ this._silent = silent;
748
+ this.valueChangeSource = source || Slider.SOURCE_SET_VALUE;
749
+
750
+ t.lastOffset = [newOffset, newOffset];
751
+ this.verifyOffset();
752
+
753
+ this._slideStart();
754
+
755
+ if (t._isHoriz) {
756
+ newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
757
+ this.moveThumb(newX, t.initPageY, skipAnim);
758
+ } else {
759
+ newY = t.initPageY + newOffset + this.thumbCenterPoint.y;
760
+ this.moveThumb(t.initPageX, newY, skipAnim);
761
+ }
762
+
763
+ return true;
764
+ },
765
+
766
+ /**
767
+ * Provides a way to set the value of the region slider in code.
768
+ * @method setRegionValue
769
+ * @param {int} newOffset the number of pixels the thumb should be
770
+ * positioned away from the initial start point (x axis for region)
771
+ * @param {int} newOffset2 the number of pixels the thumb should be
772
+ * positioned away from the initial start point (y axis for region)
773
+ * @param {boolean} skipAnim set to true to disable the animation
774
+ * for this move action (but not others).
775
+ * @param {boolean} force ignore the locked setting and set value anyway
776
+ * @param {boolean} silent when true, do not fire events
777
+ * @return {boolean} true if the move was performed, false if it failed
778
+ */
779
+ setRegionValue : function () {
780
+ var args = _AS.call(arguments);
781
+ args.unshift(Slider.SOURCE_SET_VALUE);
782
+ return this._setRegionValue.apply(this,args);
783
+ },
784
+
785
+ /**
786
+ * Worker function to execute the value set operation. Accepts type of
787
+ * set operation in addition to the usual setValue params.
788
+ *
789
+ * @method _setRegionValue
790
+ * @param source {int} what triggered the set (e.g. Slider.SOURCE_SET_VALUE)
791
+ * @param {int} newOffset the number of pixels the thumb should be
792
+ * positioned away from the initial start point (x axis for region)
793
+ * @param {int} newOffset2 the number of pixels the thumb should be
794
+ * positioned away from the initial start point (y axis for region)
795
+ * @param {boolean} skipAnim set to true to disable the animation
796
+ * for this move action (but not others).
797
+ * @param {boolean} force ignore the locked setting and set value anyway
798
+ * @param {boolean} silent when true, do not fire events
799
+ * @return {boolean} true if the move was performed, false if it failed
800
+ * @protected
801
+ */
802
+ _setRegionValue: function(source, newOffset, newOffset2, skipAnim, force, silent) {
803
+ var t = this.thumb, newX, newY;
804
+
805
+ if (!t.available) {
806
+ this.logger.log("defer setRegionValue until after onAvailble");
807
+ this.deferredSetRegionValue = arguments;
808
+ return false;
809
+ }
810
+
811
+ if (this.isLocked() && !force) {
812
+ this.logger.log("Can't set the value, the control is locked");
813
+ return false;
814
+ }
815
+
816
+ if ( isNaN(newOffset) ) {
817
+ this.logger.log("setRegionValue, Illegal argument: " + newOffset);
818
+ return false;
819
+ }
820
+
821
+ if (!t._isRegion) {
822
+ this.logger.log("Call to setRegionValue for non-region Slider ignored. Use setValue","warn");
823
+ return false;
824
+ }
825
+
826
+ this._silent = silent;
827
+
828
+ this.valueChangeSource = source || Slider.SOURCE_SET_VALUE;
829
+
830
+ t.lastOffset = [newOffset, newOffset2];
831
+ this.verifyOffset();
832
+
833
+ this._slideStart();
834
+
835
+ newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
836
+ newY = t.initPageY + newOffset2 + this.thumbCenterPoint.y;
837
+ this.moveThumb(newX, newY, skipAnim);
838
+
839
+ return true;
840
+ },
841
+
842
+ /**
843
+ * Checks the background position element position. If it has moved from the
844
+ * baseline position, the constraints for the thumb are reset
845
+ * @method verifyOffset
846
+ * @return {boolean} True if the offset is the same as the baseline.
847
+ */
848
+ verifyOffset: function() {
849
+
850
+ var xy = getXY(this.getEl()),
851
+ t = this.thumb;
852
+
853
+ if (!this.thumbCenterPoint || !this.thumbCenterPoint.x) {
854
+ this.setThumbCenterPoint();
855
+ }
856
+
857
+ if (xy) {
858
+
859
+ this.logger.log("newPos: " + xy);
860
+
861
+ if (xy[0] != this.baselinePos[0] || xy[1] != this.baselinePos[1]) {
862
+ this.logger.log("background moved, resetting constraints");
863
+
864
+ // Reset background
865
+ this.setInitPosition();
866
+ this.baselinePos = xy;
867
+
868
+ // Reset thumb
869
+ t.initPageX = this.initPageX + t.startOffset[0];
870
+ t.initPageY = this.initPageY + t.startOffset[1];
871
+ t.deltaSetXY = null;
872
+ this.resetThumbConstraints();
873
+
874
+ return false;
875
+ }
876
+ }
877
+
878
+ return true;
879
+ },
880
+
881
+ /**
882
+ * Move the associated slider moved to a timeout to try to get around the
883
+ * mousedown stealing moz does when I move the slider element between the
884
+ * cursor and the background during the mouseup event
885
+ * @method moveThumb
886
+ * @param {int} x the X coordinate of the click
887
+ * @param {int} y the Y coordinate of the click
888
+ * @param {boolean} skipAnim don't animate if the move happend onDrag
889
+ * @param {boolean} midMove set to true if this is not terminating
890
+ * the slider movement
891
+ * @private
892
+ */
893
+ moveThumb: function(x, y, skipAnim, midMove) {
894
+
895
+ var t = this.thumb,
896
+ self = this,
897
+ p,_p,anim;
898
+
899
+ if (!t.available) {
900
+ this.logger.log("thumb is not available yet, aborting move");
901
+ return;
902
+ }
903
+
904
+ this.logger.log("move thumb, x: " + x + ", y: " + y);
905
+
906
+ t.setDelta(this.thumbCenterPoint.x, this.thumbCenterPoint.y);
907
+
908
+ _p = t.getTargetCoord(x, y);
909
+ p = [Math.round(_p.x), Math.round(_p.y)];
910
+
911
+ if (this.animate && t._graduated && !skipAnim) {
912
+ this.logger.log("graduated");
913
+ this.lock();
914
+
915
+ // cache the current thumb pos
916
+ this.curCoord = getXY(this.thumb.getEl());
917
+ this.curCoord = [Math.round(this.curCoord[0]), Math.round(this.curCoord[1])];
918
+
919
+ setTimeout( function() { self.moveOneTick(p); }, this.tickPause );
920
+
921
+ } else if (this.animate && Slider.ANIM_AVAIL && !skipAnim) {
922
+ this.logger.log("animating to " + p);
923
+
924
+ this.lock();
925
+
926
+ anim = new YAHOO.util.Motion(
927
+ t.id, { points: { to: p } },
928
+ this.animationDuration,
929
+ YAHOO.util.Easing.easeOut );
930
+
931
+ anim.onComplete.subscribe( function() {
932
+ self.logger.log("Animation completed _mouseDown:" + self._mouseDown);
933
+ self.unlock();
934
+ if (!self._mouseDown) {
935
+ self.endMove();
936
+ }
937
+ });
938
+ anim.animate();
939
+
940
+ } else {
941
+ t.setDragElPos(x, y);
942
+ if (!midMove && !this._mouseDown) {
943
+ this.endMove();
944
+ }
945
+ }
946
+ },
947
+
948
+ _slideStart: function() {
949
+ if (!this._sliding) {
950
+ if (!this._silent) {
951
+ this.onSlideStart();
952
+ this.fireEvent("slideStart");
953
+ }
954
+ this._sliding = true;
955
+ this.moveComplete = false; // for backward compatibility. Deprecated
956
+ }
957
+ },
958
+
959
+ _slideEnd: function() {
960
+ if (this._sliding) {
961
+ // Reset state before firing slideEnd
962
+ var silent = this._silent;
963
+ this._sliding = false;
964
+ this.moveComplete = true; // for backward compatibility. Deprecated
965
+ this._silent = false;
966
+ if (!silent) {
967
+ this.onSlideEnd();
968
+ this.fireEvent("slideEnd");
969
+ }
970
+ }
971
+ },
972
+
973
+ /**
974
+ * Move the slider one tick mark towards its final coordinate. Used
975
+ * for the animation when tick marks are defined
976
+ * @method moveOneTick
977
+ * @param {int[]} the destination coordinate
978
+ * @private
979
+ */
980
+ moveOneTick: function(finalCoord) {
981
+
982
+ var t = this.thumb,
983
+ self = this,
984
+ nextCoord = null,
985
+ tmpX, tmpY;
986
+
987
+ if (t._isRegion) {
988
+ nextCoord = this._getNextX(this.curCoord, finalCoord);
989
+ tmpX = (nextCoord !== null) ? nextCoord[0] : this.curCoord[0];
990
+ nextCoord = this._getNextY(this.curCoord, finalCoord);
991
+ tmpY = (nextCoord !== null) ? nextCoord[1] : this.curCoord[1];
992
+
993
+ nextCoord = tmpX !== this.curCoord[0] || tmpY !== this.curCoord[1] ?
994
+ [ tmpX, tmpY ] : null;
995
+ } else if (t._isHoriz) {
996
+ nextCoord = this._getNextX(this.curCoord, finalCoord);
997
+ } else {
998
+ nextCoord = this._getNextY(this.curCoord, finalCoord);
999
+ }
1000
+
1001
+ this.logger.log("moveOneTick: " +
1002
+ " finalCoord: " + finalCoord +
1003
+ " this.curCoord: " + this.curCoord +
1004
+ " nextCoord: " + nextCoord);
1005
+
1006
+ if (nextCoord) {
1007
+
1008
+ // cache the position
1009
+ this.curCoord = nextCoord;
1010
+
1011
+ // move to the next coord
1012
+ this.thumb.alignElWithMouse(t.getEl(), nextCoord[0] + this.thumbCenterPoint.x, nextCoord[1] + this.thumbCenterPoint.y);
1013
+
1014
+ // check if we are in the final position, if not make a recursive call
1015
+ if (!(nextCoord[0] == finalCoord[0] && nextCoord[1] == finalCoord[1])) {
1016
+ setTimeout(function() { self.moveOneTick(finalCoord); },
1017
+ this.tickPause);
1018
+ } else {
1019
+ this.unlock();
1020
+ if (!this._mouseDown) {
1021
+ this.endMove();
1022
+ }
1023
+ }
1024
+ } else {
1025
+ this.unlock();
1026
+ if (!this._mouseDown) {
1027
+ this.endMove();
1028
+ }
1029
+ }
1030
+ },
1031
+
1032
+ /**
1033
+ * Returns the next X tick value based on the current coord and the target coord.
1034
+ * @method _getNextX
1035
+ * @private
1036
+ */
1037
+ _getNextX: function(curCoord, finalCoord) {
1038
+ this.logger.log("getNextX: " + curCoord + ", " + finalCoord);
1039
+ var t = this.thumb,
1040
+ thresh,
1041
+ tmp = [],
1042
+ nextCoord = null;
1043
+
1044
+ if (curCoord[0] > finalCoord[0]) {
1045
+ thresh = t.tickSize - this.thumbCenterPoint.x;
1046
+ tmp = t.getTargetCoord( curCoord[0] - thresh, curCoord[1] );
1047
+ nextCoord = [tmp.x, tmp.y];
1048
+ } else if (curCoord[0] < finalCoord[0]) {
1049
+ thresh = t.tickSize + this.thumbCenterPoint.x;
1050
+ tmp = t.getTargetCoord( curCoord[0] + thresh, curCoord[1] );
1051
+ nextCoord = [tmp.x, tmp.y];
1052
+ } else {
1053
+ // equal, do nothing
1054
+ }
1055
+
1056
+ return nextCoord;
1057
+ },
1058
+
1059
+ /**
1060
+ * Returns the next Y tick value based on the current coord and the target coord.
1061
+ * @method _getNextY
1062
+ * @private
1063
+ */
1064
+ _getNextY: function(curCoord, finalCoord) {
1065
+ var t = this.thumb,
1066
+ thresh,
1067
+ tmp = [],
1068
+ nextCoord = null;
1069
+
1070
+ if (curCoord[1] > finalCoord[1]) {
1071
+ thresh = t.tickSize - this.thumbCenterPoint.y;
1072
+ tmp = t.getTargetCoord( curCoord[0], curCoord[1] - thresh );
1073
+ nextCoord = [tmp.x, tmp.y];
1074
+ } else if (curCoord[1] < finalCoord[1]) {
1075
+ thresh = t.tickSize + this.thumbCenterPoint.y;
1076
+ tmp = t.getTargetCoord( curCoord[0], curCoord[1] + thresh );
1077
+ nextCoord = [tmp.x, tmp.y];
1078
+ } else {
1079
+ // equal, do nothing
1080
+ }
1081
+
1082
+ return nextCoord;
1083
+ },
1084
+
1085
+ /**
1086
+ * Resets the constraints before moving the thumb.
1087
+ * @method b4MouseDown
1088
+ * @private
1089
+ */
1090
+ b4MouseDown: function(e) {
1091
+ if (!this.backgroundEnabled) {
1092
+ return false;
1093
+ }
1094
+
1095
+ this.thumb.autoOffset();
1096
+ this.baselinePos = [];
1097
+ },
1098
+
1099
+ /**
1100
+ * Handles the mousedown event for the slider background
1101
+ * @method onMouseDown
1102
+ * @private
1103
+ */
1104
+ onMouseDown: function(e) {
1105
+ if (!this.backgroundEnabled || this.isLocked()) {
1106
+ return false;
1107
+ }
1108
+
1109
+ this._mouseDown = true;
1110
+
1111
+ var x = Event.getPageX(e),
1112
+ y = Event.getPageY(e);
1113
+
1114
+ this.logger.log("bg mousedown: " + x + "," + y);
1115
+
1116
+ this.focus();
1117
+ this._slideStart();
1118
+ this.moveThumb(x, y);
1119
+ },
1120
+
1121
+ /**
1122
+ * Handles the onDrag event for the slider background
1123
+ * @method onDrag
1124
+ * @private
1125
+ */
1126
+ onDrag: function(e) {
1127
+ this.logger.log("background drag");
1128
+ if (this.backgroundEnabled && !this.isLocked()) {
1129
+ var x = Event.getPageX(e),
1130
+ y = Event.getPageY(e);
1131
+ this.moveThumb(x, y, true, true);
1132
+ this.fireEvents();
1133
+ }
1134
+ },
1135
+
1136
+ /**
1137
+ * Fired when the slider movement ends
1138
+ * @method endMove
1139
+ * @private
1140
+ */
1141
+ endMove: function () {
1142
+ this.logger.log("endMove");
1143
+ this.unlock();
1144
+ this.fireEvents();
1145
+ this._slideEnd();
1146
+ },
1147
+
1148
+ /**
1149
+ * Resets the X and Y contraints for the thumb. Used in lieu of the thumb
1150
+ * instance's inherited resetConstraints because some logic was not
1151
+ * applicable.
1152
+ * @method resetThumbConstraints
1153
+ * @protected
1154
+ */
1155
+ resetThumbConstraints: function () {
1156
+ var t = this.thumb;
1157
+
1158
+ t.setXConstraint(t.leftConstraint, t.rightConstraint, t.xTickSize);
1159
+ t.setYConstraint(t.topConstraint, t.bottomConstraint, t.xTickSize);
1160
+ },
1161
+
1162
+ /**
1163
+ * Fires the change event if the value has been changed. Ignored if we are in
1164
+ * the middle of an animation as the event will fire when the animation is
1165
+ * complete
1166
+ * @method fireEvents
1167
+ * @param {boolean} thumbEvent set to true if this event is fired from an event
1168
+ * that occurred on the thumb. If it is, the state of the
1169
+ * thumb dd object should be correct. Otherwise, the event
1170
+ * originated on the background, so the thumb state needs to
1171
+ * be refreshed before proceeding.
1172
+ * @private
1173
+ */
1174
+ fireEvents: function (thumbEvent) {
1175
+
1176
+ var t = this.thumb, newX, newY, newVal;
1177
+
1178
+ if (!thumbEvent) {
1179
+ t.cachePosition();
1180
+ }
1181
+
1182
+ if (! this.isLocked()) {
1183
+ if (t._isRegion) {
1184
+ newX = t.getXValue();
1185
+ newY = t.getYValue();
1186
+
1187
+ if (newX != this.previousX || newY != this.previousY) {
1188
+ if (!this._silent) {
1189
+ this.onChange(newX, newY);
1190
+ this.fireEvent("change", { x: newX, y: newY });
1191
+ }
1192
+ }
1193
+
1194
+ this.previousX = newX;
1195
+ this.previousY = newY;
1196
+
1197
+ } else {
1198
+ newVal = t.getValue();
1199
+ if (newVal != this.previousVal) {
1200
+ this.logger.log("Firing onchange: " + newVal);
1201
+ if (!this._silent) {
1202
+ this.onChange( newVal );
1203
+ this.fireEvent("change", newVal);
1204
+ }
1205
+ }
1206
+ this.previousVal = newVal;
1207
+ }
1208
+
1209
+ }
1210
+ },
1211
+
1212
+ /**
1213
+ * Slider toString
1214
+ * @method toString
1215
+ * @return {string} string representation of the instance
1216
+ */
1217
+ toString: function () {
1218
+ return ("Slider (" + this.type +") " + this.id);
1219
+ }
1220
+
1221
+ });
1222
+
1223
+ YAHOO.lang.augmentProto(Slider, YAHOO.util.EventProvider);
1224
+
1225
+ YAHOO.widget.Slider = Slider;
1226
+ })();
1227
+ /**
1228
+ * A drag and drop implementation to be used as the thumb of a slider.
1229
+ * @class SliderThumb
1230
+ * @extends YAHOO.util.DD
1231
+ * @constructor
1232
+ * @param {String} id the id of the slider html element
1233
+ * @param {String} sGroup the group of related DragDrop items
1234
+ * @param {int} iLeft the number of pixels the element can move left
1235
+ * @param {int} iRight the number of pixels the element can move right
1236
+ * @param {int} iUp the number of pixels the element can move up
1237
+ * @param {int} iDown the number of pixels the element can move down
1238
+ * @param {int} iTickSize optional parameter for specifying that the element
1239
+ * should move a certain number pixels at a time.
1240
+ */
1241
+ YAHOO.widget.SliderThumb = function(id, sGroup, iLeft, iRight, iUp, iDown, iTickSize) {
1242
+
1243
+ if (id) {
1244
+ YAHOO.widget.SliderThumb.superclass.constructor.call(this, id, sGroup);
1245
+
1246
+ /**
1247
+ * The id of the thumbs parent HTML element (the slider background
1248
+ * element).
1249
+ * @property parentElId
1250
+ * @type string
1251
+ */
1252
+ this.parentElId = sGroup;
1253
+ }
1254
+
1255
+
1256
+ this.logger = new YAHOO.widget.LogWriter(this.toString());
1257
+
1258
+ /**
1259
+ * Overrides the isTarget property in YAHOO.util.DragDrop
1260
+ * @property isTarget
1261
+ * @private
1262
+ */
1263
+ this.isTarget = false;
1264
+
1265
+ /**
1266
+ * The tick size for this slider
1267
+ * @property tickSize
1268
+ * @type int
1269
+ * @private
1270
+ */
1271
+ this.tickSize = iTickSize;
1272
+
1273
+ /**
1274
+ * Informs the drag and drop util that the offsets should remain when
1275
+ * resetting the constraints. This preserves the slider value when
1276
+ * the constraints are reset
1277
+ * @property maintainOffset
1278
+ * @type boolean
1279
+ * @private
1280
+ */
1281
+ this.maintainOffset = true;
1282
+
1283
+ this.initSlider(iLeft, iRight, iUp, iDown, iTickSize);
1284
+
1285
+ /**
1286
+ * Turns off the autoscroll feature in drag and drop
1287
+ * @property scroll
1288
+ * @private
1289
+ */
1290
+ this.scroll = false;
1291
+
1292
+ };
1293
+
1294
+ YAHOO.extend(YAHOO.widget.SliderThumb, YAHOO.util.DD, {
1295
+
1296
+ /**
1297
+ * The (X and Y) difference between the thumb location and its parent
1298
+ * (the slider background) when the control is instantiated.
1299
+ * @property startOffset
1300
+ * @type [int, int]
1301
+ */
1302
+ startOffset: null,
1303
+
1304
+ /**
1305
+ * Override the default setting of dragOnly to true.
1306
+ * @property dragOnly
1307
+ * @type boolean
1308
+ * @default true
1309
+ */
1310
+ dragOnly : true,
1311
+
1312
+ /**
1313
+ * Flag used to figure out if this is a horizontal or vertical slider
1314
+ * @property _isHoriz
1315
+ * @type boolean
1316
+ * @private
1317
+ */
1318
+ _isHoriz: false,
1319
+
1320
+ /**
1321
+ * Cache the last value so we can check for change
1322
+ * @property _prevVal
1323
+ * @type int
1324
+ * @private
1325
+ */
1326
+ _prevVal: 0,
1327
+
1328
+ /**
1329
+ * The slider is _graduated if there is a tick interval defined
1330
+ * @property _graduated
1331
+ * @type boolean
1332
+ * @private
1333
+ */
1334
+ _graduated: false,
1335
+
1336
+
1337
+ /**
1338
+ * Returns the difference between the location of the thumb and its parent.
1339
+ * @method getOffsetFromParent
1340
+ * @param {[int, int]} parentPos Optionally accepts the position of the parent
1341
+ * @type [int, int]
1342
+ */
1343
+ getOffsetFromParent0: function(parentPos) {
1344
+ var myPos = YAHOO.util.Dom.getXY(this.getEl()),
1345
+ ppos = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
1346
+
1347
+ return [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
1348
+ },
1349
+
1350
+ getOffsetFromParent: function(parentPos) {
1351
+
1352
+ var el = this.getEl(), newOffset,
1353
+ myPos,ppos,l,t,deltaX,deltaY,newLeft,newTop;
1354
+
1355
+ if (!this.deltaOffset) {
1356
+
1357
+ myPos = YAHOO.util.Dom.getXY(el);
1358
+ ppos = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
1359
+
1360
+ newOffset = [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
1361
+
1362
+ l = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
1363
+ t = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
1364
+
1365
+ deltaX = l - newOffset[0];
1366
+ deltaY = t - newOffset[1];
1367
+
1368
+ if (isNaN(deltaX) || isNaN(deltaY)) {
1369
+ this.logger.log("element does not have a position style def yet");
1370
+ } else {
1371
+ this.deltaOffset = [deltaX, deltaY];
1372
+ }
1373
+
1374
+ } else {
1375
+ newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
1376
+ newTop = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
1377
+
1378
+ newOffset = [newLeft + this.deltaOffset[0], newTop + this.deltaOffset[1]];
1379
+ }
1380
+
1381
+ return newOffset;
1382
+ },
1383
+
1384
+ /**
1385
+ * Set up the slider, must be called in the constructor of all subclasses
1386
+ * @method initSlider
1387
+ * @param {int} iLeft the number of pixels the element can move left
1388
+ * @param {int} iRight the number of pixels the element can move right
1389
+ * @param {int} iUp the number of pixels the element can move up
1390
+ * @param {int} iDown the number of pixels the element can move down
1391
+ * @param {int} iTickSize the width of the tick interval.
1392
+ */
1393
+ initSlider: function (iLeft, iRight, iUp, iDown, iTickSize) {
1394
+ this.initLeft = iLeft;
1395
+ this.initRight = iRight;
1396
+ this.initUp = iUp;
1397
+ this.initDown = iDown;
1398
+
1399
+ this.setXConstraint(iLeft, iRight, iTickSize);
1400
+ this.setYConstraint(iUp, iDown, iTickSize);
1401
+
1402
+ if (iTickSize && iTickSize > 1) {
1403
+ this._graduated = true;
1404
+ }
1405
+
1406
+ this._isHoriz = (iLeft || iRight);
1407
+ this._isVert = (iUp || iDown);
1408
+ this._isRegion = (this._isHoriz && this._isVert);
1409
+
1410
+ },
1411
+
1412
+ /**
1413
+ * Clear's the slider's ticks
1414
+ * @method clearTicks
1415
+ */
1416
+ clearTicks: function () {
1417
+ YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);
1418
+ this.tickSize = 0;
1419
+ this._graduated = false;
1420
+ },
1421
+
1422
+
1423
+ /**
1424
+ * Gets the current offset from the element's start position in
1425
+ * pixels.
1426
+ * @method getValue
1427
+ * @return {int} the number of pixels (positive or negative) the
1428
+ * slider has moved from the start position.
1429
+ */
1430
+ getValue: function () {
1431
+ return (this._isHoriz) ? this.getXValue() : this.getYValue();
1432
+ },
1433
+
1434
+ /**
1435
+ * Gets the current X offset from the element's start position in
1436
+ * pixels.
1437
+ * @method getXValue
1438
+ * @return {int} the number of pixels (positive or negative) the
1439
+ * slider has moved horizontally from the start position.
1440
+ */
1441
+ getXValue: function () {
1442
+ if (!this.available) {
1443
+ return 0;
1444
+ }
1445
+ var newOffset = this.getOffsetFromParent();
1446
+ if (YAHOO.lang.isNumber(newOffset[0])) {
1447
+ this.lastOffset = newOffset;
1448
+ return (newOffset[0] - this.startOffset[0]);
1449
+ } else {
1450
+ this.logger.log("can't get offset, using old value: " +
1451
+ this.lastOffset[0]);
1452
+ return (this.lastOffset[0] - this.startOffset[0]);
1453
+ }
1454
+ },
1455
+
1456
+ /**
1457
+ * Gets the current Y offset from the element's start position in
1458
+ * pixels.
1459
+ * @method getYValue
1460
+ * @return {int} the number of pixels (positive or negative) the
1461
+ * slider has moved vertically from the start position.
1462
+ */
1463
+ getYValue: function () {
1464
+ if (!this.available) {
1465
+ return 0;
1466
+ }
1467
+ var newOffset = this.getOffsetFromParent();
1468
+ if (YAHOO.lang.isNumber(newOffset[1])) {
1469
+ this.lastOffset = newOffset;
1470
+ return (newOffset[1] - this.startOffset[1]);
1471
+ } else {
1472
+ this.logger.log("can't get offset, using old value: " +
1473
+ this.lastOffset[1]);
1474
+ return (this.lastOffset[1] - this.startOffset[1]);
1475
+ }
1476
+ },
1477
+
1478
+ /**
1479
+ * Thumb toString
1480
+ * @method toString
1481
+ * @return {string} string representation of the instance
1482
+ */
1483
+ toString: function () {
1484
+ return "SliderThumb " + this.id;
1485
+ },
1486
+
1487
+ /**
1488
+ * The onchange event for the handle/thumb is delegated to the YAHOO.widget.Slider
1489
+ * instance it belongs to.
1490
+ * @method onChange
1491
+ * @private
1492
+ */
1493
+ onChange: function (x, y) {
1494
+ }
1495
+
1496
+ });
1497
+ /**
1498
+ * A slider with two thumbs, one that represents the min value and
1499
+ * the other the max. Actually a composition of two sliders, both with
1500
+ * the same background. The constraints for each slider are adjusted
1501
+ * dynamically so that the min value of the max slider is equal or greater
1502
+ * to the current value of the min slider, and the max value of the min
1503
+ * slider is the current value of the max slider.
1504
+ * Constructor assumes both thumbs are positioned absolutely at the 0 mark on
1505
+ * the background.
1506
+ *
1507
+ * @namespace YAHOO.widget
1508
+ * @class DualSlider
1509
+ * @uses YAHOO.util.EventProvider
1510
+ * @constructor
1511
+ * @param {Slider} minSlider The Slider instance used for the min value thumb
1512
+ * @param {Slider} maxSlider The Slider instance used for the max value thumb
1513
+ * @param {int} range The number of pixels the thumbs may move within
1514
+ * @param {Array} initVals (optional) [min,max] Initial thumb placement
1515
+ */
1516
+ (function () {
1517
+
1518
+ var Event = YAHOO.util.Event,
1519
+ YW = YAHOO.widget;
1520
+
1521
+ function DualSlider(minSlider, maxSlider, range, initVals) {
1522
+
1523
+ var self = this,
1524
+ ready = { min : false, max : false },
1525
+ minThumbOnMouseDown, maxThumbOnMouseDown;
1526
+
1527
+ /**
1528
+ * A slider instance that keeps track of the lower value of the range.
1529
+ * <strong>read only</strong>
1530
+ * @property minSlider
1531
+ * @type Slider
1532
+ */
1533
+ this.minSlider = minSlider;
1534
+
1535
+ /**
1536
+ * A slider instance that keeps track of the upper value of the range.
1537
+ * <strong>read only</strong>
1538
+ * @property maxSlider
1539
+ * @type Slider
1540
+ */
1541
+ this.maxSlider = maxSlider;
1542
+
1543
+ /**
1544
+ * The currently active slider (min or max). <strong>read only</strong>
1545
+ * @property activeSlider
1546
+ * @type Slider
1547
+ */
1548
+ this.activeSlider = minSlider;
1549
+
1550
+ /**
1551
+ * Is the DualSlider oriented horizontally or vertically?
1552
+ * <strong>read only</strong>
1553
+ * @property isHoriz
1554
+ * @type boolean
1555
+ */
1556
+ this.isHoriz = minSlider.thumb._isHoriz;
1557
+
1558
+ //FIXME: this is horrible
1559
+ minThumbOnMouseDown = this.minSlider.thumb.onMouseDown;
1560
+ maxThumbOnMouseDown = this.maxSlider.thumb.onMouseDown;
1561
+ this.minSlider.thumb.onMouseDown = function() {
1562
+ self.activeSlider = self.minSlider;
1563
+ minThumbOnMouseDown.apply(this,arguments);
1564
+ };
1565
+ this.maxSlider.thumb.onMouseDown = function () {
1566
+ self.activeSlider = self.maxSlider;
1567
+ maxThumbOnMouseDown.apply(this,arguments);
1568
+ };
1569
+
1570
+ this.minSlider.thumb.onAvailable = function () {
1571
+ minSlider.setStartSliderState();
1572
+ ready.min = true;
1573
+ if (ready.max) {
1574
+ self.fireEvent('ready',self);
1575
+ }
1576
+ };
1577
+ this.maxSlider.thumb.onAvailable = function () {
1578
+ maxSlider.setStartSliderState();
1579
+ ready.max = true;
1580
+ if (ready.min) {
1581
+ self.fireEvent('ready',self);
1582
+ }
1583
+ };
1584
+
1585
+ // dispatch mousedowns to the active slider
1586
+ minSlider.onMouseDown =
1587
+ maxSlider.onMouseDown = function(e) {
1588
+ return this.backgroundEnabled && self._handleMouseDown(e);
1589
+ };
1590
+
1591
+ // Fix the drag behavior so that only the active slider
1592
+ // follows the drag
1593
+ minSlider.onDrag =
1594
+ maxSlider.onDrag = function(e) {
1595
+ self._handleDrag(e);
1596
+ };
1597
+
1598
+ // Likely only the minSlider's onMouseUp will be executed, but both are
1599
+ // overridden just to be safe
1600
+ minSlider.onMouseUp =
1601
+ maxSlider.onMouseUp = function (e) {
1602
+ self._handleMouseUp(e);
1603
+ };
1604
+
1605
+ // Replace the _bindKeyEvents for the minSlider and remove that for the
1606
+ // maxSlider since they share the same bg element.
1607
+ minSlider._bindKeyEvents = function () {
1608
+ self._bindKeyEvents(this);
1609
+ };
1610
+ maxSlider._bindKeyEvents = function () {};
1611
+
1612
+ // The core events for each slider are handled so we can expose a single
1613
+ // event for when the event happens on either slider
1614
+ minSlider.subscribe("change", this._handleMinChange, minSlider, this);
1615
+ minSlider.subscribe("slideStart", this._handleSlideStart, minSlider, this);
1616
+ minSlider.subscribe("slideEnd", this._handleSlideEnd, minSlider, this);
1617
+
1618
+ maxSlider.subscribe("change", this._handleMaxChange, maxSlider, this);
1619
+ maxSlider.subscribe("slideStart", this._handleSlideStart, maxSlider, this);
1620
+ maxSlider.subscribe("slideEnd", this._handleSlideEnd, maxSlider, this);
1621
+
1622
+ /**
1623
+ * Event that fires when the slider is finished setting up
1624
+ * @event ready
1625
+ * @param {DualSlider} dualslider the DualSlider instance
1626
+ */
1627
+ this.createEvent("ready", this);
1628
+
1629
+ /**
1630
+ * Event that fires when either the min or max value changes
1631
+ * @event change
1632
+ * @param {DualSlider} dualslider the DualSlider instance
1633
+ */
1634
+ this.createEvent("change", this);
1635
+
1636
+ /**
1637
+ * Event that fires when one of the thumbs begins to move
1638
+ * @event slideStart
1639
+ * @param {Slider} activeSlider the moving slider
1640
+ */
1641
+ this.createEvent("slideStart", this);
1642
+
1643
+ /**
1644
+ * Event that fires when one of the thumbs finishes moving
1645
+ * @event slideEnd
1646
+ * @param {Slider} activeSlider the moving slider
1647
+ */
1648
+ this.createEvent("slideEnd", this);
1649
+
1650
+ // Validate initial values
1651
+ initVals = YAHOO.lang.isArray(initVals) ? initVals : [0,range];
1652
+ initVals[0] = Math.min(Math.max(parseInt(initVals[0],10)|0,0),range);
1653
+ initVals[1] = Math.max(Math.min(parseInt(initVals[1],10)|0,range),0);
1654
+ // Swap initVals if min > max
1655
+ if (initVals[0] > initVals[1]) {
1656
+ initVals.splice(0,2,initVals[1],initVals[0]);
1657
+ }
1658
+ this.minVal = initVals[0];
1659
+ this.maxVal = initVals[1];
1660
+
1661
+ // Set values so initial assignment when the slider thumbs are ready will
1662
+ // use these values
1663
+ this.minSlider.setValue(this.minVal,true,true,true);
1664
+ this.maxSlider.setValue(this.maxVal,true,true,true);
1665
+
1666
+ YAHOO.log("Setting initial values " + this.minVal + ", " + this.maxVal,"info","DualSlider");
1667
+ }
1668
+
1669
+ DualSlider.prototype = {
1670
+
1671
+ /**
1672
+ * The current value of the min thumb. <strong>read only</strong>.
1673
+ * @property minVal
1674
+ * @type int
1675
+ */
1676
+ minVal : -1,
1677
+
1678
+ /**
1679
+ * The current value of the max thumb. <strong>read only</strong>.
1680
+ * @property maxVal
1681
+ * @type int
1682
+ */
1683
+ maxVal : -1,
1684
+
1685
+ /**
1686
+ * Pixel distance to maintain between thumbs.
1687
+ * @property minRange
1688
+ * @type int
1689
+ * @default 0
1690
+ */
1691
+ minRange : 0,
1692
+
1693
+ /**
1694
+ * Executed when one of the sliders fires the slideStart event
1695
+ * @method _handleSlideStart
1696
+ * @private
1697
+ */
1698
+ _handleSlideStart: function(data, slider) {
1699
+ this.fireEvent("slideStart", slider);
1700
+ },
1701
+
1702
+ /**
1703
+ * Executed when one of the sliders fires the slideEnd event
1704
+ * @method _handleSlideEnd
1705
+ * @private
1706
+ */
1707
+ _handleSlideEnd: function(data, slider) {
1708
+ this.fireEvent("slideEnd", slider);
1709
+ },
1710
+
1711
+ /**
1712
+ * Overrides the onDrag method for both sliders
1713
+ * @method _handleDrag
1714
+ * @private
1715
+ */
1716
+ _handleDrag: function(e) {
1717
+ YW.Slider.prototype.onDrag.call(this.activeSlider, e);
1718
+ },
1719
+
1720
+ /**
1721
+ * Executed when the min slider fires the change event
1722
+ * @method _handleMinChange
1723
+ * @private
1724
+ */
1725
+ _handleMinChange: function() {
1726
+ this.activeSlider = this.minSlider;
1727
+ this.updateValue();
1728
+ },
1729
+
1730
+ /**
1731
+ * Executed when the max slider fires the change event
1732
+ * @method _handleMaxChange
1733
+ * @private
1734
+ */
1735
+ _handleMaxChange: function() {
1736
+ this.activeSlider = this.maxSlider;
1737
+ this.updateValue();
1738
+ },
1739
+
1740
+ /**
1741
+ * Set up the listeners for the keydown and keypress events.
1742
+ *
1743
+ * @method _bindKeyEvents
1744
+ * @protected
1745
+ */
1746
+ _bindKeyEvents : function (slider) {
1747
+ Event.on(slider.id,'keydown', this._handleKeyDown, this,true);
1748
+ Event.on(slider.id,'keypress',this._handleKeyPress,this,true);
1749
+ },
1750
+
1751
+ /**
1752
+ * Delegate event handling to the active Slider. See Slider.handleKeyDown.
1753
+ *
1754
+ * @method _handleKeyDown
1755
+ * @param e {Event} the mousedown DOM event
1756
+ * @protected
1757
+ */
1758
+ _handleKeyDown : function (e) {
1759
+ this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);
1760
+ },
1761
+
1762
+ /**
1763
+ * Delegate event handling to the active Slider. See Slider.handleKeyPress.
1764
+ *
1765
+ * @method _handleKeyPress
1766
+ * @param e {Event} the mousedown DOM event
1767
+ * @protected
1768
+ */
1769
+ _handleKeyPress : function (e) {
1770
+ this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);
1771
+ },
1772
+
1773
+ /**
1774
+ * Sets the min and max thumbs to new values.
1775
+ * @method setValues
1776
+ * @param min {int} Pixel offset to assign to the min thumb
1777
+ * @param max {int} Pixel offset to assign to the max thumb
1778
+ * @param skipAnim {boolean} (optional) Set to true to skip thumb animation.
1779
+ * Default false
1780
+ * @param force {boolean} (optional) ignore the locked setting and set
1781
+ * value anyway. Default false
1782
+ * @param silent {boolean} (optional) Set to true to skip firing change
1783
+ * events. Default false
1784
+ */
1785
+ setValues : function (min, max, skipAnim, force, silent) {
1786
+ var mins = this.minSlider,
1787
+ maxs = this.maxSlider,
1788
+ mint = mins.thumb,
1789
+ maxt = maxs.thumb,
1790
+ self = this,
1791
+ done = { min : false, max : false };
1792
+
1793
+ // Clear constraints to prevent animated thumbs from prematurely
1794
+ // stopping when hitting a constraint that's moving with the other
1795
+ // thumb.
1796
+ if (mint._isHoriz) {
1797
+ mint.setXConstraint(mint.leftConstraint,maxt.rightConstraint,mint.tickSize);
1798
+ maxt.setXConstraint(mint.leftConstraint,maxt.rightConstraint,maxt.tickSize);
1799
+ } else {
1800
+ mint.setYConstraint(mint.topConstraint,maxt.bottomConstraint,mint.tickSize);
1801
+ maxt.setYConstraint(mint.topConstraint,maxt.bottomConstraint,maxt.tickSize);
1802
+ }
1803
+
1804
+ // Set up one-time slideEnd callbacks to call updateValue when both
1805
+ // thumbs have been set
1806
+ this._oneTimeCallback(mins,'slideEnd',function () {
1807
+ done.min = true;
1808
+ if (done.max) {
1809
+ self.updateValue(silent);
1810
+ // Clean the slider's slideEnd events on a timeout since this
1811
+ // will be executed from inside the event's fire
1812
+ setTimeout(function () {
1813
+ self._cleanEvent(mins,'slideEnd');
1814
+ self._cleanEvent(maxs,'slideEnd');
1815
+ },0);
1816
+ }
1817
+ });
1818
+
1819
+ this._oneTimeCallback(maxs,'slideEnd',function () {
1820
+ done.max = true;
1821
+ if (done.min) {
1822
+ self.updateValue(silent);
1823
+ // Clean both sliders' slideEnd events on a timeout since this
1824
+ // will be executed from inside one of the event's fire
1825
+ setTimeout(function () {
1826
+ self._cleanEvent(mins,'slideEnd');
1827
+ self._cleanEvent(maxs,'slideEnd');
1828
+ },0);
1829
+ }
1830
+ });
1831
+
1832
+ // Must emit Slider slideEnd event to propagate to updateValue
1833
+ mins.setValue(min,skipAnim,force,false);
1834
+ maxs.setValue(max,skipAnim,force,false);
1835
+ },
1836
+
1837
+ /**
1838
+ * Set the min thumb position to a new value.
1839
+ * @method setMinValue
1840
+ * @param min {int} Pixel offset for min thumb
1841
+ * @param skipAnim {boolean} (optional) Set to true to skip thumb animation.
1842
+ * Default false
1843
+ * @param force {boolean} (optional) ignore the locked setting and set
1844
+ * value anyway. Default false
1845
+ * @param silent {boolean} (optional) Set to true to skip firing change
1846
+ * events. Default false
1847
+ */
1848
+ setMinValue : function (min, skipAnim, force, silent) {
1849
+ var mins = this.minSlider,
1850
+ self = this;
1851
+
1852
+ this.activeSlider = mins;
1853
+
1854
+ // Use a one-time event callback to delay the updateValue call
1855
+ // until after the slide operation is done
1856
+ self = this;
1857
+ this._oneTimeCallback(mins,'slideEnd',function () {
1858
+ self.updateValue(silent);
1859
+ // Clean the slideEnd event on a timeout since this
1860
+ // will be executed from inside the event's fire
1861
+ setTimeout(function () { self._cleanEvent(mins,'slideEnd'); }, 0);
1862
+ });
1863
+
1864
+ mins.setValue(min, skipAnim, force);
1865
+ },
1866
+
1867
+ /**
1868
+ * Set the max thumb position to a new value.
1869
+ * @method setMaxValue
1870
+ * @param max {int} Pixel offset for max thumb
1871
+ * @param skipAnim {boolean} (optional) Set to true to skip thumb animation.
1872
+ * Default false
1873
+ * @param force {boolean} (optional) ignore the locked setting and set
1874
+ * value anyway. Default false
1875
+ * @param silent {boolean} (optional) Set to true to skip firing change
1876
+ * events. Default false
1877
+ */
1878
+ setMaxValue : function (max, skipAnim, force, silent) {
1879
+ var maxs = this.maxSlider,
1880
+ self = this;
1881
+
1882
+ this.activeSlider = maxs;
1883
+
1884
+ // Use a one-time event callback to delay the updateValue call
1885
+ // until after the slide operation is done
1886
+ this._oneTimeCallback(maxs,'slideEnd',function () {
1887
+ self.updateValue(silent);
1888
+ // Clean the slideEnd event on a timeout since this
1889
+ // will be executed from inside the event's fire
1890
+ setTimeout(function () { self._cleanEvent(maxs,'slideEnd'); }, 0);
1891
+ });
1892
+
1893
+ maxs.setValue(max, skipAnim, force);
1894
+ },
1895
+
1896
+ /**
1897
+ * Executed when one of the sliders is moved
1898
+ * @method updateValue
1899
+ * @param silent {boolean} (optional) Set to true to skip firing change
1900
+ * events. Default false
1901
+ * @private
1902
+ */
1903
+ updateValue: function(silent) {
1904
+ var min = this.minSlider.getValue(),
1905
+ max = this.maxSlider.getValue(),
1906
+ changed = false,
1907
+ mint,maxt,dim,minConstraint,maxConstraint,thumbInnerWidth;
1908
+
1909
+ if (min != this.minVal || max != this.maxVal) {
1910
+ changed = true;
1911
+
1912
+ mint = this.minSlider.thumb;
1913
+ maxt = this.maxSlider.thumb;
1914
+ dim = this.isHoriz ? 'x' : 'y';
1915
+
1916
+ thumbInnerWidth = this.minSlider.thumbCenterPoint[dim] +
1917
+ this.maxSlider.thumbCenterPoint[dim];
1918
+
1919
+ // Establish barriers within the respective other thumb's edge, less
1920
+ // the minRange. Limit to the Slider's range in the case of
1921
+ // negative minRanges.
1922
+ minConstraint = Math.max(max-thumbInnerWidth-this.minRange,0);
1923
+ maxConstraint = Math.min(-min-thumbInnerWidth-this.minRange,0);
1924
+
1925
+ if (this.isHoriz) {
1926
+ minConstraint = Math.min(minConstraint,maxt.rightConstraint);
1927
+
1928
+ mint.setXConstraint(mint.leftConstraint,minConstraint, mint.tickSize);
1929
+
1930
+ maxt.setXConstraint(maxConstraint,maxt.rightConstraint, maxt.tickSize);
1931
+ } else {
1932
+ minConstraint = Math.min(minConstraint,maxt.bottomConstraint);
1933
+ mint.setYConstraint(mint.leftConstraint,minConstraint, mint.tickSize);
1934
+
1935
+ maxt.setYConstraint(maxConstraint,maxt.bottomConstraint, maxt.tickSize);
1936
+ }
1937
+ }
1938
+
1939
+ this.minVal = min;
1940
+ this.maxVal = max;
1941
+
1942
+ if (changed && !silent) {
1943
+ this.fireEvent("change", this);
1944
+ }
1945
+ },
1946
+
1947
+ /**
1948
+ * A background click will move the slider thumb nearest to the click.
1949
+ * Override if you need different behavior.
1950
+ * @method selectActiveSlider
1951
+ * @param e {Event} the mousedown event
1952
+ * @private
1953
+ */
1954
+ selectActiveSlider: function(e) {
1955
+ var min = this.minSlider,
1956
+ max = this.maxSlider,
1957
+ minLocked = min.isLocked() || !min.backgroundEnabled,
1958
+ maxLocked = max.isLocked() || !min.backgroundEnabled,
1959
+ Ev = YAHOO.util.Event,
1960
+ d;
1961
+
1962
+ if (minLocked || maxLocked) {
1963
+ this.activeSlider = minLocked ? max : min;
1964
+ } else {
1965
+ if (this.isHoriz) {
1966
+ d = Ev.getPageX(e)-min.thumb.initPageX-min.thumbCenterPoint.x;
1967
+ } else {
1968
+ d = Ev.getPageY(e)-min.thumb.initPageY-min.thumbCenterPoint.y;
1969
+ }
1970
+
1971
+ this.activeSlider = d*2 > max.getValue()+min.getValue() ? max : min;
1972
+ }
1973
+ },
1974
+
1975
+ /**
1976
+ * Delegates the onMouseDown to the appropriate Slider
1977
+ *
1978
+ * @method _handleMouseDown
1979
+ * @param e {Event} mouseup event
1980
+ * @protected
1981
+ */
1982
+ _handleMouseDown: function(e) {
1983
+ if (!e._handled && !this.minSlider._sliding && !this.maxSlider._sliding) {
1984
+ e._handled = true;
1985
+ this.selectActiveSlider(e);
1986
+ return YW.Slider.prototype.onMouseDown.call(this.activeSlider, e);
1987
+ } else {
1988
+ return false;
1989
+ }
1990
+ },
1991
+
1992
+ /**
1993
+ * Delegates the onMouseUp to the active Slider
1994
+ *
1995
+ * @method _handleMouseUp
1996
+ * @param e {Event} mouseup event
1997
+ * @protected
1998
+ */
1999
+ _handleMouseUp : function (e) {
2000
+ YW.Slider.prototype.onMouseUp.apply(
2001
+ this.activeSlider, arguments);
2002
+ },
2003
+
2004
+ /**
2005
+ * Schedule an event callback that will execute once, then unsubscribe
2006
+ * itself.
2007
+ * @method _oneTimeCallback
2008
+ * @param o {EventProvider} Object to attach the event to
2009
+ * @param evt {string} Name of the event
2010
+ * @param fn {Function} function to execute once
2011
+ * @private
2012
+ */
2013
+ _oneTimeCallback : function (o,evt,fn) {
2014
+ var sub = function () {
2015
+ // Unsubscribe myself
2016
+ o.unsubscribe(evt, sub);
2017
+ // Pass the event handler arguments to the one time callback
2018
+ fn.apply({},arguments);
2019
+ };
2020
+ o.subscribe(evt,sub);
2021
+ },
2022
+
2023
+ /**
2024
+ * Clean up the slideEnd event subscribers array, since each one-time
2025
+ * callback will be replaced in the event's subscribers property with
2026
+ * null. This will cause memory bloat and loss of performance.
2027
+ * @method _cleanEvent
2028
+ * @param o {EventProvider} object housing the CustomEvent
2029
+ * @param evt {string} name of the CustomEvent
2030
+ * @private
2031
+ */
2032
+ _cleanEvent : function (o,evt) {
2033
+ var ce,i,len,j,subs,newSubs;
2034
+
2035
+ if (o.__yui_events && o.events[evt]) {
2036
+ for (i = o.__yui_events.length; i >= 0; --i) {
2037
+ if (o.__yui_events[i].type === evt) {
2038
+ ce = o.__yui_events[i];
2039
+ break;
2040
+ }
2041
+ }
2042
+ if (ce) {
2043
+ subs = ce.subscribers;
2044
+ newSubs = [];
2045
+ j = 0;
2046
+ for (i = 0, len = subs.length; i < len; ++i) {
2047
+ if (subs[i]) {
2048
+ newSubs[j++] = subs[i];
2049
+ }
2050
+ }
2051
+ ce.subscribers = newSubs;
2052
+ }
2053
+ }
2054
+ }
2055
+
2056
+ };
2057
+
2058
+ YAHOO.lang.augmentProto(DualSlider, YAHOO.util.EventProvider);
2059
+
2060
+
2061
+ /**
2062
+ * Factory method for creating a horizontal dual-thumb slider
2063
+ * @for YAHOO.widget.Slider
2064
+ * @method YAHOO.widget.Slider.getHorizDualSlider
2065
+ * @static
2066
+ * @param {String} bg the id of the slider's background element
2067
+ * @param {String} minthumb the id of the min thumb
2068
+ * @param {String} maxthumb the id of the thumb thumb
2069
+ * @param {int} range the number of pixels the thumbs can move within
2070
+ * @param {int} iTickSize (optional) the element should move this many pixels
2071
+ * at a time
2072
+ * @param {Array} initVals (optional) [min,max] Initial thumb placement
2073
+ * @return {DualSlider} a horizontal dual-thumb slider control
2074
+ */
2075
+ YW.Slider.getHorizDualSlider =
2076
+ function (bg, minthumb, maxthumb, range, iTickSize, initVals) {
2077
+ var mint = new YW.SliderThumb(minthumb, bg, 0, range, 0, 0, iTickSize),
2078
+ maxt = new YW.SliderThumb(maxthumb, bg, 0, range, 0, 0, iTickSize);
2079
+
2080
+ return new DualSlider(
2081
+ new YW.Slider(bg, bg, mint, "horiz"),
2082
+ new YW.Slider(bg, bg, maxt, "horiz"),
2083
+ range, initVals);
2084
+ };
2085
+
2086
+ /**
2087
+ * Factory method for creating a vertical dual-thumb slider.
2088
+ * @for YAHOO.widget.Slider
2089
+ * @method YAHOO.widget.Slider.getVertDualSlider
2090
+ * @static
2091
+ * @param {String} bg the id of the slider's background element
2092
+ * @param {String} minthumb the id of the min thumb
2093
+ * @param {String} maxthumb the id of the thumb thumb
2094
+ * @param {int} range the number of pixels the thumbs can move within
2095
+ * @param {int} iTickSize (optional) the element should move this many pixels
2096
+ * at a time
2097
+ * @param {Array} initVals (optional) [min,max] Initial thumb placement
2098
+ * @return {DualSlider} a vertical dual-thumb slider control
2099
+ */
2100
+ YW.Slider.getVertDualSlider =
2101
+ function (bg, minthumb, maxthumb, range, iTickSize, initVals) {
2102
+ var mint = new YW.SliderThumb(minthumb, bg, 0, 0, 0, range, iTickSize),
2103
+ maxt = new YW.SliderThumb(maxthumb, bg, 0, 0, 0, range, iTickSize);
2104
+
2105
+ return new YW.DualSlider(
2106
+ new YW.Slider(bg, bg, mint, "vert"),
2107
+ new YW.Slider(bg, bg, maxt, "vert"),
2108
+ range, initVals);
2109
+ };
2110
+
2111
+ YAHOO.widget.DualSlider = DualSlider;
2112
+
2113
+ })();
2114
+ YAHOO.register("slider", YAHOO.widget.Slider, {version: "2.8.1", build: "19"});