lpmp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (636) hide show
  1. data/LICENSE +3 -0
  2. data/README +3 -0
  3. data/Rakefile +45 -0
  4. data/bin/lpmp +107 -0
  5. data/config/help.yaml +1 -0
  6. data/config/hosts.yaml +2 -0
  7. data/config/log.yaml +1 -0
  8. data/config/memcache.yaml +5 -0
  9. data/erb/index.erb +62 -0
  10. data/lib/bg_pull/caichen.rb +199 -0
  11. data/lib/bg_pull/lpmp.rb +45 -0
  12. data/lib/exception.rb +8 -0
  13. data/lib/lpmp.rb +53 -0
  14. data/lib/pull/lpmp.rb +355 -0
  15. data/lib/remote_lmp.rb +129 -0
  16. data/lib/utils.rb +14 -0
  17. data/lib/xq_push/caichen.rb +174 -0
  18. data/lib/xq_push/lpmp.rb +96 -0
  19. data/log/lpmp1st.log +1 -0
  20. data/public/css/ext-portal.css +40 -0
  21. data/public/css/lpmp.css +6 -0
  22. data/public/designer/caichen.epj +1 -0
  23. data/public/designer/hostmonitor.epj +1 -0
  24. data/public/ext-3.0.0/INCLUDE_ORDER.txt +35 -0
  25. data/public/ext-3.0.0/adapter/ext/ext-base-debug.js +3589 -0
  26. data/public/ext-3.0.0/adapter/ext/ext-base.js +7 -0
  27. data/public/ext-3.0.0/adapter/jquery/ext-jquery-adapter-debug.js +2292 -0
  28. data/public/ext-3.0.0/adapter/jquery/ext-jquery-adapter.js +7 -0
  29. data/public/ext-3.0.0/adapter/prototype/ext-prototype-adapter-debug.js +2346 -0
  30. data/public/ext-3.0.0/adapter/prototype/ext-prototype-adapter.js +7 -0
  31. data/public/ext-3.0.0/adapter/yui/ext-yui-adapter-debug.js +2136 -0
  32. data/public/ext-3.0.0/adapter/yui/ext-yui-adapter.js +7 -0
  33. data/public/ext-3.0.0/ext-all-debug.js +65610 -0
  34. data/public/ext-3.0.0/ext-all.js +11 -0
  35. data/public/ext-3.0.0/license.txt +42 -0
  36. data/public/ext-3.0.0/pkgs/cmp-foundation-debug.js +11287 -0
  37. data/public/ext-3.0.0/pkgs/cmp-foundation.js +7 -0
  38. data/public/ext-3.0.0/pkgs/data-foundation-debug.js +3853 -0
  39. data/public/ext-3.0.0/pkgs/data-foundation.js +7 -0
  40. data/public/ext-3.0.0/pkgs/data-grouping-debug.js +139 -0
  41. data/public/ext-3.0.0/pkgs/data-grouping.js +7 -0
  42. data/public/ext-3.0.0/pkgs/data-json-debug.js +582 -0
  43. data/public/ext-3.0.0/pkgs/data-json.js +7 -0
  44. data/public/ext-3.0.0/pkgs/data-list-views-debug.js +1278 -0
  45. data/public/ext-3.0.0/pkgs/data-list-views.js +7 -0
  46. data/public/ext-3.0.0/pkgs/data-xml-debug.js +234 -0
  47. data/public/ext-3.0.0/pkgs/data-xml.js +7 -0
  48. data/public/ext-3.0.0/pkgs/direct-debug.js +1121 -0
  49. data/public/ext-3.0.0/pkgs/direct.js +7 -0
  50. data/public/ext-3.0.0/pkgs/ext-dd-debug.js +4567 -0
  51. data/public/ext-3.0.0/pkgs/ext-dd.js +7 -0
  52. data/public/ext-3.0.0/pkgs/ext-foundation-debug.js +13417 -0
  53. data/public/ext-3.0.0/pkgs/ext-foundation.js +7 -0
  54. data/public/ext-3.0.0/pkgs/pkg-buttons-debug.js +1060 -0
  55. data/public/ext-3.0.0/pkgs/pkg-buttons.js +7 -0
  56. data/public/ext-3.0.0/pkgs/pkg-charts-debug.js +1621 -0
  57. data/public/ext-3.0.0/pkgs/pkg-charts.js +10 -0
  58. data/public/ext-3.0.0/pkgs/pkg-forms-debug.js +7661 -0
  59. data/public/ext-3.0.0/pkgs/pkg-forms.js +7 -0
  60. data/public/ext-3.0.0/pkgs/pkg-grid-editor-debug.js +560 -0
  61. data/public/ext-3.0.0/pkgs/pkg-grid-editor.js +7 -0
  62. data/public/ext-3.0.0/pkgs/pkg-grid-foundation-debug.js +4765 -0
  63. data/public/ext-3.0.0/pkgs/pkg-grid-foundation.js +7 -0
  64. data/public/ext-3.0.0/pkgs/pkg-grid-grouping-debug.js +517 -0
  65. data/public/ext-3.0.0/pkgs/pkg-grid-grouping.js +7 -0
  66. data/public/ext-3.0.0/pkgs/pkg-grid-property-debug.js +370 -0
  67. data/public/ext-3.0.0/pkgs/pkg-grid-property.js +7 -0
  68. data/public/ext-3.0.0/pkgs/pkg-history-debug.js +203 -0
  69. data/public/ext-3.0.0/pkgs/pkg-history.js +7 -0
  70. data/public/ext-3.0.0/pkgs/pkg-menu-debug.js +1628 -0
  71. data/public/ext-3.0.0/pkgs/pkg-menu.js +7 -0
  72. data/public/ext-3.0.0/pkgs/pkg-tabs-debug.js +1100 -0
  73. data/public/ext-3.0.0/pkgs/pkg-tabs.js +7 -0
  74. data/public/ext-3.0.0/pkgs/pkg-tips-debug.js +994 -0
  75. data/public/ext-3.0.0/pkgs/pkg-tips.js +7 -0
  76. data/public/ext-3.0.0/pkgs/pkg-toolbars-debug.js +1374 -0
  77. data/public/ext-3.0.0/pkgs/pkg-toolbars.js +7 -0
  78. data/public/ext-3.0.0/pkgs/pkg-tree-debug.js +4522 -0
  79. data/public/ext-3.0.0/pkgs/pkg-tree.js +7 -0
  80. data/public/ext-3.0.0/pkgs/resizable-debug.js +760 -0
  81. data/public/ext-3.0.0/pkgs/resizable.js +7 -0
  82. data/public/ext-3.0.0/pkgs/state-debug.js +274 -0
  83. data/public/ext-3.0.0/pkgs/state.js +7 -0
  84. data/public/ext-3.0.0/pkgs/window-debug.js +1888 -0
  85. data/public/ext-3.0.0/pkgs/window.js +7 -0
  86. data/public/ext-3.0.0/resources/charts.swf +0 -0
  87. data/public/ext-3.0.0/resources/css/README.txt +3 -0
  88. data/public/ext-3.0.0/resources/css/ext-all-notheme.css +5345 -0
  89. data/public/ext-3.0.0/resources/css/ext-all.css +6990 -0
  90. data/public/ext-3.0.0/resources/css/reset-min.css +7 -0
  91. data/public/ext-3.0.0/resources/css/structure/borders.css +54 -0
  92. data/public/ext-3.0.0/resources/css/structure/box.css +80 -0
  93. data/public/ext-3.0.0/resources/css/structure/button.css +440 -0
  94. data/public/ext-3.0.0/resources/css/structure/combo.css +45 -0
  95. data/public/ext-3.0.0/resources/css/structure/core.css +326 -0
  96. data/public/ext-3.0.0/resources/css/structure/date-picker.css +265 -0
  97. data/public/ext-3.0.0/resources/css/structure/dd.css +61 -0
  98. data/public/ext-3.0.0/resources/css/structure/debug.css +26 -0
  99. data/public/ext-3.0.0/resources/css/structure/dialog.css +62 -0
  100. data/public/ext-3.0.0/resources/css/structure/editor.css +92 -0
  101. data/public/ext-3.0.0/resources/css/structure/form.css +562 -0
  102. data/public/ext-3.0.0/resources/css/structure/grid.css +552 -0
  103. data/public/ext-3.0.0/resources/css/structure/layout.css +296 -0
  104. data/public/ext-3.0.0/resources/css/structure/list-view.css +85 -0
  105. data/public/ext-3.0.0/resources/css/structure/menu.css +205 -0
  106. data/public/ext-3.0.0/resources/css/structure/panel-reset.css +130 -0
  107. data/public/ext-3.0.0/resources/css/structure/panel.css +468 -0
  108. data/public/ext-3.0.0/resources/css/structure/progress.css +42 -0
  109. data/public/ext-3.0.0/resources/css/structure/qtips.css +153 -0
  110. data/public/ext-3.0.0/resources/css/structure/reset.css +7 -0
  111. data/public/ext-3.0.0/resources/css/structure/resizable.css +149 -0
  112. data/public/ext-3.0.0/resources/css/structure/slider.css +103 -0
  113. data/public/ext-3.0.0/resources/css/structure/tabs.css +372 -0
  114. data/public/ext-3.0.0/resources/css/structure/toolbar.css +259 -0
  115. data/public/ext-3.0.0/resources/css/structure/tree.css +203 -0
  116. data/public/ext-3.0.0/resources/css/structure/window.css +222 -0
  117. data/public/ext-3.0.0/resources/css/visual/borders.css +25 -0
  118. data/public/ext-3.0.0/resources/css/visual/box.css +74 -0
  119. data/public/ext-3.0.0/resources/css/visual/button.css +94 -0
  120. data/public/ext-3.0.0/resources/css/visual/combo.css +43 -0
  121. data/public/ext-3.0.0/resources/css/visual/core.css +76 -0
  122. data/public/ext-3.0.0/resources/css/visual/date-picker.css +143 -0
  123. data/public/ext-3.0.0/resources/css/visual/dd.css +29 -0
  124. data/public/ext-3.0.0/resources/css/visual/debug.css +24 -0
  125. data/public/ext-3.0.0/resources/css/visual/dialog.css +34 -0
  126. data/public/ext-3.0.0/resources/css/visual/editor.css +13 -0
  127. data/public/ext-3.0.0/resources/css/visual/form.css +117 -0
  128. data/public/ext-3.0.0/resources/css/visual/grid.css +272 -0
  129. data/public/ext-3.0.0/resources/css/visual/layout.css +53 -0
  130. data/public/ext-3.0.0/resources/css/visual/list-view.css +37 -0
  131. data/public/ext-3.0.0/resources/css/visual/menu.css +82 -0
  132. data/public/ext-3.0.0/resources/css/visual/panel.css +87 -0
  133. data/public/ext-3.0.0/resources/css/visual/progress.css +32 -0
  134. data/public/ext-3.0.0/resources/css/visual/qtips.css +44 -0
  135. data/public/ext-3.0.0/resources/css/visual/resizable.css +43 -0
  136. data/public/ext-3.0.0/resources/css/visual/slider.css +21 -0
  137. data/public/ext-3.0.0/resources/css/visual/tabs.css +119 -0
  138. data/public/ext-3.0.0/resources/css/visual/toolbar.css +103 -0
  139. data/public/ext-3.0.0/resources/css/visual/tree.css +157 -0
  140. data/public/ext-3.0.0/resources/css/visual/window.css +86 -0
  141. data/public/ext-3.0.0/resources/css/xtheme-blue.css +1652 -0
  142. data/public/ext-3.0.0/resources/expressinstall.swf +0 -0
  143. data/public/ext-3.0.0/resources/images/default/box/corners-blue.gif +0 -0
  144. data/public/ext-3.0.0/resources/images/default/box/corners.gif +0 -0
  145. data/public/ext-3.0.0/resources/images/default/box/l-blue.gif +0 -0
  146. data/public/ext-3.0.0/resources/images/default/box/l.gif +0 -0
  147. data/public/ext-3.0.0/resources/images/default/box/r-blue.gif +0 -0
  148. data/public/ext-3.0.0/resources/images/default/box/r.gif +0 -0
  149. data/public/ext-3.0.0/resources/images/default/box/tb-blue.gif +0 -0
  150. data/public/ext-3.0.0/resources/images/default/box/tb.gif +0 -0
  151. data/public/ext-3.0.0/resources/images/default/button/arrow.gif +0 -0
  152. data/public/ext-3.0.0/resources/images/default/button/btn.gif +0 -0
  153. data/public/ext-3.0.0/resources/images/default/button/group-cs.gif +0 -0
  154. data/public/ext-3.0.0/resources/images/default/button/group-lr.gif +0 -0
  155. data/public/ext-3.0.0/resources/images/default/button/group-tb.gif +0 -0
  156. data/public/ext-3.0.0/resources/images/default/button/s-arrow-b-noline.gif +0 -0
  157. data/public/ext-3.0.0/resources/images/default/button/s-arrow-b.gif +0 -0
  158. data/public/ext-3.0.0/resources/images/default/button/s-arrow-bo.gif +0 -0
  159. data/public/ext-3.0.0/resources/images/default/button/s-arrow-noline.gif +0 -0
  160. data/public/ext-3.0.0/resources/images/default/button/s-arrow-o.gif +0 -0
  161. data/public/ext-3.0.0/resources/images/default/button/s-arrow.gif +0 -0
  162. data/public/ext-3.0.0/resources/images/default/dd/drop-add.gif +0 -0
  163. data/public/ext-3.0.0/resources/images/default/dd/drop-no.gif +0 -0
  164. data/public/ext-3.0.0/resources/images/default/dd/drop-yes.gif +0 -0
  165. data/public/ext-3.0.0/resources/images/default/editor/tb-sprite.gif +0 -0
  166. data/public/ext-3.0.0/resources/images/default/form/checkbox.gif +0 -0
  167. data/public/ext-3.0.0/resources/images/default/form/clear-trigger.gif +0 -0
  168. data/public/ext-3.0.0/resources/images/default/form/clear-trigger.psd +0 -0
  169. data/public/ext-3.0.0/resources/images/default/form/date-trigger.gif +0 -0
  170. data/public/ext-3.0.0/resources/images/default/form/date-trigger.psd +0 -0
  171. data/public/ext-3.0.0/resources/images/default/form/error-tip-corners.gif +0 -0
  172. data/public/ext-3.0.0/resources/images/default/form/exclamation.gif +0 -0
  173. data/public/ext-3.0.0/resources/images/default/form/radio.gif +0 -0
  174. data/public/ext-3.0.0/resources/images/default/form/search-trigger.gif +0 -0
  175. data/public/ext-3.0.0/resources/images/default/form/search-trigger.psd +0 -0
  176. data/public/ext-3.0.0/resources/images/default/form/text-bg.gif +0 -0
  177. data/public/ext-3.0.0/resources/images/default/form/trigger-tpl.gif +0 -0
  178. data/public/ext-3.0.0/resources/images/default/form/trigger.gif +0 -0
  179. data/public/ext-3.0.0/resources/images/default/form/trigger.psd +0 -0
  180. data/public/ext-3.0.0/resources/images/default/gradient-bg.gif +0 -0
  181. data/public/ext-3.0.0/resources/images/default/grid/arrow-left-white.gif +0 -0
  182. data/public/ext-3.0.0/resources/images/default/grid/arrow-right-white.gif +0 -0
  183. data/public/ext-3.0.0/resources/images/default/grid/col-move-bottom.gif +0 -0
  184. data/public/ext-3.0.0/resources/images/default/grid/col-move-top.gif +0 -0
  185. data/public/ext-3.0.0/resources/images/default/grid/columns.gif +0 -0
  186. data/public/ext-3.0.0/resources/images/default/grid/dirty.gif +0 -0
  187. data/public/ext-3.0.0/resources/images/default/grid/done.gif +0 -0
  188. data/public/ext-3.0.0/resources/images/default/grid/drop-no.gif +0 -0
  189. data/public/ext-3.0.0/resources/images/default/grid/drop-yes.gif +0 -0
  190. data/public/ext-3.0.0/resources/images/default/grid/footer-bg.gif +0 -0
  191. data/public/ext-3.0.0/resources/images/default/grid/grid-blue-hd.gif +0 -0
  192. data/public/ext-3.0.0/resources/images/default/grid/grid-blue-split.gif +0 -0
  193. data/public/ext-3.0.0/resources/images/default/grid/grid-hrow.gif +0 -0
  194. data/public/ext-3.0.0/resources/images/default/grid/grid-loading.gif +0 -0
  195. data/public/ext-3.0.0/resources/images/default/grid/grid-split.gif +0 -0
  196. data/public/ext-3.0.0/resources/images/default/grid/grid-vista-hd.gif +0 -0
  197. data/public/ext-3.0.0/resources/images/default/grid/grid3-hd-btn.gif +0 -0
  198. data/public/ext-3.0.0/resources/images/default/grid/grid3-hrow-over.gif +0 -0
  199. data/public/ext-3.0.0/resources/images/default/grid/grid3-hrow.gif +0 -0
  200. data/public/ext-3.0.0/resources/images/default/grid/grid3-special-col-bg.gif +0 -0
  201. data/public/ext-3.0.0/resources/images/default/grid/grid3-special-col-sel-bg.gif +0 -0
  202. data/public/ext-3.0.0/resources/images/default/grid/group-by.gif +0 -0
  203. data/public/ext-3.0.0/resources/images/default/grid/group-collapse.gif +0 -0
  204. data/public/ext-3.0.0/resources/images/default/grid/group-expand-sprite.gif +0 -0
  205. data/public/ext-3.0.0/resources/images/default/grid/group-expand.gif +0 -0
  206. data/public/ext-3.0.0/resources/images/default/grid/hd-pop.gif +0 -0
  207. data/public/ext-3.0.0/resources/images/default/grid/hmenu-asc.gif +0 -0
  208. data/public/ext-3.0.0/resources/images/default/grid/hmenu-desc.gif +0 -0
  209. data/public/ext-3.0.0/resources/images/default/grid/hmenu-lock.gif +0 -0
  210. data/public/ext-3.0.0/resources/images/default/grid/hmenu-lock.png +0 -0
  211. data/public/ext-3.0.0/resources/images/default/grid/hmenu-unlock.gif +0 -0
  212. data/public/ext-3.0.0/resources/images/default/grid/hmenu-unlock.png +0 -0
  213. data/public/ext-3.0.0/resources/images/default/grid/invalid_line.gif +0 -0
  214. data/public/ext-3.0.0/resources/images/default/grid/loading.gif +0 -0
  215. data/public/ext-3.0.0/resources/images/default/grid/mso-hd.gif +0 -0
  216. data/public/ext-3.0.0/resources/images/default/grid/nowait.gif +0 -0
  217. data/public/ext-3.0.0/resources/images/default/grid/page-first-disabled.gif +0 -0
  218. data/public/ext-3.0.0/resources/images/default/grid/page-first.gif +0 -0
  219. data/public/ext-3.0.0/resources/images/default/grid/page-last-disabled.gif +0 -0
  220. data/public/ext-3.0.0/resources/images/default/grid/page-last.gif +0 -0
  221. data/public/ext-3.0.0/resources/images/default/grid/page-next-disabled.gif +0 -0
  222. data/public/ext-3.0.0/resources/images/default/grid/page-next.gif +0 -0
  223. data/public/ext-3.0.0/resources/images/default/grid/page-prev-disabled.gif +0 -0
  224. data/public/ext-3.0.0/resources/images/default/grid/page-prev.gif +0 -0
  225. data/public/ext-3.0.0/resources/images/default/grid/pick-button.gif +0 -0
  226. data/public/ext-3.0.0/resources/images/default/grid/refresh.gif +0 -0
  227. data/public/ext-3.0.0/resources/images/default/grid/row-check-sprite.gif +0 -0
  228. data/public/ext-3.0.0/resources/images/default/grid/row-expand-sprite.gif +0 -0
  229. data/public/ext-3.0.0/resources/images/default/grid/row-over.gif +0 -0
  230. data/public/ext-3.0.0/resources/images/default/grid/row-sel.gif +0 -0
  231. data/public/ext-3.0.0/resources/images/default/grid/sort-hd.gif +0 -0
  232. data/public/ext-3.0.0/resources/images/default/grid/sort_asc.gif +0 -0
  233. data/public/ext-3.0.0/resources/images/default/grid/sort_desc.gif +0 -0
  234. data/public/ext-3.0.0/resources/images/default/grid/wait.gif +0 -0
  235. data/public/ext-3.0.0/resources/images/default/layout/collapse.gif +0 -0
  236. data/public/ext-3.0.0/resources/images/default/layout/expand.gif +0 -0
  237. data/public/ext-3.0.0/resources/images/default/layout/gradient-bg.gif +0 -0
  238. data/public/ext-3.0.0/resources/images/default/layout/mini-bottom.gif +0 -0
  239. data/public/ext-3.0.0/resources/images/default/layout/mini-left.gif +0 -0
  240. data/public/ext-3.0.0/resources/images/default/layout/mini-right.gif +0 -0
  241. data/public/ext-3.0.0/resources/images/default/layout/mini-top.gif +0 -0
  242. data/public/ext-3.0.0/resources/images/default/layout/ns-collapse.gif +0 -0
  243. data/public/ext-3.0.0/resources/images/default/layout/ns-expand.gif +0 -0
  244. data/public/ext-3.0.0/resources/images/default/layout/panel-close.gif +0 -0
  245. data/public/ext-3.0.0/resources/images/default/layout/panel-title-bg.gif +0 -0
  246. data/public/ext-3.0.0/resources/images/default/layout/panel-title-light-bg.gif +0 -0
  247. data/public/ext-3.0.0/resources/images/default/layout/stick.gif +0 -0
  248. data/public/ext-3.0.0/resources/images/default/layout/stuck.gif +0 -0
  249. data/public/ext-3.0.0/resources/images/default/layout/tab-close-on.gif +0 -0
  250. data/public/ext-3.0.0/resources/images/default/layout/tab-close.gif +0 -0
  251. data/public/ext-3.0.0/resources/images/default/menu/checked.gif +0 -0
  252. data/public/ext-3.0.0/resources/images/default/menu/group-checked.gif +0 -0
  253. data/public/ext-3.0.0/resources/images/default/menu/item-over.gif +0 -0
  254. data/public/ext-3.0.0/resources/images/default/menu/menu-parent.gif +0 -0
  255. data/public/ext-3.0.0/resources/images/default/menu/menu.gif +0 -0
  256. data/public/ext-3.0.0/resources/images/default/menu/unchecked.gif +0 -0
  257. data/public/ext-3.0.0/resources/images/default/panel/corners-sprite.gif +0 -0
  258. data/public/ext-3.0.0/resources/images/default/panel/left-right.gif +0 -0
  259. data/public/ext-3.0.0/resources/images/default/panel/light-hd.gif +0 -0
  260. data/public/ext-3.0.0/resources/images/default/panel/tool-sprite-tpl.gif +0 -0
  261. data/public/ext-3.0.0/resources/images/default/panel/tool-sprites.gif +0 -0
  262. data/public/ext-3.0.0/resources/images/default/panel/tools-sprites-trans.gif +0 -0
  263. data/public/ext-3.0.0/resources/images/default/panel/top-bottom.gif +0 -0
  264. data/public/ext-3.0.0/resources/images/default/panel/top-bottom.png +0 -0
  265. data/public/ext-3.0.0/resources/images/default/panel/white-corners-sprite.gif +0 -0
  266. data/public/ext-3.0.0/resources/images/default/panel/white-left-right.gif +0 -0
  267. data/public/ext-3.0.0/resources/images/default/panel/white-top-bottom.gif +0 -0
  268. data/public/ext-3.0.0/resources/images/default/progress/progress-bg.gif +0 -0
  269. data/public/ext-3.0.0/resources/images/default/qtip/bg.gif +0 -0
  270. data/public/ext-3.0.0/resources/images/default/qtip/close.gif +0 -0
  271. data/public/ext-3.0.0/resources/images/default/qtip/tip-anchor-sprite.gif +0 -0
  272. data/public/ext-3.0.0/resources/images/default/qtip/tip-sprite.gif +0 -0
  273. data/public/ext-3.0.0/resources/images/default/s.gif +0 -0
  274. data/public/ext-3.0.0/resources/images/default/shadow-c.png +0 -0
  275. data/public/ext-3.0.0/resources/images/default/shadow-lr.png +0 -0
  276. data/public/ext-3.0.0/resources/images/default/shadow.png +0 -0
  277. data/public/ext-3.0.0/resources/images/default/shared/blue-loading.gif +0 -0
  278. data/public/ext-3.0.0/resources/images/default/shared/calendar.gif +0 -0
  279. data/public/ext-3.0.0/resources/images/default/shared/glass-bg.gif +0 -0
  280. data/public/ext-3.0.0/resources/images/default/shared/hd-sprite.gif +0 -0
  281. data/public/ext-3.0.0/resources/images/default/shared/large-loading.gif +0 -0
  282. data/public/ext-3.0.0/resources/images/default/shared/left-btn.gif +0 -0
  283. data/public/ext-3.0.0/resources/images/default/shared/loading-balls.gif +0 -0
  284. data/public/ext-3.0.0/resources/images/default/shared/right-btn.gif +0 -0
  285. data/public/ext-3.0.0/resources/images/default/shared/warning.gif +0 -0
  286. data/public/ext-3.0.0/resources/images/default/sizer/e-handle-dark.gif +0 -0
  287. data/public/ext-3.0.0/resources/images/default/sizer/e-handle.gif +0 -0
  288. data/public/ext-3.0.0/resources/images/default/sizer/ne-handle-dark.gif +0 -0
  289. data/public/ext-3.0.0/resources/images/default/sizer/ne-handle.gif +0 -0
  290. data/public/ext-3.0.0/resources/images/default/sizer/nw-handle-dark.gif +0 -0
  291. data/public/ext-3.0.0/resources/images/default/sizer/nw-handle.gif +0 -0
  292. data/public/ext-3.0.0/resources/images/default/sizer/s-handle-dark.gif +0 -0
  293. data/public/ext-3.0.0/resources/images/default/sizer/s-handle.gif +0 -0
  294. data/public/ext-3.0.0/resources/images/default/sizer/se-handle-dark.gif +0 -0
  295. data/public/ext-3.0.0/resources/images/default/sizer/se-handle.gif +0 -0
  296. data/public/ext-3.0.0/resources/images/default/sizer/square.gif +0 -0
  297. data/public/ext-3.0.0/resources/images/default/sizer/sw-handle-dark.gif +0 -0
  298. data/public/ext-3.0.0/resources/images/default/sizer/sw-handle.gif +0 -0
  299. data/public/ext-3.0.0/resources/images/default/slider/slider-bg.png +0 -0
  300. data/public/ext-3.0.0/resources/images/default/slider/slider-thumb.png +0 -0
  301. data/public/ext-3.0.0/resources/images/default/slider/slider-v-bg.png +0 -0
  302. data/public/ext-3.0.0/resources/images/default/slider/slider-v-thumb.png +0 -0
  303. data/public/ext-3.0.0/resources/images/default/tabs/scroll-left.gif +0 -0
  304. data/public/ext-3.0.0/resources/images/default/tabs/scroll-right.gif +0 -0
  305. data/public/ext-3.0.0/resources/images/default/tabs/scroller-bg.gif +0 -0
  306. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-inactive-left-bg.gif +0 -0
  307. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-inactive-right-bg.gif +0 -0
  308. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-left-bg.gif +0 -0
  309. data/public/ext-3.0.0/resources/images/default/tabs/tab-btm-right-bg.gif +0 -0
  310. data/public/ext-3.0.0/resources/images/default/tabs/tab-close.gif +0 -0
  311. data/public/ext-3.0.0/resources/images/default/tabs/tab-strip-bg.gif +0 -0
  312. data/public/ext-3.0.0/resources/images/default/tabs/tab-strip-bg.png +0 -0
  313. data/public/ext-3.0.0/resources/images/default/tabs/tab-strip-btm-bg.gif +0 -0
  314. data/public/ext-3.0.0/resources/images/default/tabs/tabs-sprite.gif +0 -0
  315. data/public/ext-3.0.0/resources/images/default/toolbar/bg.gif +0 -0
  316. data/public/ext-3.0.0/resources/images/default/toolbar/btn-arrow-light.gif +0 -0
  317. data/public/ext-3.0.0/resources/images/default/toolbar/btn-arrow.gif +0 -0
  318. data/public/ext-3.0.0/resources/images/default/toolbar/btn-over-bg.gif +0 -0
  319. data/public/ext-3.0.0/resources/images/default/toolbar/gray-bg.gif +0 -0
  320. data/public/ext-3.0.0/resources/images/default/toolbar/more.gif +0 -0
  321. data/public/ext-3.0.0/resources/images/default/toolbar/tb-bg.gif +0 -0
  322. data/public/ext-3.0.0/resources/images/default/toolbar/tb-btn-sprite.gif +0 -0
  323. data/public/ext-3.0.0/resources/images/default/toolbar/tb-xl-btn-sprite.gif +0 -0
  324. data/public/ext-3.0.0/resources/images/default/toolbar/tb-xl-sep.gif +0 -0
  325. data/public/ext-3.0.0/resources/images/default/tree/arrows.gif +0 -0
  326. data/public/ext-3.0.0/resources/images/default/tree/drop-add.gif +0 -0
  327. data/public/ext-3.0.0/resources/images/default/tree/drop-between.gif +0 -0
  328. data/public/ext-3.0.0/resources/images/default/tree/drop-no.gif +0 -0
  329. data/public/ext-3.0.0/resources/images/default/tree/drop-over.gif +0 -0
  330. data/public/ext-3.0.0/resources/images/default/tree/drop-under.gif +0 -0
  331. data/public/ext-3.0.0/resources/images/default/tree/drop-yes.gif +0 -0
  332. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-minus-nl.gif +0 -0
  333. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-minus.gif +0 -0
  334. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-plus-nl.gif +0 -0
  335. data/public/ext-3.0.0/resources/images/default/tree/elbow-end-plus.gif +0 -0
  336. data/public/ext-3.0.0/resources/images/default/tree/elbow-end.gif +0 -0
  337. data/public/ext-3.0.0/resources/images/default/tree/elbow-line.gif +0 -0
  338. data/public/ext-3.0.0/resources/images/default/tree/elbow-minus-nl.gif +0 -0
  339. data/public/ext-3.0.0/resources/images/default/tree/elbow-minus.gif +0 -0
  340. data/public/ext-3.0.0/resources/images/default/tree/elbow-plus-nl.gif +0 -0
  341. data/public/ext-3.0.0/resources/images/default/tree/elbow-plus.gif +0 -0
  342. data/public/ext-3.0.0/resources/images/default/tree/elbow.gif +0 -0
  343. data/public/ext-3.0.0/resources/images/default/tree/folder-open.gif +0 -0
  344. data/public/ext-3.0.0/resources/images/default/tree/folder.gif +0 -0
  345. data/public/ext-3.0.0/resources/images/default/tree/leaf.gif +0 -0
  346. data/public/ext-3.0.0/resources/images/default/tree/loading.gif +0 -0
  347. data/public/ext-3.0.0/resources/images/default/tree/s.gif +0 -0
  348. data/public/ext-3.0.0/resources/images/default/window/icon-error.gif +0 -0
  349. data/public/ext-3.0.0/resources/images/default/window/icon-info.gif +0 -0
  350. data/public/ext-3.0.0/resources/images/default/window/icon-question.gif +0 -0
  351. data/public/ext-3.0.0/resources/images/default/window/icon-warning.gif +0 -0
  352. data/public/ext-3.0.0/resources/images/default/window/left-corners.png +0 -0
  353. data/public/ext-3.0.0/resources/images/default/window/left-corners.psd +0 -0
  354. data/public/ext-3.0.0/resources/images/default/window/left-right.png +0 -0
  355. data/public/ext-3.0.0/resources/images/default/window/left-right.psd +0 -0
  356. data/public/ext-3.0.0/resources/images/default/window/right-corners.png +0 -0
  357. data/public/ext-3.0.0/resources/images/default/window/right-corners.psd +0 -0
  358. data/public/ext-3.0.0/resources/images/default/window/top-bottom.png +0 -0
  359. data/public/ext-3.0.0/resources/images/default/window/top-bottom.psd +0 -0
  360. data/public/ext-3.0.0/resources/images/icon/chart.gif +0 -0
  361. data/public/ext-3.0.0/src/adapter/core/ext-base-ajax.js +371 -0
  362. data/public/ext-3.0.0/src/adapter/core/ext-base-anim-extra.js +301 -0
  363. data/public/ext-3.0.0/src/adapter/core/ext-base-anim.js +477 -0
  364. data/public/ext-3.0.0/src/adapter/core/ext-base-begin.js +18 -0
  365. data/public/ext-3.0.0/src/adapter/core/ext-base-dom.js +157 -0
  366. data/public/ext-3.0.0/src/adapter/core/ext-base-end.js +21 -0
  367. data/public/ext-3.0.0/src/adapter/core/ext-base-event.js +453 -0
  368. data/public/ext-3.0.0/src/adapter/core/ext-base-point.js +17 -0
  369. data/public/ext-3.0.0/src/adapter/core/ext-base-region.js +81 -0
  370. data/public/ext-3.0.0/src/adapter/ext-base-dom-more.js +9 -0
  371. data/public/ext-3.0.0/src/adapter/jquery-bridge.js +546 -0
  372. data/public/ext-3.0.0/src/adapter/prototype-bridge.js +600 -0
  373. data/public/ext-3.0.0/src/adapter/yui-bridge.js +390 -0
  374. data/public/ext-3.0.0/src/core/CompositeElement.js +136 -0
  375. data/public/ext-3.0.0/src/core/CompositeElementLite-more.js +102 -0
  376. data/public/ext-3.0.0/src/core/DomHelper-more.js +179 -0
  377. data/public/ext-3.0.0/src/core/Element-more.js +192 -0
  378. data/public/ext-3.0.0/src/core/Element.alignment.js +370 -0
  379. data/public/ext-3.0.0/src/core/Element.dd.js +46 -0
  380. data/public/ext-3.0.0/src/core/Element.fx-more.js +152 -0
  381. data/public/ext-3.0.0/src/core/Element.insertion-more.js +52 -0
  382. data/public/ext-3.0.0/src/core/Element.keys.js +48 -0
  383. data/public/ext-3.0.0/src/core/Element.legacy.js +42 -0
  384. data/public/ext-3.0.0/src/core/Element.position-more.js +165 -0
  385. data/public/ext-3.0.0/src/core/Element.scroll-more.js +110 -0
  386. data/public/ext-3.0.0/src/core/Element.style-more.js +318 -0
  387. data/public/ext-3.0.0/src/core/Error.js +81 -0
  388. data/public/ext-3.0.0/src/core/EventManager-more.js +334 -0
  389. data/public/ext-3.0.0/src/core/Ext-more.js +669 -0
  390. data/public/ext-3.0.0/src/core/Template-more.js +115 -0
  391. data/public/ext-3.0.0/src/core/core/CompositeElementLite.js +197 -0
  392. data/public/ext-3.0.0/src/core/core/DomHelper.js +378 -0
  393. data/public/ext-3.0.0/src/core/core/DomQuery.js +826 -0
  394. data/public/ext-3.0.0/src/core/core/Element.fx.js +324 -0
  395. data/public/ext-3.0.0/src/core/core/Element.insertion.js +147 -0
  396. data/public/ext-3.0.0/src/core/core/Element.js +945 -0
  397. data/public/ext-3.0.0/src/core/core/Element.position.js +303 -0
  398. data/public/ext-3.0.0/src/core/core/Element.scroll.js +58 -0
  399. data/public/ext-3.0.0/src/core/core/Element.style.js +439 -0
  400. data/public/ext-3.0.0/src/core/core/Element.traversal.js +176 -0
  401. data/public/ext-3.0.0/src/core/core/EventManager.js +623 -0
  402. data/public/ext-3.0.0/src/core/core/Ext.js +922 -0
  403. data/public/ext-3.0.0/src/core/core/Fx.js +1115 -0
  404. data/public/ext-3.0.0/src/core/core/Template.js +185 -0
  405. data/public/ext-3.0.0/src/data/Api.js +210 -0
  406. data/public/ext-3.0.0/src/data/ArrayReader.js +102 -0
  407. data/public/ext-3.0.0/src/data/ArrayStore.js +70 -0
  408. data/public/ext-3.0.0/src/data/DataField.js +249 -0
  409. data/public/ext-3.0.0/src/data/DataProxy.js +427 -0
  410. data/public/ext-3.0.0/src/data/DataReader.js +160 -0
  411. data/public/ext-3.0.0/src/data/DataWriter.js +201 -0
  412. data/public/ext-3.0.0/src/data/DirectProxy.js +141 -0
  413. data/public/ext-3.0.0/src/data/DirectStore.js +52 -0
  414. data/public/ext-3.0.0/src/data/GroupingStore.js +139 -0
  415. data/public/ext-3.0.0/src/data/HttpProxy.js +276 -0
  416. data/public/ext-3.0.0/src/data/JsonReader.js +311 -0
  417. data/public/ext-3.0.0/src/data/JsonStore.js +49 -0
  418. data/public/ext-3.0.0/src/data/JsonWriter.js +77 -0
  419. data/public/ext-3.0.0/src/data/MemoryProxy.js +69 -0
  420. data/public/ext-3.0.0/src/data/Record.js +400 -0
  421. data/public/ext-3.0.0/src/data/ScriptTagProxy.js +279 -0
  422. data/public/ext-3.0.0/src/data/SortTypes.js +91 -0
  423. data/public/ext-3.0.0/src/data/Store.js +1492 -0
  424. data/public/ext-3.0.0/src/data/StoreMgr.js +72 -0
  425. data/public/ext-3.0.0/src/data/Tree.js +785 -0
  426. data/public/ext-3.0.0/src/data/XmlReader.js +128 -0
  427. data/public/ext-3.0.0/src/data/XmlStore.js +75 -0
  428. data/public/ext-3.0.0/src/data/XmlWriter.js +45 -0
  429. data/public/ext-3.0.0/src/data/core/Connection.js +575 -0
  430. data/public/ext-3.0.0/src/dd/DDCore.js +2992 -0
  431. data/public/ext-3.0.0/src/dd/DragSource.js +365 -0
  432. data/public/ext-3.0.0/src/dd/DragTracker.js +217 -0
  433. data/public/ext-3.0.0/src/dd/DragZone.js +133 -0
  434. data/public/ext-3.0.0/src/dd/DropTarget.js +115 -0
  435. data/public/ext-3.0.0/src/dd/DropZone.js +262 -0
  436. data/public/ext-3.0.0/src/dd/Registry.js +127 -0
  437. data/public/ext-3.0.0/src/dd/ScrollManager.js +201 -0
  438. data/public/ext-3.0.0/src/dd/StatusProxy.js +171 -0
  439. data/public/ext-3.0.0/src/debug.js +906 -0
  440. data/public/ext-3.0.0/src/direct/Direct.js +235 -0
  441. data/public/ext-3.0.0/src/direct/Event.js +34 -0
  442. data/public/ext-3.0.0/src/direct/JsonProvider.js +45 -0
  443. data/public/ext-3.0.0/src/direct/PollingProvider.js +151 -0
  444. data/public/ext-3.0.0/src/direct/Provider.js +110 -0
  445. data/public/ext-3.0.0/src/direct/RemotingProvider.js +373 -0
  446. data/public/ext-3.0.0/src/direct/Transaction.js +32 -0
  447. data/public/ext-3.0.0/src/locale/ext-lang-af.js +184 -0
  448. data/public/ext-3.0.0/src/locale/ext-lang-bg.js +278 -0
  449. data/public/ext-3.0.0/src/locale/ext-lang-ca.js +315 -0
  450. data/public/ext-3.0.0/src/locale/ext-lang-cs.js +293 -0
  451. data/public/ext-3.0.0/src/locale/ext-lang-da.js +296 -0
  452. data/public/ext-3.0.0/src/locale/ext-lang-de.js +326 -0
  453. data/public/ext-3.0.0/src/locale/ext-lang-el_GR.js +309 -0
  454. data/public/ext-3.0.0/src/locale/ext-lang-en.js +335 -0
  455. data/public/ext-3.0.0/src/locale/ext-lang-en_GB.js +315 -0
  456. data/public/ext-3.0.0/src/locale/ext-lang-es.js +318 -0
  457. data/public/ext-3.0.0/src/locale/ext-lang-fa.js +272 -0
  458. data/public/ext-3.0.0/src/locale/ext-lang-fi.js +302 -0
  459. data/public/ext-3.0.0/src/locale/ext-lang-fr.js +335 -0
  460. data/public/ext-3.0.0/src/locale/ext-lang-fr_CA.js +218 -0
  461. data/public/ext-3.0.0/src/locale/ext-lang-gr.js +175 -0
  462. data/public/ext-3.0.0/src/locale/ext-lang-he.js +292 -0
  463. data/public/ext-3.0.0/src/locale/ext-lang-hr.js +295 -0
  464. data/public/ext-3.0.0/src/locale/ext-lang-hu.js +296 -0
  465. data/public/ext-3.0.0/src/locale/ext-lang-id.js +302 -0
  466. data/public/ext-3.0.0/src/locale/ext-lang-it.js +295 -0
  467. data/public/ext-3.0.0/src/locale/ext-lang-ja.js +318 -0
  468. data/public/ext-3.0.0/src/locale/ext-lang-ko.js +267 -0
  469. data/public/ext-3.0.0/src/locale/ext-lang-lt.js +333 -0
  470. data/public/ext-3.0.0/src/locale/ext-lang-lv.js +176 -0
  471. data/public/ext-3.0.0/src/locale/ext-lang-mk.js +176 -0
  472. data/public/ext-3.0.0/src/locale/ext-lang-nl.js +323 -0
  473. data/public/ext-3.0.0/src/locale/ext-lang-no_NB.js +294 -0
  474. data/public/ext-3.0.0/src/locale/ext-lang-no_NN.js +294 -0
  475. data/public/ext-3.0.0/src/locale/ext-lang-pl.js +304 -0
  476. data/public/ext-3.0.0/src/locale/ext-lang-pt.js +260 -0
  477. data/public/ext-3.0.0/src/locale/ext-lang-pt_BR.js +302 -0
  478. data/public/ext-3.0.0/src/locale/ext-lang-pt_PT.js +298 -0
  479. data/public/ext-3.0.0/src/locale/ext-lang-ro.js +295 -0
  480. data/public/ext-3.0.0/src/locale/ext-lang-ru.js +319 -0
  481. data/public/ext-3.0.0/src/locale/ext-lang-sk.js +182 -0
  482. data/public/ext-3.0.0/src/locale/ext-lang-sl.js +176 -0
  483. data/public/ext-3.0.0/src/locale/ext-lang-sr.js +179 -0
  484. data/public/ext-3.0.0/src/locale/ext-lang-sr_RS.js +178 -0
  485. data/public/ext-3.0.0/src/locale/ext-lang-sv_SE.js +178 -0
  486. data/public/ext-3.0.0/src/locale/ext-lang-th.js +294 -0
  487. data/public/ext-3.0.0/src/locale/ext-lang-tr.js +306 -0
  488. data/public/ext-3.0.0/src/locale/ext-lang-ukr.js +258 -0
  489. data/public/ext-3.0.0/src/locale/ext-lang-vn.js +181 -0
  490. data/public/ext-3.0.0/src/locale/ext-lang-zh_CN.js +174 -0
  491. data/public/ext-3.0.0/src/locale/ext-lang-zh_TW.js +178 -0
  492. data/public/ext-3.0.0/src/state/CookieProvider.js +91 -0
  493. data/public/ext-3.0.0/src/state/Provider.js +127 -0
  494. data/public/ext-3.0.0/src/state/StateManager.js +69 -0
  495. data/public/ext-3.0.0/src/util/CSS.js +161 -0
  496. data/public/ext-3.0.0/src/util/ClickRepeater.js +200 -0
  497. data/public/ext-3.0.0/src/util/Cookies.js +96 -0
  498. data/public/ext-3.0.0/src/util/Date.js +1317 -0
  499. data/public/ext-3.0.0/src/util/Format.js +356 -0
  500. data/public/ext-3.0.0/src/util/History.js +203 -0
  501. data/public/ext-3.0.0/src/util/KeyMap.js +242 -0
  502. data/public/ext-3.0.0/src/util/KeyNav.js +161 -0
  503. data/public/ext-3.0.0/src/util/MixedCollection.js +576 -0
  504. data/public/ext-3.0.0/src/util/Observable-more.js +178 -0
  505. data/public/ext-3.0.0/src/util/TextMetrics.js +131 -0
  506. data/public/ext-3.0.0/src/util/UpdateManager.js +536 -0
  507. data/public/ext-3.0.0/src/util/XTemplate.js +379 -0
  508. data/public/ext-3.0.0/src/util/core/DelayedTask.js +68 -0
  509. data/public/ext-3.0.0/src/util/core/JSON.js +174 -0
  510. data/public/ext-3.0.0/src/util/core/Observable.js +483 -0
  511. data/public/ext-3.0.0/src/util/core/TaskMgr.js +174 -0
  512. data/public/ext-3.0.0/src/widgets/Action.js +252 -0
  513. data/public/ext-3.0.0/src/widgets/BoxComponent.js +519 -0
  514. data/public/ext-3.0.0/src/widgets/Button.js +762 -0
  515. data/public/ext-3.0.0/src/widgets/ButtonGroup.js +103 -0
  516. data/public/ext-3.0.0/src/widgets/ColorPalette.js +148 -0
  517. data/public/ext-3.0.0/src/widgets/Component.js +1540 -0
  518. data/public/ext-3.0.0/src/widgets/ComponentMgr.js +159 -0
  519. data/public/ext-3.0.0/src/widgets/Container.js +894 -0
  520. data/public/ext-3.0.0/src/widgets/CycleButton.js +188 -0
  521. data/public/ext-3.0.0/src/widgets/DataView.js +749 -0
  522. data/public/ext-3.0.0/src/widgets/DatePicker.js +771 -0
  523. data/public/ext-3.0.0/src/widgets/Editor.js +385 -0
  524. data/public/ext-3.0.0/src/widgets/Layer.js +466 -0
  525. data/public/ext-3.0.0/src/widgets/LoadMask.js +123 -0
  526. data/public/ext-3.0.0/src/widgets/MessageBox.js +626 -0
  527. data/public/ext-3.0.0/src/widgets/PagingToolbar.js +502 -0
  528. data/public/ext-3.0.0/src/widgets/Panel.js +1772 -0
  529. data/public/ext-3.0.0/src/widgets/PanelDD.js +154 -0
  530. data/public/ext-3.0.0/src/widgets/ProgressBar.js +289 -0
  531. data/public/ext-3.0.0/src/widgets/Resizable.js +760 -0
  532. data/public/ext-3.0.0/src/widgets/Shadow.js +192 -0
  533. data/public/ext-3.0.0/src/widgets/Slider.js +426 -0
  534. data/public/ext-3.0.0/src/widgets/SplitBar.js +436 -0
  535. data/public/ext-3.0.0/src/widgets/SplitButton.js +124 -0
  536. data/public/ext-3.0.0/src/widgets/TabPanel.js +1100 -0
  537. data/public/ext-3.0.0/src/widgets/Toolbar.js +781 -0
  538. data/public/ext-3.0.0/src/widgets/Viewport.js +124 -0
  539. data/public/ext-3.0.0/src/widgets/Window.js +941 -0
  540. data/public/ext-3.0.0/src/widgets/WindowManager.js +187 -0
  541. data/public/ext-3.0.0/src/widgets/chart/Chart.js +721 -0
  542. data/public/ext-3.0.0/src/widgets/chart/EventProxy.js +20 -0
  543. data/public/ext-3.0.0/src/widgets/chart/FlashComponent.js +117 -0
  544. data/public/ext-3.0.0/src/widgets/chart/swfobject.js +783 -0
  545. data/public/ext-3.0.0/src/widgets/form/Action.js +626 -0
  546. data/public/ext-3.0.0/src/widgets/form/BasicForm.js +735 -0
  547. data/public/ext-3.0.0/src/widgets/form/Checkbox.js +177 -0
  548. data/public/ext-3.0.0/src/widgets/form/CheckboxGroup.js +419 -0
  549. data/public/ext-3.0.0/src/widgets/form/Combo.js +1232 -0
  550. data/public/ext-3.0.0/src/widgets/form/DateField.js +389 -0
  551. data/public/ext-3.0.0/src/widgets/form/DisplayField.js +98 -0
  552. data/public/ext-3.0.0/src/widgets/form/Field.js +640 -0
  553. data/public/ext-3.0.0/src/widgets/form/FieldSet.js +305 -0
  554. data/public/ext-3.0.0/src/widgets/form/Form.js +335 -0
  555. data/public/ext-3.0.0/src/widgets/form/Hidden.js +39 -0
  556. data/public/ext-3.0.0/src/widgets/form/HtmlEditor.js +1179 -0
  557. data/public/ext-3.0.0/src/widgets/form/Label.js +64 -0
  558. data/public/ext-3.0.0/src/widgets/form/NumberField.js +139 -0
  559. data/public/ext-3.0.0/src/widgets/form/Radio.js +81 -0
  560. data/public/ext-3.0.0/src/widgets/form/RadioGroup.js +116 -0
  561. data/public/ext-3.0.0/src/widgets/form/TextArea.js +117 -0
  562. data/public/ext-3.0.0/src/widgets/form/TextField.js +491 -0
  563. data/public/ext-3.0.0/src/widgets/form/TimeField.js +146 -0
  564. data/public/ext-3.0.0/src/widgets/form/TriggerField.js +328 -0
  565. data/public/ext-3.0.0/src/widgets/form/VTypes.js +135 -0
  566. data/public/ext-3.0.0/src/widgets/grid/AbstractSelectionModel.js +57 -0
  567. data/public/ext-3.0.0/src/widgets/grid/CellSelectionModel.js +262 -0
  568. data/public/ext-3.0.0/src/widgets/grid/CheckboxSelectionModel.js +103 -0
  569. data/public/ext-3.0.0/src/widgets/grid/Column.js +406 -0
  570. data/public/ext-3.0.0/src/widgets/grid/ColumnDD.js +199 -0
  571. data/public/ext-3.0.0/src/widgets/grid/ColumnModel.js +592 -0
  572. data/public/ext-3.0.0/src/widgets/grid/ColumnSplitDD.js +62 -0
  573. data/public/ext-3.0.0/src/widgets/grid/EditorGrid.js +291 -0
  574. data/public/ext-3.0.0/src/widgets/grid/GridDD.js +95 -0
  575. data/public/ext-3.0.0/src/widgets/grid/GridEditor.js +21 -0
  576. data/public/ext-3.0.0/src/widgets/grid/GridPanel.js +952 -0
  577. data/public/ext-3.0.0/src/widgets/grid/GridView.js +1776 -0
  578. data/public/ext-3.0.0/src/widgets/grid/GroupingView.js +517 -0
  579. data/public/ext-3.0.0/src/widgets/grid/PropertyGrid.js +370 -0
  580. data/public/ext-3.0.0/src/widgets/grid/RowNumberer.js +61 -0
  581. data/public/ext-3.0.0/src/widgets/grid/RowSelectionModel.js +530 -0
  582. data/public/ext-3.0.0/src/widgets/layout/AbsoluteLayout.js +82 -0
  583. data/public/ext-3.0.0/src/widgets/layout/AccordionLayout.js +177 -0
  584. data/public/ext-3.0.0/src/widgets/layout/AnchorLayout.js +200 -0
  585. data/public/ext-3.0.0/src/widgets/layout/BorderLayout.js +1108 -0
  586. data/public/ext-3.0.0/src/widgets/layout/BoxLayout.js +417 -0
  587. data/public/ext-3.0.0/src/widgets/layout/CardLayout.js +127 -0
  588. data/public/ext-3.0.0/src/widgets/layout/ColumnLayout.js +130 -0
  589. data/public/ext-3.0.0/src/widgets/layout/ContainerLayout.js +215 -0
  590. data/public/ext-3.0.0/src/widgets/layout/FitLayout.js +48 -0
  591. data/public/ext-3.0.0/src/widgets/layout/FormLayout.js +266 -0
  592. data/public/ext-3.0.0/src/widgets/layout/TableLayout.js +194 -0
  593. data/public/ext-3.0.0/src/widgets/list/ColumnResizer.js +123 -0
  594. data/public/ext-3.0.0/src/widgets/list/ListView.js +357 -0
  595. data/public/ext-3.0.0/src/widgets/list/Sorter.js +70 -0
  596. data/public/ext-3.0.0/src/widgets/menu/BaseItem.js +160 -0
  597. data/public/ext-3.0.0/src/widgets/menu/CheckItem.js +114 -0
  598. data/public/ext-3.0.0/src/widgets/menu/ColorMenu.js +72 -0
  599. data/public/ext-3.0.0/src/widgets/menu/DateMenu.js +90 -0
  600. data/public/ext-3.0.0/src/widgets/menu/Item.js +211 -0
  601. data/public/ext-3.0.0/src/widgets/menu/Menu.js +733 -0
  602. data/public/ext-3.0.0/src/widgets/menu/MenuMgr.js +211 -0
  603. data/public/ext-3.0.0/src/widgets/menu/Separator.js +46 -0
  604. data/public/ext-3.0.0/src/widgets/menu/TextItem.js +46 -0
  605. data/public/ext-3.0.0/src/widgets/tips/QuickTip.js +207 -0
  606. data/public/ext-3.0.0/src/widgets/tips/QuickTips.js +159 -0
  607. data/public/ext-3.0.0/src/widgets/tips/Tip.js +157 -0
  608. data/public/ext-3.0.0/src/widgets/tips/ToolTip.js +492 -0
  609. data/public/ext-3.0.0/src/widgets/tree/AsyncTreeNode.js +114 -0
  610. data/public/ext-3.0.0/src/widgets/tree/TreeDragZone.js +82 -0
  611. data/public/ext-3.0.0/src/widgets/tree/TreeDropZone.js +321 -0
  612. data/public/ext-3.0.0/src/widgets/tree/TreeEditor.js +160 -0
  613. data/public/ext-3.0.0/src/widgets/tree/TreeEventModel.js +169 -0
  614. data/public/ext-3.0.0/src/widgets/tree/TreeFilter.js +114 -0
  615. data/public/ext-3.0.0/src/widgets/tree/TreeLoader.js +342 -0
  616. data/public/ext-3.0.0/src/widgets/tree/TreeNode.js +546 -0
  617. data/public/ext-3.0.0/src/widgets/tree/TreeNodeUI.js +633 -0
  618. data/public/ext-3.0.0/src/widgets/tree/TreePanel.js +918 -0
  619. data/public/ext-3.0.0/src/widgets/tree/TreeSelectionModel.js +315 -0
  620. data/public/ext-3.0.0/src/widgets/tree/TreeSorter.js +106 -0
  621. data/public/js/ext-portal.js +235 -0
  622. data/public/js/global.js +7 -0
  623. data/public/js/outerframe.js +47 -0
  624. data/public/js/portal.js +713 -0
  625. data/public/js/test_chart.js +152 -0
  626. data/test/config.rb +62 -0
  627. data/test/config/hosts.yaml +5 -0
  628. data/test/config/log.yaml +1 -0
  629. data/test/config/memcache.yaml +5 -0
  630. data/test/exception.rb +39 -0
  631. data/test/method_missing.rb +14 -0
  632. data/test/module.rb +39 -0
  633. data/test/remote_lmp.rb +126 -0
  634. data/test/sinatra.rb +29 -0
  635. data/test/sinatra_base.rb +16 -0
  636. metadata +690 -0
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Ext JS Library 3.0.0
3
+ * Copyright(c) 2006-2009 Ext JS, LLC
4
+ * licensing@extjs.com
5
+ * http://www.extjs.com/license
6
+ */
7
+ Ext.History=(function(){var e,c;var j=false;var d;function f(){var k=top.location.href,l=k.indexOf("#");return l>=0?k.substr(l+1):null}function a(){c.value=d}function g(k){d=k;Ext.History.fireEvent("change",k)}function h(l){var k=['<html><body><div id="state">',l,"</div></body></html>"].join("");try{var n=e.contentWindow.document;n.open();n.write(k);n.close();return true}catch(m){return false}}function b(){if(!e.contentWindow||!e.contentWindow.document){setTimeout(b,10);return}var n=e.contentWindow.document;var l=n.getElementById("state");var k=l?l.innerText:null;var m=f();setInterval(function(){n=e.contentWindow.document;l=n.getElementById("state");var p=l?l.innerText:null;var o=f();if(p!==k){k=p;g(k);top.location.hash=k;m=k;a()}else{if(o!==m){m=o;h(o)}}},50);j=true;Ext.History.fireEvent("ready",Ext.History)}function i(){d=c.value?c.value:f();if(Ext.isIE){b()}else{var k=f();setInterval(function(){var l=f();if(l!==k){k=l;g(k);a()}},50);j=true;Ext.History.fireEvent("ready",Ext.History)}}return{fieldId:"x-history-field",iframeId:"x-history-frame",events:{},init:function(l,k){if(j){Ext.callback(l,k,[this]);return}if(!Ext.isReady){Ext.onReady(function(){Ext.History.init(l,k)});return}c=Ext.getDom(Ext.History.fieldId);if(Ext.isIE){e=Ext.getDom(Ext.History.iframeId)}this.addEvents("ready","change");if(l){this.on("ready",l,k,{single:true})}i()},add:function(k,l){if(l!==false){if(this.getToken()==k){return true}}if(Ext.isIE){return h(k)}else{top.location.hash=k;return true}},back:function(){history.go(-1)},forward:function(){history.go(1)},getToken:function(){return j?d:f()}}})();Ext.apply(Ext.History,new Ext.util.Observable());
@@ -0,0 +1,1628 @@
1
+ /*!
2
+ * Ext JS Library 3.0.0
3
+ * Copyright(c) 2006-2009 Ext JS, LLC
4
+ * licensing@extjs.com
5
+ * http://www.extjs.com/license
6
+ */
7
+ /**
8
+ * @class Ext.layout.MenuLayout
9
+ * @extends Ext.layout.ContainerLayout
10
+ * <p>Layout manager used by {@link Ext.menu.Menu}. Generally this class should not need to be used directly.</p>
11
+ */
12
+ Ext.layout.MenuLayout = Ext.extend(Ext.layout.ContainerLayout, {
13
+ monitorResize: true,
14
+
15
+ setContainer : function(ct){
16
+ this.monitorResize = !ct.floating;
17
+ Ext.layout.MenuLayout.superclass.setContainer.call(this, ct);
18
+ },
19
+
20
+ renderItem : function(c, position, target){
21
+ if (!this.itemTpl) {
22
+ this.itemTpl = Ext.layout.MenuLayout.prototype.itemTpl = new Ext.XTemplate(
23
+ '<li id="{itemId}" class="{itemCls}">',
24
+ '<tpl if="needsIcon">',
25
+ '<img src="{icon}" class="{iconCls}"/>',
26
+ '</tpl>',
27
+ '</li>'
28
+ );
29
+ }
30
+
31
+ if(c && !c.rendered){
32
+ if(Ext.isNumber(position)){
33
+ position = target.dom.childNodes[position];
34
+ }
35
+ var a = this.getItemArgs(c);
36
+
37
+ // The Component's positionEl is the <li> it is rendered into
38
+ c.render(c.positionEl = position ?
39
+ this.itemTpl.insertBefore(position, a, true) :
40
+ this.itemTpl.append(target, a, true));
41
+
42
+ // Link the containing <li> to the item.
43
+ c.positionEl.menuItemId = c.itemId || c.id;
44
+
45
+ // If rendering a regular Component, and it needs an icon,
46
+ // move the Component rightwards.
47
+ if (!a.isMenuItem && a.needsIcon) {
48
+ c.positionEl.addClass('x-menu-list-item-indent');
49
+ }
50
+ }else if(c && !this.isValidParent(c, target)){
51
+ if(Ext.isNumber(position)){
52
+ position = target.dom.childNodes[position];
53
+ }
54
+ target.dom.insertBefore(c.getActionEl().dom, position || null);
55
+ }
56
+ },
57
+
58
+ getItemArgs: function(c) {
59
+ var isMenuItem = c instanceof Ext.menu.Item;
60
+ return {
61
+ isMenuItem: isMenuItem,
62
+ needsIcon: !isMenuItem && (c.icon || c.iconCls),
63
+ icon: c.icon || Ext.BLANK_IMAGE_URL,
64
+ iconCls: 'x-menu-item-icon ' + (c.iconCls || ''),
65
+ itemId: 'x-menu-el-' + c.id,
66
+ itemCls: 'x-menu-list-item ' + (this.extraCls || '')
67
+ };
68
+ },
69
+
70
+ // Valid if the Component is in a <li> which is part of our target <ul>
71
+ isValidParent: function(c, target) {
72
+ return c.el.up('li.x-menu-list-item', 5).dom.parentNode === (target.dom || target);
73
+ },
74
+
75
+ onLayout : function(ct, target){
76
+ this.renderAll(ct, target);
77
+ this.doAutoSize();
78
+ },
79
+
80
+ doAutoSize : function(){
81
+ var ct = this.container, w = ct.width;
82
+ if(ct.floating){
83
+ if(w){
84
+ ct.setWidth(w);
85
+ }else if(Ext.isIE){
86
+ ct.setWidth(Ext.isStrict && (Ext.isIE7 || Ext.isIE8) ? 'auto' : ct.minWidth);
87
+ var el = ct.getEl(), t = el.dom.offsetWidth; // force recalc
88
+ ct.setWidth(ct.getLayoutTarget().getWidth() + el.getFrameWidth('lr'));
89
+ }
90
+ }
91
+ }
92
+ });
93
+ Ext.Container.LAYOUTS['menu'] = Ext.layout.MenuLayout;
94
+
95
+ /**
96
+ * @class Ext.menu.Menu
97
+ * @extends Ext.Container
98
+ * <p>A menu object. This is the container to which you may add menu items. Menu can also serve as a base class
99
+ * when you want a specialized menu based off of another component (like {@link Ext.menu.DateMenu} for example).</p>
100
+ * <p>Menus may contain either {@link Ext.menu.Item menu items}, or general {@link Ext.Component Component}s.</p>
101
+ * <p>To make a contained general {@link Ext.Component Component} line up with other {@link Ext.menu.Item menu items}
102
+ * specify <tt>iconCls: 'no-icon'</tt>. This reserves a space for an icon, and indents the Component in line
103
+ * with the other menu items. See {@link Ext.form.ComboBox}.{@link Ext.form.ComboBox#getListParent getListParent}
104
+ * for an example.</p>
105
+ * <p>By default, Menus are absolutely positioned, floating Components. By configuring a Menu with
106
+ * <b><tt>{@link #floating}:false</tt></b>, a Menu may be used as child of a Container.</p>
107
+ *
108
+ * @xtype menu
109
+ */
110
+ Ext.menu.Menu = Ext.extend(Ext.Container, {
111
+ /**
112
+ * @cfg {Object} defaults
113
+ * A config object that will be applied to all items added to this container either via the {@link #items}
114
+ * config or via the {@link #add} method. The defaults config can contain any number of
115
+ * name/value property pairs to be added to each item, and should be valid for the types of items
116
+ * being added to the menu.
117
+ */
118
+ /**
119
+ * @cfg {Mixed} items
120
+ * An array of items to be added to this menu. Menus may contain either {@link Ext.menu.Item menu items},
121
+ * or general {@link Ext.Component Component}s.
122
+ */
123
+ /**
124
+ * @cfg {Number} minWidth The minimum width of the menu in pixels (defaults to 120)
125
+ */
126
+ minWidth : 120,
127
+ /**
128
+ * @cfg {Boolean/String} shadow True or "sides" for the default effect, "frame" for 4-way shadow, and "drop"
129
+ * for bottom-right shadow (defaults to "sides")
130
+ */
131
+ shadow : "sides",
132
+ /**
133
+ * @cfg {String} subMenuAlign The {@link Ext.Element#alignTo} anchor position value to use for submenus of
134
+ * this menu (defaults to "tl-tr?")
135
+ */
136
+ subMenuAlign : "tl-tr?",
137
+ /**
138
+ * @cfg {String} defaultAlign The default {@link Ext.Element#alignTo} anchor position value for this menu
139
+ * relative to its element of origin (defaults to "tl-bl?")
140
+ */
141
+ defaultAlign : "tl-bl?",
142
+ /**
143
+ * @cfg {Boolean} allowOtherMenus True to allow multiple menus to be displayed at the same time (defaults to false)
144
+ */
145
+ allowOtherMenus : false,
146
+ /**
147
+ * @cfg {Boolean} ignoreParentClicks True to ignore clicks on any item in this menu that is a parent item (displays
148
+ * a submenu) so that the submenu is not dismissed when clicking the parent item (defaults to false).
149
+ */
150
+ ignoreParentClicks : false,
151
+ /**
152
+ * @cfg {Boolean} enableScrolling True to allow the menu container to have scroller controls if the menu is too long (defaults to true).
153
+ */
154
+ enableScrolling: true,
155
+ /**
156
+ * @cfg {Number} maxHeight The maximum height of the menu. Only applies when enableScrolling is set to True (defaults to null).
157
+ */
158
+ maxHeight: null,
159
+ /**
160
+ * @cfg {Number} scrollIncrement The amount to scroll the menu. Only applies when enableScrolling is set to True (defaults to 24).
161
+ */
162
+ scrollIncrement: 24,
163
+ /**
164
+ * @cfg {Boolean} showSeparator True to show the icon separator. (defaults to true).
165
+ */
166
+ showSeparator: true,
167
+ /**
168
+ * @cfg {Array} defaultOffsets An array specifying the [x, y] offset in pixels by which to
169
+ * change the default Menu popup position after aligning according to the {@link #defaultAlign}
170
+ * configuration. Defaults to <tt>[0, 0]</tt>.
171
+ */
172
+ defaultOffsets : [0, 0],
173
+
174
+
175
+ /**
176
+ * @cfg {Boolean} floating
177
+ * May be specified as false to create a Menu which may be used as a child item of another Container
178
+ * instead of a free-floating {@link Ext.Layer Layer}. (defaults to true).
179
+ */
180
+ floating: true, // Render as a Layer by default
181
+
182
+ // private
183
+ hidden: true,
184
+ layout: 'menu',
185
+ hideMode: 'offsets', // Important for laying out Components
186
+ scrollerHeight: 8,
187
+ autoLayout: true, // Provided for backwards compat
188
+ defaultType: 'menuitem',
189
+
190
+ initComponent: function(){
191
+ if(Ext.isArray(this.initialConfig)){
192
+ Ext.apply(this, {items:this.initialConfig});
193
+ }
194
+ this.addEvents(
195
+ /**
196
+ * @event click
197
+ * Fires when this menu is clicked (or when the enter key is pressed while it is active)
198
+ * @param {Ext.menu.Menu} this
199
+ * @param {Ext.menu.Item} menuItem The menu item that was clicked
200
+ * @param {Ext.EventObject} e
201
+ */
202
+ 'click',
203
+ /**
204
+ * @event mouseover
205
+ * Fires when the mouse is hovering over this menu
206
+ * @param {Ext.menu.Menu} this
207
+ * @param {Ext.EventObject} e
208
+ * @param {Ext.menu.Item} menuItem The menu item that was clicked
209
+ */
210
+ 'mouseover',
211
+ /**
212
+ * @event mouseout
213
+ * Fires when the mouse exits this menu
214
+ * @param {Ext.menu.Menu} this
215
+ * @param {Ext.EventObject} e
216
+ * @param {Ext.menu.Item} menuItem The menu item that was clicked
217
+ */
218
+ 'mouseout',
219
+ /**
220
+ * @event itemclick
221
+ * Fires when a menu item contained in this menu is clicked
222
+ * @param {Ext.menu.BaseItem} baseItem The BaseItem that was clicked
223
+ * @param {Ext.EventObject} e
224
+ */
225
+ 'itemclick'
226
+ );
227
+ Ext.menu.MenuMgr.register(this);
228
+ if(this.floating){
229
+ Ext.EventManager.onWindowResize(this.hide, this);
230
+ }else{
231
+ if(this.initialConfig.hidden !== false){
232
+ this.hidden = false;
233
+ }
234
+ this.internalDefaults = {hideOnClick: false};
235
+ }
236
+ Ext.menu.Menu.superclass.initComponent.call(this);
237
+ if(this.autoLayout){
238
+ this.on({
239
+ add: this.doLayout,
240
+ remove: this.doLayout,
241
+ scope: this
242
+ });
243
+ }
244
+ },
245
+
246
+ //private
247
+ getLayoutTarget : function() {
248
+ return this.ul;
249
+ },
250
+
251
+ // private
252
+ onRender : function(ct, position){
253
+ if(!ct){
254
+ ct = Ext.getBody();
255
+ }
256
+
257
+ var dh = {
258
+ id: this.getId(),
259
+ cls: 'x-menu ' + ((this.floating) ? 'x-menu-floating x-layer ' : '') + (this.cls || '') + (this.plain ? ' x-menu-plain' : '') + (this.showSeparator ? '' : ' x-menu-nosep'),
260
+ style: this.style,
261
+ cn: [
262
+ {tag: 'a', cls: 'x-menu-focus', href: '#', onclick: 'return false;', tabIndex: '-1'},
263
+ {tag: 'ul', cls: 'x-menu-list'}
264
+ ]
265
+ };
266
+ if(this.floating){
267
+ this.el = new Ext.Layer({
268
+ shadow: this.shadow,
269
+ dh: dh,
270
+ constrain: false,
271
+ parentEl: ct,
272
+ zindex:15000
273
+ });
274
+ }else{
275
+ this.el = ct.createChild(dh);
276
+ }
277
+ Ext.menu.Menu.superclass.onRender.call(this, ct, position);
278
+
279
+ if(!this.keyNav){
280
+ this.keyNav = new Ext.menu.MenuNav(this);
281
+ }
282
+ // generic focus element
283
+ this.focusEl = this.el.child('a.x-menu-focus');
284
+ this.ul = this.el.child('ul.x-menu-list');
285
+ this.mon(this.ul, {
286
+ scope: this,
287
+ click: this.onClick,
288
+ mouseover: this.onMouseOver,
289
+ mouseout: this.onMouseOut
290
+ });
291
+ if(this.enableScrolling){
292
+ this.mon(this.el, {
293
+ scope: this,
294
+ delegate: '.x-menu-scroller',
295
+ click: this.onScroll,
296
+ mouseover: this.deactivateActive
297
+ });
298
+ }
299
+ },
300
+
301
+ // private
302
+ findTargetItem : function(e){
303
+ var t = e.getTarget(".x-menu-list-item", this.ul, true);
304
+ if(t && t.menuItemId){
305
+ return this.items.get(t.menuItemId);
306
+ }
307
+ },
308
+
309
+ // private
310
+ onClick : function(e){
311
+ var t = this.findTargetItem(e);
312
+ if(t){
313
+ if(t.isFormField){
314
+ this.setActiveItem(t);
315
+ }else{
316
+ if(t.menu && this.ignoreParentClicks){
317
+ t.expandMenu();
318
+ e.preventDefault();
319
+ }else if(t.onClick){
320
+ t.onClick(e);
321
+ this.fireEvent("click", this, t, e);
322
+ }
323
+ }
324
+ }
325
+ },
326
+
327
+ // private
328
+ setActiveItem : function(item, autoExpand){
329
+ if(item != this.activeItem){
330
+ this.deactivateActive();
331
+ if((this.activeItem = item).isFormField){
332
+ item.focus();
333
+ }else{
334
+ item.activate(autoExpand);
335
+ }
336
+ }else if(autoExpand){
337
+ item.expandMenu();
338
+ }
339
+ },
340
+
341
+ deactivateActive: function(){
342
+ var a = this.activeItem;
343
+ if(a){
344
+ if(a.isFormField){
345
+ //Fields cannot deactivate, but Combos must collapse
346
+ if(a.collapse){
347
+ a.collapse();
348
+ }
349
+ }else{
350
+ a.deactivate();
351
+ }
352
+ delete this.activeItem;
353
+ }
354
+ },
355
+
356
+ // private
357
+ tryActivate : function(start, step){
358
+ var items = this.items;
359
+ for(var i = start, len = items.length; i >= 0 && i < len; i+= step){
360
+ var item = items.get(i);
361
+ if(!item.disabled && (item.canActivate || item.isFormField)){
362
+ this.setActiveItem(item, false);
363
+ return item;
364
+ }
365
+ }
366
+ return false;
367
+ },
368
+
369
+ // private
370
+ onMouseOver : function(e){
371
+ var t = this.findTargetItem(e);
372
+ if(t){
373
+ if(t.canActivate && !t.disabled){
374
+ this.setActiveItem(t, true);
375
+ }
376
+ }
377
+ this.over = true;
378
+ this.fireEvent("mouseover", this, e, t);
379
+ },
380
+
381
+ // private
382
+ onMouseOut : function(e){
383
+ var t = this.findTargetItem(e);
384
+ if(t){
385
+ if(t == this.activeItem && t.shouldDeactivate && t.shouldDeactivate(e)){
386
+ this.activeItem.deactivate();
387
+ delete this.activeItem;
388
+ }
389
+ }
390
+ this.over = false;
391
+ this.fireEvent("mouseout", this, e, t);
392
+ },
393
+
394
+ // private
395
+ onScroll: function(e, t){
396
+ if(e){
397
+ e.stopEvent();
398
+ }
399
+ var ul = this.ul.dom, top = Ext.fly(t).is('.x-menu-scroller-top');
400
+ ul.scrollTop += this.scrollIncrement * (top ? -1 : 1);
401
+ if(top ? ul.scrollTop <= 0 : ul.scrollTop + this.activeMax >= ul.scrollHeight){
402
+ this.onScrollerOut(null, t);
403
+ }
404
+ },
405
+
406
+ // private
407
+ onScrollerIn: function(e, t){
408
+ var ul = this.ul.dom, top = Ext.fly(t).is('.x-menu-scroller-top');
409
+ if(top ? ul.scrollTop > 0 : ul.scrollTop + this.activeMax < ul.scrollHeight){
410
+ Ext.fly(t).addClass(['x-menu-item-active', 'x-menu-scroller-active']);
411
+ }
412
+ },
413
+
414
+ // private
415
+ onScrollerOut: function(e, t){
416
+ Ext.fly(t).removeClass(['x-menu-item-active', 'x-menu-scroller-active']);
417
+ },
418
+
419
+ /**
420
+ * Displays this menu relative to another element
421
+ * @param {Mixed} element The element to align to
422
+ * @param {String} position (optional) The {@link Ext.Element#alignTo} anchor position to use in aligning to
423
+ * the element (defaults to this.defaultAlign)
424
+ * @param {Ext.menu.Menu} parentMenu (optional) This menu's parent menu, if applicable (defaults to undefined)
425
+ */
426
+ show : function(el, pos, parentMenu){
427
+ if(this.floating){
428
+ this.parentMenu = parentMenu;
429
+ if(!this.el){
430
+ this.render();
431
+ this.doLayout(false, true);
432
+ }
433
+ if(this.fireEvent('beforeshow', this) !== false){
434
+ this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign, this.defaultOffsets), parentMenu, false);
435
+ }
436
+ }else{
437
+ Ext.menu.Menu.superclass.show.call(this);
438
+ }
439
+ },
440
+
441
+ /**
442
+ * Displays this menu at a specific xy position
443
+ * @param {Array} xyPosition Contains X & Y [x, y] values for the position at which to show the menu (coordinates are page-based)
444
+ * @param {Ext.menu.Menu} parentMenu (optional) This menu's parent menu, if applicable (defaults to undefined)
445
+ */
446
+ showAt : function(xy, parentMenu, /* private: */_e){
447
+ this.parentMenu = parentMenu;
448
+ if(!this.el){
449
+ this.render();
450
+ }
451
+ this.el.setXY(xy);
452
+ if(this.enableScrolling){
453
+ this.constrainScroll(xy[1]);
454
+ }
455
+ this.el.show();
456
+ Ext.menu.Menu.superclass.onShow.call(this);
457
+ if(Ext.isIE){
458
+ this.layout.doAutoSize();
459
+ if(!Ext.isIE8){
460
+ this.el.repaint();
461
+ }
462
+ }
463
+ this.hidden = false;
464
+ this.focus();
465
+ this.fireEvent("show", this);
466
+ },
467
+
468
+ constrainScroll: function(y){
469
+ var max, full = this.ul.setHeight('auto').getHeight();
470
+ if(this.floating){
471
+ max = this.maxHeight ? this.maxHeight : Ext.fly(this.el.dom.parentNode).getViewSize().height - y;
472
+ }else{
473
+ max = this.getHeight();
474
+ }
475
+ if(full > max && max > 0){
476
+ this.activeMax = max - this.scrollerHeight * 2 - this.el.getFrameWidth('tb') - Ext.num(this.el.shadowOffset, 0);
477
+ this.ul.setHeight(this.activeMax);
478
+ this.createScrollers();
479
+ this.el.select('.x-menu-scroller').setDisplayed('');
480
+ }else{
481
+ this.ul.setHeight(full);
482
+ this.el.select('.x-menu-scroller').setDisplayed('none');
483
+ }
484
+ this.ul.dom.scrollTop = 0;
485
+ },
486
+
487
+ createScrollers: function(){
488
+ if(!this.scroller){
489
+ this.scroller = {
490
+ pos: 0,
491
+ top: this.el.insertFirst({
492
+ tag: 'div',
493
+ cls: 'x-menu-scroller x-menu-scroller-top',
494
+ html: '&#160;'
495
+ }),
496
+ bottom: this.el.createChild({
497
+ tag: 'div',
498
+ cls: 'x-menu-scroller x-menu-scroller-bottom',
499
+ html: '&#160;'
500
+ })
501
+ };
502
+ this.scroller.top.hover(this.onScrollerIn, this.onScrollerOut, this);
503
+ this.scroller.topRepeater = new Ext.util.ClickRepeater(this.scroller.top, {
504
+ listeners: {
505
+ click: this.onScroll.createDelegate(this, [null, this.scroller.top], false)
506
+ }
507
+ });
508
+ this.scroller.bottom.hover(this.onScrollerIn, this.onScrollerOut, this);
509
+ this.scroller.bottomRepeater = new Ext.util.ClickRepeater(this.scroller.bottom, {
510
+ listeners: {
511
+ click: this.onScroll.createDelegate(this, [null, this.scroller.bottom], false)
512
+ }
513
+ });
514
+ }
515
+ },
516
+
517
+ onLayout: function(){
518
+ if(this.isVisible()){
519
+ if(this.enableScrolling){
520
+ this.constrainScroll(this.el.getTop());
521
+ }
522
+ if(this.floating){
523
+ this.el.sync();
524
+ }
525
+ }
526
+ },
527
+
528
+ focus : function(){
529
+ if(!this.hidden){
530
+ this.doFocus.defer(50, this);
531
+ }
532
+ },
533
+
534
+ doFocus : function(){
535
+ if(!this.hidden){
536
+ this.focusEl.focus();
537
+ }
538
+ },
539
+
540
+ /**
541
+ * Hides this menu and optionally all parent menus
542
+ * @param {Boolean} deep (optional) True to hide all parent menus recursively, if any (defaults to false)
543
+ */
544
+ hide : function(deep){
545
+ this.deepHide = deep;
546
+ Ext.menu.Menu.superclass.hide.call(this);
547
+ delete this.deepHide;
548
+ },
549
+
550
+ // private
551
+ onHide: function(){
552
+ Ext.menu.Menu.superclass.onHide.call(this);
553
+ this.deactivateActive();
554
+ if(this.el && this.floating){
555
+ this.el.hide();
556
+ }
557
+ if(this.deepHide === true && this.parentMenu){
558
+ this.parentMenu.hide(true);
559
+ }
560
+ },
561
+
562
+ // private
563
+ lookupComponent: function(c){
564
+ if(Ext.isString(c)){
565
+ c = (c == 'separator' || c == '-') ? new Ext.menu.Separator() : new Ext.menu.TextItem(c);
566
+ this.applyDefaults(c);
567
+ }else{
568
+ if(Ext.isObject(c)){
569
+ c = this.getMenuItem(c);
570
+ }else if(c.tagName || c.el){ // element. Wrap it.
571
+ c = new Ext.BoxComponent({
572
+ el: c
573
+ });
574
+ }
575
+ }
576
+ return c;
577
+ },
578
+
579
+ applyDefaults : function(c){
580
+ if(!Ext.isString(c)){
581
+ c = Ext.menu.Menu.superclass.applyDefaults.call(this, c);
582
+ var d = this.internalDefaults;
583
+ if(d){
584
+ if(c.events){
585
+ Ext.applyIf(c.initialConfig, d);
586
+ Ext.apply(c, d);
587
+ }else{
588
+ Ext.applyIf(c, d);
589
+ }
590
+ }
591
+ }
592
+ return c;
593
+ },
594
+
595
+ // private
596
+ getMenuItem: function(config){
597
+ if(!config.isXType){
598
+ if(!config.xtype && Ext.isBoolean(config.checked)){
599
+ return new Ext.menu.CheckItem(config)
600
+ }
601
+ return Ext.create(config, this.defaultType);
602
+ }
603
+ return config;
604
+ },
605
+
606
+ /**
607
+ * Adds a separator bar to the menu
608
+ * @return {Ext.menu.Item} The menu item that was added
609
+ */
610
+ addSeparator : function(){
611
+ return this.add(new Ext.menu.Separator());
612
+ },
613
+
614
+ /**
615
+ * Adds an {@link Ext.Element} object to the menu
616
+ * @param {Mixed} el The element or DOM node to add, or its id
617
+ * @return {Ext.menu.Item} The menu item that was added
618
+ */
619
+ addElement : function(el){
620
+ return this.add(new Ext.menu.BaseItem(el));
621
+ },
622
+
623
+ /**
624
+ * Adds an existing object based on {@link Ext.menu.BaseItem} to the menu
625
+ * @param {Ext.menu.Item} item The menu item to add
626
+ * @return {Ext.menu.Item} The menu item that was added
627
+ */
628
+ addItem : function(item){
629
+ return this.add(item);
630
+ },
631
+
632
+ /**
633
+ * Creates a new {@link Ext.menu.Item} based an the supplied config object and adds it to the menu
634
+ * @param {Object} config A MenuItem config object
635
+ * @return {Ext.menu.Item} The menu item that was added
636
+ */
637
+ addMenuItem : function(config){
638
+ return this.add(this.getMenuItem(config));
639
+ },
640
+
641
+ /**
642
+ * Creates a new {@link Ext.menu.TextItem} with the supplied text and adds it to the menu
643
+ * @param {String} text The text to display in the menu item
644
+ * @return {Ext.menu.Item} The menu item that was added
645
+ */
646
+ addText : function(text){
647
+ return this.add(new Ext.menu.TextItem(text));
648
+ },
649
+
650
+ //private
651
+ onDestroy : function(){
652
+ Ext.menu.Menu.superclass.onDestroy.call(this);
653
+ Ext.menu.MenuMgr.unregister(this);
654
+ Ext.EventManager.removeResizeListener(this.hide, this);
655
+ if(this.keyNav) {
656
+ this.keyNav.disable();
657
+ }
658
+ var s = this.scroller;
659
+ if(s){
660
+ Ext.destroy(s.topRepeater, s.bottomRepeater, s.top, s.bottom);
661
+ }
662
+ }
663
+ });
664
+
665
+ Ext.reg('menu', Ext.menu.Menu);
666
+
667
+ // MenuNav is a private utility class used internally by the Menu
668
+ Ext.menu.MenuNav = Ext.extend(Ext.KeyNav, function(){
669
+ function up(e, m){
670
+ if(!m.tryActivate(m.items.indexOf(m.activeItem)-1, -1)){
671
+ m.tryActivate(m.items.length-1, -1);
672
+ }
673
+ }
674
+ function down(e, m){
675
+ if(!m.tryActivate(m.items.indexOf(m.activeItem)+1, 1)){
676
+ m.tryActivate(0, 1);
677
+ }
678
+ }
679
+ return {
680
+ constructor: function(menu){
681
+ Ext.menu.MenuNav.superclass.constructor.call(this, menu.el);
682
+ this.scope = this.menu = menu;
683
+ },
684
+
685
+ doRelay : function(e, h){
686
+ var k = e.getKey();
687
+ // Keystrokes within a form Field (e.g.: down in a Combo) do not navigate. Allow only TAB
688
+ if (this.menu.activeItem && this.menu.activeItem.isFormField && k != e.TAB) {
689
+ return false;
690
+ }
691
+ if(!this.menu.activeItem && e.isNavKeyPress() && k != e.SPACE && k != e.RETURN){
692
+ this.menu.tryActivate(0, 1);
693
+ return false;
694
+ }
695
+ return h.call(this.scope || this, e, this.menu);
696
+ },
697
+
698
+ tab: function(e, m) {
699
+ e.stopEvent();
700
+ if (e.shiftKey) {
701
+ up(e, m);
702
+ } else {
703
+ down(e, m);
704
+ }
705
+ },
706
+
707
+ up : up,
708
+
709
+ down : down,
710
+
711
+ right : function(e, m){
712
+ if(m.activeItem){
713
+ m.activeItem.expandMenu(true);
714
+ }
715
+ },
716
+
717
+ left : function(e, m){
718
+ m.hide();
719
+ if(m.parentMenu && m.parentMenu.activeItem){
720
+ m.parentMenu.activeItem.activate();
721
+ }
722
+ },
723
+
724
+ enter : function(e, m){
725
+ if(m.activeItem){
726
+ e.stopPropagation();
727
+ m.activeItem.onClick(e);
728
+ m.fireEvent("click", this, m.activeItem);
729
+ return true;
730
+ }
731
+ }
732
+ };
733
+ }());/**
734
+ * @class Ext.menu.MenuMgr
735
+ * Provides a common registry of all menu items on a page so that they can be easily accessed by id.
736
+ * @singleton
737
+ */
738
+ Ext.menu.MenuMgr = function(){
739
+ var menus, active, groups = {}, attached = false, lastShow = new Date();
740
+
741
+ // private - called when first menu is created
742
+ function init(){
743
+ menus = {};
744
+ active = new Ext.util.MixedCollection();
745
+ Ext.getDoc().addKeyListener(27, function(){
746
+ if(active.length > 0){
747
+ hideAll();
748
+ }
749
+ });
750
+ }
751
+
752
+ // private
753
+ function hideAll(){
754
+ if(active && active.length > 0){
755
+ var c = active.clone();
756
+ c.each(function(m){
757
+ m.hide();
758
+ });
759
+ }
760
+ }
761
+
762
+ // private
763
+ function onHide(m){
764
+ active.remove(m);
765
+ if(active.length < 1){
766
+ Ext.getDoc().un("mousedown", onMouseDown);
767
+ attached = false;
768
+ }
769
+ }
770
+
771
+ // private
772
+ function onShow(m){
773
+ var last = active.last();
774
+ lastShow = new Date();
775
+ active.add(m);
776
+ if(!attached){
777
+ Ext.getDoc().on("mousedown", onMouseDown);
778
+ attached = true;
779
+ }
780
+ if(m.parentMenu){
781
+ m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
782
+ m.parentMenu.activeChild = m;
783
+ }else if(last && last.isVisible()){
784
+ m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
785
+ }
786
+ }
787
+
788
+ // private
789
+ function onBeforeHide(m){
790
+ if(m.activeChild){
791
+ m.activeChild.hide();
792
+ }
793
+ if(m.autoHideTimer){
794
+ clearTimeout(m.autoHideTimer);
795
+ delete m.autoHideTimer;
796
+ }
797
+ }
798
+
799
+ // private
800
+ function onBeforeShow(m){
801
+ var pm = m.parentMenu;
802
+ if(!pm && !m.allowOtherMenus){
803
+ hideAll();
804
+ }else if(pm && pm.activeChild){
805
+ pm.activeChild.hide();
806
+ }
807
+ }
808
+
809
+ // private
810
+ function onMouseDown(e){
811
+ if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){
812
+ hideAll();
813
+ }
814
+ }
815
+
816
+ // private
817
+ function onBeforeCheck(mi, state){
818
+ if(state){
819
+ var g = groups[mi.group];
820
+ for(var i = 0, l = g.length; i < l; i++){
821
+ if(g[i] != mi){
822
+ g[i].setChecked(false);
823
+ }
824
+ }
825
+ }
826
+ }
827
+
828
+ return {
829
+
830
+ /**
831
+ * Hides all menus that are currently visible
832
+ */
833
+ hideAll : function(){
834
+ hideAll();
835
+ },
836
+
837
+ // private
838
+ register : function(menu){
839
+ if(!menus){
840
+ init();
841
+ }
842
+ menus[menu.id] = menu;
843
+ menu.on("beforehide", onBeforeHide);
844
+ menu.on("hide", onHide);
845
+ menu.on("beforeshow", onBeforeShow);
846
+ menu.on("show", onShow);
847
+ var g = menu.group;
848
+ if(g && menu.events["checkchange"]){
849
+ if(!groups[g]){
850
+ groups[g] = [];
851
+ }
852
+ groups[g].push(menu);
853
+ menu.on("checkchange", onCheck);
854
+ }
855
+ },
856
+
857
+ /**
858
+ * Returns a {@link Ext.menu.Menu} object
859
+ * @param {String/Object} menu The string menu id, an existing menu object reference, or a Menu config that will
860
+ * be used to generate and return a new Menu instance.
861
+ * @return {Ext.menu.Menu} The specified menu, or null if none are found
862
+ */
863
+ get : function(menu){
864
+ if(typeof menu == "string"){ // menu id
865
+ if(!menus){ // not initialized, no menus to return
866
+ return null;
867
+ }
868
+ return menus[menu];
869
+ }else if(menu.events){ // menu instance
870
+ return menu;
871
+ }else if(typeof menu.length == 'number'){ // array of menu items?
872
+ return new Ext.menu.Menu({items:menu});
873
+ }else{ // otherwise, must be a config
874
+ return Ext.create(menu, 'menu');
875
+ }
876
+ },
877
+
878
+ // private
879
+ unregister : function(menu){
880
+ delete menus[menu.id];
881
+ menu.un("beforehide", onBeforeHide);
882
+ menu.un("hide", onHide);
883
+ menu.un("beforeshow", onBeforeShow);
884
+ menu.un("show", onShow);
885
+ var g = menu.group;
886
+ if(g && menu.events["checkchange"]){
887
+ groups[g].remove(menu);
888
+ menu.un("checkchange", onCheck);
889
+ }
890
+ },
891
+
892
+ // private
893
+ registerCheckable : function(menuItem){
894
+ var g = menuItem.group;
895
+ if(g){
896
+ if(!groups[g]){
897
+ groups[g] = [];
898
+ }
899
+ groups[g].push(menuItem);
900
+ menuItem.on("beforecheckchange", onBeforeCheck);
901
+ }
902
+ },
903
+
904
+ // private
905
+ unregisterCheckable : function(menuItem){
906
+ var g = menuItem.group;
907
+ if(g){
908
+ groups[g].remove(menuItem);
909
+ menuItem.un("beforecheckchange", onBeforeCheck);
910
+ }
911
+ },
912
+
913
+ getCheckedItem : function(groupId){
914
+ var g = groups[groupId];
915
+ if(g){
916
+ for(var i = 0, l = g.length; i < l; i++){
917
+ if(g[i].checked){
918
+ return g[i];
919
+ }
920
+ }
921
+ }
922
+ return null;
923
+ },
924
+
925
+ setCheckedItem : function(groupId, itemId){
926
+ var g = groups[groupId];
927
+ if(g){
928
+ for(var i = 0, l = g.length; i < l; i++){
929
+ if(g[i].id == itemId){
930
+ g[i].setChecked(true);
931
+ }
932
+ }
933
+ }
934
+ return null;
935
+ }
936
+ };
937
+ }();
938
+ /**
939
+ * @class Ext.menu.BaseItem
940
+ * @extends Ext.Component
941
+ * The base class for all items that render into menus. BaseItem provides default rendering, activated state
942
+ * management and base configuration options shared by all menu components.
943
+ * @constructor
944
+ * Creates a new BaseItem
945
+ * @param {Object} config Configuration options
946
+ * @xtype menubaseitem
947
+ */
948
+ Ext.menu.BaseItem = function(config){
949
+ Ext.menu.BaseItem.superclass.constructor.call(this, config);
950
+
951
+ this.addEvents(
952
+ /**
953
+ * @event click
954
+ * Fires when this item is clicked
955
+ * @param {Ext.menu.BaseItem} this
956
+ * @param {Ext.EventObject} e
957
+ */
958
+ 'click',
959
+ /**
960
+ * @event activate
961
+ * Fires when this item is activated
962
+ * @param {Ext.menu.BaseItem} this
963
+ */
964
+ 'activate',
965
+ /**
966
+ * @event deactivate
967
+ * Fires when this item is deactivated
968
+ * @param {Ext.menu.BaseItem} this
969
+ */
970
+ 'deactivate'
971
+ );
972
+
973
+ if(this.handler){
974
+ this.on("click", this.handler, this.scope);
975
+ }
976
+ };
977
+
978
+ Ext.extend(Ext.menu.BaseItem, Ext.Component, {
979
+ /**
980
+ * @property parentMenu
981
+ * @type Ext.menu.Menu
982
+ * The parent Menu of this Item.
983
+ */
984
+ /**
985
+ * @cfg {Function} handler
986
+ * A function that will handle the click event of this menu item (optional).
987
+ * The handler is passed the following parameters:<div class="mdetail-params"><ul>
988
+ * <li><code>b</code> : Item<div class="sub-desc">This menu Item.</div></li>
989
+ * <li><code>e</code> : EventObject<div class="sub-desc">The click event.</div></li>
990
+ * </ul></div>
991
+ */
992
+ /**
993
+ * @cfg {Object} scope
994
+ * The scope (<tt><b>this</b></tt> reference) in which the handler function will be called.
995
+ */
996
+ /**
997
+ * @cfg {Boolean} canActivate True if this item can be visually activated (defaults to false)
998
+ */
999
+ canActivate : false,
1000
+ /**
1001
+ * @cfg {String} activeClass The CSS class to use when the item becomes activated (defaults to "x-menu-item-active")
1002
+ */
1003
+ activeClass : "x-menu-item-active",
1004
+ /**
1005
+ * @cfg {Boolean} hideOnClick True to hide the containing menu after this item is clicked (defaults to true)
1006
+ */
1007
+ hideOnClick : true,
1008
+ /**
1009
+ * @cfg {Number} clickHideDelay Length of time in milliseconds to wait before hiding after a click (defaults to 100)
1010
+ */
1011
+ clickHideDelay : 1,
1012
+
1013
+ // private
1014
+ ctype : "Ext.menu.BaseItem",
1015
+
1016
+ // private
1017
+ actionMode : "container",
1018
+
1019
+ // private
1020
+ onRender : function(container, position){
1021
+ Ext.menu.BaseItem.superclass.onRender.apply(this, arguments);
1022
+ if(this.ownerCt && this.ownerCt instanceof Ext.menu.Menu){
1023
+ this.parentMenu = this.ownerCt;
1024
+ }else{
1025
+ this.container.addClass('x-menu-list-item');
1026
+ this.mon(this.el, 'click', this.onClick, this);
1027
+ this.mon(this.el, 'mouseenter', this.activate, this);
1028
+ this.mon(this.el, 'mouseleave', this.deactivate, this);
1029
+ }
1030
+ },
1031
+
1032
+ /**
1033
+ * Sets the function that will handle click events for this item (equivalent to passing in the {@link #handler}
1034
+ * config property). If an existing handler is already registered, it will be unregistered for you.
1035
+ * @param {Function} handler The function that should be called on click
1036
+ * @param {Object} scope The scope that should be passed to the handler
1037
+ */
1038
+ setHandler : function(handler, scope){
1039
+ if(this.handler){
1040
+ this.un("click", this.handler, this.scope);
1041
+ }
1042
+ this.on("click", this.handler = handler, this.scope = scope);
1043
+ },
1044
+
1045
+ // private
1046
+ onClick : function(e){
1047
+ if(!this.disabled && this.fireEvent("click", this, e) !== false
1048
+ && (this.parentMenu && this.parentMenu.fireEvent("itemclick", this, e) !== false)){
1049
+ this.handleClick(e);
1050
+ }else{
1051
+ e.stopEvent();
1052
+ }
1053
+ },
1054
+
1055
+ // private
1056
+ activate : function(){
1057
+ if(this.disabled){
1058
+ return false;
1059
+ }
1060
+ var li = this.container;
1061
+ li.addClass(this.activeClass);
1062
+ this.region = li.getRegion().adjust(2, 2, -2, -2);
1063
+ this.fireEvent("activate", this);
1064
+ return true;
1065
+ },
1066
+
1067
+ // private
1068
+ deactivate : function(){
1069
+ this.container.removeClass(this.activeClass);
1070
+ this.fireEvent("deactivate", this);
1071
+ },
1072
+
1073
+ // private
1074
+ shouldDeactivate : function(e){
1075
+ return !this.region || !this.region.contains(e.getPoint());
1076
+ },
1077
+
1078
+ // private
1079
+ handleClick : function(e){
1080
+ if(this.hideOnClick){
1081
+ this.parentMenu.hide.defer(this.clickHideDelay, this.parentMenu, [true]);
1082
+ }
1083
+ },
1084
+
1085
+ // private. Do nothing
1086
+ expandMenu : Ext.emptyFn,
1087
+
1088
+ // private. Do nothing
1089
+ hideMenu : Ext.emptyFn
1090
+ });
1091
+ Ext.reg('menubaseitem', Ext.menu.BaseItem);/**
1092
+ * @class Ext.menu.TextItem
1093
+ * @extends Ext.menu.BaseItem
1094
+ * Adds a static text string to a menu, usually used as either a heading or group separator.
1095
+ * @constructor
1096
+ * Creates a new TextItem
1097
+ * @param {Object/String} config If config is a string, it is used as the text to display, otherwise it
1098
+ * is applied as a config object (and should contain a <tt>text</tt> property).
1099
+ * @xtype menutextitem
1100
+ */
1101
+ Ext.menu.TextItem = function(cfg){
1102
+ if(typeof cfg == 'string'){
1103
+ cfg = {text: cfg}
1104
+ }
1105
+ Ext.menu.TextItem.superclass.constructor.call(this, cfg);
1106
+ };
1107
+
1108
+ Ext.extend(Ext.menu.TextItem, Ext.menu.BaseItem, {
1109
+ /**
1110
+ * @cfg {String} text The text to display for this item (defaults to '')
1111
+ */
1112
+ /**
1113
+ * @cfg {Boolean} hideOnClick True to hide the containing menu after this item is clicked (defaults to false)
1114
+ */
1115
+ hideOnClick : false,
1116
+ /**
1117
+ * @cfg {String} itemCls The default CSS class to use for text items (defaults to "x-menu-text")
1118
+ */
1119
+ itemCls : "x-menu-text",
1120
+
1121
+ // private
1122
+ onRender : function(){
1123
+ var s = document.createElement("span");
1124
+ s.className = this.itemCls;
1125
+ s.innerHTML = this.text;
1126
+ this.el = s;
1127
+ Ext.menu.TextItem.superclass.onRender.apply(this, arguments);
1128
+ }
1129
+ });
1130
+ Ext.reg('menutextitem', Ext.menu.TextItem);/**
1131
+ * @class Ext.menu.Separator
1132
+ * @extends Ext.menu.BaseItem
1133
+ * Adds a separator bar to a menu, used to divide logical groups of menu items. Generally you will
1134
+ * add one of these by using "-" in you call to add() or in your items config rather than creating one directly.
1135
+ * @constructor
1136
+ * @param {Object} config Configuration options
1137
+ * @xtype menuseparator
1138
+ */
1139
+ Ext.menu.Separator = function(config){
1140
+ Ext.menu.Separator.superclass.constructor.call(this, config);
1141
+ };
1142
+
1143
+ Ext.extend(Ext.menu.Separator, Ext.menu.BaseItem, {
1144
+ /**
1145
+ * @cfg {String} itemCls The default CSS class to use for separators (defaults to "x-menu-sep")
1146
+ */
1147
+ itemCls : "x-menu-sep",
1148
+ /**
1149
+ * @cfg {Boolean} hideOnClick True to hide the containing menu after this item is clicked (defaults to false)
1150
+ */
1151
+ hideOnClick : false,
1152
+
1153
+ /**
1154
+ * @cfg {String} activeClass
1155
+ * @hide
1156
+ */
1157
+ activeClass: '',
1158
+
1159
+ // private
1160
+ onRender : function(li){
1161
+ var s = document.createElement("span");
1162
+ s.className = this.itemCls;
1163
+ s.innerHTML = "&#160;";
1164
+ this.el = s;
1165
+ li.addClass("x-menu-sep-li");
1166
+ Ext.menu.Separator.superclass.onRender.apply(this, arguments);
1167
+ }
1168
+ });
1169
+ Ext.reg('menuseparator', Ext.menu.Separator);/**
1170
+ * @class Ext.menu.Item
1171
+ * @extends Ext.menu.BaseItem
1172
+ * A base class for all menu items that require menu-related functionality (like sub-menus) and are not static
1173
+ * display items. Item extends the base functionality of {@link Ext.menu.BaseItem} by adding menu-specific
1174
+ * activation and click handling.
1175
+ * @constructor
1176
+ * Creates a new Item
1177
+ * @param {Object} config Configuration options
1178
+ * @xtype menuitem
1179
+ */
1180
+ Ext.menu.Item = function(config){
1181
+ Ext.menu.Item.superclass.constructor.call(this, config);
1182
+ if(this.menu){
1183
+ this.menu = Ext.menu.MenuMgr.get(this.menu);
1184
+ }
1185
+ };
1186
+ Ext.extend(Ext.menu.Item, Ext.menu.BaseItem, {
1187
+ /**
1188
+ * @property menu
1189
+ * @type Ext.menu.Menu
1190
+ * The submenu associated with this Item if one was configured.
1191
+ */
1192
+ /**
1193
+ * @cfg {Mixed} menu (optional) Either an instance of {@link Ext.menu.Menu} or the config object for an
1194
+ * {@link Ext.menu.Menu} which acts as the submenu when this item is activated.
1195
+ */
1196
+ /**
1197
+ * @cfg {String} icon The path to an icon to display in this item (defaults to Ext.BLANK_IMAGE_URL). If
1198
+ * icon is specified {@link #iconCls} should not be.
1199
+ */
1200
+ /**
1201
+ * @cfg {String} iconCls A CSS class that specifies a background image that will be used as the icon for
1202
+ * this item (defaults to ''). If iconCls is specified {@link #icon} should not be.
1203
+ */
1204
+ /**
1205
+ * @cfg {String} text The text to display in this item (defaults to '').
1206
+ */
1207
+ /**
1208
+ * @cfg {String} href The href attribute to use for the underlying anchor link (defaults to '#').
1209
+ */
1210
+ /**
1211
+ * @cfg {String} hrefTarget The target attribute to use for the underlying anchor link (defaults to '').
1212
+ */
1213
+ /**
1214
+ * @cfg {String} itemCls The default CSS class to use for menu items (defaults to 'x-menu-item')
1215
+ */
1216
+ itemCls : 'x-menu-item',
1217
+ /**
1218
+ * @cfg {Boolean} canActivate True if this item can be visually activated (defaults to true)
1219
+ */
1220
+ canActivate : true,
1221
+ /**
1222
+ * @cfg {Number} showDelay Length of time in milliseconds to wait before showing this item (defaults to 200)
1223
+ */
1224
+ showDelay: 200,
1225
+ // doc'd in BaseItem
1226
+ hideDelay: 200,
1227
+
1228
+ // private
1229
+ ctype: 'Ext.menu.Item',
1230
+
1231
+ // private
1232
+ onRender : function(container, position){
1233
+ if (!this.itemTpl) {
1234
+ this.itemTpl = Ext.menu.Item.prototype.itemTpl = new Ext.XTemplate(
1235
+ '<a id="{id}" class="{cls}" hidefocus="true" unselectable="on" href="{href}"',
1236
+ '<tpl if="hrefTarget">',
1237
+ ' target="{hrefTarget}"',
1238
+ '</tpl>',
1239
+ '>',
1240
+ '<img src="{icon}" class="x-menu-item-icon {iconCls}"/>',
1241
+ '<span class="x-menu-item-text">{text}</span>',
1242
+ '</a>'
1243
+ );
1244
+ }
1245
+ var a = this.getTemplateArgs();
1246
+ this.el = position ? this.itemTpl.insertBefore(position, a, true) : this.itemTpl.append(container, a, true);
1247
+ this.iconEl = this.el.child('img.x-menu-item-icon');
1248
+ this.textEl = this.el.child('.x-menu-item-text');
1249
+ Ext.menu.Item.superclass.onRender.call(this, container, position);
1250
+ },
1251
+
1252
+ getTemplateArgs: function() {
1253
+ return {
1254
+ id: this.id,
1255
+ cls: this.itemCls + (this.menu ? ' x-menu-item-arrow' : '') + (this.cls ? ' ' + this.cls : ''),
1256
+ href: this.href || '#',
1257
+ hrefTarget: this.hrefTarget,
1258
+ icon: this.icon || Ext.BLANK_IMAGE_URL,
1259
+ iconCls: this.iconCls || '',
1260
+ text: this.itemText||this.text||'&#160;'
1261
+ };
1262
+ },
1263
+
1264
+ /**
1265
+ * Sets the text to display in this menu item
1266
+ * @param {String} text The text to display
1267
+ */
1268
+ setText : function(text){
1269
+ this.text = text||'&#160;';
1270
+ if(this.rendered){
1271
+ this.textEl.update(this.text);
1272
+ this.parentMenu.layout.doAutoSize();
1273
+ }
1274
+ },
1275
+
1276
+ /**
1277
+ * Sets the CSS class to apply to the item's icon element
1278
+ * @param {String} cls The CSS class to apply
1279
+ */
1280
+ setIconClass : function(cls){
1281
+ var oldCls = this.iconCls;
1282
+ this.iconCls = cls;
1283
+ if(this.rendered){
1284
+ this.iconEl.replaceClass(oldCls, this.iconCls);
1285
+ }
1286
+ },
1287
+
1288
+ //private
1289
+ beforeDestroy: function(){
1290
+ if (this.menu){
1291
+ this.menu.destroy();
1292
+ }
1293
+ Ext.menu.Item.superclass.beforeDestroy.call(this);
1294
+ },
1295
+
1296
+ // private
1297
+ handleClick : function(e){
1298
+ if(!this.href){ // if no link defined, stop the event automatically
1299
+ e.stopEvent();
1300
+ }
1301
+ Ext.menu.Item.superclass.handleClick.apply(this, arguments);
1302
+ },
1303
+
1304
+ // private
1305
+ activate : function(autoExpand){
1306
+ if(Ext.menu.Item.superclass.activate.apply(this, arguments)){
1307
+ this.focus();
1308
+ if(autoExpand){
1309
+ this.expandMenu();
1310
+ }
1311
+ }
1312
+ return true;
1313
+ },
1314
+
1315
+ // private
1316
+ shouldDeactivate : function(e){
1317
+ if(Ext.menu.Item.superclass.shouldDeactivate.call(this, e)){
1318
+ if(this.menu && this.menu.isVisible()){
1319
+ return !this.menu.getEl().getRegion().contains(e.getPoint());
1320
+ }
1321
+ return true;
1322
+ }
1323
+ return false;
1324
+ },
1325
+
1326
+ // private
1327
+ deactivate : function(){
1328
+ Ext.menu.Item.superclass.deactivate.apply(this, arguments);
1329
+ this.hideMenu();
1330
+ },
1331
+
1332
+ // private
1333
+ expandMenu : function(autoActivate){
1334
+ if(!this.disabled && this.menu){
1335
+ clearTimeout(this.hideTimer);
1336
+ delete this.hideTimer;
1337
+ if(!this.menu.isVisible() && !this.showTimer){
1338
+ this.showTimer = this.deferExpand.defer(this.showDelay, this, [autoActivate]);
1339
+ }else if (this.menu.isVisible() && autoActivate){
1340
+ this.menu.tryActivate(0, 1);
1341
+ }
1342
+ }
1343
+ },
1344
+
1345
+ // private
1346
+ deferExpand : function(autoActivate){
1347
+ delete this.showTimer;
1348
+ this.menu.show(this.container, this.parentMenu.subMenuAlign || 'tl-tr?', this.parentMenu);
1349
+ if(autoActivate){
1350
+ this.menu.tryActivate(0, 1);
1351
+ }
1352
+ },
1353
+
1354
+ // private
1355
+ hideMenu : function(){
1356
+ clearTimeout(this.showTimer);
1357
+ delete this.showTimer;
1358
+ if(!this.hideTimer && this.menu && this.menu.isVisible()){
1359
+ this.hideTimer = this.deferHide.defer(this.hideDelay, this);
1360
+ }
1361
+ },
1362
+
1363
+ // private
1364
+ deferHide : function(){
1365
+ delete this.hideTimer;
1366
+ if(this.menu.over){
1367
+ this.parentMenu.setActiveItem(this, false);
1368
+ }else{
1369
+ this.menu.hide();
1370
+ }
1371
+ }
1372
+ });
1373
+ Ext.reg('menuitem', Ext.menu.Item);/**
1374
+ * @class Ext.menu.CheckItem
1375
+ * @extends Ext.menu.Item
1376
+ * Adds a menu item that contains a checkbox by default, but can also be part of a radio group.
1377
+ * @constructor
1378
+ * Creates a new CheckItem
1379
+ * @param {Object} config Configuration options
1380
+ * @xtype menucheckitem
1381
+ */
1382
+ Ext.menu.CheckItem = function(config){
1383
+ Ext.menu.CheckItem.superclass.constructor.call(this, config);
1384
+ this.addEvents(
1385
+ /**
1386
+ * @event beforecheckchange
1387
+ * Fires before the checked value is set, providing an opportunity to cancel if needed
1388
+ * @param {Ext.menu.CheckItem} this
1389
+ * @param {Boolean} checked The new checked value that will be set
1390
+ */
1391
+ "beforecheckchange" ,
1392
+ /**
1393
+ * @event checkchange
1394
+ * Fires after the checked value has been set
1395
+ * @param {Ext.menu.CheckItem} this
1396
+ * @param {Boolean} checked The checked value that was set
1397
+ */
1398
+ "checkchange"
1399
+ );
1400
+ /**
1401
+ * A function that handles the checkchange event. The function is undefined by default, but if an implementation
1402
+ * is provided, it will be called automatically when the checkchange event fires.
1403
+ * @param {Ext.menu.CheckItem} this
1404
+ * @param {Boolean} checked The checked value that was set
1405
+ * @method checkHandler
1406
+ */
1407
+ if(this.checkHandler){
1408
+ this.on('checkchange', this.checkHandler, this.scope);
1409
+ }
1410
+ Ext.menu.MenuMgr.registerCheckable(this);
1411
+ };
1412
+ Ext.extend(Ext.menu.CheckItem, Ext.menu.Item, {
1413
+ /**
1414
+ * @cfg {String} group
1415
+ * All check items with the same group name will automatically be grouped into a single-select
1416
+ * radio button group (defaults to '')
1417
+ */
1418
+ /**
1419
+ * @cfg {String} itemCls The default CSS class to use for check items (defaults to "x-menu-item x-menu-check-item")
1420
+ */
1421
+ itemCls : "x-menu-item x-menu-check-item",
1422
+ /**
1423
+ * @cfg {String} groupClass The default CSS class to use for radio group check items (defaults to "x-menu-group-item")
1424
+ */
1425
+ groupClass : "x-menu-group-item",
1426
+
1427
+ /**
1428
+ * @cfg {Boolean} checked True to initialize this checkbox as checked (defaults to false). Note that
1429
+ * if this checkbox is part of a radio group (group = true) only the last item in the group that is
1430
+ * initialized with checked = true will be rendered as checked.
1431
+ */
1432
+ checked: false,
1433
+
1434
+ // private
1435
+ ctype: "Ext.menu.CheckItem",
1436
+
1437
+ // private
1438
+ onRender : function(c){
1439
+ Ext.menu.CheckItem.superclass.onRender.apply(this, arguments);
1440
+ if(this.group){
1441
+ this.el.addClass(this.groupClass);
1442
+ }
1443
+ if(this.checked){
1444
+ this.checked = false;
1445
+ this.setChecked(true, true);
1446
+ }
1447
+ },
1448
+
1449
+ // private
1450
+ destroy : function(){
1451
+ Ext.menu.MenuMgr.unregisterCheckable(this);
1452
+ Ext.menu.CheckItem.superclass.destroy.apply(this, arguments);
1453
+ },
1454
+
1455
+ /**
1456
+ * Set the checked state of this item
1457
+ * @param {Boolean} checked The new checked value
1458
+ * @param {Boolean} suppressEvent (optional) True to prevent the checkchange event from firing (defaults to false)
1459
+ */
1460
+ setChecked : function(state, suppressEvent){
1461
+ if(this.checked != state && this.fireEvent("beforecheckchange", this, state) !== false){
1462
+ if(this.container){
1463
+ this.container[state ? "addClass" : "removeClass"]("x-menu-item-checked");
1464
+ }
1465
+ this.checked = state;
1466
+ if(suppressEvent !== true){
1467
+ this.fireEvent("checkchange", this, state);
1468
+ }
1469
+ }
1470
+ },
1471
+
1472
+ // private
1473
+ handleClick : function(e){
1474
+ if(!this.disabled && !(this.checked && this.group)){// disable unselect on radio item
1475
+ this.setChecked(!this.checked);
1476
+ }
1477
+ Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments);
1478
+ }
1479
+ });
1480
+ Ext.reg('menucheckitem', Ext.menu.CheckItem);/**
1481
+ * @class Ext.menu.DateMenu
1482
+ * @extends Ext.menu.Menu
1483
+ * A menu containing a {@link Ext.DatePicker} Component.
1484
+ * @xtype datemenu
1485
+ */
1486
+ Ext.menu.DateMenu = Ext.extend(Ext.menu.Menu, {
1487
+ /**
1488
+ * @cfg {Boolean} enableScrolling
1489
+ * @hide
1490
+ */
1491
+ enableScrolling: false,
1492
+
1493
+ /**
1494
+ * @cfg {Boolean} hideOnClick
1495
+ * False to continue showing the menu after a date is selected, defaults to true.
1496
+ */
1497
+ hideOnClick: true,
1498
+
1499
+ /**
1500
+ * @cfg {Number} maxHeight
1501
+ * @hide
1502
+ */
1503
+ /**
1504
+ * @cfg {Number} scrollIncrement
1505
+ * @hide
1506
+ */
1507
+ /**
1508
+ * @property picker
1509
+ * @type DatePicker
1510
+ * The {@link Ext.DatePicker} instance for this DateMenu
1511
+ */
1512
+ cls: 'x-date-menu',
1513
+
1514
+ /**
1515
+ * @event click
1516
+ * @hide
1517
+ */
1518
+
1519
+ /**
1520
+ * @event itemclick
1521
+ * @hide
1522
+ */
1523
+
1524
+ initComponent: function(){
1525
+ this.on('beforeshow', this.onBeforeShow, this);
1526
+ if(this.strict = (Ext.isIE7 && Ext.isStrict)){
1527
+ this.on('show', this.onShow, this, {single: true, delay: 20});
1528
+ }
1529
+ Ext.apply(this, {
1530
+ plain: true,
1531
+ showSeparator: false,
1532
+ items: this.picker = new Ext.DatePicker(Ext.apply({
1533
+ internalRender: this.strict || !Ext.isIE,
1534
+ ctCls: 'x-menu-date-item'
1535
+ }, this.initialConfig))
1536
+ });
1537
+ this.picker.purgeListeners();
1538
+ Ext.menu.DateMenu.superclass.initComponent.call(this);
1539
+ this.relayEvents(this.picker, ["select"]);
1540
+ this.on('select', this.menuHide, this);
1541
+ if(this.handler){
1542
+ this.on('select', this.handler, this.scope || this);
1543
+ }
1544
+ },
1545
+
1546
+ menuHide: function() {
1547
+ if(this.hideOnClick){
1548
+ this.hide(true);
1549
+ }
1550
+ },
1551
+
1552
+ onBeforeShow: function(){
1553
+ if(this.picker){
1554
+ this.picker.hideMonthPicker(true);
1555
+ }
1556
+ },
1557
+
1558
+ onShow: function(){
1559
+ var el = this.picker.getEl();
1560
+ el.setWidth(el.getWidth()); //nasty hack for IE7 strict mode
1561
+ }
1562
+ });
1563
+ Ext.reg('datemenu', Ext.menu.DateMenu);/**
1564
+ * @class Ext.menu.ColorMenu
1565
+ * @extends Ext.menu.Menu
1566
+ * A menu containing a {@link Ext.ColorPalette} Component.
1567
+ * @xtype colormenu
1568
+ */
1569
+ Ext.menu.ColorMenu = Ext.extend(Ext.menu.Menu, {
1570
+ /**
1571
+ * @cfg {Boolean} enableScrolling
1572
+ * @hide
1573
+ */
1574
+ enableScrolling: false,
1575
+
1576
+ /**
1577
+ * @cfg {Boolean} hideOnClick
1578
+ * False to continue showing the menu after a color is selected, defaults to true.
1579
+ */
1580
+ hideOnClick: true,
1581
+
1582
+ /**
1583
+ * @cfg {Number} maxHeight
1584
+ * @hide
1585
+ */
1586
+ /**
1587
+ * @cfg {Number} scrollIncrement
1588
+ * @hide
1589
+ */
1590
+ /**
1591
+ * @property palette
1592
+ * @type ColorPalette
1593
+ * The {@link Ext.ColorPalette} instance for this ColorMenu
1594
+ */
1595
+
1596
+
1597
+ /**
1598
+ * @event click
1599
+ * @hide
1600
+ */
1601
+
1602
+ /**
1603
+ * @event itemclick
1604
+ * @hide
1605
+ */
1606
+
1607
+ initComponent: function(){
1608
+ Ext.apply(this, {
1609
+ plain: true,
1610
+ showSeparator: false,
1611
+ items: this.palette = new Ext.ColorPalette(this.initialConfig)
1612
+ });
1613
+ this.palette.purgeListeners();
1614
+ Ext.menu.ColorMenu.superclass.initComponent.call(this);
1615
+ this.relayEvents(this.palette, ['select']);
1616
+ this.on('select', this.menuHide, this);
1617
+ if(this.handler){
1618
+ this.on('select', this.handler, this.scope || this)
1619
+ }
1620
+ },
1621
+
1622
+ menuHide: function(){
1623
+ if(this.hideOnClick){
1624
+ this.hide(true);
1625
+ }
1626
+ }
1627
+ });
1628
+ Ext.reg('colormenu', Ext.menu.ColorMenu);