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,242 @@
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.KeyMap
9
+ * Handles mapping keys to actions for an element. One key map can be used for multiple actions.
10
+ * The constructor accepts the same config object as defined by {@link #addBinding}.
11
+ * If you bind a callback function to a KeyMap, anytime the KeyMap handles an expected key
12
+ * combination it will call the function with this signature (if the match is a multi-key
13
+ * combination the callback will still be called only once): (String key, Ext.EventObject e)
14
+ * A KeyMap can also handle a string representation of keys.<br />
15
+ * Usage:
16
+ <pre><code>
17
+ // map one key by key code
18
+ var map = new Ext.KeyMap("my-element", {
19
+ key: 13, // or Ext.EventObject.ENTER
20
+ fn: myHandler,
21
+ scope: myObject
22
+ });
23
+
24
+ // map multiple keys to one action by string
25
+ var map = new Ext.KeyMap("my-element", {
26
+ key: "a\r\n\t",
27
+ fn: myHandler,
28
+ scope: myObject
29
+ });
30
+
31
+ // map multiple keys to multiple actions by strings and array of codes
32
+ var map = new Ext.KeyMap("my-element", [
33
+ {
34
+ key: [10,13],
35
+ fn: function(){ alert("Return was pressed"); }
36
+ }, {
37
+ key: "abc",
38
+ fn: function(){ alert('a, b or c was pressed'); }
39
+ }, {
40
+ key: "\t",
41
+ ctrl:true,
42
+ shift:true,
43
+ fn: function(){ alert('Control + shift + tab was pressed.'); }
44
+ }
45
+ ]);
46
+ </code></pre>
47
+ * <b>Note: A KeyMap starts enabled</b>
48
+ * @constructor
49
+ * @param {Mixed} el The element to bind to
50
+ * @param {Object} config The config (see {@link #addBinding})
51
+ * @param {String} eventName (optional) The event to bind to (defaults to "keydown")
52
+ */
53
+ Ext.KeyMap = function(el, config, eventName){
54
+ this.el = Ext.get(el);
55
+ this.eventName = eventName || "keydown";
56
+ this.bindings = [];
57
+ if(config){
58
+ this.addBinding(config);
59
+ }
60
+ this.enable();
61
+ };
62
+
63
+ Ext.KeyMap.prototype = {
64
+ /**
65
+ * True to stop the event from bubbling and prevent the default browser action if the
66
+ * key was handled by the KeyMap (defaults to false)
67
+ * @type Boolean
68
+ */
69
+ stopEvent : false,
70
+
71
+ /**
72
+ * Add a new binding to this KeyMap. The following config object properties are supported:
73
+ * <pre>
74
+ Property Type Description
75
+ ---------- --------------- ----------------------------------------------------------------------
76
+ key String/Array A single keycode or an array of keycodes to handle
77
+ shift Boolean True to handle key only when shift is pressed, False to handle the key only when shift is not pressed (defaults to undefined)
78
+ ctrl Boolean True to handle key only when ctrl is pressed, False to handle the key only when ctrl is not pressed (defaults to undefined)
79
+ alt Boolean True to handle key only when alt is pressed, False to handle the key only when alt is not pressed (defaults to undefined)
80
+ handler Function The function to call when KeyMap finds the expected key combination
81
+ fn Function Alias of handler (for backwards-compatibility)
82
+ scope Object The scope of the callback function
83
+ stopEvent Boolean True to stop the event from bubbling and prevent the default browser action if the key was handled by the KeyMap (defaults to false)
84
+ </pre>
85
+ *
86
+ * Usage:
87
+ * <pre><code>
88
+ // Create a KeyMap
89
+ var map = new Ext.KeyMap(document, {
90
+ key: Ext.EventObject.ENTER,
91
+ fn: handleKey,
92
+ scope: this
93
+ });
94
+
95
+ //Add a new binding to the existing KeyMap later
96
+ map.addBinding({
97
+ key: 'abc',
98
+ shift: true,
99
+ fn: handleKey,
100
+ scope: this
101
+ });
102
+ </code></pre>
103
+ * @param {Object/Array} config A single KeyMap config or an array of configs
104
+ */
105
+ addBinding : function(config){
106
+ if(Ext.isArray(config)){
107
+ Ext.each(config, function(c){
108
+ this.addBinding(c);
109
+ }, this);
110
+ return;
111
+ }
112
+ var keyCode = config.key,
113
+ fn = config.fn || config.handler,
114
+ scope = config.scope;
115
+
116
+ if (config.stopEvent) {
117
+ this.stopEvent = config.stopEvent;
118
+ }
119
+
120
+ if(typeof keyCode == "string"){
121
+ var ks = [];
122
+ var keyString = keyCode.toUpperCase();
123
+ for(var j = 0, len = keyString.length; j < len; j++){
124
+ ks.push(keyString.charCodeAt(j));
125
+ }
126
+ keyCode = ks;
127
+ }
128
+ var keyArray = Ext.isArray(keyCode);
129
+
130
+ var handler = function(e){
131
+ if(this.checkModifiers(config, e)){
132
+ var k = e.getKey();
133
+ if(keyArray){
134
+ for(var i = 0, len = keyCode.length; i < len; i++){
135
+ if(keyCode[i] == k){
136
+ if(this.stopEvent){
137
+ e.stopEvent();
138
+ }
139
+ fn.call(scope || window, k, e);
140
+ return;
141
+ }
142
+ }
143
+ }else{
144
+ if(k == keyCode){
145
+ if(this.stopEvent){
146
+ e.stopEvent();
147
+ }
148
+ fn.call(scope || window, k, e);
149
+ }
150
+ }
151
+ }
152
+ };
153
+ this.bindings.push(handler);
154
+ },
155
+
156
+ // private
157
+ checkModifiers: function(config, e){
158
+ var val, key, keys = ['shift', 'ctrl', 'alt'];
159
+ for (var i = 0, len = keys.length; i < len; ++i){
160
+ key = keys[i];
161
+ val = config[key];
162
+ if(!(val === undefined || (val === e[key + 'Key']))){
163
+ return false;
164
+ }
165
+ }
166
+ return true;
167
+ },
168
+
169
+ /**
170
+ * Shorthand for adding a single key listener
171
+ * @param {Number/Array/Object} key Either the numeric key code, array of key codes or an object with the
172
+ * following options:
173
+ * {key: (number or array), shift: (true/false), ctrl: (true/false), alt: (true/false)}
174
+ * @param {Function} fn The function to call
175
+ * @param {Object} scope (optional) The scope of the function
176
+ */
177
+ on : function(key, fn, scope){
178
+ var keyCode, shift, ctrl, alt;
179
+ if(typeof key == "object" && !Ext.isArray(key)){
180
+ keyCode = key.key;
181
+ shift = key.shift;
182
+ ctrl = key.ctrl;
183
+ alt = key.alt;
184
+ }else{
185
+ keyCode = key;
186
+ }
187
+ this.addBinding({
188
+ key: keyCode,
189
+ shift: shift,
190
+ ctrl: ctrl,
191
+ alt: alt,
192
+ fn: fn,
193
+ scope: scope
194
+ });
195
+ },
196
+
197
+ // private
198
+ handleKeyDown : function(e){
199
+ if(this.enabled){ //just in case
200
+ var b = this.bindings;
201
+ for(var i = 0, len = b.length; i < len; i++){
202
+ b[i].call(this, e);
203
+ }
204
+ }
205
+ },
206
+
207
+ /**
208
+ * Returns true if this KeyMap is enabled
209
+ * @return {Boolean}
210
+ */
211
+ isEnabled : function(){
212
+ return this.enabled;
213
+ },
214
+
215
+ /**
216
+ * Enables this KeyMap
217
+ */
218
+ enable: function(){
219
+ if(!this.enabled){
220
+ this.el.on(this.eventName, this.handleKeyDown, this);
221
+ this.enabled = true;
222
+ }
223
+ },
224
+
225
+ /**
226
+ * Disable this KeyMap
227
+ */
228
+ disable: function(){
229
+ if(this.enabled){
230
+ this.el.removeListener(this.eventName, this.handleKeyDown, this);
231
+ this.enabled = false;
232
+ }
233
+ },
234
+
235
+ /**
236
+ * Convenience function for setting disabled/enabled by boolean.
237
+ * @param {Boolean} disabled
238
+ */
239
+ setDisabled : function(disabled){
240
+ this[disabled ? "disable" : "enable"]();
241
+ }
242
+ };
@@ -0,0 +1,161 @@
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.KeyNav
9
+ * <p>Provides a convenient wrapper for normalized keyboard navigation. KeyNav allows you to bind
10
+ * navigation keys to function calls that will get called when the keys are pressed, providing an easy
11
+ * way to implement custom navigation schemes for any UI component.</p>
12
+ * <p>The following are all of the possible keys that can be implemented: enter, left, right, up, down, tab, esc,
13
+ * pageUp, pageDown, del, home, end. Usage:</p>
14
+ <pre><code>
15
+ var nav = new Ext.KeyNav("my-element", {
16
+ "left" : function(e){
17
+ this.moveLeft(e.ctrlKey);
18
+ },
19
+ "right" : function(e){
20
+ this.moveRight(e.ctrlKey);
21
+ },
22
+ "enter" : function(e){
23
+ this.save();
24
+ },
25
+ scope : this
26
+ });
27
+ </code></pre>
28
+ * @constructor
29
+ * @param {Mixed} el The element to bind to
30
+ * @param {Object} config The config
31
+ */
32
+ Ext.KeyNav = function(el, config){
33
+ this.el = Ext.get(el);
34
+ Ext.apply(this, config);
35
+ if(!this.disabled){
36
+ this.disabled = true;
37
+ this.enable();
38
+ }
39
+ };
40
+
41
+ Ext.KeyNav.prototype = {
42
+ /**
43
+ * @cfg {Boolean} disabled
44
+ * True to disable this KeyNav instance (defaults to false)
45
+ */
46
+ disabled : false,
47
+ /**
48
+ * @cfg {String} defaultEventAction
49
+ * The method to call on the {@link Ext.EventObject} after this KeyNav intercepts a key. Valid values are
50
+ * {@link Ext.EventObject#stopEvent}, {@link Ext.EventObject#preventDefault} and
51
+ * {@link Ext.EventObject#stopPropagation} (defaults to 'stopEvent')
52
+ */
53
+ defaultEventAction: "stopEvent",
54
+ /**
55
+ * @cfg {Boolean} forceKeyDown
56
+ * Handle the keydown event instead of keypress (defaults to false). KeyNav automatically does this for IE since
57
+ * IE does not propagate special keys on keypress, but setting this to true will force other browsers to also
58
+ * handle keydown instead of keypress.
59
+ */
60
+ forceKeyDown : false,
61
+
62
+ // private
63
+ prepareEvent : function(e){
64
+ var k = e.getKey();
65
+ var h = this.keyToHandler[k];
66
+ if(Ext.isSafari2 && h && k >= 37 && k <= 40){
67
+ e.stopEvent();
68
+ }
69
+ },
70
+
71
+ // private
72
+ relay : function(e){
73
+ var k = e.getKey();
74
+ var h = this.keyToHandler[k];
75
+ if(h && this[h]){
76
+ if(this.doRelay(e, this[h], h) !== true){
77
+ e[this.defaultEventAction]();
78
+ }
79
+ }
80
+ },
81
+
82
+ // private
83
+ doRelay : function(e, h, hname){
84
+ return h.call(this.scope || this, e);
85
+ },
86
+
87
+ // possible handlers
88
+ enter : false,
89
+ left : false,
90
+ right : false,
91
+ up : false,
92
+ down : false,
93
+ tab : false,
94
+ esc : false,
95
+ pageUp : false,
96
+ pageDown : false,
97
+ del : false,
98
+ home : false,
99
+ end : false,
100
+
101
+ // quick lookup hash
102
+ keyToHandler : {
103
+ 37 : "left",
104
+ 39 : "right",
105
+ 38 : "up",
106
+ 40 : "down",
107
+ 33 : "pageUp",
108
+ 34 : "pageDown",
109
+ 46 : "del",
110
+ 36 : "home",
111
+ 35 : "end",
112
+ 13 : "enter",
113
+ 27 : "esc",
114
+ 9 : "tab"
115
+ },
116
+
117
+ /**
118
+ * Enable this KeyNav
119
+ */
120
+ enable: function(){
121
+ if(this.disabled){
122
+ // ie won't do special keys on keypress, no one else will repeat keys with keydown
123
+ // the EventObject will normalize Safari automatically
124
+ if(this.isKeydown()){
125
+ this.el.on("keydown", this.relay, this);
126
+ }else{
127
+ this.el.on("keydown", this.prepareEvent, this);
128
+ this.el.on("keypress", this.relay, this);
129
+ }
130
+ this.disabled = false;
131
+ }
132
+ },
133
+
134
+ /**
135
+ * Disable this KeyNav
136
+ */
137
+ disable: function(){
138
+ if(!this.disabled){
139
+ if(this.isKeydown()){
140
+ this.el.un("keydown", this.relay, this);
141
+ }else{
142
+ this.el.un("keydown", this.prepareEvent, this);
143
+ this.el.un("keypress", this.relay, this);
144
+ }
145
+ this.disabled = true;
146
+ }
147
+ },
148
+
149
+ /**
150
+ * Convenience function for setting disabled/enabled by boolean.
151
+ * @param {Boolean} disabled
152
+ */
153
+ setDisabled : function(disabled){
154
+ this[disabled ? "disable" : "enable"]();
155
+ },
156
+
157
+ // private
158
+ isKeydown: function(){
159
+ return this.forceKeyDown || Ext.EventManager.useKeydown;
160
+ }
161
+ };
@@ -0,0 +1,576 @@
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.util.MixedCollection
9
+ * @extends Ext.util.Observable
10
+ * A Collection class that maintains both numeric indexes and keys and exposes events.
11
+ * @constructor
12
+ * @param {Boolean} allowFunctions True if the addAll function should add function references to the
13
+ * collection (defaults to false)
14
+ * @param {Function} keyFn A function that can accept an item of the type(s) stored in this MixedCollection
15
+ * and return the key value for that item. This is used when available to look up the key on items that
16
+ * were passed without an explicit key parameter to a MixedCollection method. Passing this parameter is
17
+ * equivalent to providing an implementation for the {@link #getKey} method.
18
+ */
19
+ Ext.util.MixedCollection = function(allowFunctions, keyFn){
20
+ this.items = [];
21
+ this.map = {};
22
+ this.keys = [];
23
+ this.length = 0;
24
+ this.addEvents(
25
+ /**
26
+ * @event clear
27
+ * Fires when the collection is cleared.
28
+ */
29
+ "clear",
30
+ /**
31
+ * @event add
32
+ * Fires when an item is added to the collection.
33
+ * @param {Number} index The index at which the item was added.
34
+ * @param {Object} o The item added.
35
+ * @param {String} key The key associated with the added item.
36
+ */
37
+ "add",
38
+ /**
39
+ * @event replace
40
+ * Fires when an item is replaced in the collection.
41
+ * @param {String} key he key associated with the new added.
42
+ * @param {Object} old The item being replaced.
43
+ * @param {Object} new The new item.
44
+ */
45
+ "replace",
46
+ /**
47
+ * @event remove
48
+ * Fires when an item is removed from the collection.
49
+ * @param {Object} o The item being removed.
50
+ * @param {String} key (optional) The key associated with the removed item.
51
+ */
52
+ "remove",
53
+ "sort"
54
+ );
55
+ this.allowFunctions = allowFunctions === true;
56
+ if(keyFn){
57
+ this.getKey = keyFn;
58
+ }
59
+ Ext.util.MixedCollection.superclass.constructor.call(this);
60
+ };
61
+
62
+ Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {
63
+ allowFunctions : false,
64
+
65
+ /**
66
+ * Adds an item to the collection. Fires the {@link #add} event when complete.
67
+ * @param {String} key <p>The key to associate with the item, or the new item.</p>
68
+ * <p>If you supplied a {@link #getKey} implementation for this MixedCollection, or if the key
69
+ * of your stored items is in a property called <tt><b>id</b></tt>, then the MixedCollection
70
+ * will be able to <i>derive</i> the key for the new item. In this case just pass the new item in
71
+ * this parameter.</p>
72
+ * @param {Object} o The item to add.
73
+ * @return {Object} The item added.
74
+ */
75
+ add: function(key, o){
76
+ if(arguments.length == 1){
77
+ o = arguments[0];
78
+ key = this.getKey(o);
79
+ }
80
+ if(typeof key != 'undefined' && key !== null){
81
+ var old = this.map[key];
82
+ if(typeof old != 'undefined'){
83
+ return this.replace(key, o);
84
+ }
85
+ this.map[key] = o;
86
+ }
87
+ this.length++;
88
+ this.items.push(o);
89
+ this.keys.push(key);
90
+ this.fireEvent('add', this.length-1, o, key);
91
+ return o;
92
+ },
93
+
94
+ /**
95
+ * MixedCollection has a generic way to fetch keys if you implement getKey. The default implementation
96
+ * simply returns <tt style="font-weight:bold;">item.id</tt> but you can provide your own implementation
97
+ * to return a different value as in the following examples:
98
+ <pre><code>
99
+ // normal way
100
+ var mc = new Ext.util.MixedCollection();
101
+ mc.add(someEl.dom.id, someEl);
102
+ mc.add(otherEl.dom.id, otherEl);
103
+ //and so on
104
+
105
+ // using getKey
106
+ var mc = new Ext.util.MixedCollection();
107
+ mc.getKey = function(el){
108
+ return el.dom.id;
109
+ };
110
+ mc.add(someEl);
111
+ mc.add(otherEl);
112
+
113
+ // or via the constructor
114
+ var mc = new Ext.util.MixedCollection(false, function(el){
115
+ return el.dom.id;
116
+ });
117
+ mc.add(someEl);
118
+ mc.add(otherEl);
119
+ </code></pre>
120
+ * @param {Object} item The item for which to find the key.
121
+ * @return {Object} The key for the passed item.
122
+ */
123
+ getKey : function(o){
124
+ return o.id;
125
+ },
126
+
127
+ /**
128
+ * Replaces an item in the collection. Fires the {@link #replace} event when complete.
129
+ * @param {String} key <p>The key associated with the item to replace, or the replacement item.</p>
130
+ * <p>If you supplied a {@link #getKey} implementation for this MixedCollection, or if the key
131
+ * of your stored items is in a property called <tt><b>id</b></tt>, then the MixedCollection
132
+ * will be able to <i>derive</i> the key of the replacement item. If you want to replace an item
133
+ * with one having the same key value, then just pass the replacement item in this parameter.</p>
134
+ * @param o {Object} o (optional) If the first parameter passed was a key, the item to associate
135
+ * with that key.
136
+ * @return {Object} The new item.
137
+ */
138
+ replace : function(key, o){
139
+ if(arguments.length == 1){
140
+ o = arguments[0];
141
+ key = this.getKey(o);
142
+ }
143
+ var old = this.map[key];
144
+ if(typeof key == "undefined" || key === null || typeof old == "undefined"){
145
+ return this.add(key, o);
146
+ }
147
+ var index = this.indexOfKey(key);
148
+ this.items[index] = o;
149
+ this.map[key] = o;
150
+ this.fireEvent("replace", key, old, o);
151
+ return o;
152
+ },
153
+
154
+ /**
155
+ * Adds all elements of an Array or an Object to the collection.
156
+ * @param {Object/Array} objs An Object containing properties which will be added to the collection, or
157
+ * an Array of values, each of which are added to the collection.
158
+ */
159
+ addAll : function(objs){
160
+ if(arguments.length > 1 || Ext.isArray(objs)){
161
+ var args = arguments.length > 1 ? arguments : objs;
162
+ for(var i = 0, len = args.length; i < len; i++){
163
+ this.add(args[i]);
164
+ }
165
+ }else{
166
+ for(var key in objs){
167
+ if(this.allowFunctions || typeof objs[key] != "function"){
168
+ this.add(key, objs[key]);
169
+ }
170
+ }
171
+ }
172
+ },
173
+
174
+ /**
175
+ * Executes the specified function once for every item in the collection, passing the following arguments:
176
+ * <div class="mdetail-params"><ul>
177
+ * <li><b>item</b> : Mixed<p class="sub-desc">The collection item</p></li>
178
+ * <li><b>index</b> : Number<p class="sub-desc">The item's index</p></li>
179
+ * <li><b>length</b> : Number<p class="sub-desc">The total number of items in the collection</p></li>
180
+ * </ul></div>
181
+ * The function should return a boolean value. Returning false from the function will stop the iteration.
182
+ * @param {Function} fn The function to execute for each item.
183
+ * @param {Object} scope (optional) The scope in which to execute the function.
184
+ */
185
+ each : function(fn, scope){
186
+ var items = [].concat(this.items); // each safe for removal
187
+ for(var i = 0, len = items.length; i < len; i++){
188
+ if(fn.call(scope || items[i], items[i], i, len) === false){
189
+ break;
190
+ }
191
+ }
192
+ },
193
+
194
+ /**
195
+ * Executes the specified function once for every key in the collection, passing each
196
+ * key, and its associated item as the first two parameters.
197
+ * @param {Function} fn The function to execute for each item.
198
+ * @param {Object} scope (optional) The scope in which to execute the function.
199
+ */
200
+ eachKey : function(fn, scope){
201
+ for(var i = 0, len = this.keys.length; i < len; i++){
202
+ fn.call(scope || window, this.keys[i], this.items[i], i, len);
203
+ }
204
+ },
205
+
206
+ /**
207
+ * Returns the first item in the collection which elicits a true return value from the
208
+ * passed selection function.
209
+ * @param {Function} fn The selection function to execute for each item.
210
+ * @param {Object} scope (optional) The scope in which to execute the function.
211
+ * @return {Object} The first item in the collection which returned true from the selection function.
212
+ */
213
+ find : function(fn, scope){
214
+ for(var i = 0, len = this.items.length; i < len; i++){
215
+ if(fn.call(scope || window, this.items[i], this.keys[i])){
216
+ return this.items[i];
217
+ }
218
+ }
219
+ return null;
220
+ },
221
+
222
+ /**
223
+ * Inserts an item at the specified index in the collection. Fires the {@link #add} event when complete.
224
+ * @param {Number} index The index to insert the item at.
225
+ * @param {String} key The key to associate with the new item, or the item itself.
226
+ * @param {Object} o (optional) If the second parameter was a key, the new item.
227
+ * @return {Object} The item inserted.
228
+ */
229
+ insert : function(index, key, o){
230
+ if(arguments.length == 2){
231
+ o = arguments[1];
232
+ key = this.getKey(o);
233
+ }
234
+ if(this.containsKey(key)){
235
+ this.suspendEvents();
236
+ this.removeKey(key);
237
+ this.resumeEvents();
238
+ }
239
+ if(index >= this.length){
240
+ return this.add(key, o);
241
+ }
242
+ this.length++;
243
+ this.items.splice(index, 0, o);
244
+ if(typeof key != "undefined" && key !== null){
245
+ this.map[key] = o;
246
+ }
247
+ this.keys.splice(index, 0, key);
248
+ this.fireEvent("add", index, o, key);
249
+ return o;
250
+ },
251
+
252
+ /**
253
+ * Remove an item from the collection.
254
+ * @param {Object} o The item to remove.
255
+ * @return {Object} The item removed or false if no item was removed.
256
+ */
257
+ remove : function(o){
258
+ return this.removeAt(this.indexOf(o));
259
+ },
260
+
261
+ /**
262
+ * Remove an item from a specified index in the collection. Fires the {@link #remove} event when complete.
263
+ * @param {Number} index The index within the collection of the item to remove.
264
+ * @return {Object} The item removed or false if no item was removed.
265
+ */
266
+ removeAt : function(index){
267
+ if(index < this.length && index >= 0){
268
+ this.length--;
269
+ var o = this.items[index];
270
+ this.items.splice(index, 1);
271
+ var key = this.keys[index];
272
+ if(typeof key != "undefined"){
273
+ delete this.map[key];
274
+ }
275
+ this.keys.splice(index, 1);
276
+ this.fireEvent("remove", o, key);
277
+ return o;
278
+ }
279
+ return false;
280
+ },
281
+
282
+ /**
283
+ * Removed an item associated with the passed key fom the collection.
284
+ * @param {String} key The key of the item to remove.
285
+ * @return {Object} The item removed or false if no item was removed.
286
+ */
287
+ removeKey : function(key){
288
+ return this.removeAt(this.indexOfKey(key));
289
+ },
290
+
291
+ /**
292
+ * Returns the number of items in the collection.
293
+ * @return {Number} the number of items in the collection.
294
+ */
295
+ getCount : function(){
296
+ return this.length;
297
+ },
298
+
299
+ /**
300
+ * Returns index within the collection of the passed Object.
301
+ * @param {Object} o The item to find the index of.
302
+ * @return {Number} index of the item. Returns -1 if not found.
303
+ */
304
+ indexOf : function(o){
305
+ return this.items.indexOf(o);
306
+ },
307
+
308
+ /**
309
+ * Returns index within the collection of the passed key.
310
+ * @param {String} key The key to find the index of.
311
+ * @return {Number} index of the key.
312
+ */
313
+ indexOfKey : function(key){
314
+ return this.keys.indexOf(key);
315
+ },
316
+
317
+ /**
318
+ * Returns the item associated with the passed key OR index. Key has priority over index. This is the equivalent
319
+ * of calling {@link #key} first, then if nothing matched calling {@link #itemAt}.
320
+ * @param {String/Number} key The key or index of the item.
321
+ * @return {Object} If the item is found, returns the item. If the item was not found, returns <tt>undefined</tt>.
322
+ * If an item was found, but is a Class, returns <tt>null</tt>.
323
+ */
324
+ item : function(key){
325
+ var mk = this.map[key],
326
+ item = mk !== undefined ? mk : (typeof key == 'number') ? this.items[key] : undefined;
327
+ return !Ext.isFunction(item) || this.allowFunctions ? item : null; // for prototype!
328
+ },
329
+
330
+ /**
331
+ * Returns the item at the specified index.
332
+ * @param {Number} index The index of the item.
333
+ * @return {Object} The item at the specified index.
334
+ */
335
+ itemAt : function(index){
336
+ return this.items[index];
337
+ },
338
+
339
+ /**
340
+ * Returns the item associated with the passed key.
341
+ * @param {String/Number} key The key of the item.
342
+ * @return {Object} The item associated with the passed key.
343
+ */
344
+ key : function(key){
345
+ return this.map[key];
346
+ },
347
+
348
+ /**
349
+ * Returns true if the collection contains the passed Object as an item.
350
+ * @param {Object} o The Object to look for in the collection.
351
+ * @return {Boolean} True if the collection contains the Object as an item.
352
+ */
353
+ contains : function(o){
354
+ return this.indexOf(o) != -1;
355
+ },
356
+
357
+ /**
358
+ * Returns true if the collection contains the passed Object as a key.
359
+ * @param {String} key The key to look for in the collection.
360
+ * @return {Boolean} True if the collection contains the Object as a key.
361
+ */
362
+ containsKey : function(key){
363
+ return typeof this.map[key] != "undefined";
364
+ },
365
+
366
+ /**
367
+ * Removes all items from the collection. Fires the {@link #clear} event when complete.
368
+ */
369
+ clear : function(){
370
+ this.length = 0;
371
+ this.items = [];
372
+ this.keys = [];
373
+ this.map = {};
374
+ this.fireEvent("clear");
375
+ },
376
+
377
+ /**
378
+ * Returns the first item in the collection.
379
+ * @return {Object} the first item in the collection..
380
+ */
381
+ first : function(){
382
+ return this.items[0];
383
+ },
384
+
385
+ /**
386
+ * Returns the last item in the collection.
387
+ * @return {Object} the last item in the collection..
388
+ */
389
+ last : function(){
390
+ return this.items[this.length-1];
391
+ },
392
+
393
+ // private
394
+ _sort : function(property, dir, fn){
395
+ var i,
396
+ len,
397
+ dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1,
398
+ c = [], k = this.keys, items = this.items;
399
+
400
+ fn = fn || function(a, b){
401
+ return a-b;
402
+ };
403
+ for(i = 0, len = items.length; i < len; i++){
404
+ c[c.length] = {key: k[i], value: items[i], index: i};
405
+ }
406
+ c.sort(function(a, b){
407
+ var v = fn(a[property], b[property]) * dsc;
408
+ if(v === 0){
409
+ v = (a.index < b.index ? -1 : 1);
410
+ }
411
+ return v;
412
+ });
413
+ for(i = 0, len = c.length; i < len; i++){
414
+ items[i] = c[i].value;
415
+ k[i] = c[i].key;
416
+ }
417
+ this.fireEvent("sort", this);
418
+ },
419
+
420
+ /**
421
+ * Sorts this collection with the passed comparison function
422
+ * @param {String} direction (optional) "ASC" or "DESC"
423
+ * @param {Function} fn (optional) comparison function
424
+ */
425
+ sort : function(dir, fn){
426
+ this._sort("value", dir, fn);
427
+ },
428
+
429
+ /**
430
+ * Sorts this collection by keys
431
+ * @param {String} direction (optional) "ASC" or "DESC"
432
+ * @param {Function} fn (optional) a comparison function (defaults to case insensitive string)
433
+ */
434
+ keySort : function(dir, fn){
435
+ this._sort("key", dir, fn || function(a, b){
436
+ var v1 = String(a).toUpperCase(), v2 = String(b).toUpperCase();
437
+ return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
438
+ });
439
+ },
440
+
441
+ /**
442
+ * Returns a range of items in this collection
443
+ * @param {Number} startIndex (optional) defaults to 0
444
+ * @param {Number} endIndex (optional) default to the last item
445
+ * @return {Array} An array of items
446
+ */
447
+ getRange : function(start, end){
448
+ var items = this.items;
449
+ if(items.length < 1){
450
+ return [];
451
+ }
452
+ start = start || 0;
453
+ end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1);
454
+ var i, r = [];
455
+ if(start <= end){
456
+ for(i = start; i <= end; i++) {
457
+ r[r.length] = items[i];
458
+ }
459
+ }else{
460
+ for(i = start; i >= end; i--) {
461
+ r[r.length] = items[i];
462
+ }
463
+ }
464
+ return r;
465
+ },
466
+
467
+ /**
468
+ * Filter the <i>objects</i> in this collection by a specific property.
469
+ * Returns a new collection that has been filtered.
470
+ * @param {String} property A property on your objects
471
+ * @param {String/RegExp} value Either string that the property values
472
+ * should start with or a RegExp to test against the property
473
+ * @param {Boolean} anyMatch (optional) True to match any part of the string, not just the beginning
474
+ * @param {Boolean} caseSensitive (optional) True for case sensitive comparison (defaults to False).
475
+ * @return {MixedCollection} The new filtered collection
476
+ */
477
+ filter : function(property, value, anyMatch, caseSensitive){
478
+ if(Ext.isEmpty(value, false)){
479
+ return this.clone();
480
+ }
481
+ value = this.createValueMatcher(value, anyMatch, caseSensitive);
482
+ return this.filterBy(function(o){
483
+ return o && value.test(o[property]);
484
+ });
485
+ },
486
+
487
+ /**
488
+ * Filter by a function. Returns a <i>new</i> collection that has been filtered.
489
+ * The passed function will be called with each object in the collection.
490
+ * If the function returns true, the value is included otherwise it is filtered.
491
+ * @param {Function} fn The function to be called, it will receive the args o (the object), k (the key)
492
+ * @param {Object} scope (optional) The scope of the function (defaults to this)
493
+ * @return {MixedCollection} The new filtered collection
494
+ */
495
+ filterBy : function(fn, scope){
496
+ var r = new Ext.util.MixedCollection();
497
+ r.getKey = this.getKey;
498
+ var k = this.keys, it = this.items;
499
+ for(var i = 0, len = it.length; i < len; i++){
500
+ if(fn.call(scope||this, it[i], k[i])){
501
+ r.add(k[i], it[i]);
502
+ }
503
+ }
504
+ return r;
505
+ },
506
+
507
+ /**
508
+ * Finds the index of the first matching object in this collection by a specific property/value.
509
+ * @param {String} property The name of a property on your objects.
510
+ * @param {String/RegExp} value A string that the property values
511
+ * should start with or a RegExp to test against the property.
512
+ * @param {Number} start (optional) The index to start searching at (defaults to 0).
513
+ * @param {Boolean} anyMatch (optional) True to match any part of the string, not just the beginning.
514
+ * @param {Boolean} caseSensitive (optional) True for case sensitive comparison.
515
+ * @return {Number} The matched index or -1
516
+ */
517
+ findIndex : function(property, value, start, anyMatch, caseSensitive){
518
+ if(Ext.isEmpty(value, false)){
519
+ return -1;
520
+ }
521
+ value = this.createValueMatcher(value, anyMatch, caseSensitive);
522
+ return this.findIndexBy(function(o){
523
+ return o && value.test(o[property]);
524
+ }, null, start);
525
+ },
526
+
527
+ /**
528
+ * Find the index of the first matching object in this collection by a function.
529
+ * If the function returns <i>true</i> it is considered a match.
530
+ * @param {Function} fn The function to be called, it will receive the args o (the object), k (the key).
531
+ * @param {Object} scope (optional) The scope of the function (defaults to this).
532
+ * @param {Number} start (optional) The index to start searching at (defaults to 0).
533
+ * @return {Number} The matched index or -1
534
+ */
535
+ findIndexBy : function(fn, scope, start){
536
+ var k = this.keys, it = this.items;
537
+ for(var i = (start||0), len = it.length; i < len; i++){
538
+ if(fn.call(scope||this, it[i], k[i])){
539
+ return i;
540
+ }
541
+ }
542
+ return -1;
543
+ },
544
+
545
+ // private
546
+ createValueMatcher : function(value, anyMatch, caseSensitive){
547
+ if(!value.exec){ // not a regex
548
+ value = String(value);
549
+ value = new RegExp((anyMatch === true ? '' : '^') + Ext.escapeRe(value), caseSensitive ? '' : 'i');
550
+ }
551
+ return value;
552
+ },
553
+
554
+ /**
555
+ * Creates a shallow copy of this collection
556
+ * @return {MixedCollection}
557
+ */
558
+ clone : function(){
559
+ var r = new Ext.util.MixedCollection();
560
+ var k = this.keys, it = this.items;
561
+ for(var i = 0, len = it.length; i < len; i++){
562
+ r.add(k[i], it[i]);
563
+ }
564
+ r.getKey = this.getKey;
565
+ return r;
566
+ }
567
+ });
568
+ /**
569
+ * This method calls {@link #item item()}.
570
+ * Returns the item associated with the passed key OR index. Key has priority over index. This is the equivalent
571
+ * of calling {@link #key} first, then if nothing matched calling {@link #itemAt}.
572
+ * @param {String/Number} key The key or index of the item.
573
+ * @return {Object} If the item is found, returns the item. If the item was not found, returns <tt>undefined</tt>.
574
+ * If an item was found, but is a Class, returns <tt>null</tt>.
575
+ */
576
+ Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;