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,1772 @@
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.Panel
9
+ * @extends Ext.Container
10
+ * <p>Panel is a container that has specific functionality and structural components that make
11
+ * it the perfect building block for application-oriented user interfaces.</p>
12
+ * <p>Panels are, by virtue of their inheritance from {@link Ext.Container}, capable
13
+ * of being configured with a {@link Ext.Container#layout layout}, and containing child Components.</p>
14
+ * <p>When either specifying child {@link Ext.Component#items items} of a Panel, or dynamically {@link Ext.Container#add adding} Components
15
+ * to a Panel, remember to consider how you wish the Panel to arrange those child elements, and whether
16
+ * those child elements need to be sized using one of Ext's built-in <tt><b>{@link Ext.Container#layout layout}</b></tt> schemes. By
17
+ * default, Panels use the {@link Ext.layout.ContainerLayout ContainerLayout} scheme. This simply renders
18
+ * child components, appending them one after the other inside the Container, and <b>does not apply any sizing</b>
19
+ * at all.</p>
20
+ * <p>A Panel may also contain {@link #bbar bottom} and {@link #tbar top} toolbars, along with separate
21
+ * {@link #header}, {@link #footer} and {@link #body} sections (see {@link #frame} for additional
22
+ * information).</p>
23
+ * <p>Panel also provides built-in {@link #collapsible expandable and collapsible behavior}, along with
24
+ * a variety of {@link #tools prebuilt tool buttons} that can be wired up to provide other customized
25
+ * behavior. Panels can be easily dropped into any {@link Ext.Container Container} or layout, and the
26
+ * layout and rendering pipeline is {@link Ext.Container#add completely managed by the framework}.</p>
27
+ * @constructor
28
+ * @param {Object} config The config object
29
+ * @xtype panel
30
+ */
31
+ Ext.Panel = Ext.extend(Ext.Container, {
32
+ /**
33
+ * The Panel's header {@link Ext.Element Element}. Read-only.
34
+ * <p>This Element is used to house the {@link #title} and {@link #tools}</p>
35
+ * <br><p><b>Note</b>: see the Note for <tt>{@link Ext.Component#el el} also.</p>
36
+ * @type Ext.Element
37
+ * @property header
38
+ */
39
+ /**
40
+ * The Panel's body {@link Ext.Element Element} which may be used to contain HTML content.
41
+ * The content may be specified in the {@link #html} config, or it may be loaded using the
42
+ * {@link autoLoad} config, or through the Panel's {@link #getUpdater Updater}. Read-only.
43
+ * <p>If this is used to load visible HTML elements in either way, then
44
+ * the Panel may not be used as a Layout for hosting nested Panels.</p>
45
+ * <p>If this Panel is intended to be used as the host of a Layout (See {@link #layout}
46
+ * then the body Element must not be loaded or changed - it is under the control
47
+ * of the Panel's Layout.
48
+ * <br><p><b>Note</b>: see the Note for <tt>{@link Ext.Component#el el} also.</p>
49
+ * @type Ext.Element
50
+ * @property body
51
+ */
52
+ /**
53
+ * The Panel's bwrap {@link Ext.Element Element} used to contain other Panel elements
54
+ * (tbar, body, bbar, footer). See {@link #bodyCfg}. Read-only.
55
+ * @type Ext.Element
56
+ * @property bwrap
57
+ */
58
+ /**
59
+ * True if this panel is collapsed. Read-only.
60
+ * @type Boolean
61
+ * @property collapsed
62
+ */
63
+ /**
64
+ * @cfg {Object} bodyCfg
65
+ * <p>A {@link Ext.DomHelper DomHelper} element specification object may be specified for any
66
+ * Panel Element.</p>
67
+ * <p>By default, the Default element in the table below will be used for the html markup to
68
+ * create a child element with the commensurate Default class name (<tt>baseCls</tt> will be
69
+ * replaced by <tt>{@link #baseCls}</tt>):</p>
70
+ * <pre>
71
+ * Panel Default Default Custom Additional Additional
72
+ * Element element class element class style
73
+ * ======== ========================== ========= ============== ===========
74
+ * {@link #header} div {@link #baseCls}+'-header' {@link #headerCfg} headerCssClass headerStyle
75
+ * {@link #bwrap} div {@link #baseCls}+'-bwrap' {@link #bwrapCfg} bwrapCssClass bwrapStyle
76
+ * + tbar div {@link #baseCls}+'-tbar' {@link #tbarCfg} tbarCssClass tbarStyle
77
+ * + {@link #body} div {@link #baseCls}+'-body' {@link #bodyCfg} {@link #bodyCssClass} {@link #bodyStyle}
78
+ * + bbar div {@link #baseCls}+'-bbar' {@link #bbarCfg} bbarCssClass bbarStyle
79
+ * + {@link #footer} div {@link #baseCls}+'-footer' {@link #footerCfg} footerCssClass footerStyle
80
+ * </pre>
81
+ * <p>Configuring a Custom element may be used, for example, to force the {@link #body} Element
82
+ * to use a different form of markup than is created by default. An example of this might be
83
+ * to {@link Ext.Element#createChild create a child} Panel containing a custom content, such as
84
+ * a header, or forcing centering of all Panel content by having the body be a &lt;center&gt;
85
+ * element:</p>
86
+ * <pre><code>
87
+ new Ext.Panel({
88
+ title: 'Message Title',
89
+ renderTo: Ext.getBody(),
90
+ width: 200, height: 130,
91
+ <b>bodyCfg</b>: {
92
+ tag: 'center',
93
+ cls: 'x-panel-body', // Default class not applied if Custom element specified
94
+ html: 'Message'
95
+ },
96
+ footerCfg: {
97
+ tag: 'h2',
98
+ cls: 'x-panel-footer' // same as the Default class
99
+ html: 'footer html'
100
+ },
101
+ footerCssClass: 'custom-footer', // additional css class, see {@link Ext.element#addClass addClass}
102
+ footerStyle: 'background-color:red' // see {@link #bodyStyle}
103
+ });
104
+ * </code></pre>
105
+ * <p>The example above also explicitly creates a <tt>{@link #footer}</tt> with custom markup and
106
+ * styling applied.</p>
107
+ */
108
+ /**
109
+ * @cfg {Object} headerCfg
110
+ * <p>A {@link Ext.DomHelper DomHelper} element specification object specifying the element structure
111
+ * of this Panel's {@link #header} Element. See <tt>{@link #bodyCfg}</tt> also.</p>
112
+ */
113
+ /**
114
+ * @cfg {Object} bwrapCfg
115
+ * <p>A {@link Ext.DomHelper DomHelper} element specification object specifying the element structure
116
+ * of this Panel's {@link #bwrap} Element. See <tt>{@link #bodyCfg}</tt> also.</p>
117
+ */
118
+ /**
119
+ * @cfg {Object} tbarCfg
120
+ * <p>A {@link Ext.DomHelper DomHelper} element specification object specifying the element structure
121
+ * of this Panel's {@link #tbar} Element. See <tt>{@link #bodyCfg}</tt> also.</p>
122
+ */
123
+ /**
124
+ * @cfg {Object} bbarCfg
125
+ * <p>A {@link Ext.DomHelper DomHelper} element specification object specifying the element structure
126
+ * of this Panel's {@link #bbar} Element. See <tt>{@link #bodyCfg}</tt> also.</p>
127
+ */
128
+ /**
129
+ * @cfg {Object} footerCfg
130
+ * <p>A {@link Ext.DomHelper DomHelper} element specification object specifying the element structure
131
+ * of this Panel's {@link #footer} Element. See <tt>{@link #bodyCfg}</tt> also.</p>
132
+ */
133
+ /**
134
+ * @cfg {Boolean} closable
135
+ * Panels themselves do not directly support being closed, but some Panel subclasses do (like
136
+ * {@link Ext.Window}) or a Panel Class within an {@link Ext.TabPanel}. Specify <tt>true</tt>
137
+ * to enable closing in such situations. Defaults to <tt>false</tt>.
138
+ */
139
+ /**
140
+ * The Panel's footer {@link Ext.Element Element}. Read-only.
141
+ * <p>This Element is used to house the Panel's <tt>{@link #buttons}</tt> or <tt>{@link #fbar}</tt>.</p>
142
+ * <br><p><b>Note</b>: see the Note for <tt>{@link Ext.Component#el el} also.</p>
143
+ * @type Ext.Element
144
+ * @property footer
145
+ */
146
+ /**
147
+ * @cfg {Mixed} applyTo
148
+ * <p>The id of the node, a DOM node or an existing Element corresponding to a DIV that is already present in
149
+ * the document that specifies some panel-specific structural markup. When <tt>applyTo</tt> is used,
150
+ * constituent parts of the panel can be specified by CSS class name within the main element, and the panel
151
+ * will automatically create those components from that markup. Any required components not specified in the
152
+ * markup will be autogenerated if necessary.</p>
153
+ * <p>The following class names are supported (baseCls will be replaced by {@link #baseCls}):</p>
154
+ * <ul><li>baseCls + '-header'</li>
155
+ * <li>baseCls + '-header-text'</li>
156
+ * <li>baseCls + '-bwrap'</li>
157
+ * <li>baseCls + '-tbar'</li>
158
+ * <li>baseCls + '-body'</li>
159
+ * <li>baseCls + '-bbar'</li>
160
+ * <li>baseCls + '-footer'</li></ul>
161
+ * <p>Using this config, a call to render() is not required. If applyTo is specified, any value passed for
162
+ * {@link #renderTo} will be ignored and the target element's parent node will automatically be used as the
163
+ * panel's container.</p>
164
+ */
165
+ /**
166
+ * @cfg {Object/Array} tbar
167
+ * <p>The top toolbar of the panel. This can be a {@link Ext.Toolbar} object, a toolbar config, or an array of
168
+ * buttons/button configs to be added to the toolbar. Note that this is not available as a property after render.
169
+ * To access the top toolbar after render, use {@link #getTopToolbar}.</p>
170
+ * <p><b>Note:</b> Although a Toolbar may contain Field components, these will <b>not</b> be updated by a load
171
+ * of an ancestor FormPanel. A Panel's toolbars are not part of the standard Container->Component hierarchy, and
172
+ * so are not scanned to collect form items. However, the values <b>will</b> be submitted because form
173
+ * submission parameters are collected from the DOM tree.</p>
174
+ */
175
+ /**
176
+ * @cfg {Object/Array} bbar
177
+ * <p>The bottom toolbar of the panel. This can be a {@link Ext.Toolbar} object, a toolbar config, or an array of
178
+ * buttons/button configs to be added to the toolbar. Note that this is not available as a property after render.
179
+ * To access the bottom toolbar after render, use {@link #getBottomToolbar}.</p>
180
+ * <p><b>Note:</b> Although a Toolbar may contain Field components, these will <b>not<b> be updated by a load
181
+ * of an ancestor FormPanel. A Panel's toolbars are not part of the standard Container->Component hierarchy, and
182
+ * so are not scanned to collect form items. However, the values <b>will</b> be submitted because form
183
+ * submission parameters are collected from the DOM tree.</p>
184
+ */
185
+ /** @cfg {Object/Array} fbar
186
+ * <p>A {@link Ext.Toolbar Toolbar} object, a Toolbar config, or an array of
187
+ * {@link Ext.Button Button}s/{@link Ext.Button Button} configs, describing a {@link Ext.Toolbar Toolbar} to be rendered into this Panel's footer element.</p>
188
+ * <p>After render, the <code>fbar</code> property will be an {@link Ext.Toolbar Toolbar} instance.</p>
189
+ * <p>If <tt>{@link #buttons}</tt> are specified, they will supersede the <tt>fbar</tt> configuration property.</p>
190
+ * The Panel's <tt>{@link #buttonAlign}</tt> configuration affects the layout of these items, for example:
191
+ * <pre><code>
192
+ var w = new Ext.Window({
193
+ height: 250,
194
+ width: 500,
195
+ bbar: new Ext.Toolbar({
196
+ items: [{
197
+ text: 'bbar Left'
198
+ },'->',{
199
+ text: 'bbar Right'
200
+ }]
201
+ }),
202
+ {@link #buttonAlign}: 'left', // anything but 'center' or 'right' and you can use "-", and "->"
203
+ // to control the alignment of fbar items
204
+ fbar: [{
205
+ text: 'fbar Left'
206
+ },'->',{
207
+ text: 'fbar Right'
208
+ }]
209
+ }).show();
210
+ * </code></pre>
211
+ * <p><b>Note:</b> Although a Toolbar may contain Field components, these will <b>not<b> be updated by a load
212
+ * of an ancestor FormPanel. A Panel's toolbars are not part of the standard Container->Component hierarchy, and
213
+ * so are not scanned to collect form items. However, the values <b>will</b> be submitted because form
214
+ * submission parameters are collected from the DOM tree.</p>
215
+ */
216
+ /**
217
+ * @cfg {Boolean} header
218
+ * <tt>true</tt> to create the Panel's header element explicitly, <tt>false</tt> to skip creating
219
+ * it. If a <tt>{@link #title}</tt> is set the header will be created automatically, otherwise it will not.
220
+ * If a <tt>{@link #title}</tt> is set but <tt>header</tt> is explicitly set to <tt>false</tt>, the header
221
+ * will not be rendered.
222
+ */
223
+ /**
224
+ * @cfg {Boolean} footer
225
+ * <tt>true</tt> to create the footer element explicitly, false to skip creating it. The footer
226
+ * will be created automatically if <tt>{@link #buttons}</tt> or a <tt>{@link #fbar}</tt> have
227
+ * been configured. See <tt>{@link #bodyCfg}</tt> for an example.
228
+ */
229
+ /**
230
+ * @cfg {String} title
231
+ * The title text to be used as innerHTML (html tags are accepted) to display in the panel
232
+ * <tt>{@link #header}</tt> (defaults to ''). When a <tt>title</tt> is specified the
233
+ * <tt>{@link #header}</tt> element will automatically be created and displayed unless
234
+ * {@link #header} is explicitly set to <tt>false</tt>. If you do not want to specify a
235
+ * <tt>title</tt> at config time, but you may want one later, you must either specify a non-empty
236
+ * <tt>title</tt> (a blank space ' ' will do) or <tt>header:true</tt> so that the container
237
+ * element will get created.
238
+ */
239
+ /**
240
+ * @cfg {Array} buttons
241
+ * <tt>buttons</tt> will be used as <tt>{@link Ext.Container#items items}</tt> for the toolbar in
242
+ * the footer (<tt>{@link #fbar}</tt>). Typically the value of this configuration property will be
243
+ * an array of {@link Ext.Button}s or {@link Ext.Button} configuration objects.
244
+ * If an item is configured with <tt>minWidth</tt> or the Panel is configured with <tt>minButtonWidth</tt>,
245
+ * that width will be applied to the item.
246
+ */
247
+ /**
248
+ * @cfg {Object/String/Function} autoLoad
249
+ * A valid url spec according to the Updater {@link Ext.Updater#update} method.
250
+ * If autoLoad is not null, the panel will attempt to load its contents
251
+ * immediately upon render.<p>
252
+ * The URL will become the default URL for this panel's {@link #body} element,
253
+ * so it may be {@link Ext.Element#refresh refresh}ed at any time.</p>
254
+ */
255
+ /**
256
+ * @cfg {Boolean} frame
257
+ * <tt>false</tt> by default to render with plain 1px square borders. <tt>true</tt> to render with
258
+ * 9 elements, complete with custom rounded corners (also see {@link Ext.Element#boxWrap}).
259
+ * <p>The template generated for each condition is depicted below:</p><pre><code>
260
+ *
261
+ // frame = false
262
+ &lt;div id="developer-specified-id-goes-here" class="x-panel">
263
+
264
+ &lt;div class="x-panel-header">&lt;span class="x-panel-header-text">Title: (frame:false)&lt;/span>&lt;/div>
265
+
266
+ &lt;div class="x-panel-bwrap">
267
+ &lt;div class="x-panel-body">&lt;p>html value goes here&lt;/p>&lt;/div>
268
+ &lt;/div>
269
+ &lt;/div>
270
+
271
+ // frame = true (create 9 elements)
272
+ &lt;div id="developer-specified-id-goes-here" class="x-panel">
273
+ &lt;div class="x-panel-tl">&lt;div class="x-panel-tr">&lt;div class="x-panel-tc">
274
+ &lt;div class="x-panel-header">&lt;span class="x-panel-header-text">Title: (frame:true)&lt;/span>&lt;/div>
275
+ &lt;/div>&lt;/div>&lt;/div>
276
+
277
+ &lt;div class="x-panel-bwrap">
278
+ &lt;div class="x-panel-ml">&lt;div class="x-panel-mr">&lt;div class="x-panel-mc">
279
+ &lt;div class="x-panel-body">&lt;p>html value goes here&lt;/p>&lt;/div>
280
+ &lt;/div>&lt;/div>&lt;/div>
281
+
282
+ &lt;div class="x-panel-bl">&lt;div class="x-panel-br">&lt;div class="x-panel-bc"/>
283
+ &lt;/div>&lt;/div>&lt;/div>
284
+ &lt;/div>
285
+ * </code></pre>
286
+ */
287
+ /**
288
+ * @cfg {Boolean} border
289
+ * True to display the borders of the panel's body element, false to hide them (defaults to true). By default,
290
+ * the border is a 2px wide inset border, but this can be further altered by setting {@link #bodyBorder} to false.
291
+ */
292
+ /**
293
+ * @cfg {Boolean} bodyBorder
294
+ * True to display an interior border on the body element of the panel, false to hide it (defaults to true).
295
+ * This only applies when {@link #border} == true. If border == true and bodyBorder == false, the border will display
296
+ * as a 1px wide inset border, giving the entire body element an inset appearance.
297
+ */
298
+ /**
299
+ * @cfg {String/Object/Function} bodyCssClass
300
+ * Additional css class selector to be applied to the {@link #body} element in the format expected by
301
+ * {@link Ext.Element#addClass} (defaults to null). See {@link #bodyCfg}.
302
+ */
303
+ /**
304
+ * @cfg {String/Object/Function} bodyStyle
305
+ * Custom CSS styles to be applied to the {@link #body} element in the format expected by
306
+ * {@link Ext.Element#applyStyles} (defaults to null). See {@link #bodyCfg}.
307
+ */
308
+ /**
309
+ * @cfg {String} iconCls
310
+ * The CSS class selector that specifies a background image to be used as the header icon (defaults to '').
311
+ * <p>An example of specifying a custom icon class would be something like:
312
+ * </p><pre><code>
313
+ // specify the property in the config for the class:
314
+ ...
315
+ iconCls: 'my-icon'
316
+
317
+ // css class that specifies background image to be used as the icon image:
318
+ .my-icon { background-image: url(../images/my-icon.gif) 0 6px no-repeat !important; }
319
+ </code></pre>
320
+ */
321
+ /**
322
+ * @cfg {Boolean} collapsible
323
+ * True to make the panel collapsible and have the expand/collapse toggle button automatically rendered into
324
+ * the header tool button area, false to keep the panel statically sized with no button (defaults to false).
325
+ */
326
+ /**
327
+ * @cfg {Array} tools
328
+ * An array of tool button configs to be added to the header tool area. When rendered, each tool is
329
+ * stored as an {@link Ext.Element Element} referenced by a public property called <tt><b></b>tools.<i>&lt;tool-type&gt;</i></tt>
330
+ * <p>Each tool config may contain the following properties:
331
+ * <div class="mdetail-params"><ul>
332
+ * <li><b>id</b> : String<div class="sub-desc"><b>Required.</b> The type
333
+ * of tool to create. By default, this assigns a CSS class of the form <tt>x-tool-<i>&lt;tool-type&gt;</i></tt> to the
334
+ * resulting tool Element. Ext provides CSS rules, and an icon sprite containing images for the tool types listed below.
335
+ * The developer may implement custom tools by supplying alternate CSS rules and background images:
336
+ * <ul>
337
+ * <div class="x-tool x-tool-toggle" style="float:left; margin-right:5;"> </div><div><tt> toggle</tt> (Created by default when {@link #collapsible} is <tt>true</tt>)</div>
338
+ * <div class="x-tool x-tool-close" style="float:left; margin-right:5;"> </div><div><tt> close</tt></div>
339
+ * <div class="x-tool x-tool-minimize" style="float:left; margin-right:5;"> </div><div><tt> minimize</tt></div>
340
+ * <div class="x-tool x-tool-maximize" style="float:left; margin-right:5;"> </div><div><tt> maximize</tt></div>
341
+ * <div class="x-tool x-tool-restore" style="float:left; margin-right:5;"> </div><div><tt> restore</tt></div>
342
+ * <div class="x-tool x-tool-gear" style="float:left; margin-right:5;"> </div><div><tt> gear</tt></div>
343
+ * <div class="x-tool x-tool-pin" style="float:left; margin-right:5;"> </div><div><tt> pin</tt></div>
344
+ * <div class="x-tool x-tool-unpin" style="float:left; margin-right:5;"> </div><div><tt> unpin</tt></div>
345
+ * <div class="x-tool x-tool-right" style="float:left; margin-right:5;"> </div><div><tt> right</tt></div>
346
+ * <div class="x-tool x-tool-left" style="float:left; margin-right:5;"> </div><div><tt> left</tt></div>
347
+ * <div class="x-tool x-tool-up" style="float:left; margin-right:5;"> </div><div><tt> up</tt></div>
348
+ * <div class="x-tool x-tool-down" style="float:left; margin-right:5;"> </div><div><tt> down</tt></div>
349
+ * <div class="x-tool x-tool-refresh" style="float:left; margin-right:5;"> </div><div><tt> refresh</tt></div>
350
+ * <div class="x-tool x-tool-minus" style="float:left; margin-right:5;"> </div><div><tt> minus</tt></div>
351
+ * <div class="x-tool x-tool-plus" style="float:left; margin-right:5;"> </div><div><tt> plus</tt></div>
352
+ * <div class="x-tool x-tool-help" style="float:left; margin-right:5;"> </div><div><tt> help</tt></div>
353
+ * <div class="x-tool x-tool-search" style="float:left; margin-right:5;"> </div><div><tt> search</tt></div>
354
+ * <div class="x-tool x-tool-save" style="float:left; margin-right:5;"> </div><div><tt> save</tt></div>
355
+ * <div class="x-tool x-tool-print" style="float:left; margin-right:5;"> </div><div><tt> print</tt></div>
356
+ * </ul></div></li>
357
+ * <li><b>handler</b> : Function<div class="sub-desc"><b>Required.</b> The function to
358
+ * call when clicked. Arguments passed are:<ul>
359
+ * <li><b>event</b> : Ext.EventObject<div class="sub-desc">The click event.</div></li>
360
+ * <li><b>toolEl</b> : Ext.Element<div class="sub-desc">The tool Element.</div></li>
361
+ * <li><b>panel</b> : Ext.Panel<div class="sub-desc">The host Panel</div></li>
362
+ * <li><b>tc</b> : Ext.Panel<div class="sub-desc">The tool configuration object</div></li>
363
+ * </ul></div></li>
364
+ * <li><b>stopEvent</b> : Boolean<div class="sub-desc">Defaults to true. Specify as false to allow click event to propagate.</div></li>
365
+ * <li><b>scope</b> : Object<div class="sub-desc">The scope in which to call the handler.</div></li>
366
+ * <li><b>qtip</b> : String/Object<div class="sub-desc">A tip string, or
367
+ * a config argument to {@link Ext.QuickTip#register}</div></li>
368
+ * <li><b>hidden</b> : Boolean<div class="sub-desc">True to initially render hidden.</div></li>
369
+ * <li><b>on</b> : Object<div class="sub-desc">A listener config object specifiying
370
+ * event listeners in the format of an argument to {@link #addListener}</div></li>
371
+ * </ul></div>
372
+ * <p>Note that, apart from the toggle tool which is provided when a panel is collapsible, these
373
+ * tools only provide the visual button. Any required functionality must be provided by adding
374
+ * handlers that implement the necessary behavior.</p>
375
+ * <p>Example usage:</p>
376
+ * <pre><code>
377
+ tools:[{
378
+ id:'refresh',
379
+ qtip: 'Refresh form Data',
380
+ // hidden:true,
381
+ handler: function(event, toolEl, panel){
382
+ // refresh logic
383
+ }
384
+ },
385
+ {
386
+ id:'help',
387
+ qtip: 'Get Help',
388
+ handler: function(event, toolEl, panel){
389
+ // whatever
390
+ }
391
+ }]
392
+ </code></pre>
393
+ * <p>For the custom id of <tt>'help'</tt> define two relevant css classes with a link to
394
+ * a 15x15 image:</p>
395
+ * <pre><code>
396
+ .x-tool-help {background-image: url(images/help.png);}
397
+ .x-tool-help-over {background-image: url(images/help_over.png);}
398
+ // if using an image sprite:
399
+ .x-tool-help {background-image: url(images/help.png) no-repeat 0 0;}
400
+ .x-tool-help-over {background-position:-15px 0;}
401
+ </code></pre>
402
+ */
403
+ /**
404
+ * @cfg {Ext.Template/Ext.XTemplate} toolTemplate
405
+ * <p>A Template used to create {@link #tools} in the {@link #header} Element. Defaults to:</p><pre><code>
406
+ new Ext.Template('&lt;div class="x-tool x-tool-{id}">&amp;#160;&lt;/div>')</code></pre>
407
+ * <p>This may may be overridden to provide a custom DOM structure for tools based upon a more
408
+ * complex XTemplate. The template's data is a single tool configuration object (Not the entire Array)
409
+ * as specified in {@link #tools}. In the following example an &lt;a> tag is used to provide a
410
+ * visual indication when hovering over the tool:</p><pre><code>
411
+ var win = new Ext.Window({
412
+ tools: [{
413
+ id: 'download',
414
+ href: '/MyPdfDoc.pdf'
415
+ }],
416
+ toolTemplate: new Ext.XTemplate(
417
+ '&lt;tpl if="id==\'download\'">',
418
+ '&lt;a class="x-tool x-tool-pdf" href="{href}">&lt;/a>',
419
+ '&lt;/tpl>',
420
+ '&lt;tpl if="id!=\'download\'">',
421
+ '&lt;div class="x-tool x-tool-{id}">&amp;#160;&lt;/div>',
422
+ '&lt;/tpl>'
423
+ ),
424
+ width:500,
425
+ height:300,
426
+ closeAction:'hide'
427
+ });</code></pre>
428
+ * <p>Note that the CSS class "x-tool-pdf" should have an associated style rule which provides an
429
+ * appropriate background image, something like:</p>
430
+ <pre><code>
431
+ a.x-tool-pdf {background-image: url(../shared/extjs/images/pdf.gif)!important;}
432
+ </code></pre>
433
+ */
434
+ /**
435
+ * @cfg {Boolean} hideCollapseTool
436
+ * <tt>true</tt> to hide the expand/collapse toggle button when <code>{@link #collapsible} == true</code>,
437
+ * <tt>false</tt> to display it (defaults to <tt>false</tt>).
438
+ */
439
+ /**
440
+ * @cfg {Boolean} titleCollapse
441
+ * <tt>true</tt> to allow expanding and collapsing the panel (when <tt>{@link #collapsible} = true</tt>)
442
+ * by clicking anywhere in the header bar, <tt>false</tt>) to allow it only by clicking to tool button
443
+ * (defaults to <tt>false</tt>)). If this panel is a child item of a border layout also see the
444
+ * {@link Ext.layout.BorderLayout.Region BorderLayout.Region}
445
+ * <tt>{@link Ext.layout.BorderLayout.Region#floatable floatable}</tt> config option.
446
+ */
447
+ /**
448
+ * @cfg {Boolean} autoScroll
449
+ * <tt>true</tt> to use overflow:'auto' on the panel's body element and show scroll bars automatically when
450
+ * necessary, <tt>false</tt> to clip any overflowing content (defaults to <tt>false</tt>).
451
+ */
452
+ /**
453
+ * @cfg {Mixed} floating
454
+ * <p>This property is used to configure the underlying {@link Ext.Layer}. Acceptable values for this
455
+ * configuration property are:</p><div class="mdetail-params"><ul>
456
+ * <li><b><tt>false</tt></b> : <b>Default.</b><div class="sub-desc">Display the panel inline where it is
457
+ * rendered.</div></li>
458
+ * <li><b><tt>true</tt></b> : <div class="sub-desc">Float the panel (absolute position it with automatic
459
+ * shimming and shadow).<ul>
460
+ * <div class="sub-desc">Setting floating to true will create an Ext.Layer for this panel and display the
461
+ * panel at negative offsets so that it is hidden.</div>
462
+ * <div class="sub-desc">Since the panel will be absolute positioned, the position must be set explicitly
463
+ * <i>after</i> render (e.g., <tt>myPanel.setPosition(100,100);</tt>).</div>
464
+ * <div class="sub-desc"><b>Note</b>: when floating a panel you should always assign a fixed width,
465
+ * otherwise it will be auto width and will expand to fill to the right edge of the viewport.</div>
466
+ * </ul></div></li>
467
+ * <li><b><tt>{@link Ext.Layer object}</tt></b> : <div class="sub-desc">The specified object will be used
468
+ * as the configuration object for the {@link Ext.Layer} that will be created.</div></li>
469
+ * </ul></div>
470
+ */
471
+ /**
472
+ * @cfg {Boolean/String} shadow
473
+ * <tt>true</tt> (or a valid Ext.Shadow {@link Ext.Shadow#mode} value) to display a shadow behind the
474
+ * panel, <tt>false</tt> to display no shadow (defaults to <tt>'sides'</tt>). Note that this option
475
+ * only applies when <tt>{@link #floating} = true</tt>.
476
+ */
477
+ /**
478
+ * @cfg {Number} shadowOffset
479
+ * The number of pixels to offset the shadow if displayed (defaults to <tt>4</tt>). Note that this
480
+ * option only applies when <tt>{@link #floating} = true</tt>.
481
+ */
482
+ /**
483
+ * @cfg {Boolean} shim
484
+ * <tt>false</tt> to disable the iframe shim in browsers which need one (defaults to <tt>true</tt>).
485
+ * Note that this option only applies when <tt>{@link #floating} = true</tt>.
486
+ */
487
+ /**
488
+ * @cfg {String/Object} html
489
+ * An HTML fragment, or a {@link Ext.DomHelper DomHelper} specification to use as the panel's body
490
+ * content (defaults to ''). The HTML content is added by the Panel's {@link #afterRender} method,
491
+ * and so the document will not contain this HTML at the time the {@link #render} event is fired.
492
+ * This content is inserted into the body <i>before</i> any configured {@link #contentEl} is appended.
493
+ */
494
+ /**
495
+ * @cfg {String} contentEl
496
+ * <p>Specify the <tt>id</tt> of an existing HTML node to use as the panel's body content
497
+ * (defaults to '').</p><div><ul>
498
+ * <li><b>Description</b> : <ul>
499
+ * <div class="sub-desc">This config option is used to take an existing HTML element and place it in the body
500
+ * of a new panel (it simply moves the specified DOM element into the body element of the Panel
501
+ * <i>when the Panel is rendered</i> to use as the content (it is not going to be the
502
+ * actual panel itself).</div>
503
+ * </ul></li>
504
+ * <li><b>Notes</b> : <ul>
505
+ * <div class="sub-desc">The specified HTML Element is appended to the Panel's {@link #body} Element by the
506
+ * Panel's {@link #afterRender} method <i>after any configured {@link #html HTML} has
507
+ * been inserted</i>, and so the document will not contain this HTML at the time the
508
+ * {@link #render} event is fired.</div>
509
+ * <div class="sub-desc">The specified HTML element used will not participate in any layout scheme that the
510
+ * Panel may use. It's just HTML. Layouts operate on child items.</div>
511
+ * <div class="sub-desc">Add either the <tt>x-hidden</tt> or the <tt>x-hide-display</tt> CSS class to
512
+ * prevent a brief flicker of the content before it is rendered to the panel.</div>
513
+ * </ul></li>
514
+ * </ul></div>
515
+ */
516
+ /**
517
+ * @cfg {Object/Array} keys
518
+ * A {@link Ext.KeyMap} config object (in the format expected by {@link Ext.KeyMap#addBinding}
519
+ * used to assign custom key handling to this panel (defaults to <tt>null</tt>).
520
+ */
521
+ /**
522
+ * @cfg {Boolean/Object} draggable
523
+ * <p><tt>true</tt> to enable dragging of this Panel (defaults to <tt>false</tt>).</p>
524
+ * <p>For custom drag/drop implementations, an <b>Ext.Panel.DD</b> config could also be passed
525
+ * in this config instead of <tt>true</tt>. Ext.Panel.DD is an internal, undocumented class which
526
+ * moves a proxy Element around in place of the Panel's element, but provides no other behaviour
527
+ * during dragging or on drop. It is a subclass of {@link Ext.dd.DragSource}, so behaviour may be
528
+ * added by implementing the interface methods of {@link Ext.dd.DragDrop} e.g.:
529
+ * <pre><code>
530
+ new Ext.Panel({
531
+ title: 'Drag me',
532
+ x: 100,
533
+ y: 100,
534
+ renderTo: Ext.getBody(),
535
+ floating: true,
536
+ frame: true,
537
+ width: 400,
538
+ height: 200,
539
+ draggable: {
540
+ // Config option of Ext.Panel.DD class.
541
+ // It&#39;s a floating Panel, so do not show a placeholder proxy in the original position.
542
+ insertProxy: false,
543
+
544
+ // Called for each mousemove event while dragging the DD object.
545
+ onDrag : function(e){
546
+ // Record the x,y position of the drag proxy so that we can
547
+ // position the Panel at end of drag.
548
+ var pel = this.proxy.getEl();
549
+ this.x = pel.getLeft(true);
550
+ this.y = pel.getTop(true);
551
+
552
+ // Keep the Shadow aligned if there is one.
553
+ var s = this.panel.getEl().shadow;
554
+ if (s) {
555
+ s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());
556
+ }
557
+ },
558
+
559
+ // Called on the mouseup event.
560
+ endDrag : function(e){
561
+ this.panel.setPosition(this.x, this.y);
562
+ }
563
+ }
564
+ }).show();
565
+ </code></pre>
566
+ */
567
+ /**
568
+ * @cfg {String} tabTip
569
+ * A string to be used as innerHTML (html tags are accepted) to show in a tooltip when mousing over
570
+ * the tab of a Ext.Panel which is an item of a {@link Ext.TabPanel}. {@link Ext.QuickTips}.init()
571
+ * must be called in order for the tips to render.
572
+ */
573
+ /**
574
+ * @cfg {Boolean} disabled
575
+ * Render this panel disabled (default is <tt>false</tt>). An important note when using the disabled
576
+ * config on panels is that IE will often fail to initialize the disabled mask element correectly if
577
+ * the panel's layout has not yet completed by the time the Panel is disabled during the render process.
578
+ * If you experience this issue, you may need to instead use the {@link #afterlayout} event to initialize
579
+ * the disabled state:
580
+ * <pre><code>
581
+ new Ext.Panel({
582
+ ...
583
+ listeners: {
584
+ 'afterlayout': {
585
+ fn: function(p){
586
+ p.disable();
587
+ },
588
+ single: true // important, as many layouts can occur
589
+ }
590
+ }
591
+ });
592
+ </code></pre>
593
+ */
594
+ /**
595
+ * @cfg {Boolean} autoHeight
596
+ * <tt>true</tt> to use height:'auto', <tt>false</tt> to use fixed height (defaults to <tt>false</tt>).
597
+ * <b>Note</b>: Setting <tt>autoHeight:true</tt> means that the browser will manage the panel's height
598
+ * based on its contents, and that Ext will not manage it at all. If the panel is within a layout that
599
+ * manages dimensions (<tt>fit</tt>, <tt>border</tt>, etc.) then setting <tt>autoHeight:true</tt>
600
+ * can cause issues with scrolling and will not generally work as expected since the panel will take
601
+ * on the height of its contents rather than the height required by the Ext layout.
602
+ */
603
+
604
+
605
+ /**
606
+ * @cfg {String} baseCls
607
+ * The base CSS class to apply to this panel's element (defaults to <tt>'x-panel'</tt>).
608
+ * <p>Another option available by default is to specify <tt>'x-plain'</tt> which strips all styling
609
+ * except for required attributes for Ext layouts to function (e.g. overflow:hidden).
610
+ * See <tt>{@link #unstyled}</tt> also.</p>
611
+ */
612
+ baseCls : 'x-panel',
613
+ /**
614
+ * @cfg {String} collapsedCls
615
+ * A CSS class to add to the panel's element after it has been collapsed (defaults to
616
+ * <tt>'x-panel-collapsed'</tt>).
617
+ */
618
+ collapsedCls : 'x-panel-collapsed',
619
+ /**
620
+ * @cfg {Boolean} maskDisabled
621
+ * <tt>true</tt> to mask the panel when it is {@link #disabled}, <tt>false</tt> to not mask it (defaults
622
+ * to <tt>true</tt>). Either way, the panel will always tell its contained elements to disable themselves
623
+ * when it is disabled, but masking the panel can provide an additional visual cue that the panel is
624
+ * disabled.
625
+ */
626
+ maskDisabled : true,
627
+ /**
628
+ * @cfg {Boolean} animCollapse
629
+ * <tt>true</tt> to animate the transition when the panel is collapsed, <tt>false</tt> to skip the
630
+ * animation (defaults to <tt>true</tt> if the {@link Ext.Fx} class is available, otherwise <tt>false</tt>).
631
+ */
632
+ animCollapse : Ext.enableFx,
633
+ /**
634
+ * @cfg {Boolean} headerAsText
635
+ * <tt>true</tt> to display the panel <tt>{@link #title}</tt> in the <tt>{@link #header}</tt>,
636
+ * <tt>false</tt> to hide it (defaults to <tt>true</tt>).
637
+ */
638
+ headerAsText : true,
639
+ /**
640
+ * @cfg {String} buttonAlign
641
+ * The alignment of any {@link #buttons} added to this panel. Valid values are <tt>'right'</tt>,
642
+ * <tt>'left'</tt> and <tt>'center'</tt> (defaults to <tt>'right'</tt>).
643
+ */
644
+ buttonAlign : 'right',
645
+ /**
646
+ * @cfg {Boolean} collapsed
647
+ * <tt>true</tt> to render the panel collapsed, <tt>false</tt> to render it expanded (defaults to
648
+ * <tt>false</tt>).
649
+ */
650
+ collapsed : false,
651
+ /**
652
+ * @cfg {Boolean} collapseFirst
653
+ * <tt>true</tt> to make sure the collapse/expand toggle button always renders first (to the left of)
654
+ * any other tools in the panel's title bar, <tt>false</tt> to render it last (defaults to <tt>true</tt>).
655
+ */
656
+ collapseFirst : true,
657
+ /**
658
+ * @cfg {Number} minButtonWidth
659
+ * Minimum width in pixels of all {@link #buttons} in this panel (defaults to <tt>75</tt>)
660
+ */
661
+ minButtonWidth : 75,
662
+ /**
663
+ * @cfg {Boolean} unstyled
664
+ * Overrides the <tt>{@link #baseCls}</tt> setting to <tt>{@link #baseCls} = 'x-plain'</tt> which renders
665
+ * the panel unstyled except for required attributes for Ext layouts to function (e.g. overflow:hidden).
666
+ */
667
+ /**
668
+ * @cfg {String} elements
669
+ * A comma-delimited list of panel elements to initialize when the panel is rendered. Normally, this list will be
670
+ * generated automatically based on the items added to the panel at config time, but sometimes it might be useful to
671
+ * make sure a structural element is rendered even if not specified at config time (for example, you may want
672
+ * to add a button or toolbar dynamically after the panel has been rendered). Adding those elements to this
673
+ * list will allocate the required placeholders in the panel when it is rendered. Valid values are<div class="mdetail-params"><ul>
674
+ * <li><tt>header</tt></li>
675
+ * <li><tt>tbar</tt> (top bar)</li>
676
+ * <li><tt>body</tt></li>
677
+ * <li><tt>bbar</tt> (bottom bar)</li>
678
+ * <li><tt>footer</tt></li>
679
+ * </ul></div>
680
+ * Defaults to '<tt>body</tt>'.
681
+ */
682
+ elements : 'body',
683
+ /**
684
+ * @cfg {Boolean} preventBodyReset
685
+ * Defaults to <tt>false</tt>. When set to <tt>true</tt>, an extra css class <tt>'x-panel-normal'</tt>
686
+ * will be added to the panel's element, effectively applying css styles suggested by the W3C
687
+ * (see http://www.w3.org/TR/CSS21/sample.html) to the Panel's <b>body</b> element (not the header,
688
+ * footer, etc.).
689
+ */
690
+ preventBodyReset : false,
691
+
692
+ // protected - these could be used to customize the behavior of the window,
693
+ // but changing them would not be useful without further mofifications and
694
+ // could lead to unexpected or undesirable results.
695
+ toolTarget : 'header',
696
+ collapseEl : 'bwrap',
697
+ slideAnchor : 't',
698
+ disabledClass : '',
699
+
700
+ // private, notify box this class will handle heights
701
+ deferHeight : true,
702
+ // private
703
+ expandDefaults: {
704
+ duration : 0.25
705
+ },
706
+ // private
707
+ collapseDefaults : {
708
+ duration : 0.25
709
+ },
710
+
711
+ // private
712
+ initComponent : function(){
713
+ Ext.Panel.superclass.initComponent.call(this);
714
+
715
+ this.addEvents(
716
+ /**
717
+ * @event bodyresize
718
+ * Fires after the Panel has been resized.
719
+ * @param {Ext.Panel} p the Panel which has been resized.
720
+ * @param {Number} width The Panel's new width.
721
+ * @param {Number} height The Panel's new height.
722
+ */
723
+ 'bodyresize',
724
+ /**
725
+ * @event titlechange
726
+ * Fires after the Panel title has been {@link #title set} or {@link #setTitle changed}.
727
+ * @param {Ext.Panel} p the Panel which has had its title changed.
728
+ * @param {String} The new title.
729
+ */
730
+ 'titlechange',
731
+ /**
732
+ * @event iconchange
733
+ * Fires after the Panel icon class has been {@link #iconCls set} or {@link #setIconClass changed}.
734
+ * @param {Ext.Panel} p the Panel which has had its {@link #iconCls icon class} changed.
735
+ * @param {String} The new icon class.
736
+ * @param {String} The old icon class.
737
+ */
738
+ 'iconchange',
739
+ /**
740
+ * @event collapse
741
+ * Fires after the Panel has been collapsed.
742
+ * @param {Ext.Panel} p the Panel that has been collapsed.
743
+ */
744
+ 'collapse',
745
+ /**
746
+ * @event expand
747
+ * Fires after the Panel has been expanded.
748
+ * @param {Ext.Panel} p The Panel that has been expanded.
749
+ */
750
+ 'expand',
751
+ /**
752
+ * @event beforecollapse
753
+ * Fires before the Panel is collapsed. A handler can return false to cancel the collapse.
754
+ * @param {Ext.Panel} p the Panel being collapsed.
755
+ * @param {Boolean} animate True if the collapse is animated, else false.
756
+ */
757
+ 'beforecollapse',
758
+ /**
759
+ * @event beforeexpand
760
+ * Fires before the Panel is expanded. A handler can return false to cancel the expand.
761
+ * @param {Ext.Panel} p The Panel being expanded.
762
+ * @param {Boolean} animate True if the expand is animated, else false.
763
+ */
764
+ 'beforeexpand',
765
+ /**
766
+ * @event beforeclose
767
+ * Fires before the Panel is closed. Note that Panels do not directly support being closed, but some
768
+ * Panel subclasses do (like {@link Ext.Window}) or a Panel within a Ext.TabPanel. This event only
769
+ * applies to such subclasses.
770
+ * A handler can return false to cancel the close.
771
+ * @param {Ext.Panel} p The Panel being closed.
772
+ */
773
+ 'beforeclose',
774
+ /**
775
+ * @event close
776
+ * Fires after the Panel is closed. Note that Panels do not directly support being closed, but some
777
+ * Panel subclasses do (like {@link Ext.Window}) or a Panel within a Ext.TabPanel.
778
+ * @param {Ext.Panel} p The Panel that has been closed.
779
+ */
780
+ 'close',
781
+ /**
782
+ * @event activate
783
+ * Fires after the Panel has been visually activated.
784
+ * Note that Panels do not directly support being activated, but some Panel subclasses
785
+ * do (like {@link Ext.Window}). Panels which are child Components of a TabPanel fire the
786
+ * activate and deactivate events under the control of the TabPanel.
787
+ * @param {Ext.Panel} p The Panel that has been activated.
788
+ */
789
+ 'activate',
790
+ /**
791
+ * @event deactivate
792
+ * Fires after the Panel has been visually deactivated.
793
+ * Note that Panels do not directly support being deactivated, but some Panel subclasses
794
+ * do (like {@link Ext.Window}). Panels which are child Components of a TabPanel fire the
795
+ * activate and deactivate events under the control of the TabPanel.
796
+ * @param {Ext.Panel} p The Panel that has been deactivated.
797
+ */
798
+ 'deactivate'
799
+ );
800
+
801
+ if(this.unstyled){
802
+ this.baseCls = 'x-plain';
803
+ }
804
+
805
+ // shortcuts
806
+ if(this.tbar){
807
+ this.elements += ',tbar';
808
+ if(Ext.isObject(this.tbar)){
809
+ this.topToolbar = this.tbar;
810
+ }
811
+ delete this.tbar;
812
+ }
813
+ if(this.bbar){
814
+ this.elements += ',bbar';
815
+ if(Ext.isObject(this.bbar)){
816
+ this.bottomToolbar = this.bbar;
817
+ }
818
+ delete this.bbar;
819
+ }
820
+
821
+ if(this.header === true){
822
+ this.elements += ',header';
823
+ delete this.header;
824
+ }else if(this.headerCfg || (this.title && this.header !== false)){
825
+ this.elements += ',header';
826
+ }
827
+
828
+ if(this.footerCfg || this.footer === true){
829
+ this.elements += ',footer';
830
+ delete this.footer;
831
+ }
832
+
833
+ if(this.buttons){
834
+ this.elements += ',footer';
835
+ var btns = this.buttons;
836
+ /**
837
+ * This Panel's Array of buttons as created from the <tt>{@link #buttons}</tt>
838
+ * config property. Read only.
839
+ * @type Array
840
+ * @property buttons
841
+ */
842
+ this.buttons = [];
843
+ for(var i = 0, len = btns.length; i < len; i++) {
844
+ if(btns[i].render){ // button instance
845
+ this.buttons.push(btns[i]);
846
+ }else if(btns[i].xtype){
847
+ this.buttons.push(Ext.create(btns[i], 'button'));
848
+ }else{
849
+ this.addButton(btns[i]);
850
+ }
851
+ }
852
+ }
853
+ if(this.fbar){
854
+ this.elements += ',footer';
855
+ }
856
+ if(this.autoLoad){
857
+ this.on('render', this.doAutoLoad, this, {delay:10});
858
+ }
859
+ },
860
+
861
+ // private
862
+ createElement : function(name, pnode){
863
+ if(this[name]){
864
+ pnode.appendChild(this[name].dom);
865
+ return;
866
+ }
867
+
868
+ if(name === 'bwrap' || this.elements.indexOf(name) != -1){
869
+ if(this[name+'Cfg']){
870
+ this[name] = Ext.fly(pnode).createChild(this[name+'Cfg']);
871
+ }else{
872
+ var el = document.createElement('div');
873
+ el.className = this[name+'Cls'];
874
+ this[name] = Ext.get(pnode.appendChild(el));
875
+ }
876
+ if(this[name+'CssClass']){
877
+ this[name].addClass(this[name+'CssClass']);
878
+ }
879
+ if(this[name+'Style']){
880
+ this[name].applyStyles(this[name+'Style']);
881
+ }
882
+ }
883
+ },
884
+
885
+ // private
886
+ onRender : function(ct, position){
887
+ Ext.Panel.superclass.onRender.call(this, ct, position);
888
+ this.createClasses();
889
+
890
+ var el = this.el,
891
+ d = el.dom,
892
+ bw;
893
+ el.addClass(this.baseCls);
894
+ if(d.firstChild){ // existing markup
895
+ this.header = el.down('.'+this.headerCls);
896
+ this.bwrap = el.down('.'+this.bwrapCls);
897
+ var cp = this.bwrap ? this.bwrap : el;
898
+ this.tbar = cp.down('.'+this.tbarCls);
899
+ this.body = cp.down('.'+this.bodyCls);
900
+ this.bbar = cp.down('.'+this.bbarCls);
901
+ this.footer = cp.down('.'+this.footerCls);
902
+ this.fromMarkup = true;
903
+ }
904
+ if (this.preventBodyReset === true) {
905
+ el.addClass('x-panel-reset');
906
+ }
907
+ if(this.cls){
908
+ el.addClass(this.cls);
909
+ }
910
+
911
+ if(this.buttons){
912
+ this.elements += ',footer';
913
+ }
914
+
915
+ // This block allows for maximum flexibility and performance when using existing markup
916
+
917
+ // framing requires special markup
918
+ if(this.frame){
919
+ el.insertHtml('afterBegin', String.format(Ext.Element.boxMarkup, this.baseCls));
920
+
921
+ this.createElement('header', d.firstChild.firstChild.firstChild);
922
+ this.createElement('bwrap', d);
923
+
924
+ // append the mid and bottom frame to the bwrap
925
+ bw = this.bwrap.dom;
926
+ var ml = d.childNodes[1], bl = d.childNodes[2];
927
+ bw.appendChild(ml);
928
+ bw.appendChild(bl);
929
+
930
+ var mc = bw.firstChild.firstChild.firstChild;
931
+ this.createElement('tbar', mc);
932
+ this.createElement('body', mc);
933
+ this.createElement('bbar', mc);
934
+ this.createElement('footer', bw.lastChild.firstChild.firstChild);
935
+
936
+ if(!this.footer){
937
+ this.bwrap.dom.lastChild.className += ' x-panel-nofooter';
938
+ }
939
+ }else{
940
+ this.createElement('header', d);
941
+ this.createElement('bwrap', d);
942
+
943
+ // append the mid and bottom frame to the bwrap
944
+ bw = this.bwrap.dom;
945
+ this.createElement('tbar', bw);
946
+ this.createElement('body', bw);
947
+ this.createElement('bbar', bw);
948
+ this.createElement('footer', bw);
949
+
950
+ if(!this.header){
951
+ this.body.addClass(this.bodyCls + '-noheader');
952
+ if(this.tbar){
953
+ this.tbar.addClass(this.tbarCls + '-noheader');
954
+ }
955
+ }
956
+ }
957
+
958
+ if(this.padding !== undefined) {
959
+ this.body.setStyle('padding', this.body.addUnits(this.padding));
960
+ }
961
+
962
+ if(this.border === false){
963
+ this.el.addClass(this.baseCls + '-noborder');
964
+ this.body.addClass(this.bodyCls + '-noborder');
965
+ if(this.header){
966
+ this.header.addClass(this.headerCls + '-noborder');
967
+ }
968
+ if(this.footer){
969
+ this.footer.addClass(this.footerCls + '-noborder');
970
+ }
971
+ if(this.tbar){
972
+ this.tbar.addClass(this.tbarCls + '-noborder');
973
+ }
974
+ if(this.bbar){
975
+ this.bbar.addClass(this.bbarCls + '-noborder');
976
+ }
977
+ }
978
+
979
+ if(this.bodyBorder === false){
980
+ this.body.addClass(this.bodyCls + '-noborder');
981
+ }
982
+
983
+ this.bwrap.enableDisplayMode('block');
984
+
985
+ if(this.header){
986
+ this.header.unselectable();
987
+
988
+ // for tools, we need to wrap any existing header markup
989
+ if(this.headerAsText){
990
+ this.header.dom.innerHTML =
991
+ '<span class="' + this.headerTextCls + '">'+this.header.dom.innerHTML+'</span>';
992
+
993
+ if(this.iconCls){
994
+ this.setIconClass(this.iconCls);
995
+ }
996
+ }
997
+ }
998
+
999
+ if(this.floating){
1000
+ this.makeFloating(this.floating);
1001
+ }
1002
+
1003
+ if(this.collapsible){
1004
+ this.tools = this.tools ? this.tools.slice(0) : [];
1005
+ if(!this.hideCollapseTool){
1006
+ this.tools[this.collapseFirst?'unshift':'push']({
1007
+ id: 'toggle',
1008
+ handler : this.toggleCollapse,
1009
+ scope: this
1010
+ });
1011
+ }
1012
+ if(this.titleCollapse && this.header){
1013
+ this.mon(this.header, 'click', this.toggleCollapse, this);
1014
+ this.header.setStyle('cursor', 'pointer');
1015
+ }
1016
+ }
1017
+ if(this.tools){
1018
+ var ts = this.tools;
1019
+ this.tools = {};
1020
+ this.addTool.apply(this, ts);
1021
+ }else{
1022
+ this.tools = {};
1023
+ }
1024
+
1025
+ if(this.buttons && this.buttons.length > 0){
1026
+ this.fbar = new Ext.Toolbar({
1027
+ items: this.buttons,
1028
+ toolbarCls: 'x-panel-fbar'
1029
+ });
1030
+ }
1031
+ this.toolbars = [];
1032
+ if(this.fbar){
1033
+ this.fbar = Ext.create(this.fbar, 'toolbar');
1034
+ this.fbar.enableOverflow = false;
1035
+ if(this.fbar.items){
1036
+ this.fbar.items.each(function(c){
1037
+ c.minWidth = c.minWidth || this.minButtonWidth;
1038
+ }, this);
1039
+ }
1040
+ this.fbar.toolbarCls = 'x-panel-fbar';
1041
+
1042
+ var bct = this.footer.createChild({cls: 'x-panel-btns x-panel-btns-'+this.buttonAlign});
1043
+ this.fbar.ownerCt = this;
1044
+ this.fbar.render(bct);
1045
+ bct.createChild({cls:'x-clear'});
1046
+ this.toolbars.push(this.fbar);
1047
+ }
1048
+
1049
+ if(this.tbar && this.topToolbar){
1050
+ if(Ext.isArray(this.topToolbar)){
1051
+ this.topToolbar = new Ext.Toolbar(this.topToolbar);
1052
+ }else if(!this.topToolbar.events){
1053
+ this.topToolbar = Ext.create(this.topToolbar, 'toolbar');
1054
+ }
1055
+ this.topToolbar.ownerCt = this;
1056
+ this.topToolbar.render(this.tbar);
1057
+ this.toolbars.push(this.topToolbar);
1058
+ }
1059
+ if(this.bbar && this.bottomToolbar){
1060
+ if(Ext.isArray(this.bottomToolbar)){
1061
+ this.bottomToolbar = new Ext.Toolbar(this.bottomToolbar);
1062
+ }else if(!this.bottomToolbar.events){
1063
+ this.bottomToolbar = Ext.create(this.bottomToolbar, 'toolbar');
1064
+ }
1065
+ this.bottomToolbar.ownerCt = this;
1066
+ this.bottomToolbar.render(this.bbar);
1067
+ this.toolbars.push(this.bottomToolbar);
1068
+ }
1069
+ Ext.each(this.toolbars, function(tb){
1070
+ tb.on({
1071
+ scope: this,
1072
+ afterlayout: this.syncHeight,
1073
+ remove: this.syncHeight
1074
+ });
1075
+ }, this);
1076
+ },
1077
+
1078
+ /**
1079
+ * Sets the CSS class that provides the icon image for this panel. This method will replace any existing
1080
+ * icon class if one has already been set and fire the {@link #iconchange} event after completion.
1081
+ * @param {String} cls The new CSS class name
1082
+ */
1083
+ setIconClass : function(cls){
1084
+ var old = this.iconCls;
1085
+ this.iconCls = cls;
1086
+ if(this.rendered && this.header){
1087
+ if(this.frame){
1088
+ this.header.addClass('x-panel-icon');
1089
+ this.header.replaceClass(old, this.iconCls);
1090
+ }else{
1091
+ var hd = this.header.dom;
1092
+ var img = hd.firstChild && String(hd.firstChild.tagName).toLowerCase() == 'img' ? hd.firstChild : null;
1093
+ if(img){
1094
+ Ext.fly(img).replaceClass(old, this.iconCls);
1095
+ }else{
1096
+ Ext.DomHelper.insertBefore(hd.firstChild, {
1097
+ tag:'img', src: Ext.BLANK_IMAGE_URL, cls:'x-panel-inline-icon '+this.iconCls
1098
+ });
1099
+ }
1100
+ }
1101
+ }
1102
+ this.fireEvent('iconchange', this, cls, old);
1103
+ },
1104
+
1105
+ // private
1106
+ makeFloating : function(cfg){
1107
+ this.floating = true;
1108
+ this.el = new Ext.Layer(
1109
+ Ext.isObject(cfg) ? cfg : {
1110
+ shadow: this.shadow !== undefined ? this.shadow : 'sides',
1111
+ shadowOffset: this.shadowOffset,
1112
+ constrain:false,
1113
+ shim: this.shim === false ? false : undefined
1114
+ }, this.el
1115
+ );
1116
+ },
1117
+
1118
+ /**
1119
+ * Returns the {@link Ext.Toolbar toolbar} from the top (<tt>{@link #tbar}</tt>) section of the panel.
1120
+ * @return {Ext.Toolbar} The toolbar
1121
+ */
1122
+ getTopToolbar : function(){
1123
+ return this.topToolbar;
1124
+ },
1125
+
1126
+ /**
1127
+ * Returns the {@link Ext.Toolbar toolbar} from the bottom (<tt>{@link #bbar}</tt>) section of the panel.
1128
+ * @return {Ext.Toolbar} The toolbar
1129
+ */
1130
+ getBottomToolbar : function(){
1131
+ return this.bottomToolbar;
1132
+ },
1133
+
1134
+ /**
1135
+ * Adds a button to this panel. Note that this method must be called prior to rendering. The preferred
1136
+ * approach is to add buttons via the {@link #buttons} config.
1137
+ * @param {String/Object} config A valid {@link Ext.Button} config. A string will become the text for a default
1138
+ * button config, an object will be treated as a button config object.
1139
+ * @param {Function} handler The function to be called on button {@link Ext.Button#click}
1140
+ * @param {Object} scope The scope to use for the button handler function
1141
+ * @return {Ext.Button} The button that was added
1142
+ */
1143
+ addButton : function(config, handler, scope){
1144
+ var bc = {
1145
+ handler: handler,
1146
+ scope: scope,
1147
+ minWidth: this.minButtonWidth,
1148
+ hideParent:true
1149
+ };
1150
+ if(typeof config == "string"){
1151
+ bc.text = config;
1152
+ }else{
1153
+ Ext.apply(bc, config);
1154
+ }
1155
+ var btn = new Ext.Button(bc);
1156
+ if(!this.buttons){
1157
+ this.buttons = [];
1158
+ }
1159
+ this.buttons.push(btn);
1160
+ return btn;
1161
+ },
1162
+
1163
+ // private
1164
+ addTool : function(){
1165
+ if(!this[this.toolTarget]) { // no where to render tools!
1166
+ return;
1167
+ }
1168
+ if(!this.toolTemplate){
1169
+ // initialize the global tool template on first use
1170
+ var tt = new Ext.Template(
1171
+ '<div class="x-tool x-tool-{id}">&#160;</div>'
1172
+ );
1173
+ tt.disableFormats = true;
1174
+ tt.compile();
1175
+ Ext.Panel.prototype.toolTemplate = tt;
1176
+ }
1177
+ for(var i = 0, a = arguments, len = a.length; i < len; i++) {
1178
+ var tc = a[i];
1179
+ if(!this.tools[tc.id]){
1180
+ var overCls = 'x-tool-'+tc.id+'-over';
1181
+ var t = this.toolTemplate.insertFirst((tc.align !== 'left') ? this[this.toolTarget] : this[this.toolTarget].child('span'), tc, true);
1182
+ this.tools[tc.id] = t;
1183
+ t.enableDisplayMode('block');
1184
+ this.mon(t, 'click', this.createToolHandler(t, tc, overCls, this));
1185
+ if(tc.on){
1186
+ this.mon(t, tc.on);
1187
+ }
1188
+ if(tc.hidden){
1189
+ t.hide();
1190
+ }
1191
+ if(tc.qtip){
1192
+ if(Ext.isObject(tc.qtip)){
1193
+ Ext.QuickTips.register(Ext.apply({
1194
+ target: t.id
1195
+ }, tc.qtip));
1196
+ } else {
1197
+ t.dom.qtip = tc.qtip;
1198
+ }
1199
+ }
1200
+ t.addClassOnOver(overCls);
1201
+ }
1202
+ }
1203
+ },
1204
+
1205
+ onLayout : function(){
1206
+ if(this.toolbars.length > 0){
1207
+ this.duringLayout = true;
1208
+ Ext.each(this.toolbars, function(tb){
1209
+ tb.doLayout();
1210
+ });
1211
+ delete this.duringLayout;
1212
+ this.syncHeight();
1213
+ }
1214
+ },
1215
+
1216
+ syncHeight : function(){
1217
+ if(!(this.autoHeight || this.duringLayout)){
1218
+ var last = this.lastSize;
1219
+ if(last && !Ext.isEmpty(last.height)){
1220
+ var old = last.height, h = this.el.getHeight();
1221
+ if(old != 'auto' && old != h){
1222
+ var bd = this.body, bdh = bd.getHeight();
1223
+ h = Math.max(bdh + old - h, 0);
1224
+ if(bdh > 0 && bdh != h){
1225
+ bd.setHeight(h);
1226
+ if(Ext.isIE && h <= 0){
1227
+ return;
1228
+ }
1229
+ var sz = bd.getSize();
1230
+ this.fireEvent('bodyresize', sz.width, sz.height);
1231
+ }
1232
+ }
1233
+ }
1234
+ }
1235
+ },
1236
+
1237
+ // private
1238
+ onShow : function(){
1239
+ if(this.floating){
1240
+ return this.el.show();
1241
+ }
1242
+ Ext.Panel.superclass.onShow.call(this);
1243
+ },
1244
+
1245
+ // private
1246
+ onHide : function(){
1247
+ if(this.floating){
1248
+ return this.el.hide();
1249
+ }
1250
+ Ext.Panel.superclass.onHide.call(this);
1251
+ },
1252
+
1253
+ // private
1254
+ createToolHandler : function(t, tc, overCls, panel){
1255
+ return function(e){
1256
+ t.removeClass(overCls);
1257
+ if(tc.stopEvent !== false){
1258
+ e.stopEvent();
1259
+ }
1260
+ if(tc.handler){
1261
+ tc.handler.call(tc.scope || t, e, t, panel, tc);
1262
+ }
1263
+ };
1264
+ },
1265
+
1266
+ // private
1267
+ afterRender : function(){
1268
+ if(this.floating && !this.hidden){
1269
+ this.el.show();
1270
+ }
1271
+ if(this.title){
1272
+ this.setTitle(this.title);
1273
+ }
1274
+ this.setAutoScroll();
1275
+ if(this.html){
1276
+ this.body.update(Ext.isObject(this.html) ?
1277
+ Ext.DomHelper.markup(this.html) :
1278
+ this.html);
1279
+ delete this.html;
1280
+ }
1281
+ if(this.contentEl){
1282
+ var ce = Ext.getDom(this.contentEl);
1283
+ Ext.fly(ce).removeClass(['x-hidden', 'x-hide-display']);
1284
+ this.body.dom.appendChild(ce);
1285
+ }
1286
+ if(this.collapsed){
1287
+ this.collapsed = false;
1288
+ this.collapse(false);
1289
+ }
1290
+ Ext.Panel.superclass.afterRender.call(this); // do sizing calcs last
1291
+ this.initEvents();
1292
+ },
1293
+
1294
+ // private
1295
+ setAutoScroll : function(){
1296
+ if(this.rendered && this.autoScroll){
1297
+ var el = this.body || this.el;
1298
+ if(el){
1299
+ el.setOverflow('auto');
1300
+ }
1301
+ }
1302
+ },
1303
+
1304
+ // private
1305
+ getKeyMap : function(){
1306
+ if(!this.keyMap){
1307
+ this.keyMap = new Ext.KeyMap(this.el, this.keys);
1308
+ }
1309
+ return this.keyMap;
1310
+ },
1311
+
1312
+ // private
1313
+ initEvents : function(){
1314
+ if(this.keys){
1315
+ this.getKeyMap();
1316
+ }
1317
+ if(this.draggable){
1318
+ this.initDraggable();
1319
+ }
1320
+ },
1321
+
1322
+ // private
1323
+ initDraggable : function(){
1324
+ /**
1325
+ * <p>If this Panel is configured {@link #draggable}, this property will contain
1326
+ * an instance of {@link Ext.dd.DragSource} which handles dragging the Panel.</p>
1327
+ * The developer must provide implementations of the abstract methods of {@link Ext.dd.DragSource}
1328
+ * in order to supply behaviour for each stage of the drag/drop process. See {@link #draggable}.
1329
+ * @type Ext.dd.DragSource.
1330
+ * @property dd
1331
+ */
1332
+ this.dd = new Ext.Panel.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable);
1333
+ },
1334
+
1335
+ // private
1336
+ beforeEffect : function(){
1337
+ if(this.floating){
1338
+ this.el.beforeAction();
1339
+ }
1340
+ this.el.addClass('x-panel-animated');
1341
+ },
1342
+
1343
+ // private
1344
+ afterEffect : function(){
1345
+ this.syncShadow();
1346
+ this.el.removeClass('x-panel-animated');
1347
+ },
1348
+
1349
+ // private - wraps up an animation param with internal callbacks
1350
+ createEffect : function(a, cb, scope){
1351
+ var o = {
1352
+ scope:scope,
1353
+ block:true
1354
+ };
1355
+ if(a === true){
1356
+ o.callback = cb;
1357
+ return o;
1358
+ }else if(!a.callback){
1359
+ o.callback = cb;
1360
+ }else { // wrap it up
1361
+ o.callback = function(){
1362
+ cb.call(scope);
1363
+ Ext.callback(a.callback, a.scope);
1364
+ };
1365
+ }
1366
+ return Ext.applyIf(o, a);
1367
+ },
1368
+
1369
+ /**
1370
+ * Collapses the panel body so that it becomes hidden. Fires the {@link #beforecollapse} event which will
1371
+ * cancel the collapse action if it returns false.
1372
+ * @param {Boolean} animate True to animate the transition, else false (defaults to the value of the
1373
+ * {@link #animCollapse} panel config)
1374
+ * @return {Ext.Panel} this
1375
+ */
1376
+ collapse : function(animate){
1377
+ if(this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforecollapse', this, animate) === false){
1378
+ return;
1379
+ }
1380
+ var doAnim = animate === true || (animate !== false && this.animCollapse);
1381
+ this.beforeEffect();
1382
+ this.onCollapse(doAnim, animate);
1383
+ return this;
1384
+ },
1385
+
1386
+ // private
1387
+ onCollapse : function(doAnim, animArg){
1388
+ if(doAnim){
1389
+ this[this.collapseEl].slideOut(this.slideAnchor,
1390
+ Ext.apply(this.createEffect(animArg||true, this.afterCollapse, this),
1391
+ this.collapseDefaults));
1392
+ }else{
1393
+ this[this.collapseEl].hide();
1394
+ this.afterCollapse();
1395
+ }
1396
+ },
1397
+
1398
+ // private
1399
+ afterCollapse : function(){
1400
+ this.collapsed = true;
1401
+ this.el.addClass(this.collapsedCls);
1402
+ this.afterEffect();
1403
+ this.fireEvent('collapse', this);
1404
+ },
1405
+
1406
+ /**
1407
+ * Expands the panel body so that it becomes visible. Fires the {@link #beforeexpand} event which will
1408
+ * cancel the expand action if it returns false.
1409
+ * @param {Boolean} animate True to animate the transition, else false (defaults to the value of the
1410
+ * {@link #animCollapse} panel config)
1411
+ * @return {Ext.Panel} this
1412
+ */
1413
+ expand : function(animate){
1414
+ if(!this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforeexpand', this, animate) === false){
1415
+ return;
1416
+ }
1417
+ var doAnim = animate === true || (animate !== false && this.animCollapse);
1418
+ this.el.removeClass(this.collapsedCls);
1419
+ this.beforeEffect();
1420
+ this.onExpand(doAnim, animate);
1421
+ return this;
1422
+ },
1423
+
1424
+ // private
1425
+ onExpand : function(doAnim, animArg){
1426
+ if(doAnim){
1427
+ this[this.collapseEl].slideIn(this.slideAnchor,
1428
+ Ext.apply(this.createEffect(animArg||true, this.afterExpand, this),
1429
+ this.expandDefaults));
1430
+ }else{
1431
+ this[this.collapseEl].show();
1432
+ this.afterExpand();
1433
+ }
1434
+ },
1435
+
1436
+ // private
1437
+ afterExpand : function(){
1438
+ this.collapsed = false;
1439
+ this.afterEffect();
1440
+ if(this.deferLayout !== undefined){
1441
+ this.doLayout(true);
1442
+ }
1443
+ this.fireEvent('expand', this);
1444
+ },
1445
+
1446
+ /**
1447
+ * Shortcut for performing an {@link #expand} or {@link #collapse} based on the current state of the panel.
1448
+ * @param {Boolean} animate True to animate the transition, else false (defaults to the value of the
1449
+ * {@link #animCollapse} panel config)
1450
+ * @return {Ext.Panel} this
1451
+ */
1452
+ toggleCollapse : function(animate){
1453
+ this[this.collapsed ? 'expand' : 'collapse'](animate);
1454
+ return this;
1455
+ },
1456
+
1457
+ // private
1458
+ onDisable : function(){
1459
+ if(this.rendered && this.maskDisabled){
1460
+ this.el.mask();
1461
+ }
1462
+ Ext.Panel.superclass.onDisable.call(this);
1463
+ },
1464
+
1465
+ // private
1466
+ onEnable : function(){
1467
+ if(this.rendered && this.maskDisabled){
1468
+ this.el.unmask();
1469
+ }
1470
+ Ext.Panel.superclass.onEnable.call(this);
1471
+ },
1472
+
1473
+ // private
1474
+ onResize : function(w, h){
1475
+ if(w !== undefined || h !== undefined){
1476
+ if(!this.collapsed){
1477
+ if(typeof w == 'number'){
1478
+ w = this.adjustBodyWidth(w - this.getFrameWidth());
1479
+ if(this.tbar){
1480
+ this.tbar.setWidth(w);
1481
+ if(this.topToolbar){
1482
+ this.topToolbar.setSize(w);
1483
+ }
1484
+ }
1485
+ if(this.bbar){
1486
+ this.bbar.setWidth(w);
1487
+ if(this.bottomToolbar){
1488
+ this.bottomToolbar.setSize(w);
1489
+ }
1490
+ }
1491
+ if(this.fbar){
1492
+ var f = this.fbar,
1493
+ fWidth = 1,
1494
+ strict = Ext.isStrict;
1495
+ if(this.buttonAlign == 'left'){
1496
+ fWidth = w - f.container.getFrameWidth('lr');
1497
+ }else{
1498
+ //center/right alignment off in webkit
1499
+ if(Ext.isIE || Ext.isWebKit){
1500
+ //center alignment ok on webkit.
1501
+ //right broken in both, center on IE
1502
+ if(!(this.buttonAlign == 'center' && Ext.isWebKit) && (!strict || (!Ext.isIE8 && strict))){
1503
+ (function(){
1504
+ f.setWidth(f.getEl().child('.x-toolbar-ct').getWidth());
1505
+ }).defer(1);
1506
+ }else{
1507
+ fWidth = 'auto';
1508
+ }
1509
+ }else{
1510
+ fWidth = 'auto';
1511
+ }
1512
+ }
1513
+ f.setWidth(fWidth);
1514
+ }
1515
+ this.body.setWidth(w);
1516
+ }else if(w == 'auto'){
1517
+ this.body.setWidth(w);
1518
+ }
1519
+
1520
+ if(typeof h == 'number'){
1521
+ h = Math.max(0, this.adjustBodyHeight(h - this.getFrameHeight()));
1522
+ this.body.setHeight(h);
1523
+ }else if(h == 'auto'){
1524
+ this.body.setHeight(h);
1525
+ }
1526
+
1527
+ if(this.disabled && this.el._mask){
1528
+ this.el._mask.setSize(this.el.dom.clientWidth, this.el.getHeight());
1529
+ }
1530
+ }else{
1531
+ this.queuedBodySize = {width: w, height: h};
1532
+ if(!this.queuedExpand && this.allowQueuedExpand !== false){
1533
+ this.queuedExpand = true;
1534
+ this.on('expand', function(){
1535
+ delete this.queuedExpand;
1536
+ this.onResize(this.queuedBodySize.width, this.queuedBodySize.height);
1537
+ this.doLayout();
1538
+ }, this, {single:true});
1539
+ }
1540
+ }
1541
+ this.fireEvent('bodyresize', this, w, h);
1542
+ }
1543
+ this.syncShadow();
1544
+ },
1545
+
1546
+ // private
1547
+ adjustBodyHeight : function(h){
1548
+ return h;
1549
+ },
1550
+
1551
+ // private
1552
+ adjustBodyWidth : function(w){
1553
+ return w;
1554
+ },
1555
+
1556
+ // private
1557
+ onPosition : function(){
1558
+ this.syncShadow();
1559
+ },
1560
+
1561
+ /**
1562
+ * Returns the width in pixels of the framing elements of this panel (not including the body width). To
1563
+ * retrieve the body width see {@link #getInnerWidth}.
1564
+ * @return {Number} The frame width
1565
+ */
1566
+ getFrameWidth : function(){
1567
+ var w = this.el.getFrameWidth('lr')+this.bwrap.getFrameWidth('lr');
1568
+
1569
+ if(this.frame){
1570
+ var l = this.bwrap.dom.firstChild;
1571
+ w += (Ext.fly(l).getFrameWidth('l') + Ext.fly(l.firstChild).getFrameWidth('r'));
1572
+ var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
1573
+ w += Ext.fly(mc).getFrameWidth('lr');
1574
+ }
1575
+ return w;
1576
+ },
1577
+
1578
+ /**
1579
+ * Returns the height in pixels of the framing elements of this panel (including any top and bottom bars and
1580
+ * header and footer elements, but not including the body height). To retrieve the body height see {@link #getInnerHeight}.
1581
+ * @return {Number} The frame height
1582
+ */
1583
+ getFrameHeight : function(){
1584
+ var h = this.el.getFrameWidth('tb')+this.bwrap.getFrameWidth('tb');
1585
+ h += (this.tbar ? this.tbar.getHeight() : 0) +
1586
+ (this.bbar ? this.bbar.getHeight() : 0);
1587
+
1588
+ if(this.frame){
1589
+ var hd = this.el.dom.firstChild;
1590
+ var ft = this.bwrap.dom.lastChild;
1591
+ h += (hd.offsetHeight + ft.offsetHeight);
1592
+ var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
1593
+ h += Ext.fly(mc).getFrameWidth('tb');
1594
+ }else{
1595
+ h += (this.header ? this.header.getHeight() : 0) +
1596
+ (this.footer ? this.footer.getHeight() : 0);
1597
+ }
1598
+ return h;
1599
+ },
1600
+
1601
+ /**
1602
+ * Returns the width in pixels of the body element (not including the width of any framing elements).
1603
+ * For the frame width see {@link #getFrameWidth}.
1604
+ * @return {Number} The body width
1605
+ */
1606
+ getInnerWidth : function(){
1607
+ return this.getSize().width - this.getFrameWidth();
1608
+ },
1609
+
1610
+ /**
1611
+ * Returns the height in pixels of the body element (not including the height of any framing elements).
1612
+ * For the frame height see {@link #getFrameHeight}.
1613
+ * @return {Number} The body height
1614
+ */
1615
+ getInnerHeight : function(){
1616
+ return this.getSize().height - this.getFrameHeight();
1617
+ },
1618
+
1619
+ // private
1620
+ syncShadow : function(){
1621
+ if(this.floating){
1622
+ this.el.sync(true);
1623
+ }
1624
+ },
1625
+
1626
+ // private
1627
+ getLayoutTarget : function(){
1628
+ return this.body;
1629
+ },
1630
+
1631
+ /**
1632
+ * <p>Sets the title text for the panel and optionally the {@link #iconCls icon class}.</p>
1633
+ * <p>In order to be able to set the title, a header element must have been created
1634
+ * for the Panel. This is triggered either by configuring the Panel with a non-blank <tt>{@link #title}</tt>,
1635
+ * or configuring it with <tt><b>{@link #header}: true</b></tt>.</p>
1636
+ * @param {String} title The title text to set
1637
+ * @param {String} iconCls (optional) {@link #iconCls iconCls} A user-defined CSS class that provides the icon image for this panel
1638
+ */
1639
+ setTitle : function(title, iconCls){
1640
+ this.title = title;
1641
+ if(this.header && this.headerAsText){
1642
+ this.header.child('span').update(title);
1643
+ }
1644
+ if(iconCls){
1645
+ this.setIconClass(iconCls);
1646
+ }
1647
+ this.fireEvent('titlechange', this, title);
1648
+ return this;
1649
+ },
1650
+
1651
+ /**
1652
+ * Get the {@link Ext.Updater} for this panel. Enables you to perform Ajax updates of this panel's body.
1653
+ * @return {Ext.Updater} The Updater
1654
+ */
1655
+ getUpdater : function(){
1656
+ return this.body.getUpdater();
1657
+ },
1658
+
1659
+ /**
1660
+ * Loads this content panel immediately with content returned from an XHR call.
1661
+ * @param {Object/String/Function} config A config object containing any of the following options:
1662
+ <pre><code>
1663
+ panel.load({
1664
+ url: "your-url.php",
1665
+ params: {param1: "foo", param2: "bar"}, // or a URL encoded string
1666
+ callback: yourFunction,
1667
+ scope: yourObject, // optional scope for the callback
1668
+ discardUrl: false,
1669
+ nocache: false,
1670
+ text: "Loading...",
1671
+ timeout: 30,
1672
+ scripts: false
1673
+ });
1674
+ </code></pre>
1675
+ * The only required property is url. The optional properties nocache, text and scripts
1676
+ * are shorthand for disableCaching, indicatorText and loadScripts and are used to set their
1677
+ * associated property on this panel Updater instance.
1678
+ * @return {Ext.Panel} this
1679
+ */
1680
+ load : function(){
1681
+ var um = this.body.getUpdater();
1682
+ um.update.apply(um, arguments);
1683
+ return this;
1684
+ },
1685
+
1686
+ // private
1687
+ beforeDestroy : function(){
1688
+ if(this.header){
1689
+ this.header.removeAllListeners();
1690
+ if(this.headerAsText){
1691
+ Ext.Element.uncache(this.header.child('span'));
1692
+ }
1693
+ }
1694
+ Ext.Element.uncache(
1695
+ this.header,
1696
+ this.tbar,
1697
+ this.bbar,
1698
+ this.footer,
1699
+ this.body,
1700
+ this.bwrap
1701
+ );
1702
+ if(this.tools){
1703
+ for(var k in this.tools){
1704
+ Ext.destroy(this.tools[k]);
1705
+ }
1706
+ }
1707
+ if(this.buttons){
1708
+ for(var b in this.buttons){
1709
+ Ext.destroy(this.buttons[b]);
1710
+ }
1711
+ }
1712
+ Ext.destroy(this.toolbars);
1713
+ Ext.Panel.superclass.beforeDestroy.call(this);
1714
+ },
1715
+
1716
+ // private
1717
+ createClasses : function(){
1718
+ this.headerCls = this.baseCls + '-header';
1719
+ this.headerTextCls = this.baseCls + '-header-text';
1720
+ this.bwrapCls = this.baseCls + '-bwrap';
1721
+ this.tbarCls = this.baseCls + '-tbar';
1722
+ this.bodyCls = this.baseCls + '-body';
1723
+ this.bbarCls = this.baseCls + '-bbar';
1724
+ this.footerCls = this.baseCls + '-footer';
1725
+ },
1726
+
1727
+ // private
1728
+ createGhost : function(cls, useShim, appendTo){
1729
+ var el = document.createElement('div');
1730
+ el.className = 'x-panel-ghost ' + (cls ? cls : '');
1731
+ if(this.header){
1732
+ el.appendChild(this.el.dom.firstChild.cloneNode(true));
1733
+ }
1734
+ Ext.fly(el.appendChild(document.createElement('ul'))).setHeight(this.bwrap.getHeight());
1735
+ el.style.width = this.el.dom.offsetWidth + 'px';;
1736
+ if(!appendTo){
1737
+ this.container.dom.appendChild(el);
1738
+ }else{
1739
+ Ext.getDom(appendTo).appendChild(el);
1740
+ }
1741
+ if(useShim !== false && this.el.useShim !== false){
1742
+ var layer = new Ext.Layer({shadow:false, useDisplay:true, constrain:false}, el);
1743
+ layer.show();
1744
+ return layer;
1745
+ }else{
1746
+ return new Ext.Element(el);
1747
+ }
1748
+ },
1749
+
1750
+ // private
1751
+ doAutoLoad : function(){
1752
+ var u = this.body.getUpdater();
1753
+ if(this.renderer){
1754
+ u.setRenderer(this.renderer);
1755
+ }
1756
+ u.update(Ext.isObject(this.autoLoad) ? this.autoLoad : {url: this.autoLoad});
1757
+ },
1758
+
1759
+ /**
1760
+ * Retrieve a tool by id.
1761
+ * @param {String} id
1762
+ * @return {Object} tool
1763
+ */
1764
+ getTool : function(id) {
1765
+ return this.tools[id];
1766
+ }
1767
+
1768
+ /**
1769
+ * @cfg {String} autoEl @hide
1770
+ */
1771
+ });
1772
+ Ext.reg('panel', Ext.Panel);