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,1232 @@
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.form.ComboBox
9
+ * @extends Ext.form.TriggerField
10
+ * <p>A combobox control with support for autocomplete, remote-loading, paging and many other features.</p>
11
+ * <p>A ComboBox works in a similar manner to a traditional HTML &lt;select> field. The difference is
12
+ * that to submit the {@link #valueField}, you must specify a {@link #hiddenName} to create a hidden input
13
+ * field to hold the value of the valueField. The <i>{@link #displayField}</i> is shown in the text field
14
+ * which is named according to the {@link #name}.</p>
15
+ * <p><b><u>Events</u></b></p>
16
+ * <p>To do something when something in ComboBox is selected, configure the select event:<pre><code>
17
+ var cb = new Ext.form.ComboBox({
18
+ // all of your config options
19
+ listeners:{
20
+ scope: yourScope,
21
+ 'select': yourFunction
22
+ }
23
+ });
24
+
25
+ // Alternatively, you can assign events after the object is created:
26
+ var cb = new Ext.form.ComboBox(yourOptions);
27
+ cb.on('select', yourFunction, yourScope);
28
+ * </code></pre></p>
29
+ *
30
+ * <p><b><u>ComboBox in Grid</u></b></p>
31
+ * <p>If using a ComboBox in an {@link Ext.grid.EditorGridPanel Editor Grid} a {@link Ext.grid.Column#renderer renderer}
32
+ * will be needed to show the displayField when the editor is not active. Set up the renderer manually, or implement
33
+ * a reusable render, for example:<pre><code>
34
+ // create reusable renderer
35
+ Ext.util.Format.comboRenderer = function(combo){
36
+ return function(value){
37
+ var record = combo.findRecord(combo.{@link #valueField}, value);
38
+ return record ? record.get(combo.{@link #displayField}) : combo.{@link #valueNotFoundText};
39
+ }
40
+ }
41
+
42
+ // create the combo instance
43
+ var combo = new Ext.form.ComboBox({
44
+ {@link #typeAhead}: true,
45
+ {@link #triggerAction}: 'all',
46
+ {@link #lazyRender}:true,
47
+ {@link #mode}: 'local',
48
+ {@link #store}: new Ext.data.ArrayStore({
49
+ id: 0,
50
+ fields: [
51
+ 'myId',
52
+ 'displayText'
53
+ ],
54
+ data: [[1, 'item1'], [2, 'item2']]
55
+ }),
56
+ {@link #valueField}: 'myId',
57
+ {@link #displayField}: 'displayText'
58
+ });
59
+
60
+ // snippet of column model used within grid
61
+ var cm = new Ext.grid.ColumnModel([{
62
+ ...
63
+ },{
64
+ header: "Some Header",
65
+ dataIndex: 'whatever',
66
+ width: 130,
67
+ editor: combo, // specify reference to combo instance
68
+ renderer: Ext.util.Format.comboRenderer(combo) // pass combo instance to reusable renderer
69
+ },
70
+ ...
71
+ ]);
72
+ * </code></pre></p>
73
+ *
74
+ * <p><b><u>Filtering</u></b></p>
75
+ * <p>A ComboBox {@link #doQuery uses filtering itself}, for information about filtering the ComboBox
76
+ * store manually see <tt>{@link #lastQuery}</tt>.</p>
77
+ * @constructor
78
+ * Create a new ComboBox.
79
+ * @param {Object} config Configuration options
80
+ * @xtype combo
81
+ */
82
+ Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, {
83
+ /**
84
+ * @cfg {Mixed} transform The id, DOM node or element of an existing HTML SELECT to convert to a ComboBox.
85
+ * Note that if you specify this and the combo is going to be in an {@link Ext.form.BasicForm} or
86
+ * {@link Ext.form.FormPanel}, you must also set <tt>{@link #lazyRender} = true</tt>.
87
+ */
88
+ /**
89
+ * @cfg {Boolean} lazyRender <tt>true</tt> to prevent the ComboBox from rendering until requested
90
+ * (should always be used when rendering into an {@link Ext.Editor} (e.g. {@link Ext.grid.EditorGridPanel Grids}),
91
+ * defaults to <tt>false</tt>).
92
+ */
93
+ /**
94
+ * @cfg {String/Object} autoCreate <p>A {@link Ext.DomHelper DomHelper} element spec, or <tt>true</tt> for a default
95
+ * element spec. Used to create the {@link Ext.Component#getEl Element} which will encapsulate this Component.
96
+ * See <tt>{@link Ext.Component#autoEl autoEl}</tt> for details. Defaults to:</p>
97
+ * <pre><code>{tag: "input", type: "text", size: "24", autocomplete: "off"}</code></pre>
98
+ */
99
+ /**
100
+ * @cfg {Ext.data.Store/Array} store The data source to which this combo is bound (defaults to <tt>undefined</tt>).
101
+ * Acceptable values for this property are:
102
+ * <div class="mdetail-params"><ul>
103
+ * <li><b>any {@link Ext.data.Store Store} subclass</b></li>
104
+ * <li><b>an Array</b> : Arrays will be converted to a {@link Ext.data.ArrayStore} internally.
105
+ * <div class="mdetail-params"><ul>
106
+ * <li><b>1-dimensional array</b> : (e.g., <tt>['Foo','Bar']</tt>)<div class="sub-desc">
107
+ * A 1-dimensional array will automatically be expanded (each array item will be the combo
108
+ * {@link #valueField value} and {@link #displayField text})</div></li>
109
+ * <li><b>2-dimensional array</b> : (e.g., <tt>[['f','Foo'],['b','Bar']]</tt>)<div class="sub-desc">
110
+ * For a multi-dimensional array, the value in index 0 of each item will be assumed to be the combo
111
+ * {@link #valueField value}, while the value at index 1 is assumed to be the combo {@link #displayField text}.
112
+ * </div></li></ul></div></li></ul></div>
113
+ * <p>See also <tt>{@link #mode}</tt>.</p>
114
+ */
115
+ /**
116
+ * @cfg {String} title If supplied, a header element is created containing this text and added into the top of
117
+ * the dropdown list (defaults to undefined, with no header element)
118
+ */
119
+
120
+ // private
121
+ defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"},
122
+ /**
123
+ * @cfg {Number} listWidth The width (used as a parameter to {@link Ext.Element#setWidth}) of the dropdown
124
+ * list (defaults to the width of the ComboBox field). See also <tt>{@link #minListWidth}
125
+ */
126
+ /**
127
+ * @cfg {String} displayField The underlying {@link Ext.data.Field#name data field name} to bind to this
128
+ * ComboBox (defaults to undefined if <tt>{@link #mode} = 'remote'</tt> or <tt>'text'</tt> if
129
+ * {@link #transform transforming a select} a select).
130
+ * <p>See also <tt>{@link #valueField}</tt>.</p>
131
+ * <p><b>Note</b>: if using a ComboBox in an {@link Ext.grid.EditorGridPanel Editor Grid} a
132
+ * {@link Ext.grid.Column#renderer renderer} will be needed to show the displayField when the editor is not
133
+ * active.</p>
134
+ */
135
+ /**
136
+ * @cfg {String} valueField The underlying {@link Ext.data.Field#name data value name} to bind to this
137
+ * ComboBox (defaults to undefined if <tt>{@link #mode} = 'remote'</tt> or <tt>'value'</tt> if
138
+ * {@link #transform transforming a select}).
139
+ * <p><b>Note</b>: use of a <tt>valueField</tt> requires the user to make a selection in order for a value to be
140
+ * mapped. See also <tt>{@link #hiddenName}</tt>, <tt>{@link #hiddenValue}</tt>, and <tt>{@link #displayField}</tt>.</p>
141
+ */
142
+ /**
143
+ * @cfg {String} hiddenName If specified, a hidden form field with this name is dynamically generated to store the
144
+ * field's data value (defaults to the underlying DOM element's name). Required for the combo's value to automatically
145
+ * post during a form submission. See also {@link #valueField}.
146
+ * <p><b>Note</b>: the hidden field's id will also default to this name if {@link #hiddenId} is not specified.
147
+ * The ComboBox {@link Ext.Component#id id} and the <tt>{@link #hiddenId}</tt> <b>should be different</b>, since
148
+ * no two DOM nodes should share the same id. So, if the ComboBox <tt>{@link Ext.form.Field#name name}</tt> and
149
+ * <tt>hiddenName</tt> are the same, you should specify a unique <tt>{@link #hiddenId}</tt>.</p>
150
+ */
151
+ /**
152
+ * @cfg {String} hiddenId If <tt>{@link #hiddenName}</tt> is specified, <tt>hiddenId</tt> can also be provided
153
+ * to give the hidden field a unique id (defaults to the <tt>{@link #hiddenName}</tt>). The <tt>hiddenId</tt>
154
+ * and combo {@link Ext.Component#id id} should be different, since no two DOM
155
+ * nodes should share the same id.
156
+ */
157
+ /**
158
+ * @cfg {String} hiddenValue Sets the initial value of the hidden field if {@link #hiddenName} is
159
+ * specified to contain the selected {@link #valueField}, from the Store. Defaults to the configured
160
+ * <tt>{@link Ext.form.Field#value value}</tt>.
161
+ */
162
+ /**
163
+ * @cfg {String} listClass The CSS class to add to the predefined <tt>'x-combo-list'</tt> class
164
+ * applied the dropdown list element (defaults to '').
165
+ */
166
+ listClass : '',
167
+ /**
168
+ * @cfg {String} selectedClass CSS class to apply to the selected item in the dropdown list
169
+ * (defaults to <tt>'x-combo-selected'</tt>)
170
+ */
171
+ selectedClass : 'x-combo-selected',
172
+ /**
173
+ * @cfg {String} listEmptyText The empty text to display in the data view if no items are found.
174
+ * (defaults to '')
175
+ */
176
+ listEmptyText: '',
177
+ /**
178
+ * @cfg {String} triggerClass An additional CSS class used to style the trigger button. The trigger will always
179
+ * get the class <tt>'x-form-trigger'</tt> and <tt>triggerClass</tt> will be <b>appended</b> if specified
180
+ * (defaults to <tt>'x-form-arrow-trigger'</tt> which displays a downward arrow icon).
181
+ */
182
+ triggerClass : 'x-form-arrow-trigger',
183
+ /**
184
+ * @cfg {Boolean/String} shadow <tt>true</tt> or <tt>"sides"</tt> for the default effect, <tt>"frame"</tt> for
185
+ * 4-way shadow, and <tt>"drop"</tt> for bottom-right
186
+ */
187
+ shadow : 'sides',
188
+ /**
189
+ * @cfg {String} listAlign A valid anchor position value. See <tt>{@link Ext.Element#alignTo}</tt> for details
190
+ * on supported anchor positions (defaults to <tt>'tl-bl?'</tt>)
191
+ */
192
+ listAlign : 'tl-bl?',
193
+ /**
194
+ * @cfg {Number} maxHeight The maximum height in pixels of the dropdown list before scrollbars are shown
195
+ * (defaults to <tt>300</tt>)
196
+ */
197
+ maxHeight : 300,
198
+ /**
199
+ * @cfg {Number} minHeight The minimum height in pixels of the dropdown list when the list is constrained by its
200
+ * distance to the viewport edges (defaults to <tt>90</tt>)
201
+ */
202
+ minHeight : 90,
203
+ /**
204
+ * @cfg {String} triggerAction The action to execute when the trigger is clicked.
205
+ * <div class="mdetail-params"><ul>
206
+ * <li><b><tt>'query'</tt></b> : <b>Default</b>
207
+ * <p class="sub-desc">{@link #doQuery run the query} using the {@link Ext.form.Field#getRawValue raw value}.</p></li>
208
+ * <li><b><tt>'all'</tt></b> :
209
+ * <p class="sub-desc">{@link #doQuery run the query} specified by the <tt>{@link #allQuery}</tt> config option</p></li>
210
+ * </ul></div>
211
+ * <p>See also <code>{@link #queryParam}</code>.</p>
212
+ */
213
+ triggerAction : 'query',
214
+ /**
215
+ * @cfg {Number} minChars The minimum number of characters the user must type before autocomplete and
216
+ * {@link #typeAhead} activate (defaults to <tt>4</tt> if <tt>{@link #mode} = 'remote'</tt> or <tt>0</tt> if
217
+ * <tt>{@link #mode} = 'local'</tt>, does not apply if
218
+ * <tt>{@link Ext.form.TriggerField#editable editable} = false</tt>).
219
+ */
220
+ minChars : 4,
221
+ /**
222
+ * @cfg {Boolean} typeAhead <tt>true</tt> to populate and autoselect the remainder of the text being
223
+ * typed after a configurable delay ({@link #typeAheadDelay}) if it matches a known value (defaults
224
+ * to <tt>false</tt>)
225
+ */
226
+ typeAhead : false,
227
+ /**
228
+ * @cfg {Number} queryDelay The length of time in milliseconds to delay between the start of typing and
229
+ * sending the query to filter the dropdown list (defaults to <tt>500</tt> if <tt>{@link #mode} = 'remote'</tt>
230
+ * or <tt>10</tt> if <tt>{@link #mode} = 'local'</tt>)
231
+ */
232
+ queryDelay : 500,
233
+ /**
234
+ * @cfg {Number} pageSize If greater than <tt>0</tt>, a {@link Ext.PagingToolbar} is displayed in the
235
+ * footer of the dropdown list and the {@link #doQuery filter queries} will execute with page start and
236
+ * {@link Ext.PagingToolbar#pageSize limit} parameters. Only applies when <tt>{@link #mode} = 'remote'</tt>
237
+ * (defaults to <tt>0</tt>).
238
+ */
239
+ pageSize : 0,
240
+ /**
241
+ * @cfg {Boolean} selectOnFocus <tt>true</tt> to select any existing text in the field immediately on focus.
242
+ * Only applies when <tt>{@link Ext.form.TriggerField#editable editable} = true</tt> (defaults to
243
+ * <tt>false</tt>).
244
+ */
245
+ selectOnFocus : false,
246
+ /**
247
+ * @cfg {String} queryParam Name of the query ({@link Ext.data.Store#baseParam baseParam} name for the store)
248
+ * as it will be passed on the querystring (defaults to <tt>'query'</tt>)
249
+ */
250
+ queryParam : 'query',
251
+ /**
252
+ * @cfg {String} loadingText The text to display in the dropdown list while data is loading. Only applies
253
+ * when <tt>{@link #mode} = 'remote'</tt> (defaults to <tt>'Loading...'</tt>)
254
+ */
255
+ loadingText : 'Loading...',
256
+ /**
257
+ * @cfg {Boolean} resizable <tt>true</tt> to add a resize handle to the bottom of the dropdown list
258
+ * (creates an {@link Ext.Resizable} with 'se' {@link Ext.Resizable#pinned pinned} handles).
259
+ * Defaults to <tt>false</tt>.
260
+ */
261
+ resizable : false,
262
+ /**
263
+ * @cfg {Number} handleHeight The height in pixels of the dropdown list resize handle if
264
+ * <tt>{@link #resizable} = true</tt> (defaults to <tt>8</tt>)
265
+ */
266
+ handleHeight : 8,
267
+ /**
268
+ * @cfg {String} allQuery The text query to send to the server to return all records for the list
269
+ * with no filtering (defaults to '')
270
+ */
271
+ allQuery: '',
272
+ /**
273
+ * @cfg {String} mode Acceptable values are:
274
+ * <div class="mdetail-params"><ul>
275
+ * <li><b><tt>'remote'</tt></b> : <b>Default</b>
276
+ * <p class="sub-desc">Automatically loads the <tt>{@link #store}</tt> the <b>first</b> time the trigger
277
+ * is clicked. If you do not want the store to be automatically loaded the first time the trigger is
278
+ * clicked, set to <tt>'local'</tt> and manually load the store. To force a requery of the store
279
+ * <b>every</b> time the trigger is clicked see <tt>{@link #lastQuery}</tt>.</p></li>
280
+ * <li><b><tt>'local'</tt></b> :
281
+ * <p class="sub-desc">ComboBox loads local data</p>
282
+ * <pre><code>
283
+ var combo = new Ext.form.ComboBox({
284
+ renderTo: document.body,
285
+ mode: 'local',
286
+ store: new Ext.data.ArrayStore({
287
+ id: 0,
288
+ fields: [
289
+ 'myId', // numeric value is the key
290
+ 'displayText'
291
+ ],
292
+ data: [[1, 'item1'], [2, 'item2']] // data is local
293
+ }),
294
+ valueField: 'myId',
295
+ displayField: 'displayText',
296
+ triggerAction: 'all'
297
+ });
298
+ * </code></pre></li>
299
+ * </ul></div>
300
+ */
301
+ mode: 'remote',
302
+ /**
303
+ * @cfg {Number} minListWidth The minimum width of the dropdown list in pixels (defaults to <tt>70</tt>, will
304
+ * be ignored if <tt>{@link #listWidth}</tt> has a higher value)
305
+ */
306
+ minListWidth : 70,
307
+ /**
308
+ * @cfg {Boolean} forceSelection <tt>true</tt> to restrict the selected value to one of the values in the list,
309
+ * <tt>false</tt> to allow the user to set arbitrary text into the field (defaults to <tt>false</tt>)
310
+ */
311
+ forceSelection : false,
312
+ /**
313
+ * @cfg {Number} typeAheadDelay The length of time in milliseconds to wait until the typeahead text is displayed
314
+ * if <tt>{@link #typeAhead} = true</tt> (defaults to <tt>250</tt>)
315
+ */
316
+ typeAheadDelay : 250,
317
+ /**
318
+ * @cfg {String} valueNotFoundText When using a name/value combo, if the value passed to setValue is not found in
319
+ * the store, valueNotFoundText will be displayed as the field text if defined (defaults to undefined). If this
320
+ * default text is used, it means there is no value set and no validation will occur on this field.
321
+ */
322
+
323
+ /**
324
+ * @cfg {Boolean} lazyInit <tt>true</tt> to not initialize the list for this combo until the field is focused
325
+ * (defaults to <tt>true</tt>)
326
+ */
327
+ lazyInit : true,
328
+
329
+ /**
330
+ * The value of the match string used to filter the store. Delete this property to force a requery.
331
+ * Example use:
332
+ * <pre><code>
333
+ var combo = new Ext.form.ComboBox({
334
+ ...
335
+ mode: 'remote',
336
+ ...
337
+ listeners: {
338
+ // delete the previous query in the beforequery event or set
339
+ // combo.lastQuery = null (this will reload the store the next time it expands)
340
+ beforequery: function(qe){
341
+ delete qe.combo.lastQuery;
342
+ }
343
+ }
344
+ });
345
+ * </code></pre>
346
+ * To make sure the filter in the store is not cleared the first time the ComboBox trigger is used
347
+ * configure the combo with <tt>lastQuery=''</tt>. Example use:
348
+ * <pre><code>
349
+ var combo = new Ext.form.ComboBox({
350
+ ...
351
+ mode: 'local',
352
+ triggerAction: 'all',
353
+ lastQuery: ''
354
+ });
355
+ * </code></pre>
356
+ * @property lastQuery
357
+ * @type String
358
+ */
359
+
360
+ // private
361
+ initComponent : function(){
362
+ Ext.form.ComboBox.superclass.initComponent.call(this);
363
+ this.addEvents(
364
+ /**
365
+ * @event expand
366
+ * Fires when the dropdown list is expanded
367
+ * @param {Ext.form.ComboBox} combo This combo box
368
+ */
369
+ 'expand',
370
+ /**
371
+ * @event collapse
372
+ * Fires when the dropdown list is collapsed
373
+ * @param {Ext.form.ComboBox} combo This combo box
374
+ */
375
+ 'collapse',
376
+ /**
377
+ * @event beforeselect
378
+ * Fires before a list item is selected. Return false to cancel the selection.
379
+ * @param {Ext.form.ComboBox} combo This combo box
380
+ * @param {Ext.data.Record} record The data record returned from the underlying store
381
+ * @param {Number} index The index of the selected item in the dropdown list
382
+ */
383
+ 'beforeselect',
384
+ /**
385
+ * @event select
386
+ * Fires when a list item is selected
387
+ * @param {Ext.form.ComboBox} combo This combo box
388
+ * @param {Ext.data.Record} record The data record returned from the underlying store
389
+ * @param {Number} index The index of the selected item in the dropdown list
390
+ */
391
+ 'select',
392
+ /**
393
+ * @event beforequery
394
+ * Fires before all queries are processed. Return false to cancel the query or set the queryEvent's
395
+ * cancel property to true.
396
+ * @param {Object} queryEvent An object that has these properties:<ul>
397
+ * <li><code>combo</code> : Ext.form.ComboBox <div class="sub-desc">This combo box</div></li>
398
+ * <li><code>query</code> : String <div class="sub-desc">The query</div></li>
399
+ * <li><code>forceAll</code> : Boolean <div class="sub-desc">True to force "all" query</div></li>
400
+ * <li><code>cancel</code> : Boolean <div class="sub-desc">Set to true to cancel the query</div></li>
401
+ * </ul>
402
+ */
403
+ 'beforequery'
404
+ );
405
+ if(this.transform){
406
+ var s = Ext.getDom(this.transform);
407
+ if(!this.hiddenName){
408
+ this.hiddenName = s.name;
409
+ }
410
+ if(!this.store){
411
+ this.mode = 'local';
412
+ var d = [], opts = s.options;
413
+ for(var i = 0, len = opts.length;i < len; i++){
414
+ var o = opts[i],
415
+ value = (o.hasAttribute ? o.hasAttribute('value') : o.getAttributeNode('value').specified) ? o.value : o.text;
416
+ if(o.selected && Ext.isEmpty(this.value, true)) {
417
+ this.value = value;
418
+ }
419
+ d.push([value, o.text]);
420
+ }
421
+ this.store = new Ext.data.ArrayStore({
422
+ 'id': 0,
423
+ fields: ['value', 'text'],
424
+ data : d,
425
+ autoDestroy: true
426
+ });
427
+ this.valueField = 'value';
428
+ this.displayField = 'text';
429
+ }
430
+ s.name = Ext.id(); // wipe out the name in case somewhere else they have a reference
431
+ if(!this.lazyRender){
432
+ this.target = true;
433
+ this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate);
434
+ this.render(this.el.parentNode, s);
435
+ Ext.removeNode(s); // remove it
436
+ }else{
437
+ Ext.removeNode(s); // remove it
438
+ }
439
+ }
440
+ //auto-configure store from local array data
441
+ else if(this.store){
442
+ this.store = Ext.StoreMgr.lookup(this.store);
443
+ if(this.store.autoCreated){
444
+ this.displayField = this.valueField = 'field1';
445
+ if(!this.store.expandData){
446
+ this.displayField = 'field2';
447
+ }
448
+ this.mode = 'local';
449
+ }
450
+ }
451
+
452
+ this.selectedIndex = -1;
453
+ if(this.mode == 'local'){
454
+ if(!Ext.isDefined(this.initialConfig.queryDelay)){
455
+ this.queryDelay = 10;
456
+ }
457
+ if(!Ext.isDefined(this.initialConfig.minChars)){
458
+ this.minChars = 0;
459
+ }
460
+ }
461
+ },
462
+
463
+ // private
464
+ onRender : function(ct, position){
465
+ Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
466
+ if(this.hiddenName){
467
+ this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName,
468
+ id: (this.hiddenId||this.hiddenName)}, 'before', true);
469
+
470
+ // prevent input submission
471
+ this.el.dom.removeAttribute('name');
472
+ }
473
+ if(Ext.isGecko){
474
+ this.el.dom.setAttribute('autocomplete', 'off');
475
+ }
476
+
477
+ if(!this.lazyInit){
478
+ this.initList();
479
+ }else{
480
+ this.on('focus', this.initList, this, {single: true});
481
+ }
482
+ },
483
+
484
+ // private
485
+ initValue : function(){
486
+ Ext.form.ComboBox.superclass.initValue.call(this);
487
+ if(this.hiddenField){
488
+ this.hiddenField.value =
489
+ Ext.isDefined(this.hiddenValue) ? this.hiddenValue :
490
+ Ext.isDefined(this.value) ? this.value : '';
491
+ }
492
+ },
493
+
494
+ // private
495
+ initList : function(){
496
+ if(!this.list){
497
+ var cls = 'x-combo-list';
498
+
499
+ this.list = new Ext.Layer({
500
+ parentEl: this.getListParent(),
501
+ shadow: this.shadow,
502
+ cls: [cls, this.listClass].join(' '),
503
+ constrain:false
504
+ });
505
+
506
+ var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
507
+ this.list.setSize(lw, 0);
508
+ this.list.swallowEvent('mousewheel');
509
+ this.assetHeight = 0;
510
+ if(this.syncFont !== false){
511
+ this.list.setStyle('font-size', this.el.getStyle('font-size'));
512
+ }
513
+ if(this.title){
514
+ this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
515
+ this.assetHeight += this.header.getHeight();
516
+ }
517
+
518
+ this.innerList = this.list.createChild({cls:cls+'-inner'});
519
+ this.mon(this.innerList, 'mouseover', this.onViewOver, this);
520
+ this.mon(this.innerList, 'mousemove', this.onViewMove, this);
521
+ this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
522
+
523
+ if(this.pageSize){
524
+ this.footer = this.list.createChild({cls:cls+'-ft'});
525
+ this.pageTb = new Ext.PagingToolbar({
526
+ store: this.store,
527
+ pageSize: this.pageSize,
528
+ renderTo:this.footer
529
+ });
530
+ this.assetHeight += this.footer.getHeight();
531
+ }
532
+
533
+ if(!this.tpl){
534
+ /**
535
+ * @cfg {String/Ext.XTemplate} tpl <p>The template string, or {@link Ext.XTemplate} instance to
536
+ * use to display each item in the dropdown list. The dropdown list is displayed in a
537
+ * DataView. See {@link #view}.</p>
538
+ * <p>The default template string is:</p><pre><code>
539
+ '&lt;tpl for=".">&lt;div class="x-combo-list-item">{' + this.displayField + '}&lt;/div>&lt;/tpl>'
540
+ * </code></pre>
541
+ * <p>Override the default value to create custom UI layouts for items in the list.
542
+ * For example:</p><pre><code>
543
+ '&lt;tpl for=".">&lt;div ext:qtip="{state}. {nick}" class="x-combo-list-item">{state}&lt;/div>&lt;/tpl>'
544
+ * </code></pre>
545
+ * <p>The template <b>must</b> contain one or more substitution parameters using field
546
+ * names from the Combo's</b> {@link #store Store}. In the example above an
547
+ * <pre>ext:qtip</pre> attribute is added to display other fields from the Store.</p>
548
+ * <p>To preserve the default visual look of list items, add the CSS class name
549
+ * <pre>x-combo-list-item</pre> to the template's container element.</p>
550
+ * <p>Also see {@link #itemSelector} for additional details.</p>
551
+ */
552
+ this.tpl = '<tpl for="."><div class="'+cls+'-item">{' + this.displayField + '}</div></tpl>';
553
+ /**
554
+ * @cfg {String} itemSelector
555
+ * <p>A simple CSS selector (e.g. div.some-class or span:first-child) that will be
556
+ * used to determine what nodes the {@link #view Ext.DataView} which handles the dropdown
557
+ * display will be working with.</p>
558
+ * <p><b>Note</b>: this setting is <b>required</b> if a custom XTemplate has been
559
+ * specified in {@link #tpl} which assigns a class other than <pre>'x-combo-list-item'</pre>
560
+ * to dropdown list items</b>
561
+ */
562
+ }
563
+
564
+ /**
565
+ * The {@link Ext.DataView DataView} used to display the ComboBox's options.
566
+ * @type Ext.DataView
567
+ */
568
+ this.view = new Ext.DataView({
569
+ applyTo: this.innerList,
570
+ tpl: this.tpl,
571
+ singleSelect: true,
572
+ selectedClass: this.selectedClass,
573
+ itemSelector: this.itemSelector || '.' + cls + '-item',
574
+ emptyText: this.listEmptyText
575
+ });
576
+
577
+ this.mon(this.view, 'click', this.onViewClick, this);
578
+
579
+ this.bindStore(this.store, true);
580
+
581
+ if(this.resizable){
582
+ this.resizer = new Ext.Resizable(this.list, {
583
+ pinned:true, handles:'se'
584
+ });
585
+ this.mon(this.resizer, 'resize', function(r, w, h){
586
+ this.maxHeight = h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;
587
+ this.listWidth = w;
588
+ this.innerList.setWidth(w - this.list.getFrameWidth('lr'));
589
+ this.restrictHeight();
590
+ }, this);
591
+
592
+ this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom', this.handleHeight+'px');
593
+ }
594
+ }
595
+ },
596
+
597
+ /**
598
+ * <p>Returns the element used to house this ComboBox's pop-up list. Defaults to the document body.</p>
599
+ * A custom implementation may be provided as a configuration option if the floating list needs to be rendered
600
+ * to a different Element. An example might be rendering the list inside a Menu so that clicking
601
+ * the list does not hide the Menu:<pre><code>
602
+ var store = new Ext.data.ArrayStore({
603
+ autoDestroy: true,
604
+ fields: ['initials', 'fullname'],
605
+ data : [
606
+ ['FF', 'Fred Flintstone'],
607
+ ['BR', 'Barney Rubble']
608
+ ]
609
+ });
610
+
611
+ var combo = new Ext.form.ComboBox({
612
+ store: store,
613
+ displayField: 'fullname',
614
+ emptyText: 'Select a name...',
615
+ forceSelection: true,
616
+ getListParent: function() {
617
+ return this.el.up('.x-menu');
618
+ },
619
+ iconCls: 'no-icon', //use iconCls if placing within menu to shift to right side of menu
620
+ mode: 'local',
621
+ selectOnFocus: true,
622
+ triggerAction: 'all',
623
+ typeAhead: true,
624
+ width: 135
625
+ });
626
+
627
+ var menu = new Ext.menu.Menu({
628
+ id: 'mainMenu',
629
+ items: [
630
+ combo // A Field in a Menu
631
+ ]
632
+ });
633
+ </code></pre>
634
+ */
635
+ getListParent : function() {
636
+ return document.body;
637
+ },
638
+
639
+ /**
640
+ * Returns the store associated with this combo.
641
+ * @return {Ext.data.Store} The store
642
+ */
643
+ getStore : function(){
644
+ return this.store;
645
+ },
646
+
647
+ // private
648
+ bindStore : function(store, initial){
649
+ if(this.store && !initial){
650
+ this.store.un('beforeload', this.onBeforeLoad, this);
651
+ this.store.un('load', this.onLoad, this);
652
+ this.store.un('exception', this.collapse, this);
653
+ if(this.store !== store && this.store.autoDestroy){
654
+ this.store.destroy();
655
+ }
656
+ if(!store){
657
+ this.store = null;
658
+ if(this.view){
659
+ this.view.bindStore(null);
660
+ }
661
+ }
662
+ }
663
+ if(store){
664
+ if(!initial) {
665
+ this.lastQuery = null;
666
+ if(this.pageTb) {
667
+ this.pageTb.bindStore(store);
668
+ }
669
+ }
670
+
671
+ this.store = Ext.StoreMgr.lookup(store);
672
+ this.store.on({
673
+ scope: this,
674
+ beforeload: this.onBeforeLoad,
675
+ load: this.onLoad,
676
+ exception: this.collapse
677
+ });
678
+
679
+ if(this.view){
680
+ this.view.bindStore(store);
681
+ }
682
+ }
683
+ },
684
+
685
+ // private
686
+ initEvents : function(){
687
+ Ext.form.ComboBox.superclass.initEvents.call(this);
688
+
689
+ this.keyNav = new Ext.KeyNav(this.el, {
690
+ "up" : function(e){
691
+ this.inKeyMode = true;
692
+ this.selectPrev();
693
+ },
694
+
695
+ "down" : function(e){
696
+ if(!this.isExpanded()){
697
+ this.onTriggerClick();
698
+ }else{
699
+ this.inKeyMode = true;
700
+ this.selectNext();
701
+ }
702
+ },
703
+
704
+ "enter" : function(e){
705
+ this.onViewClick();
706
+ this.delayedCheck = true;
707
+ this.unsetDelayCheck.defer(10, this);
708
+ },
709
+
710
+ "esc" : function(e){
711
+ this.collapse();
712
+ },
713
+
714
+ "tab" : function(e){
715
+ this.onViewClick(false);
716
+ return true;
717
+ },
718
+
719
+ scope : this,
720
+
721
+ doRelay : function(foo, bar, hname){
722
+ if(hname == 'down' || this.scope.isExpanded()){
723
+ return Ext.KeyNav.prototype.doRelay.apply(this, arguments);
724
+ }
725
+ return true;
726
+ },
727
+
728
+ forceKeyDown : true
729
+ });
730
+ this.queryDelay = Math.max(this.queryDelay || 10,
731
+ this.mode == 'local' ? 10 : 250);
732
+ this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
733
+ if(this.typeAhead){
734
+ this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this);
735
+ }
736
+ if(this.editable !== false && !this.enableKeyEvents){
737
+ this.mon(this.el, 'keyup', this.onKeyUp, this);
738
+ }
739
+ },
740
+
741
+ // private
742
+ onDestroy : function(){
743
+ if (this.dqTask){
744
+ this.dqTask.cancel();
745
+ this.dqTask = null;
746
+ }
747
+ this.bindStore(null);
748
+ Ext.destroy(
749
+ this.resizer,
750
+ this.view,
751
+ this.pageTb,
752
+ this.list
753
+ );
754
+ Ext.form.ComboBox.superclass.onDestroy.call(this);
755
+ },
756
+
757
+ // private
758
+ unsetDelayCheck : function(){
759
+ delete this.delayedCheck;
760
+ },
761
+
762
+ // private
763
+ fireKey : function(e){
764
+ var fn = function(ev){
765
+ if (ev.isNavKeyPress() && !this.isExpanded() && !this.delayedCheck) {
766
+ this.fireEvent("specialkey", this, ev);
767
+ }
768
+ };
769
+ //For some reason I can't track down, the events fire in a different order in webkit.
770
+ //Need a slight delay here
771
+ if(this.inEditor && Ext.isWebKit && e.getKey() == e.TAB){
772
+ fn.defer(10, this, [new Ext.EventObjectImpl(e)]);
773
+ }else{
774
+ fn.call(this, e);
775
+ }
776
+ },
777
+
778
+ // private
779
+ onResize : function(w, h){
780
+ Ext.form.ComboBox.superclass.onResize.apply(this, arguments);
781
+ if(this.list && !Ext.isDefined(this.listWidth)){
782
+ var lw = Math.max(w, this.minListWidth);
783
+ this.list.setWidth(lw);
784
+ this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
785
+ }
786
+ },
787
+
788
+ // private
789
+ onEnable : function(){
790
+ Ext.form.ComboBox.superclass.onEnable.apply(this, arguments);
791
+ if(this.hiddenField){
792
+ this.hiddenField.disabled = false;
793
+ }
794
+ },
795
+
796
+ // private
797
+ onDisable : function(){
798
+ Ext.form.ComboBox.superclass.onDisable.apply(this, arguments);
799
+ if(this.hiddenField){
800
+ this.hiddenField.disabled = true;
801
+ }
802
+ },
803
+
804
+ // private
805
+ onBeforeLoad : function(){
806
+ if(!this.hasFocus){
807
+ return;
808
+ }
809
+ this.innerList.update(this.loadingText ?
810
+ '<div class="loading-indicator">'+this.loadingText+'</div>' : '');
811
+ this.restrictHeight();
812
+ this.selectedIndex = -1;
813
+ },
814
+
815
+ // private
816
+ onLoad : function(){
817
+ if(!this.hasFocus){
818
+ return;
819
+ }
820
+ if(this.store.getCount() > 0){
821
+ this.expand();
822
+ this.restrictHeight();
823
+ if(this.lastQuery == this.allQuery){
824
+ if(this.editable){
825
+ this.el.dom.select();
826
+ }
827
+ if(!this.selectByValue(this.value, true)){
828
+ this.select(0, true);
829
+ }
830
+ }else{
831
+ this.selectNext();
832
+ if(this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE){
833
+ this.taTask.delay(this.typeAheadDelay);
834
+ }
835
+ }
836
+ }else{
837
+ this.onEmptyResults();
838
+ }
839
+ //this.el.focus();
840
+ },
841
+
842
+ // private
843
+ onTypeAhead : function(){
844
+ if(this.store.getCount() > 0){
845
+ var r = this.store.getAt(0);
846
+ var newValue = r.data[this.displayField];
847
+ var len = newValue.length;
848
+ var selStart = this.getRawValue().length;
849
+ if(selStart != len){
850
+ this.setRawValue(newValue);
851
+ this.selectText(selStart, newValue.length);
852
+ }
853
+ }
854
+ },
855
+
856
+ // private
857
+ onSelect : function(record, index){
858
+ if(this.fireEvent('beforeselect', this, record, index) !== false){
859
+ this.setValue(record.data[this.valueField || this.displayField]);
860
+ this.collapse();
861
+ this.fireEvent('select', this, record, index);
862
+ }
863
+ },
864
+
865
+ // inherit docs
866
+ getName: function(){
867
+ var hf = this.hiddenField;
868
+ return hf && hf.name ? hf.name : this.hiddenName || Ext.form.ComboBox.superclass.getName.call(this);
869
+ },
870
+
871
+ /**
872
+ * Returns the currently selected field value or empty string if no value is set.
873
+ * @return {String} value The selected value
874
+ */
875
+ getValue : function(){
876
+ if(this.valueField){
877
+ return Ext.isDefined(this.value) ? this.value : '';
878
+ }else{
879
+ return Ext.form.ComboBox.superclass.getValue.call(this);
880
+ }
881
+ },
882
+
883
+ /**
884
+ * Clears any text/value currently set in the field
885
+ */
886
+ clearValue : function(){
887
+ if(this.hiddenField){
888
+ this.hiddenField.value = '';
889
+ }
890
+ this.setRawValue('');
891
+ this.lastSelectionText = '';
892
+ this.applyEmptyText();
893
+ this.value = '';
894
+ },
895
+
896
+ /**
897
+ * Sets the specified value into the field. If the value finds a match, the corresponding record text
898
+ * will be displayed in the field. If the value does not match the data value of an existing item,
899
+ * and the valueNotFoundText config option is defined, it will be displayed as the default field text.
900
+ * Otherwise the field will be blank (although the value will still be set).
901
+ * @param {String} value The value to match
902
+ * @return {Ext.form.Field} this
903
+ */
904
+ setValue : function(v){
905
+ var text = v;
906
+ if(this.valueField){
907
+ var r = this.findRecord(this.valueField, v);
908
+ if(r){
909
+ text = r.data[this.displayField];
910
+ }else if(Ext.isDefined(this.valueNotFoundText)){
911
+ text = this.valueNotFoundText;
912
+ }
913
+ }
914
+ this.lastSelectionText = text;
915
+ if(this.hiddenField){
916
+ this.hiddenField.value = v;
917
+ }
918
+ Ext.form.ComboBox.superclass.setValue.call(this, text);
919
+ this.value = v;
920
+ return this;
921
+ },
922
+
923
+ // private
924
+ findRecord : function(prop, value){
925
+ var record;
926
+ if(this.store.getCount() > 0){
927
+ this.store.each(function(r){
928
+ if(r.data[prop] == value){
929
+ record = r;
930
+ return false;
931
+ }
932
+ });
933
+ }
934
+ return record;
935
+ },
936
+
937
+ // private
938
+ onViewMove : function(e, t){
939
+ this.inKeyMode = false;
940
+ },
941
+
942
+ // private
943
+ onViewOver : function(e, t){
944
+ if(this.inKeyMode){ // prevent key nav and mouse over conflicts
945
+ return;
946
+ }
947
+ var item = this.view.findItemFromChild(t);
948
+ if(item){
949
+ var index = this.view.indexOf(item);
950
+ this.select(index, false);
951
+ }
952
+ },
953
+
954
+ // private
955
+ onViewClick : function(doFocus){
956
+ var index = this.view.getSelectedIndexes()[0];
957
+ var r = this.store.getAt(index);
958
+ if(r){
959
+ this.onSelect(r, index);
960
+ }
961
+ if(doFocus !== false){
962
+ this.el.focus();
963
+ }
964
+ },
965
+
966
+ // private
967
+ restrictHeight : function(){
968
+ this.innerList.dom.style.height = '';
969
+ var inner = this.innerList.dom;
970
+ var pad = this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight;
971
+ var h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight);
972
+ var ha = this.getPosition()[1]-Ext.getBody().getScroll().top;
973
+ var hb = Ext.lib.Dom.getViewHeight()-ha-this.getSize().height;
974
+ var space = Math.max(ha, hb, this.minHeight || 0)-this.list.shadowOffset-pad-5;
975
+ h = Math.min(h, space, this.maxHeight);
976
+
977
+ this.innerList.setHeight(h);
978
+ this.list.beginUpdate();
979
+ this.list.setHeight(h+pad);
980
+ this.list.alignTo(this.wrap, this.listAlign);
981
+ this.list.endUpdate();
982
+ },
983
+
984
+ // private
985
+ onEmptyResults : function(){
986
+ this.collapse();
987
+ },
988
+
989
+ /**
990
+ * Returns true if the dropdown list is expanded, else false.
991
+ */
992
+ isExpanded : function(){
993
+ return this.list && this.list.isVisible();
994
+ },
995
+
996
+ /**
997
+ * Select an item in the dropdown list by its data value. This function does NOT cause the select event to fire.
998
+ * The store must be loaded and the list expanded for this function to work, otherwise use setValue.
999
+ * @param {String} value The data value of the item to select
1000
+ * @param {Boolean} scrollIntoView False to prevent the dropdown list from autoscrolling to display the
1001
+ * selected item if it is not currently in view (defaults to true)
1002
+ * @return {Boolean} True if the value matched an item in the list, else false
1003
+ */
1004
+ selectByValue : function(v, scrollIntoView){
1005
+ if(!Ext.isEmpty(v, true)){
1006
+ var r = this.findRecord(this.valueField || this.displayField, v);
1007
+ if(r){
1008
+ this.select(this.store.indexOf(r), scrollIntoView);
1009
+ return true;
1010
+ }
1011
+ }
1012
+ return false;
1013
+ },
1014
+
1015
+ /**
1016
+ * Select an item in the dropdown list by its numeric index in the list. This function does NOT cause the select event to fire.
1017
+ * The store must be loaded and the list expanded for this function to work, otherwise use setValue.
1018
+ * @param {Number} index The zero-based index of the list item to select
1019
+ * @param {Boolean} scrollIntoView False to prevent the dropdown list from autoscrolling to display the
1020
+ * selected item if it is not currently in view (defaults to true)
1021
+ */
1022
+ select : function(index, scrollIntoView){
1023
+ this.selectedIndex = index;
1024
+ this.view.select(index);
1025
+ if(scrollIntoView !== false){
1026
+ var el = this.view.getNode(index);
1027
+ if(el){
1028
+ this.innerList.scrollChildIntoView(el, false);
1029
+ }
1030
+ }
1031
+ },
1032
+
1033
+ // private
1034
+ selectNext : function(){
1035
+ var ct = this.store.getCount();
1036
+ if(ct > 0){
1037
+ if(this.selectedIndex == -1){
1038
+ this.select(0);
1039
+ }else if(this.selectedIndex < ct-1){
1040
+ this.select(this.selectedIndex+1);
1041
+ }
1042
+ }
1043
+ },
1044
+
1045
+ // private
1046
+ selectPrev : function(){
1047
+ var ct = this.store.getCount();
1048
+ if(ct > 0){
1049
+ if(this.selectedIndex == -1){
1050
+ this.select(0);
1051
+ }else if(this.selectedIndex !== 0){
1052
+ this.select(this.selectedIndex-1);
1053
+ }
1054
+ }
1055
+ },
1056
+
1057
+ // private
1058
+ onKeyUp : function(e){
1059
+ var k = e.getKey();
1060
+ if(this.editable !== false && (k == e.BACKSPACE || !e.isSpecialKey())){
1061
+ this.lastKey = k;
1062
+ this.dqTask.delay(this.queryDelay);
1063
+ }
1064
+ Ext.form.ComboBox.superclass.onKeyUp.call(this, e);
1065
+ },
1066
+
1067
+ // private
1068
+ validateBlur : function(){
1069
+ return !this.list || !this.list.isVisible();
1070
+ },
1071
+
1072
+ // private
1073
+ initQuery : function(){
1074
+ this.doQuery(this.getRawValue());
1075
+ },
1076
+
1077
+ // private
1078
+ beforeBlur : function(){
1079
+ var val = this.getRawValue();
1080
+ if(this.forceSelection){
1081
+ if(val.length > 0 && val != this.emptyText){
1082
+ this.el.dom.value = Ext.isDefined(this.lastSelectionText) ? this.lastSelectionText : '';
1083
+ this.applyEmptyText();
1084
+ }else{
1085
+ this.clearValue();
1086
+ }
1087
+ }else{
1088
+ var rec = this.findRecord(this.displayField, val);
1089
+ if(rec){
1090
+ val = rec.get(this.valueField || this.displayField);
1091
+ }
1092
+ this.setValue(val);
1093
+ }
1094
+ },
1095
+
1096
+ /**
1097
+ * Execute a query to filter the dropdown list. Fires the {@link #beforequery} event prior to performing the
1098
+ * query allowing the query action to be canceled if needed.
1099
+ * @param {String} query The SQL query to execute
1100
+ * @param {Boolean} forceAll <tt>true</tt> to force the query to execute even if there are currently fewer
1101
+ * characters in the field than the minimum specified by the <tt>{@link #minChars}</tt> config option. It
1102
+ * also clears any filter previously saved in the current store (defaults to <tt>false</tt>)
1103
+ */
1104
+ doQuery : function(q, forceAll){
1105
+ q = Ext.isEmpty(q) ? '' : q;
1106
+ var qe = {
1107
+ query: q,
1108
+ forceAll: forceAll,
1109
+ combo: this,
1110
+ cancel:false
1111
+ };
1112
+ if(this.fireEvent('beforequery', qe)===false || qe.cancel){
1113
+ return false;
1114
+ }
1115
+ q = qe.query;
1116
+ forceAll = qe.forceAll;
1117
+ if(forceAll === true || (q.length >= this.minChars)){
1118
+ if(this.lastQuery !== q){
1119
+ this.lastQuery = q;
1120
+ if(this.mode == 'local'){
1121
+ this.selectedIndex = -1;
1122
+ if(forceAll){
1123
+ this.store.clearFilter();
1124
+ }else{
1125
+ this.store.filter(this.displayField, q);
1126
+ }
1127
+ this.onLoad();
1128
+ }else{
1129
+ this.store.baseParams[this.queryParam] = q;
1130
+ this.store.load({
1131
+ params: this.getParams(q)
1132
+ });
1133
+ this.expand();
1134
+ }
1135
+ }else{
1136
+ this.selectedIndex = -1;
1137
+ this.onLoad();
1138
+ }
1139
+ }
1140
+ },
1141
+
1142
+ // private
1143
+ getParams : function(q){
1144
+ var p = {};
1145
+ //p[this.queryParam] = q;
1146
+ if(this.pageSize){
1147
+ p.start = 0;
1148
+ p.limit = this.pageSize;
1149
+ }
1150
+ return p;
1151
+ },
1152
+
1153
+ /**
1154
+ * Hides the dropdown list if it is currently expanded. Fires the {@link #collapse} event on completion.
1155
+ */
1156
+ collapse : function(){
1157
+ if(!this.isExpanded()){
1158
+ return;
1159
+ }
1160
+ this.list.hide();
1161
+ Ext.getDoc().un('mousewheel', this.collapseIf, this);
1162
+ Ext.getDoc().un('mousedown', this.collapseIf, this);
1163
+ this.fireEvent('collapse', this);
1164
+ },
1165
+
1166
+ // private
1167
+ collapseIf : function(e){
1168
+ if(!e.within(this.wrap) && !e.within(this.list)){
1169
+ this.collapse();
1170
+ }
1171
+ },
1172
+
1173
+ /**
1174
+ * Expands the dropdown list if it is currently hidden. Fires the {@link #expand} event on completion.
1175
+ */
1176
+ expand : function(){
1177
+ if(this.isExpanded() || !this.hasFocus){
1178
+ return;
1179
+ }
1180
+ this.list.alignTo(this.wrap, this.listAlign);
1181
+ this.list.show();
1182
+ if(Ext.isGecko2){
1183
+ this.innerList.setOverflow('auto'); // necessary for FF 2.0/Mac
1184
+ }
1185
+ Ext.getDoc().on({
1186
+ scope: this,
1187
+ mousewheel: this.collapseIf,
1188
+ mousedown: this.collapseIf
1189
+ });
1190
+ this.fireEvent('expand', this);
1191
+ },
1192
+
1193
+ /**
1194
+ * @method onTriggerClick
1195
+ * @hide
1196
+ */
1197
+ // private
1198
+ // Implements the default empty TriggerField.onTriggerClick function
1199
+ onTriggerClick : function(){
1200
+ if(this.disabled){
1201
+ return;
1202
+ }
1203
+ if(this.isExpanded()){
1204
+ this.collapse();
1205
+ this.el.focus();
1206
+ }else {
1207
+ this.onFocus({});
1208
+ if(this.triggerAction == 'all') {
1209
+ this.doQuery(this.allQuery, true);
1210
+ } else {
1211
+ this.doQuery(this.getRawValue());
1212
+ }
1213
+ this.el.focus();
1214
+ }
1215
+ }
1216
+
1217
+ /**
1218
+ * @hide
1219
+ * @method autoSize
1220
+ */
1221
+ /**
1222
+ * @cfg {Boolean} grow @hide
1223
+ */
1224
+ /**
1225
+ * @cfg {Number} growMin @hide
1226
+ */
1227
+ /**
1228
+ * @cfg {Number} growMax @hide
1229
+ */
1230
+
1231
+ });
1232
+ Ext.reg('combo', Ext.form.ComboBox);