extjs-rails 4.1.0.alpha1

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 (517) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +36 -0
  4. data/README.md +29 -0
  5. data/Rakefile +2 -0
  6. data/app/assets/javascripts/extjs-rails/extjs-rails.js +1 -0
  7. data/app/assets/javascripts/extjs-rails/index.js.erb +9 -0
  8. data/app/assets/javascripts/extjs-rails/sdk.jsb3 +2017 -0
  9. data/app/assets/javascripts/extjs-rails/src/AbstractComponent.js +3290 -0
  10. data/app/assets/javascripts/extjs-rails/src/AbstractManager.js +144 -0
  11. data/app/assets/javascripts/extjs-rails/src/AbstractPlugin.js +72 -0
  12. data/app/assets/javascripts/extjs-rails/src/Action.js +276 -0
  13. data/app/assets/javascripts/extjs-rails/src/Ajax.js +99 -0
  14. data/app/assets/javascripts/extjs-rails/src/Component.js +1344 -0
  15. data/app/assets/javascripts/extjs-rails/src/ComponentLoader.js +202 -0
  16. data/app/assets/javascripts/extjs-rails/src/ComponentManager.js +47 -0
  17. data/app/assets/javascripts/extjs-rails/src/ComponentQuery.js +521 -0
  18. data/app/assets/javascripts/extjs-rails/src/Editor.js +494 -0
  19. data/app/assets/javascripts/extjs-rails/src/ElementLoader.js +404 -0
  20. data/app/assets/javascripts/extjs-rails/src/FocusManager.js +712 -0
  21. data/app/assets/javascripts/extjs-rails/src/Img.js +111 -0
  22. data/app/assets/javascripts/extjs-rails/src/Layer.js +543 -0
  23. data/app/assets/javascripts/extjs-rails/src/LoadMask.js +432 -0
  24. data/app/assets/javascripts/extjs-rails/src/ModelManager.js +186 -0
  25. data/app/assets/javascripts/extjs-rails/src/PluginManager.js +110 -0
  26. data/app/assets/javascripts/extjs-rails/src/ProgressBar.js +336 -0
  27. data/app/assets/javascripts/extjs-rails/src/Shadow.js +233 -0
  28. data/app/assets/javascripts/extjs-rails/src/ShadowPool.js +43 -0
  29. data/app/assets/javascripts/extjs-rails/src/Template.js +331 -0
  30. data/app/assets/javascripts/extjs-rails/src/XTemplate.js +365 -0
  31. data/app/assets/javascripts/extjs-rails/src/XTemplateCompiler.js +450 -0
  32. data/app/assets/javascripts/extjs-rails/src/XTemplateParser.js +249 -0
  33. data/app/assets/javascripts/extjs-rails/src/ZIndexManager.js +519 -0
  34. data/app/assets/javascripts/extjs-rails/src/app/Application.js +271 -0
  35. data/app/assets/javascripts/extjs-rails/src/app/Controller.js +458 -0
  36. data/app/assets/javascripts/extjs-rails/src/app/EventBus.js +112 -0
  37. data/app/assets/javascripts/extjs-rails/src/button/Button.js +1483 -0
  38. data/app/assets/javascripts/extjs-rails/src/button/Cycle.js +215 -0
  39. data/app/assets/javascripts/extjs-rails/src/button/Split.js +99 -0
  40. data/app/assets/javascripts/extjs-rails/src/chart/Callout.js +140 -0
  41. data/app/assets/javascripts/extjs-rails/src/chart/Chart.js +966 -0
  42. data/app/assets/javascripts/extjs-rails/src/chart/Highlight.js +172 -0
  43. data/app/assets/javascripts/extjs-rails/src/chart/Label.js +241 -0
  44. data/app/assets/javascripts/extjs-rails/src/chart/Legend.js +474 -0
  45. data/app/assets/javascripts/extjs-rails/src/chart/LegendItem.js +217 -0
  46. data/app/assets/javascripts/extjs-rails/src/chart/Mask.js +230 -0
  47. data/app/assets/javascripts/extjs-rails/src/chart/MaskLayer.js +48 -0
  48. data/app/assets/javascripts/extjs-rails/src/chart/Navigation.js +79 -0
  49. data/app/assets/javascripts/extjs-rails/src/chart/Shape.js +106 -0
  50. data/app/assets/javascripts/extjs-rails/src/chart/Tip.js +98 -0
  51. data/app/assets/javascripts/extjs-rails/src/chart/TipSurface.js +42 -0
  52. data/app/assets/javascripts/extjs-rails/src/chart/axis/Abstract.js +73 -0
  53. data/app/assets/javascripts/extjs-rails/src/chart/axis/Axis.js +961 -0
  54. data/app/assets/javascripts/extjs-rails/src/chart/axis/Category.js +130 -0
  55. data/app/assets/javascripts/extjs-rails/src/chart/axis/Gauge.js +203 -0
  56. data/app/assets/javascripts/extjs-rails/src/chart/axis/Numeric.js +235 -0
  57. data/app/assets/javascripts/extjs-rails/src/chart/axis/Radial.js +204 -0
  58. data/app/assets/javascripts/extjs-rails/src/chart/axis/Time.js +135 -0
  59. data/app/assets/javascripts/extjs-rails/src/chart/series/Area.js +803 -0
  60. data/app/assets/javascripts/extjs-rails/src/chart/series/Bar.js +853 -0
  61. data/app/assets/javascripts/extjs-rails/src/chart/series/Cartesian.js +328 -0
  62. data/app/assets/javascripts/extjs-rails/src/chart/series/Column.js +104 -0
  63. data/app/assets/javascripts/extjs-rails/src/chart/series/Gauge.js +490 -0
  64. data/app/assets/javascripts/extjs-rails/src/chart/series/Line.js +1104 -0
  65. data/app/assets/javascripts/extjs-rails/src/chart/series/Pie.js +1072 -0
  66. data/app/assets/javascripts/extjs-rails/src/chart/series/Radar.js +440 -0
  67. data/app/assets/javascripts/extjs-rails/src/chart/series/Scatter.js +668 -0
  68. data/app/assets/javascripts/extjs-rails/src/chart/series/Series.js +443 -0
  69. data/app/assets/javascripts/extjs-rails/src/chart/theme/Base.js +175 -0
  70. data/app/assets/javascripts/extjs-rails/src/chart/theme/Theme.js +253 -0
  71. data/app/assets/javascripts/extjs-rails/src/container/AbstractContainer.js +1062 -0
  72. data/app/assets/javascripts/extjs-rails/src/container/ButtonGroup.js +143 -0
  73. data/app/assets/javascripts/extjs-rails/src/container/Container.js +212 -0
  74. data/app/assets/javascripts/extjs-rails/src/container/DockingContainer.js +265 -0
  75. data/app/assets/javascripts/extjs-rails/src/container/Viewport.js +184 -0
  76. data/app/assets/javascripts/extjs-rails/src/core/dom/Element.form.js +50 -0
  77. data/app/assets/javascripts/extjs-rails/src/core/dom/Element.static-more.js +159 -0
  78. data/app/assets/javascripts/extjs-rails/src/core/examples/index.html +321 -0
  79. data/app/assets/javascripts/extjs-rails/src/core/examples/index.js +6 -0
  80. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/CTO.js +25 -0
  81. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/CoolGuy.js +20 -0
  82. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/Developer.js +43 -0
  83. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/Gun.js +3 -0
  84. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/HumanResource.js +23 -0
  85. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/Musician.js +20 -0
  86. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/Person.js +50 -0
  87. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/ability/CanComposeSongs.js +9 -0
  88. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/ability/CanPlayGuitar.js +9 -0
  89. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/ability/CanSing.js +18 -0
  90. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/deadlock/A.js +3 -0
  91. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/deadlock/B.js +3 -0
  92. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/deadlock/C.js +3 -0
  93. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/deadlock/D.js +3 -0
  94. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/deadlock/E.js +3 -0
  95. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/notdeadlock/A.js +3 -0
  96. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/notdeadlock/B.js +4 -0
  97. data/app/assets/javascripts/extjs-rails/src/core/examples/src/Sample/notdeadlock/C.js +3 -0
  98. data/app/assets/javascripts/extjs-rails/src/core/src/EventManager.js +1167 -0
  99. data/app/assets/javascripts/extjs-rails/src/core/src/EventObject.js +883 -0
  100. data/app/assets/javascripts/extjs-rails/src/core/src/Ext-more.js +1283 -0
  101. data/app/assets/javascripts/extjs-rails/src/core/src/Ext.js +736 -0
  102. data/app/assets/javascripts/extjs-rails/src/core/src/Support.js +662 -0
  103. data/app/assets/javascripts/extjs-rails/src/core/src/class/Base.js +1085 -0
  104. data/app/assets/javascripts/extjs-rails/src/core/src/class/Class.js +676 -0
  105. data/app/assets/javascripts/extjs-rails/src/core/src/class/ClassManager.js +1591 -0
  106. data/app/assets/javascripts/extjs-rails/src/core/src/class/Loader.js +1423 -0
  107. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractElement.alignment.js +173 -0
  108. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractElement.insertion.js +193 -0
  109. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractElement.js +681 -0
  110. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractElement.position.js +356 -0
  111. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractElement.static.js +474 -0
  112. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractElement.style.js +851 -0
  113. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractElement.traversal.js +180 -0
  114. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractHelper.js +291 -0
  115. data/app/assets/javascripts/extjs-rails/src/core/src/dom/AbstractQuery.js +72 -0
  116. data/app/assets/javascripts/extjs-rails/src/core/src/dom/CompositeElement.js +75 -0
  117. data/app/assets/javascripts/extjs-rails/src/core/src/dom/CompositeElementLite.js +436 -0
  118. data/app/assets/javascripts/extjs-rails/src/core/src/dom/DomQuery-aria.js +1049 -0
  119. data/app/assets/javascripts/extjs-rails/src/core/src/env/Browser.js +186 -0
  120. data/app/assets/javascripts/extjs-rails/src/core/src/env/FeatureDetector.js +274 -0
  121. data/app/assets/javascripts/extjs-rails/src/core/src/env/OS.js +141 -0
  122. data/app/assets/javascripts/extjs-rails/src/core/src/lang/Array.js +1205 -0
  123. data/app/assets/javascripts/extjs-rails/src/core/src/lang/Date.js +1463 -0
  124. data/app/assets/javascripts/extjs-rails/src/core/src/lang/Error.js +326 -0
  125. data/app/assets/javascripts/extjs-rails/src/core/src/lang/Function.js +485 -0
  126. data/app/assets/javascripts/extjs-rails/src/core/src/lang/Number.js +175 -0
  127. data/app/assets/javascripts/extjs-rails/src/core/src/lang/Object.js +606 -0
  128. data/app/assets/javascripts/extjs-rails/src/core/src/lang/String.js +333 -0
  129. data/app/assets/javascripts/extjs-rails/src/core/src/misc/JSON.js +236 -0
  130. data/app/assets/javascripts/extjs-rails/src/core/src/perf/Accumulator.js +244 -0
  131. data/app/assets/javascripts/extjs-rails/src/core/src/perf/Monitor.js +197 -0
  132. data/app/assets/javascripts/extjs-rails/src/core/src/util/DelayedTask.js +71 -0
  133. data/app/assets/javascripts/extjs-rails/src/core/src/util/Event.js +215 -0
  134. data/app/assets/javascripts/extjs-rails/src/core/src/util/Format.js +551 -0
  135. data/app/assets/javascripts/extjs-rails/src/core/src/util/TaskManager.js +417 -0
  136. data/app/assets/javascripts/extjs-rails/src/core/src/version/Version.js +364 -0
  137. data/app/assets/javascripts/extjs-rails/src/core/test/unit/README.MD +91 -0
  138. data/app/assets/javascripts/extjs-rails/src/core/test/unit/bootstrap.js +39 -0
  139. data/app/assets/javascripts/extjs-rails/src/core/test/unit/build/build-data.js +34 -0
  140. data/app/assets/javascripts/extjs-rails/src/core/test/unit/build/build.sh +2 -0
  141. data/app/assets/javascripts/extjs-rails/src/core/test/unit/data.js +27 -0
  142. data/app/assets/javascripts/extjs-rails/src/core/test/unit/index.html +15 -0
  143. data/app/assets/javascripts/extjs-rails/src/core/test/unit/other_specs/dom.html +40 -0
  144. data/app/assets/javascripts/extjs-rails/src/core/test/unit/other_specs/dom/extjs-api.js +12 -0
  145. data/app/assets/javascripts/extjs-rails/src/core/test/unit/other_specs/dom/platform-api.js +134 -0
  146. data/app/assets/javascripts/extjs-rails/src/core/test/unit/other_specs/dom/sanity.js +4 -0
  147. data/app/assets/javascripts/extjs-rails/src/core/test/unit/other_specs/dom/touch-api-out.js +128 -0
  148. data/app/assets/javascripts/extjs-rails/src/core/test/unit/other_specs/dom/touch-api.js +89 -0
  149. data/app/assets/javascripts/extjs-rails/src/core/test/unit/other_specs/env/Environment.js +357 -0
  150. data/app/assets/javascripts/extjs-rails/src/core/test/unit/resources/APITest.js +37 -0
  151. data/app/assets/javascripts/extjs-rails/src/core/test/unit/resources/jsb3.js +14 -0
  152. data/app/assets/javascripts/extjs-rails/src/core/test/unit/resources/test-setup.js +137 -0
  153. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/EventManager.js +629 -0
  154. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/Ext-mess.backup +198 -0
  155. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/Ext-more.js +520 -0
  156. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/Ext.js +1550 -0
  157. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/Support.js +250 -0
  158. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/class/Base.js +47 -0
  159. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/class/Class.js +561 -0
  160. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/class/ClassManager.js +555 -0
  161. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/dom/CompositeElementLite.js +409 -0
  162. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/dom/DomHelper.js +444 -0
  163. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/dom/Element.insertion.js +342 -0
  164. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/dom/Element.js +731 -0
  165. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/dom/Element.static.js +201 -0
  166. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/dom/Element.style.js +118 -0
  167. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/dom/Element.traversal.js +336 -0
  168. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/lang/Array.js +1229 -0
  169. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/lang/Date.js +697 -0
  170. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/lang/Error.js +277 -0
  171. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/lang/Function.js +536 -0
  172. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/lang/Number.js +323 -0
  173. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/lang/Object.js +591 -0
  174. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/lang/String.js +451 -0
  175. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/misc/JSON.js +252 -0
  176. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/util/Format.js +521 -0
  177. data/app/assets/javascripts/extjs-rails/src/core/test/unit/spec/version/Version.js +148 -0
  178. data/app/assets/javascripts/extjs-rails/src/core/test/unit/specs.html +19 -0
  179. data/app/assets/javascripts/extjs-rails/src/data/AbstractStore.js +887 -0
  180. data/app/assets/javascripts/extjs-rails/src/data/ArrayStore.js +74 -0
  181. data/app/assets/javascripts/extjs-rails/src/data/Batch.js +236 -0
  182. data/app/assets/javascripts/extjs-rails/src/data/BufferStore.js +13 -0
  183. data/app/assets/javascripts/extjs-rails/src/data/Connection.js +969 -0
  184. data/app/assets/javascripts/extjs-rails/src/data/DirectStore.js +50 -0
  185. data/app/assets/javascripts/extjs-rails/src/data/Errors.js +52 -0
  186. data/app/assets/javascripts/extjs-rails/src/data/Field.js +341 -0
  187. data/app/assets/javascripts/extjs-rails/src/data/IdGenerator.js +198 -0
  188. data/app/assets/javascripts/extjs-rails/src/data/JsonP.js +253 -0
  189. data/app/assets/javascripts/extjs-rails/src/data/JsonPStore.js +51 -0
  190. data/app/assets/javascripts/extjs-rails/src/data/JsonStore.js +60 -0
  191. data/app/assets/javascripts/extjs-rails/src/data/Model.js +1673 -0
  192. data/app/assets/javascripts/extjs-rails/src/data/NodeInterface.js +1294 -0
  193. data/app/assets/javascripts/extjs-rails/src/data/NodeStore.js +254 -0
  194. data/app/assets/javascripts/extjs-rails/src/data/Operation.js +331 -0
  195. data/app/assets/javascripts/extjs-rails/src/data/Request.js +40 -0
  196. data/app/assets/javascripts/extjs-rails/src/data/ResultSet.js +56 -0
  197. data/app/assets/javascripts/extjs-rails/src/data/SequentialIdGenerator.js +61 -0
  198. data/app/assets/javascripts/extjs-rails/src/data/SortTypes.js +125 -0
  199. data/app/assets/javascripts/extjs-rails/src/data/Store.js +2609 -0
  200. data/app/assets/javascripts/extjs-rails/src/data/StoreManager.js +156 -0
  201. data/app/assets/javascripts/extjs-rails/src/data/Tree.js +290 -0
  202. data/app/assets/javascripts/extjs-rails/src/data/TreeStore.js +655 -0
  203. data/app/assets/javascripts/extjs-rails/src/data/Types.js +190 -0
  204. data/app/assets/javascripts/extjs-rails/src/data/UuidGenerator.js +215 -0
  205. data/app/assets/javascripts/extjs-rails/src/data/XmlStore.js +76 -0
  206. data/app/assets/javascripts/extjs-rails/src/data/association/Association.js +243 -0
  207. data/app/assets/javascripts/extjs-rails/src/data/association/BelongsTo.js +291 -0
  208. data/app/assets/javascripts/extjs-rails/src/data/association/HasMany.js +289 -0
  209. data/app/assets/javascripts/extjs-rails/src/data/association/HasOne.js +304 -0
  210. data/app/assets/javascripts/extjs-rails/src/data/proxy/Ajax.js +282 -0
  211. data/app/assets/javascripts/extjs-rails/src/data/proxy/Client.js +21 -0
  212. data/app/assets/javascripts/extjs-rails/src/data/proxy/Direct.js +181 -0
  213. data/app/assets/javascripts/extjs-rails/src/data/proxy/JsonP.js +313 -0
  214. data/app/assets/javascripts/extjs-rails/src/data/proxy/LocalStorage.js +69 -0
  215. data/app/assets/javascripts/extjs-rails/src/data/proxy/Memory.js +156 -0
  216. data/app/assets/javascripts/extjs-rails/src/data/proxy/Proxy.js +433 -0
  217. data/app/assets/javascripts/extjs-rails/src/data/proxy/Rest.js +173 -0
  218. data/app/assets/javascripts/extjs-rails/src/data/proxy/Server.js +460 -0
  219. data/app/assets/javascripts/extjs-rails/src/data/proxy/SessionStorage.js +39 -0
  220. data/app/assets/javascripts/extjs-rails/src/data/proxy/WebStorage.js +546 -0
  221. data/app/assets/javascripts/extjs-rails/src/data/reader/Array.js +68 -0
  222. data/app/assets/javascripts/extjs-rails/src/data/reader/Json.js +383 -0
  223. data/app/assets/javascripts/extjs-rails/src/data/reader/Reader.js +735 -0
  224. data/app/assets/javascripts/extjs-rails/src/data/reader/Xml.js +292 -0
  225. data/app/assets/javascripts/extjs-rails/src/data/validations.js +149 -0
  226. data/app/assets/javascripts/extjs-rails/src/data/writer/Json.js +81 -0
  227. data/app/assets/javascripts/extjs-rails/src/data/writer/Writer.js +147 -0
  228. data/app/assets/javascripts/extjs-rails/src/data/writer/Xml.js +88 -0
  229. data/app/assets/javascripts/extjs-rails/src/dd/DD.js +300 -0
  230. data/app/assets/javascripts/extjs-rails/src/dd/DDProxy.js +204 -0
  231. data/app/assets/javascripts/extjs-rails/src/dd/DDTarget.js +171 -0
  232. data/app/assets/javascripts/extjs-rails/src/dd/DragDrop.js +1101 -0
  233. data/app/assets/javascripts/extjs-rails/src/dd/DragDropManager.js +1264 -0
  234. data/app/assets/javascripts/extjs-rails/src/dd/DragSource.js +392 -0
  235. data/app/assets/javascripts/extjs-rails/src/dd/DragTracker.js +562 -0
  236. data/app/assets/javascripts/extjs-rails/src/dd/DragZone.js +137 -0
  237. data/app/assets/javascripts/extjs-rails/src/dd/DropTarget.js +118 -0
  238. data/app/assets/javascripts/extjs-rails/src/dd/DropZone.js +254 -0
  239. data/app/assets/javascripts/extjs-rails/src/dd/Registry.js +117 -0
  240. data/app/assets/javascripts/extjs-rails/src/dd/ScrollManager.js +218 -0
  241. data/app/assets/javascripts/extjs-rails/src/dd/StatusProxy.js +179 -0
  242. data/app/assets/javascripts/extjs-rails/src/diag/layout/Context.js +523 -0
  243. data/app/assets/javascripts/extjs-rails/src/diag/layout/ContextItem.js +179 -0
  244. data/app/assets/javascripts/extjs-rails/src/direct/Event.js +35 -0
  245. data/app/assets/javascripts/extjs-rails/src/direct/ExceptionEvent.js +16 -0
  246. data/app/assets/javascripts/extjs-rails/src/direct/JsonProvider.js +82 -0
  247. data/app/assets/javascripts/extjs-rails/src/direct/Manager.js +263 -0
  248. data/app/assets/javascripts/extjs-rails/src/direct/PollingProvider.js +156 -0
  249. data/app/assets/javascripts/extjs-rails/src/direct/Provider.js +96 -0
  250. data/app/assets/javascripts/extjs-rails/src/direct/RemotingEvent.js +24 -0
  251. data/app/assets/javascripts/extjs-rails/src/direct/RemotingMethod.js +100 -0
  252. data/app/assets/javascripts/extjs-rails/src/direct/RemotingProvider.js +510 -0
  253. data/app/assets/javascripts/extjs-rails/src/direct/Transaction.js +41 -0
  254. data/app/assets/javascripts/extjs-rails/src/dom/Element.alignment.js +378 -0
  255. data/app/assets/javascripts/extjs-rails/src/dom/Element.anim.js +962 -0
  256. data/app/assets/javascripts/extjs-rails/src/dom/Element.dd.js +40 -0
  257. data/app/assets/javascripts/extjs-rails/src/dom/Element.fx.js +194 -0
  258. data/app/assets/javascripts/extjs-rails/src/dom/Element.js +1407 -0
  259. data/app/assets/javascripts/extjs-rails/src/dom/Element.position.js +501 -0
  260. data/app/assets/javascripts/extjs-rails/src/dom/Element.scroll.js +214 -0
  261. data/app/assets/javascripts/extjs-rails/src/dom/Element.style.js +792 -0
  262. data/app/assets/javascripts/extjs-rails/src/dom/Element.traversal.js +8 -0
  263. data/app/assets/javascripts/extjs-rails/src/dom/Helper.js +466 -0
  264. data/app/assets/javascripts/extjs-rails/src/dom/Query.js +1067 -0
  265. data/app/assets/javascripts/extjs-rails/src/draw/Color.js +303 -0
  266. data/app/assets/javascripts/extjs-rails/src/draw/Component.js +245 -0
  267. data/app/assets/javascripts/extjs-rails/src/draw/CompositeSprite.js +299 -0
  268. data/app/assets/javascripts/extjs-rails/src/draw/Draw.js +1217 -0
  269. data/app/assets/javascripts/extjs-rails/src/draw/Matrix.js +183 -0
  270. data/app/assets/javascripts/extjs-rails/src/draw/Sprite.js +554 -0
  271. data/app/assets/javascripts/extjs-rails/src/draw/SpriteDD.js +87 -0
  272. data/app/assets/javascripts/extjs-rails/src/draw/Surface.js +1001 -0
  273. data/app/assets/javascripts/extjs-rails/src/draw/Text.js +175 -0
  274. data/app/assets/javascripts/extjs-rails/src/draw/engine/ImageExporter.js +106 -0
  275. data/app/assets/javascripts/extjs-rails/src/draw/engine/Svg.js +734 -0
  276. data/app/assets/javascripts/extjs-rails/src/draw/engine/SvgExporter.js +280 -0
  277. data/app/assets/javascripts/extjs-rails/src/draw/engine/Vml.js +916 -0
  278. data/app/assets/javascripts/extjs-rails/src/flash/Component.js +248 -0
  279. data/app/assets/javascripts/extjs-rails/src/form/Basic.js +1018 -0
  280. data/app/assets/javascripts/extjs-rails/src/form/CheckboxGroup.js +441 -0
  281. data/app/assets/javascripts/extjs-rails/src/form/CheckboxManager.js +26 -0
  282. data/app/assets/javascripts/extjs-rails/src/form/FieldAncestor.js +210 -0
  283. data/app/assets/javascripts/extjs-rails/src/form/FieldContainer.js +290 -0
  284. data/app/assets/javascripts/extjs-rails/src/form/FieldSet.js +506 -0
  285. data/app/assets/javascripts/extjs-rails/src/form/Label.js +110 -0
  286. data/app/assets/javascripts/extjs-rails/src/form/Labelable.js +764 -0
  287. data/app/assets/javascripts/extjs-rails/src/form/Panel.js +335 -0
  288. data/app/assets/javascripts/extjs-rails/src/form/RadioGroup.js +124 -0
  289. data/app/assets/javascripts/extjs-rails/src/form/RadioManager.js +26 -0
  290. data/app/assets/javascripts/extjs-rails/src/form/action/Action.js +307 -0
  291. data/app/assets/javascripts/extjs-rails/src/form/action/DirectLoad.js +107 -0
  292. data/app/assets/javascripts/extjs-rails/src/form/action/DirectSubmit.js +119 -0
  293. data/app/assets/javascripts/extjs-rails/src/form/action/Load.js +120 -0
  294. data/app/assets/javascripts/extjs-rails/src/form/action/StandardSubmit.js +34 -0
  295. data/app/assets/javascripts/extjs-rails/src/form/action/Submit.js +257 -0
  296. data/app/assets/javascripts/extjs-rails/src/form/field/Base.js +813 -0
  297. data/app/assets/javascripts/extjs-rails/src/form/field/Checkbox.js +505 -0
  298. data/app/assets/javascripts/extjs-rails/src/form/field/ComboBox.js +1427 -0
  299. data/app/assets/javascripts/extjs-rails/src/form/field/Date.js +578 -0
  300. data/app/assets/javascripts/extjs-rails/src/form/field/Display.js +155 -0
  301. data/app/assets/javascripts/extjs-rails/src/form/field/Field.js +430 -0
  302. data/app/assets/javascripts/extjs-rails/src/form/field/File.js +265 -0
  303. data/app/assets/javascripts/extjs-rails/src/form/field/Hidden.js +75 -0
  304. data/app/assets/javascripts/extjs-rails/src/form/field/HtmlEditor.js +1439 -0
  305. data/app/assets/javascripts/extjs-rails/src/form/field/Number.js +380 -0
  306. data/app/assets/javascripts/extjs-rails/src/form/field/Picker.js +321 -0
  307. data/app/assets/javascripts/extjs-rails/src/form/field/Radio.js +279 -0
  308. data/app/assets/javascripts/extjs-rails/src/form/field/Spinner.js +321 -0
  309. data/app/assets/javascripts/extjs-rails/src/form/field/Text.js +727 -0
  310. data/app/assets/javascripts/extjs-rails/src/form/field/TextArea.js +228 -0
  311. data/app/assets/javascripts/extjs-rails/src/form/field/Time.js +459 -0
  312. data/app/assets/javascripts/extjs-rails/src/form/field/Trigger.js +469 -0
  313. data/app/assets/javascripts/extjs-rails/src/form/field/VTypes.js +172 -0
  314. data/app/assets/javascripts/extjs-rails/src/fx/Anim.js +472 -0
  315. data/app/assets/javascripts/extjs-rails/src/fx/Animator.js +410 -0
  316. data/app/assets/javascripts/extjs-rails/src/fx/CubicBezier.js +77 -0
  317. data/app/assets/javascripts/extjs-rails/src/fx/Easing.js +136 -0
  318. data/app/assets/javascripts/extjs-rails/src/fx/Manager.js +353 -0
  319. data/app/assets/javascripts/extjs-rails/src/fx/PropertyHandler.js +381 -0
  320. data/app/assets/javascripts/extjs-rails/src/fx/Queue.js +123 -0
  321. data/app/assets/javascripts/extjs-rails/src/fx/target/Component.js +118 -0
  322. data/app/assets/javascripts/extjs-rails/src/fx/target/CompositeElement.js +46 -0
  323. data/app/assets/javascripts/extjs-rails/src/fx/target/CompositeElementCSS.js +22 -0
  324. data/app/assets/javascripts/extjs-rails/src/fx/target/CompositeSprite.js +34 -0
  325. data/app/assets/javascripts/extjs-rails/src/fx/target/Element.js +83 -0
  326. data/app/assets/javascripts/extjs-rails/src/fx/target/ElementCSS.js +77 -0
  327. data/app/assets/javascripts/extjs-rails/src/fx/target/Sprite.js +128 -0
  328. data/app/assets/javascripts/extjs-rails/src/fx/target/Target.js +36 -0
  329. data/app/assets/javascripts/extjs-rails/src/grid/CellEditor.js +172 -0
  330. data/app/assets/javascripts/extjs-rails/src/grid/ColumnComponentLayout.js +34 -0
  331. data/app/assets/javascripts/extjs-rails/src/grid/ColumnLayout.js +201 -0
  332. data/app/assets/javascripts/extjs-rails/src/grid/Lockable.js +863 -0
  333. data/app/assets/javascripts/extjs-rails/src/grid/LockingView.js +169 -0
  334. data/app/assets/javascripts/extjs-rails/src/grid/PagingScroller.js +539 -0
  335. data/app/assets/javascripts/extjs-rails/src/grid/Panel.js +393 -0
  336. data/app/assets/javascripts/extjs-rails/src/grid/RowEditor.js +731 -0
  337. data/app/assets/javascripts/extjs-rails/src/grid/RowNumberer.js +76 -0
  338. data/app/assets/javascripts/extjs-rails/src/grid/Scroller.js +5 -0
  339. data/app/assets/javascripts/extjs-rails/src/grid/View.js +44 -0
  340. data/app/assets/javascripts/extjs-rails/src/grid/ViewDropZone.js +41 -0
  341. data/app/assets/javascripts/extjs-rails/src/grid/column/Action.js +318 -0
  342. data/app/assets/javascripts/extjs-rails/src/grid/column/Boolean.js +82 -0
  343. data/app/assets/javascripts/extjs-rails/src/grid/column/Column.js +835 -0
  344. data/app/assets/javascripts/extjs-rails/src/grid/column/Date.js +63 -0
  345. data/app/assets/javascripts/extjs-rails/src/grid/column/Number.js +52 -0
  346. data/app/assets/javascripts/extjs-rails/src/grid/column/Template.js +58 -0
  347. data/app/assets/javascripts/extjs-rails/src/grid/feature/AbstractSummary.js +154 -0
  348. data/app/assets/javascripts/extjs-rails/src/grid/feature/Chunking.js +77 -0
  349. data/app/assets/javascripts/extjs-rails/src/grid/feature/Feature.js +158 -0
  350. data/app/assets/javascripts/extjs-rails/src/grid/feature/Grouping.js +822 -0
  351. data/app/assets/javascripts/extjs-rails/src/grid/feature/GroupingSummary.js +243 -0
  352. data/app/assets/javascripts/extjs-rails/src/grid/feature/RowBody.js +116 -0
  353. data/app/assets/javascripts/extjs-rails/src/grid/feature/RowWrap.js +120 -0
  354. data/app/assets/javascripts/extjs-rails/src/grid/feature/Summary.js +167 -0
  355. data/app/assets/javascripts/extjs-rails/src/grid/header/Container.js +965 -0
  356. data/app/assets/javascripts/extjs-rails/src/grid/header/DragZone.js +69 -0
  357. data/app/assets/javascripts/extjs-rails/src/grid/header/DropZone.js +265 -0
  358. data/app/assets/javascripts/extjs-rails/src/grid/plugin/CellEditing.js +453 -0
  359. data/app/assets/javascripts/extjs-rails/src/grid/plugin/DragDrop.js +254 -0
  360. data/app/assets/javascripts/extjs-rails/src/grid/plugin/Editing.js +561 -0
  361. data/app/assets/javascripts/extjs-rails/src/grid/plugin/HeaderReorderer.js +49 -0
  362. data/app/assets/javascripts/extjs-rails/src/grid/plugin/HeaderResizer.js +292 -0
  363. data/app/assets/javascripts/extjs-rails/src/grid/plugin/RowEditing.js +339 -0
  364. data/app/assets/javascripts/extjs-rails/src/grid/property/Grid.js +351 -0
  365. data/app/assets/javascripts/extjs-rails/src/grid/property/HeaderContainer.js +109 -0
  366. data/app/assets/javascripts/extjs-rails/src/grid/property/Property.js +36 -0
  367. data/app/assets/javascripts/extjs-rails/src/grid/property/Store.js +141 -0
  368. data/app/assets/javascripts/extjs-rails/src/layout/ClassList.js +90 -0
  369. data/app/assets/javascripts/extjs-rails/src/layout/Context.js +1232 -0
  370. data/app/assets/javascripts/extjs-rails/src/layout/ContextItem.js +1470 -0
  371. data/app/assets/javascripts/extjs-rails/src/layout/Layout.js +761 -0
  372. data/app/assets/javascripts/extjs-rails/src/layout/component/Auto.js +220 -0
  373. data/app/assets/javascripts/extjs-rails/src/layout/component/Body.js +80 -0
  374. data/app/assets/javascripts/extjs-rails/src/layout/component/BoundList.js +95 -0
  375. data/app/assets/javascripts/extjs-rails/src/layout/component/Button.js +261 -0
  376. data/app/assets/javascripts/extjs-rails/src/layout/component/Component.js +427 -0
  377. data/app/assets/javascripts/extjs-rails/src/layout/component/Dock.js +1132 -0
  378. data/app/assets/javascripts/extjs-rails/src/layout/component/Draw.js +79 -0
  379. data/app/assets/javascripts/extjs-rails/src/layout/component/FieldSet.js +62 -0
  380. data/app/assets/javascripts/extjs-rails/src/layout/component/ProgressBar.js +54 -0
  381. data/app/assets/javascripts/extjs-rails/src/layout/component/Tab.js +23 -0
  382. data/app/assets/javascripts/extjs-rails/src/layout/component/field/ComboBox.js +52 -0
  383. data/app/assets/javascripts/extjs-rails/src/layout/component/field/Field.js +372 -0
  384. data/app/assets/javascripts/extjs-rails/src/layout/component/field/FieldContainer.js +48 -0
  385. data/app/assets/javascripts/extjs-rails/src/layout/component/field/HtmlEditor.js +54 -0
  386. data/app/assets/javascripts/extjs-rails/src/layout/component/field/Slider.js +58 -0
  387. data/app/assets/javascripts/extjs-rails/src/layout/component/field/Text.js +75 -0
  388. data/app/assets/javascripts/extjs-rails/src/layout/component/field/TextArea.js +51 -0
  389. data/app/assets/javascripts/extjs-rails/src/layout/component/field/Trigger.js +132 -0
  390. data/app/assets/javascripts/extjs-rails/src/layout/container/Absolute.js +121 -0
  391. data/app/assets/javascripts/extjs-rails/src/layout/container/Accordion.js +308 -0
  392. data/app/assets/javascripts/extjs-rails/src/layout/container/Anchor.js +403 -0
  393. data/app/assets/javascripts/extjs-rails/src/layout/container/Auto.js +70 -0
  394. data/app/assets/javascripts/extjs-rails/src/layout/container/Border-old-js +1079 -0
  395. data/app/assets/javascripts/extjs-rails/src/layout/container/Border.js +816 -0
  396. data/app/assets/javascripts/extjs-rails/src/layout/container/Box.js +929 -0
  397. data/app/assets/javascripts/extjs-rails/src/layout/container/Card.js +361 -0
  398. data/app/assets/javascripts/extjs-rails/src/layout/container/CheckboxGroup.js +376 -0
  399. data/app/assets/javascripts/extjs-rails/src/layout/container/Column.js +234 -0
  400. data/app/assets/javascripts/extjs-rails/src/layout/container/Container.js +961 -0
  401. data/app/assets/javascripts/extjs-rails/src/layout/container/Editor.js +74 -0
  402. data/app/assets/javascripts/extjs-rails/src/layout/container/Fit.js +287 -0
  403. data/app/assets/javascripts/extjs-rails/src/layout/container/Form.js +157 -0
  404. data/app/assets/javascripts/extjs-rails/src/layout/container/HBox.js +134 -0
  405. data/app/assets/javascripts/extjs-rails/src/layout/container/Table.js +412 -0
  406. data/app/assets/javascripts/extjs-rails/src/layout/container/VBox.js +139 -0
  407. data/app/assets/javascripts/extjs-rails/src/layout/container/boxOverflow/Menu.js +365 -0
  408. data/app/assets/javascripts/extjs-rails/src/layout/container/boxOverflow/None.js +83 -0
  409. data/app/assets/javascripts/extjs-rails/src/layout/container/boxOverflow/Scroller.js +475 -0
  410. data/app/assets/javascripts/extjs-rails/src/menu/CheckItem.js +169 -0
  411. data/app/assets/javascripts/extjs-rails/src/menu/ColorPicker.js +110 -0
  412. data/app/assets/javascripts/extjs-rails/src/menu/DatePicker.js +100 -0
  413. data/app/assets/javascripts/extjs-rails/src/menu/Item.js +553 -0
  414. data/app/assets/javascripts/extjs-rails/src/menu/KeyNav.js +134 -0
  415. data/app/assets/javascripts/extjs-rails/src/menu/Manager.js +219 -0
  416. data/app/assets/javascripts/extjs-rails/src/menu/Menu.js +579 -0
  417. data/app/assets/javascripts/extjs-rails/src/menu/Separator.js +126 -0
  418. data/app/assets/javascripts/extjs-rails/src/panel/AbstractPanel.js +323 -0
  419. data/app/assets/javascripts/extjs-rails/src/panel/DD.js +99 -0
  420. data/app/assets/javascripts/extjs-rails/src/panel/Header.js +518 -0
  421. data/app/assets/javascripts/extjs-rails/src/panel/Panel.js +2150 -0
  422. data/app/assets/javascripts/extjs-rails/src/panel/Proxy.js +131 -0
  423. data/app/assets/javascripts/extjs-rails/src/panel/Table.js +1018 -0
  424. data/app/assets/javascripts/extjs-rails/src/panel/Tool.js +304 -0
  425. data/app/assets/javascripts/extjs-rails/src/picker/Color.js +219 -0
  426. data/app/assets/javascripts/extjs-rails/src/picker/Date.js +1140 -0
  427. data/app/assets/javascripts/extjs-rails/src/picker/Month.js +490 -0
  428. data/app/assets/javascripts/extjs-rails/src/picker/Time.js +165 -0
  429. data/app/assets/javascripts/extjs-rails/src/resizer/BorderSplitter.js +22 -0
  430. data/app/assets/javascripts/extjs-rails/src/resizer/BorderSplitterTracker.js +210 -0
  431. data/app/assets/javascripts/extjs-rails/src/resizer/Handle.js +29 -0
  432. data/app/assets/javascripts/extjs-rails/src/resizer/ResizeTracker.js +346 -0
  433. data/app/assets/javascripts/extjs-rails/src/resizer/Resizer.js +477 -0
  434. data/app/assets/javascripts/extjs-rails/src/resizer/Splitter.js +242 -0
  435. data/app/assets/javascripts/extjs-rails/src/resizer/SplitterTracker.js +230 -0
  436. data/app/assets/javascripts/extjs-rails/src/selection/CellModel.js +395 -0
  437. data/app/assets/javascripts/extjs-rails/src/selection/CheckboxModel.js +234 -0
  438. data/app/assets/javascripts/extjs-rails/src/selection/DataViewModel.js +160 -0
  439. data/app/assets/javascripts/extjs-rails/src/selection/Model.js +646 -0
  440. data/app/assets/javascripts/extjs-rails/src/selection/RowModel.js +499 -0
  441. data/app/assets/javascripts/extjs-rails/src/selection/TreeModel.js +78 -0
  442. data/app/assets/javascripts/extjs-rails/src/slider/Multi.js +835 -0
  443. data/app/assets/javascripts/extjs-rails/src/slider/Single.js +56 -0
  444. data/app/assets/javascripts/extjs-rails/src/slider/Thumb.js +259 -0
  445. data/app/assets/javascripts/extjs-rails/src/slider/Tip.js +130 -0
  446. data/app/assets/javascripts/extjs-rails/src/state/CookieProvider.js +120 -0
  447. data/app/assets/javascripts/extjs-rails/src/state/LocalStorageProvider.js +72 -0
  448. data/app/assets/javascripts/extjs-rails/src/state/Manager.js +70 -0
  449. data/app/assets/javascripts/extjs-rails/src/state/Provider.js +182 -0
  450. data/app/assets/javascripts/extjs-rails/src/state/Stateful.js +364 -0
  451. data/app/assets/javascripts/extjs-rails/src/tab/Bar.js +258 -0
  452. data/app/assets/javascripts/extjs-rails/src/tab/Panel.js +654 -0
  453. data/app/assets/javascripts/extjs-rails/src/tab/Tab.js +358 -0
  454. data/app/assets/javascripts/extjs-rails/src/tail.js +10 -0
  455. data/app/assets/javascripts/extjs-rails/src/tip/QuickTip.js +335 -0
  456. data/app/assets/javascripts/extjs-rails/src/tip/QuickTipManager.js +239 -0
  457. data/app/assets/javascripts/extjs-rails/src/tip/Tip.js +160 -0
  458. data/app/assets/javascripts/extjs-rails/src/tip/ToolTip.js +691 -0
  459. data/app/assets/javascripts/extjs-rails/src/toolbar/Fill.js +28 -0
  460. data/app/assets/javascripts/extjs-rails/src/toolbar/Item.js +16 -0
  461. data/app/assets/javascripts/extjs-rails/src/toolbar/Paging.js +600 -0
  462. data/app/assets/javascripts/extjs-rails/src/toolbar/Separator.js +23 -0
  463. data/app/assets/javascripts/extjs-rails/src/toolbar/Spacer.js +33 -0
  464. data/app/assets/javascripts/extjs-rails/src/toolbar/TextItem.js +57 -0
  465. data/app/assets/javascripts/extjs-rails/src/toolbar/Toolbar-legacy.js +123 -0
  466. data/app/assets/javascripts/extjs-rails/src/toolbar/Toolbar.js +447 -0
  467. data/app/assets/javascripts/extjs-rails/src/tree/Column.js +90 -0
  468. data/app/assets/javascripts/extjs-rails/src/tree/Panel.js +505 -0
  469. data/app/assets/javascripts/extjs-rails/src/tree/View.js +658 -0
  470. data/app/assets/javascripts/extjs-rails/src/tree/ViewDragZone.js +49 -0
  471. data/app/assets/javascripts/extjs-rails/src/tree/ViewDropZone.js +287 -0
  472. data/app/assets/javascripts/extjs-rails/src/tree/plugin/TreeViewDragDrop.js +244 -0
  473. data/app/assets/javascripts/extjs-rails/src/util/AbstractMixedCollection.js +772 -0
  474. data/app/assets/javascripts/extjs-rails/src/util/Animate.js +426 -0
  475. data/app/assets/javascripts/extjs-rails/src/util/Bindable.js +102 -0
  476. data/app/assets/javascripts/extjs-rails/src/util/CSS.js +185 -0
  477. data/app/assets/javascripts/extjs-rails/src/util/ClickRepeater.js +238 -0
  478. data/app/assets/javascripts/extjs-rails/src/util/ComponentDragger.js +126 -0
  479. data/app/assets/javascripts/extjs-rails/src/util/Cookies.js +91 -0
  480. data/app/assets/javascripts/extjs-rails/src/util/ElementContainer.js +293 -0
  481. data/app/assets/javascripts/extjs-rails/src/util/Filter.js +159 -0
  482. data/app/assets/javascripts/extjs-rails/src/util/Floating.js +321 -0
  483. data/app/assets/javascripts/extjs-rails/src/util/Grouper.js +26 -0
  484. data/app/assets/javascripts/extjs-rails/src/util/HashMap.js +356 -0
  485. data/app/assets/javascripts/extjs-rails/src/util/History.js +285 -0
  486. data/app/assets/javascripts/extjs-rails/src/util/Inflector.js +297 -0
  487. data/app/assets/javascripts/extjs-rails/src/util/KeyMap.js +427 -0
  488. data/app/assets/javascripts/extjs-rails/src/util/KeyNav.js +239 -0
  489. data/app/assets/javascripts/extjs-rails/src/util/LruCache.js +257 -0
  490. data/app/assets/javascripts/extjs-rails/src/util/Memento.js +131 -0
  491. data/app/assets/javascripts/extjs-rails/src/util/MixedCollection.js +239 -0
  492. data/app/assets/javascripts/extjs-rails/src/util/Observable.js +1003 -0
  493. data/app/assets/javascripts/extjs-rails/src/util/Offset.js +60 -0
  494. data/app/assets/javascripts/extjs-rails/src/util/Point.js +93 -0
  495. data/app/assets/javascripts/extjs-rails/src/util/ProtoElement.js +205 -0
  496. data/app/assets/javascripts/extjs-rails/src/util/Queue.js +76 -0
  497. data/app/assets/javascripts/extjs-rails/src/util/Region.js +388 -0
  498. data/app/assets/javascripts/extjs-rails/src/util/Renderable.js +1079 -0
  499. data/app/assets/javascripts/extjs-rails/src/util/Sortable.js +248 -0
  500. data/app/assets/javascripts/extjs-rails/src/util/Sorter.js +179 -0
  501. data/app/assets/javascripts/extjs-rails/src/util/TextMetrics.js +148 -0
  502. data/app/assets/javascripts/extjs-rails/src/view/AbstractView.js +1103 -0
  503. data/app/assets/javascripts/extjs-rails/src/view/BoundList.js +207 -0
  504. data/app/assets/javascripts/extjs-rails/src/view/BoundListKeyNav.js +92 -0
  505. data/app/assets/javascripts/extjs-rails/src/view/DragZone.js +106 -0
  506. data/app/assets/javascripts/extjs-rails/src/view/DropZone.js +240 -0
  507. data/app/assets/javascripts/extjs-rails/src/view/Table.js +1229 -0
  508. data/app/assets/javascripts/extjs-rails/src/view/TableChunker.js +139 -0
  509. data/app/assets/javascripts/extjs-rails/src/view/View.js +636 -0
  510. data/app/assets/javascripts/extjs-rails/src/window/MessageBox.js +880 -0
  511. data/app/assets/javascripts/extjs-rails/src/window/Window-legacy.js +56 -0
  512. data/app/assets/javascripts/extjs-rails/src/window/Window.js +793 -0
  513. data/extjs-rails.gemspec +24 -0
  514. data/lib/extjs-rails.rb +7 -0
  515. data/lib/extjs-rails/engine.rb +7 -0
  516. data/lib/extjs-rails/version.rb +5 -0
  517. metadata +660 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @class Ext.layout.container.Auto
3
+ *
4
+ * The AutoLayout is the default layout manager delegated by {@link Ext.container.Container} to
5
+ * render any child Components when no `{@link Ext.container.Container#layout layout}` is configured into
6
+ * a `{@link Ext.container.Container Container}.` AutoLayout provides only a passthrough of any layout calls
7
+ * to any child containers.
8
+ *
9
+ * @example
10
+ * Ext.create('Ext.Panel', {
11
+ * width: 500,
12
+ * height: 280,
13
+ * title: "AutoLayout Panel",
14
+ * layout: 'auto',
15
+ * renderTo: document.body,
16
+ * items: [{
17
+ * xtype: 'panel',
18
+ * title: 'Top Inner Panel',
19
+ * width: '75%',
20
+ * height: 90
21
+ * },
22
+ * {
23
+ * xtype: 'panel',
24
+ * title: 'Bottom Inner Panel',
25
+ * width: '75%',
26
+ * height: 90
27
+ * }]
28
+ * });
29
+ */
30
+ Ext.define('Ext.layout.container.Auto', {
31
+
32
+ /* Begin Definitions */
33
+
34
+ alias: ['layout.auto', 'layout.autocontainer'],
35
+
36
+ extend: 'Ext.layout.container.Container',
37
+
38
+ /* End Definitions */
39
+
40
+ type: 'autocontainer',
41
+
42
+ childEls: [
43
+ 'clearEl'
44
+ ],
45
+
46
+ renderTpl: [
47
+ '{%this.renderBody(out,values)%}',
48
+ // clear element is needed to prevent the bottom margins of the last child element from collapsing
49
+ '<div id="{ownerId}-clearEl" class="', Ext.baseCSSPrefix, 'clear" role="presentation"></div>'
50
+ ],
51
+
52
+ // TODO - do we need to clear sizes in beginLayout?
53
+
54
+ calculate: function(ownerContext) {
55
+ var me = this,
56
+ containerSize;
57
+
58
+ if (!ownerContext.hasDomProp('containerChildrenDone')) {
59
+ me.done = false;
60
+ } else {
61
+ // Once the child layouts are done we can determine the content sizes...
62
+ containerSize = me.getContainerSize(ownerContext);
63
+ if (!containerSize.gotAll) {
64
+ me.done = false;
65
+ }
66
+
67
+ me.calculateContentSize(ownerContext);
68
+ }
69
+ }
70
+ });
@@ -0,0 +1,1079 @@
1
+ /**
2
+ * @class Ext.layout.container.Border
3
+ * @extends Ext.layout.container.Container
4
+ * <p>This is a multi-pane, application-oriented UI layout style that supports multiple
5
+ * nested panels, automatic bars between regions and built-in
6
+ * {@link Ext.panel.Panel#collapsible expanding and collapsing} of regions.</p>
7
+ * <p>This class is intended to be extended or created via the <code>layout:'border'</code>
8
+ * {@link Ext.container.Container#layout} config, and should generally not need to be created directly
9
+ * via the new keyword.</p>
10
+ * {@img Ext.layout.container.Border/Ext.layout.container.Border.png Ext.layout.container.Border container layout}
11
+ * <p>Example usage:</p>
12
+ * <pre><code>
13
+ Ext.create('Ext.panel.Panel', {
14
+ width: 500,
15
+ height: 400,
16
+ title: 'Border Layout',
17
+ layout: 'border',
18
+ items: [{
19
+ title: 'South Region is resizable',
20
+ region: 'south', // position for region
21
+ xtype: 'panel',
22
+ height: 100,
23
+ split: true, // enable resizing
24
+ margins: '0 5 5 5'
25
+ },{
26
+ // xtype: 'panel' implied by default
27
+ title: 'West Region is collapsible',
28
+ region:'west',
29
+ xtype: 'panel',
30
+ margins: '5 0 0 5',
31
+ width: 200,
32
+ collapsible: true, // make collapsible
33
+ id: 'west-region-container',
34
+ layout: 'fit'
35
+ },{
36
+ title: 'Center Region',
37
+ region: 'center', // center region is required, no width/height specified
38
+ xtype: 'panel',
39
+ layout: 'fit',
40
+ margins: '5 5 0 0'
41
+ }],
42
+ renderTo: Ext.getBody()
43
+ });
44
+ </code></pre>
45
+ * <p><b><u>Notes</u></b>:</p><div class="mdetail-params"><ul>
46
+ * <li>Any Container using the Border layout <b>must</b> have a child item with <code>region:'center'</code>.
47
+ * The child item in the center region will always be resized to fill the remaining space not used by
48
+ * the other regions in the layout.</li>
49
+ * <li>Any child items with a region of <code>west</code> or <code>east</code> may be configured with either
50
+ * an initial <code>width</code>, or a {@link Ext.layout.container.Box#flex} value, or an initial percentage width <b>string</b> (Which is simply divided by 100 and used as a flex value). The 'center' region has a flex value of <code>1</code>.</li>
51
+ * <li>Any child items with a region of <code>north</code> or <code>south</code> may be configured with either
52
+ * an initial <code>height</code>, or a {@link Ext.layout.container.Box#flex} value, or an initial percentage height <b>string</b> (Which is simply divided by 100 and used as a flex value). The 'center' region has a flex value of <code>1</code>.</li>
53
+ * <li>The regions of a BorderLayout are <b>fixed at render time</b> and thereafter, its child Components may not be removed or added</b>.To add/remove
54
+ * Components within a BorderLayout, have them wrapped by an additional Container which is directly
55
+ * managed by the BorderLayout. If the region is to be collapsible, the Container used directly
56
+ * by the BorderLayout manager should be a Panel. In the following example a Container (an Ext.panel.Panel)
57
+ * is added to the west region:<pre><code>
58
+ wrc = {@link Ext#getCmp Ext.getCmp}('west-region-container');
59
+ wrc.{@link Ext.container.Container#removeAll removeAll}();
60
+ wrc.{@link Ext.container.Container#add add}({
61
+ title: 'Added Panel',
62
+ html: 'Some content'
63
+ });
64
+ * </code></pre>
65
+ * </li>
66
+ * <li><b>There is no BorderLayout.Region class in ExtJS 4.0+</b></li>
67
+ * </ul></div>
68
+ */
69
+ Ext.define('Ext.layout.container.Border', {
70
+
71
+ alias: ['layout.border'],
72
+ extend: 'Ext.layout.container.Container',
73
+ requires: ['Ext.resizer.Splitter', 'Ext.container.Container', 'Ext.fx.Anim'],
74
+ alternateClassName: 'Ext.layout.BorderLayout',
75
+
76
+ targetCls: Ext.baseCSSPrefix + 'border-layout-ct',
77
+
78
+ itemCls: Ext.baseCSSPrefix + 'border-item',
79
+
80
+ bindToOwnerCtContainer: true,
81
+
82
+ percentageRe: /(\d+)%/,
83
+
84
+ slideDirection: {
85
+ north: 't',
86
+ south: 'b',
87
+ west: 'l',
88
+ east: 'r'
89
+ },
90
+
91
+ constructor: function(config) {
92
+ this.initialConfig = config;
93
+ this.callParent(arguments);
94
+ },
95
+
96
+ onLayout: function() {
97
+ var me = this;
98
+ if (!me.borderLayoutInitialized) {
99
+ me.initializeBorderLayout();
100
+ }
101
+
102
+ // Delegate this operation to the shadow "V" or "H" box layout, and then down to any embedded layout.
103
+ me.fixHeightConstraints();
104
+ me.shadowLayout.onLayout();
105
+ if (me.embeddedContainer) {
106
+ me.embeddedContainer.layout.onLayout();
107
+ }
108
+
109
+ // If the panel was originally configured with collapsed: true, it will have
110
+ // been initialized with a "borderCollapse" flag: Collapse it now before the first layout.
111
+ if (!me.initialCollapsedComplete) {
112
+ Ext.iterate(me.regions, function(name, region){
113
+ if (region.borderCollapse) {
114
+ me.onBeforeRegionCollapse(region, region.collapseDirection, false, 0);
115
+ }
116
+ });
117
+ me.initialCollapsedComplete = true;
118
+ }
119
+ },
120
+
121
+ isValidParent : function(item, target, position) {
122
+ if (!this.borderLayoutInitialized) {
123
+ this.initializeBorderLayout();
124
+ }
125
+
126
+ // Delegate this operation to the shadow "V" or "H" box layout.
127
+ return this.shadowLayout.isValidParent(item, target, position);
128
+ },
129
+
130
+ beforeLayout: function() {
131
+ if (!this.borderLayoutInitialized) {
132
+ this.initializeBorderLayout();
133
+ }
134
+
135
+ // Delegate this operation to the shadow "V" or "H" box layout.
136
+ this.shadowLayout.beforeLayout();
137
+
138
+ // note: don't call base because that does a renderItems again
139
+ },
140
+
141
+ renderItems: function(items, target) {
142
+ //<debug>
143
+ Ext.Error.raise('This should not be called');
144
+ //</debug>
145
+ },
146
+
147
+ renderItem: function(item) {
148
+ //<debug>
149
+ Ext.Error.raise('This should not be called');
150
+ //</debug>
151
+ },
152
+
153
+ renderChildren: function() {
154
+ if (!this.borderLayoutInitialized) {
155
+ this.initializeBorderLayout();
156
+ }
157
+
158
+ this.shadowLayout.renderChildren();
159
+ },
160
+
161
+ /*
162
+ * Gathers items for a layout operation. Injected into child Box layouts through configuration.
163
+ * We must not include child items which are floated over the layout (are primed with a slide out animation)
164
+ */
165
+ getVisibleItems: function() {
166
+ return Ext.ComponentQuery.query(':not([slideOutAnim])', this.callParent(arguments));
167
+ },
168
+
169
+ initializeBorderLayout: function() {
170
+ var me = this,
171
+ i = 0,
172
+ items = me.getLayoutItems(),
173
+ ln = items.length,
174
+ regions = (me.regions = {}),
175
+ vBoxItems = [],
176
+ hBoxItems = [],
177
+ horizontalFlex = 0,
178
+ verticalFlex = 0,
179
+ comp, percentage;
180
+
181
+ // Map of Splitters for each region
182
+ me.splitters = {};
183
+
184
+ // Map of regions
185
+ for (; i < ln; i++) {
186
+ comp = items[i];
187
+ regions[comp.region] = comp;
188
+
189
+ // Intercept collapsing to implement showing an alternate Component as a collapsed placeholder
190
+ if (comp.region != 'center' && comp.collapsible && comp.collapseMode != 'header') {
191
+
192
+ // This layout intercepts any initial collapsed state. Panel must not do this itself.
193
+ comp.borderCollapse = comp.collapsed;
194
+ delete comp.collapsed;
195
+
196
+ comp.on({
197
+ beforecollapse: me.onBeforeRegionCollapse,
198
+ beforeexpand: me.onBeforeRegionExpand,
199
+ destroy: me.onRegionDestroy,
200
+ scope: me
201
+ });
202
+ me.setupState(comp);
203
+ }
204
+ }
205
+ //<debug>
206
+ if (!regions.center) {
207
+ Ext.Error.raise("You must specify a center region when defining a BorderLayout.");
208
+ }
209
+ //</debug>
210
+ comp = regions.center;
211
+ if (!comp.flex) {
212
+ comp.flex = 1;
213
+ }
214
+ delete comp.width;
215
+ comp.maintainFlex = true;
216
+
217
+ // Begin the VBox and HBox item list.
218
+ comp = regions.west;
219
+ if (comp) {
220
+ comp.collapseDirection = Ext.Component.DIRECTION_LEFT;
221
+ hBoxItems.push(comp);
222
+ if (comp.split) {
223
+ hBoxItems.push(me.splitters.west = me.createSplitter(comp));
224
+ }
225
+ percentage = Ext.isString(comp.width) && comp.width.match(me.percentageRe);
226
+ if (percentage) {
227
+ horizontalFlex += (comp.flex = parseInt(percentage[1], 10) / 100);
228
+ delete comp.width;
229
+ }
230
+ }
231
+ comp = regions.north;
232
+ if (comp) {
233
+ comp.collapseDirection = Ext.Component.DIRECTION_TOP;
234
+ vBoxItems.push(comp);
235
+ if (comp.split) {
236
+ vBoxItems.push(me.splitters.north = me.createSplitter(comp));
237
+ }
238
+ percentage = Ext.isString(comp.height) && comp.height.match(me.percentageRe);
239
+ if (percentage) {
240
+ verticalFlex += (comp.flex = parseInt(percentage[1], 10) / 100);
241
+ delete comp.height;
242
+ }
243
+ }
244
+
245
+ // Decide into which Collection the center region goes.
246
+ if (regions.north || regions.south) {
247
+ if (regions.east || regions.west) {
248
+
249
+ // Create the embedded center. Mark it with the region: 'center' property so that it can be identified as the center.
250
+ vBoxItems.push(me.embeddedContainer = Ext.create('Ext.container.Container', {
251
+ xtype: 'container',
252
+ region: 'center',
253
+ id: me.owner.id + '-embedded-center',
254
+ cls: Ext.baseCSSPrefix + 'border-item',
255
+ flex: regions.center.flex,
256
+ maintainFlex: true,
257
+ layout: {
258
+ type: 'hbox',
259
+ align: 'stretch',
260
+ getVisibleItems: me.getVisibleItems
261
+ }
262
+ }));
263
+ hBoxItems.push(regions.center);
264
+ }
265
+ // No east or west: the original center goes straight into the vbox
266
+ else {
267
+ vBoxItems.push(regions.center);
268
+ }
269
+ }
270
+ // If we have no north or south, then the center is part of the HBox items
271
+ else {
272
+ hBoxItems.push(regions.center);
273
+ }
274
+
275
+ // Finish off the VBox and HBox item list.
276
+ comp = regions.south;
277
+ if (comp) {
278
+ comp.collapseDirection = Ext.Component.DIRECTION_BOTTOM;
279
+ if (comp.split) {
280
+ vBoxItems.push(me.splitters.south = me.createSplitter(comp));
281
+ }
282
+ percentage = Ext.isString(comp.height) && comp.height.match(me.percentageRe);
283
+ if (percentage) {
284
+ verticalFlex += (comp.flex = parseInt(percentage[1], 10) / 100);
285
+ delete comp.height;
286
+ }
287
+ vBoxItems.push(comp);
288
+ }
289
+ comp = regions.east;
290
+ if (comp) {
291
+ comp.collapseDirection = Ext.Component.DIRECTION_RIGHT;
292
+ if (comp.split) {
293
+ hBoxItems.push(me.splitters.east = me.createSplitter(comp));
294
+ }
295
+ percentage = Ext.isString(comp.width) && comp.width.match(me.percentageRe);
296
+ if (percentage) {
297
+ horizontalFlex += (comp.flex = parseInt(percentage[1], 10) / 100);
298
+ delete comp.width;
299
+ }
300
+ hBoxItems.push(comp);
301
+ }
302
+
303
+ // Create the injected "items" collections for the Containers.
304
+ // If we have north or south, then the shadow Container will be a VBox.
305
+ // If there are also east or west regions, its center will be a shadow HBox.
306
+ // If there are *only* east or west regions, then the shadow layout will be an HBox (or Fit).
307
+ if (regions.north || regions.south) {
308
+
309
+ me.shadowContainer = Ext.create('Ext.container.Container', {
310
+ ownerCt: me.owner,
311
+ el: me.getTarget(),
312
+ layout: Ext.applyIf({
313
+ type: 'vbox',
314
+ align: 'stretch',
315
+ getVisibleItems: me.getVisibleItems
316
+ }, me.initialConfig)
317
+ });
318
+ me.createItems(me.shadowContainer, vBoxItems);
319
+
320
+ // Allow the Splitters to orientate themselves
321
+ if (me.splitters.north) {
322
+ me.splitters.north.ownerCt = me.shadowContainer;
323
+ }
324
+ if (me.splitters.south) {
325
+ me.splitters.south.ownerCt = me.shadowContainer;
326
+ }
327
+
328
+ // Inject items into the HBox Container if there is one - if there was an east or west.
329
+ if (me.embeddedContainer) {
330
+ me.embeddedContainer.ownerCt = me.shadowContainer;
331
+ me.createItems(me.embeddedContainer, hBoxItems);
332
+
333
+ // Allow the Splitters to orientate themselves
334
+ if (me.splitters.east) {
335
+ me.splitters.east.ownerCt = me.embeddedContainer;
336
+ }
337
+ if (me.splitters.west) {
338
+ me.splitters.west.ownerCt = me.embeddedContainer;
339
+ }
340
+
341
+ // These spliiters need to be constrained by components one-level below
342
+ // the component in their vobx. We update the min/maxHeight on the helper
343
+ // (embeddedContainer) prior to starting the split/drag. This has to be
344
+ // done on-the-fly to allow min/maxHeight of the E/C/W regions to be set
345
+ // dynamically.
346
+ Ext.each([me.splitters.north, me.splitters.south], function (splitter) {
347
+ if (splitter) {
348
+ splitter.on('beforedragstart', me.fixHeightConstraints, me);
349
+ }
350
+ });
351
+
352
+ // The east or west region wanted a percentage
353
+ if (horizontalFlex) {
354
+ regions.center.flex -= horizontalFlex;
355
+ }
356
+ // The north or south region wanted a percentage
357
+ if (verticalFlex) {
358
+ me.embeddedContainer.flex -= verticalFlex;
359
+ }
360
+ } else {
361
+ // The north or south region wanted a percentage
362
+ if (verticalFlex) {
363
+ regions.center.flex -= verticalFlex;
364
+ }
365
+ }
366
+ }
367
+ // If we have no north or south, then there's only one Container, and it's
368
+ // an HBox, or, if only a center region was specified, a Fit.
369
+ else {
370
+ me.shadowContainer = Ext.create('Ext.container.Container', {
371
+ ownerCt: me.owner,
372
+ el: me.getTarget(),
373
+ layout: Ext.applyIf({
374
+ type: (hBoxItems.length == 1) ? 'fit' : 'hbox',
375
+ align: 'stretch'
376
+ }, me.initialConfig)
377
+ });
378
+ me.createItems(me.shadowContainer, hBoxItems);
379
+
380
+ // Allow the Splitters to orientate themselves
381
+ if (me.splitters.east) {
382
+ me.splitters.east.ownerCt = me.shadowContainer;
383
+ }
384
+ if (me.splitters.west) {
385
+ me.splitters.west.ownerCt = me.shadowContainer;
386
+ }
387
+
388
+ // The east or west region wanted a percentage
389
+ if (horizontalFlex) {
390
+ regions.center.flex -= verticalFlex;
391
+ }
392
+ }
393
+
394
+ // Create upward links from the region Components to their shadow ownerCts
395
+ for (i = 0, items = me.shadowContainer.items.items, ln = items.length; i < ln; i++) {
396
+ items[i].shadowOwnerCt = me.shadowContainer;
397
+ }
398
+ if (me.embeddedContainer) {
399
+ for (i = 0, items = me.embeddedContainer.items.items, ln = items.length; i < ln; i++) {
400
+ items[i].shadowOwnerCt = me.embeddedContainer;
401
+ }
402
+ }
403
+
404
+ // This is the layout that we delegate all operations to
405
+ me.shadowLayout = me.shadowContainer.getLayout();
406
+
407
+ me.borderLayoutInitialized = true;
408
+ },
409
+
410
+ setupState: function(comp){
411
+ var getState = comp.getState;
412
+ comp.getState = function(){
413
+ // call the original getState
414
+ var state = getState.call(comp) || {},
415
+ region = comp.region;
416
+
417
+ state.collapsed = !!comp.collapsed;
418
+ if (region == 'west' || region == 'east') {
419
+ state.width = comp.getWidth();
420
+ } else {
421
+ state.height = comp.getHeight();
422
+ }
423
+ return state;
424
+ };
425
+ comp.addStateEvents(['collapse', 'expand', 'resize']);
426
+ },
427
+
428
+ /**
429
+ * Create the items collection for our shadow/embedded containers
430
+ * @private
431
+ */
432
+ createItems: function(container, items){
433
+ // Have to inject an items Collection *after* construction.
434
+ // The child items of the shadow layout must retain their original, user-defined ownerCt
435
+ delete container.items;
436
+ container.initItems();
437
+ container.items.addAll(items);
438
+ },
439
+
440
+ // Private
441
+ // Create a splitter for a child of the layout.
442
+ createSplitter: function(comp) {
443
+ var me = this,
444
+ interceptCollapse = (comp.collapseMode != 'header'),
445
+ resizer;
446
+
447
+ resizer = Ext.create('Ext.resizer.Splitter', {
448
+ hidden: !!comp.hidden,
449
+ collapseTarget: comp,
450
+ performCollapse: !interceptCollapse,
451
+ listeners: interceptCollapse ? {
452
+ click: {
453
+ fn: Ext.Function.bind(me.onSplitterCollapseClick, me, [comp]),
454
+ element: 'collapseEl'
455
+ }
456
+ } : null
457
+ });
458
+
459
+ // Mini collapse means that the splitter is the placeholder Component
460
+ if (comp.collapseMode == 'mini') {
461
+ comp.placeholder = resizer;
462
+ resizer.collapsedCls = comp.collapsedCls;
463
+ }
464
+
465
+ // Arrange to hide/show a region's associated splitter when the region is hidden/shown
466
+ comp.on({
467
+ hide: me.onRegionVisibilityChange,
468
+ show: me.onRegionVisibilityChange,
469
+ scope: me
470
+ });
471
+ return resizer;
472
+ },
473
+
474
+ // Private
475
+ // Propagates the min/maxHeight values from the inner hbox items to its container.
476
+ fixHeightConstraints: function () {
477
+ var me = this,
478
+ ct = me.embeddedContainer,
479
+ maxHeight = 1e99, minHeight = -1;
480
+
481
+ if (!ct) {
482
+ return;
483
+ }
484
+
485
+ ct.items.each(function (item) {
486
+ if (Ext.isNumber(item.maxHeight)) {
487
+ maxHeight = Math.max(maxHeight, item.maxHeight);
488
+ }
489
+ if (Ext.isNumber(item.minHeight)) {
490
+ minHeight = Math.max(minHeight, item.minHeight);
491
+ }
492
+ });
493
+
494
+ ct.maxHeight = maxHeight;
495
+ ct.minHeight = minHeight;
496
+ },
497
+
498
+ // Hide/show a region's associated splitter when the region is hidden/shown
499
+ onRegionVisibilityChange: function(comp){
500
+ this.splitters[comp.region][comp.hidden ? 'hide' : 'show']();
501
+ this.layout();
502
+ },
503
+
504
+ // Called when a splitter mini-collapse tool is clicked on.
505
+ // The listener is only added if this layout is controlling collapsing,
506
+ // not if the component's collapseMode is 'mini' or 'header'.
507
+ onSplitterCollapseClick: function(comp) {
508
+ if (comp.collapsed) {
509
+ this.onPlaceHolderToolClick(null, null, null, {client: comp});
510
+ } else {
511
+ comp.collapse();
512
+ }
513
+ },
514
+
515
+ /**
516
+ * <p>Return the {@link Ext.panel.Panel#placeholder placeholder} Component to which the passed child Panel of the layout will collapse.
517
+ * By default, this will be a {@link Ext.panel.Header Header} component (Docked to the appropriate border). See {@link Ext.panel.Panel#placeholder placeholder}.
518
+ * config to customize this.</p>
519
+ * <p><b>Note that this will be a fully instantiated Component, but will only be <i>rendered</i> when the Panel is first collapsed.</b></p>
520
+ * @param {Panel} panel The child Panel of the layout for which to return the {@link Ext.panel.Panel#placeholder placeholder}.
521
+ * @returns {Component} The Panel's {@link Ext.panel.Panel#placeholder placeholder} unless the {@link Ext.panel.Panel#collapseMode collapseMode} is
522
+ * <code>'header'</code>, in which case <i>undefined</i> is returned.
523
+ */
524
+ getPlaceholder: function(comp) {
525
+ var me = this,
526
+ placeholder = comp.placeholder,
527
+ shadowContainer = comp.shadowOwnerCt,
528
+ shadowLayout = shadowContainer.layout,
529
+ oppositeDirection = Ext.panel.Panel.prototype.getOppositeDirection(comp.collapseDirection),
530
+ horiz = (comp.region == 'north' || comp.region == 'south');
531
+
532
+ // No placeholder if the collapse mode is not the Border layout default
533
+ if (comp.collapseMode == 'header') {
534
+ return;
535
+ }
536
+
537
+ // Provide a replacement Container with an expand tool
538
+ if (!placeholder) {
539
+ if (comp.collapseMode == 'mini') {
540
+ placeholder = Ext.create('Ext.resizer.Splitter', {
541
+ id: 'collapse-placeholder-' + comp.id,
542
+ collapseTarget: comp,
543
+ performCollapse: false,
544
+ listeners: {
545
+ click: {
546
+ fn: Ext.Function.bind(me.onSplitterCollapseClick, me, [comp]),
547
+ element: 'collapseEl'
548
+ }
549
+ }
550
+ });
551
+ placeholder.addCls(placeholder.collapsedCls);
552
+ } else {
553
+ placeholder = {
554
+ id: 'collapse-placeholder-' + comp.id,
555
+ margins: comp.initialConfig.margins || Ext.getClass(comp).prototype.margins,
556
+ xtype: 'header',
557
+ orientation: horiz ? 'horizontal' : 'vertical',
558
+ title: comp.title,
559
+ textCls: comp.headerTextCls,
560
+ iconCls: comp.iconCls,
561
+ baseCls: comp.baseCls + '-header',
562
+ ui: comp.ui,
563
+ indicateDrag: comp.draggable,
564
+ cls: Ext.baseCSSPrefix + 'region-collapsed-placeholder ' + Ext.baseCSSPrefix + 'region-collapsed-' + comp.collapseDirection + '-placeholder ' + comp.collapsedCls,
565
+ listeners: comp.floatable ? {
566
+ click: {
567
+ fn: function(e) {
568
+ me.floatCollapsedPanel(e, comp);
569
+ },
570
+ element: 'el'
571
+ }
572
+ } : null
573
+ };
574
+ // Hack for IE6/7/IEQuirks's inability to display an inline-block
575
+ if ((Ext.isIE6 || Ext.isIE7 || (Ext.isIEQuirks)) && !horiz) {
576
+ placeholder.width = 25;
577
+ }
578
+ if (!comp.hideCollapseTool) {
579
+ placeholder[horiz ? 'tools' : 'items'] = [{
580
+ xtype: 'tool',
581
+ client: comp,
582
+ type: 'expand-' + oppositeDirection,
583
+ handler: me.onPlaceHolderToolClick,
584
+ scope: me
585
+ }];
586
+ }
587
+ }
588
+ placeholder = me.owner.createComponent(placeholder);
589
+ if (comp.isXType('panel')) {
590
+ comp.on({
591
+ titlechange: me.onRegionTitleChange,
592
+ iconchange: me.onRegionIconChange,
593
+ scope: me
594
+ });
595
+ }
596
+ }
597
+
598
+ // The collapsed Component holds a reference to its placeholder and vice versa
599
+ comp.placeholder = placeholder;
600
+ placeholder.comp = comp;
601
+
602
+ return placeholder;
603
+ },
604
+
605
+ /**
606
+ * @private
607
+ * Update the placeholder title when panel title has been set or changed.
608
+ */
609
+ onRegionTitleChange: function(comp, newTitle) {
610
+ comp.placeholder.setTitle(newTitle);
611
+ },
612
+
613
+ /**
614
+ * @private
615
+ * Update the placeholder iconCls when panel iconCls has been set or changed.
616
+ */
617
+ onRegionIconChange: function(comp, newIconCls) {
618
+ comp.placeholder.setIconCls(newIconCls);
619
+ },
620
+
621
+ /**
622
+ * @private
623
+ * Calculates the size and positioning of the passed child item. Must be present because Panel's expand,
624
+ * when configured with a flex, calls this method on its ownerCt's layout.
625
+ * @param {Component} child The child Component to calculate the box for
626
+ * @return {Object} Object containing box measurements for the child. Properties are left,top,width,height.
627
+ */
628
+ calculateChildBox: function(comp) {
629
+ var me = this;
630
+ if (me.shadowContainer.items.contains(comp)) {
631
+ return me.shadowContainer.layout.calculateChildBox(comp);
632
+ }
633
+ else if (me.embeddedContainer && me.embeddedContainer.items.contains(comp)) {
634
+ return me.embeddedContainer.layout.calculateChildBox(comp);
635
+ }
636
+ },
637
+
638
+ /**
639
+ * @private
640
+ * Intercepts the Panel's own collapse event and perform's substitution of the Panel
641
+ * with a placeholder Header orientated in the appropriate dimension.
642
+ * @param comp The Panel being collapsed.
643
+ * @param direction
644
+ * @param animate
645
+ * @returns {Boolean} false to inhibit the Panel from performing its own collapse.
646
+ */
647
+ onBeforeRegionCollapse: function(comp, direction, animate) {
648
+ var me = this,
649
+ compEl = comp.el,
650
+ width,
651
+ miniCollapse = comp.collapseMode == 'mini',
652
+ shadowContainer = comp.shadowOwnerCt,
653
+ shadowLayout = shadowContainer.layout,
654
+ placeholder = comp.placeholder,
655
+ sl = me.owner.suspendLayout,
656
+ scsl = shadowContainer.suspendLayout,
657
+ isNorthOrWest = (comp.region == 'north' || comp.region == 'west'); // Flag to keep the placeholder non-adjacent to any Splitter
658
+
659
+ // Do not trigger a layout during transition to collapsed Component
660
+ me.owner.suspendLayout = true;
661
+ shadowContainer.suspendLayout = true;
662
+
663
+ // Prevent upward notifications from downstream layouts
664
+ shadowLayout.layoutBusy = true;
665
+ if (shadowContainer.componentLayout) {
666
+ shadowContainer.componentLayout.layoutBusy = true;
667
+ }
668
+ me.shadowContainer.layout.layoutBusy = true;
669
+ me.layoutBusy = true;
670
+ me.owner.componentLayout.layoutBusy = true;
671
+
672
+ // Provide a replacement Container with an expand tool
673
+ if (!placeholder) {
674
+ placeholder = me.getPlaceholder(comp);
675
+ }
676
+
677
+ // placeholder already in place; show it.
678
+ if (placeholder.shadowOwnerCt === shadowContainer) {
679
+ placeholder.show();
680
+ }
681
+ // Insert the collapsed placeholder Component into the appropriate Box layout shadow Container
682
+ // It must go next to its client Component, but non-adjacent to the splitter so splitter can find its collapse client.
683
+ // Inject an ownerCt value pointing to the owner, border layout Container as the user will expect.
684
+ else {
685
+ shadowContainer.insert(shadowContainer.items.indexOf(comp) + (isNorthOrWest ? 0 : 1), placeholder);
686
+ placeholder.shadowOwnerCt = shadowContainer;
687
+ placeholder.ownerCt = me.owner;
688
+ }
689
+
690
+ // Flag the collapsing Component as hidden and show the placeholder.
691
+ // This causes the shadow Box layout's calculateChildBoxes to calculate the correct new arrangement.
692
+ // We hide or slideOut the Component's element
693
+ comp.hidden = true;
694
+
695
+ if (!placeholder.rendered) {
696
+ shadowLayout.renderItem(placeholder, shadowLayout.innerCt);
697
+
698
+ // The inserted placeholder does not have the proper size, so copy the width
699
+ // for N/S or the height for E/W from the component. This fixes EXTJSIV-1562
700
+ // without recursive layouts. This is only an issue initially. After this time,
701
+ // placeholder will have the correct width/height set by the layout (which has
702
+ // already happened when we get here initially).
703
+ if (comp.region == 'north' || comp.region == 'south') {
704
+ placeholder.setCalculatedSize(comp.getWidth());
705
+ } else {
706
+ placeholder.setCalculatedSize(undefined, comp.getHeight());
707
+ }
708
+ }
709
+
710
+ // Jobs to be done after the collapse has been done
711
+ function afterCollapse() {
712
+ // Reinstate automatic laying out.
713
+ me.owner.suspendLayout = sl;
714
+ shadowContainer.suspendLayout = scsl;
715
+ delete shadowLayout.layoutBusy;
716
+ if (shadowContainer.componentLayout) {
717
+ delete shadowContainer.componentLayout.layoutBusy;
718
+ }
719
+ delete me.shadowContainer.layout.layoutBusy;
720
+ delete me.layoutBusy;
721
+ delete me.owner.componentLayout.layoutBusy;
722
+
723
+ // Fire the collapse event: The Panel has in fact been collapsed, but by substitution of an alternative Component
724
+ comp.collapsed = true;
725
+ comp.fireEvent('collapse', comp);
726
+ }
727
+
728
+ /*
729
+ * Set everything to the new positions. Note that we
730
+ * only want to animate the collapse if it wasn't configured
731
+ * initially with collapsed: true
732
+ */
733
+ if (comp.animCollapse && me.initialCollapsedComplete) {
734
+ shadowLayout.layout();
735
+ compEl.dom.style.zIndex = 100;
736
+
737
+ // If we're mini-collapsing, the placholder is a Splitter. We don't want it to "bounce in"
738
+ if (!miniCollapse) {
739
+ placeholder.el.hide();
740
+ }
741
+ compEl.slideOut(me.slideDirection[comp.region], {
742
+ duration: Ext.Number.from(comp.animCollapse, Ext.fx.Anim.prototype.duration),
743
+ listeners: {
744
+ afteranimate: function() {
745
+ compEl.show().setLeftTop(-10000, -10000);
746
+ compEl.dom.style.zIndex = '';
747
+
748
+ // If we're mini-collapsing, the placholder is a Splitter. We don't want it to "bounce in"
749
+ if (!miniCollapse) {
750
+ placeholder.el.slideIn(me.slideDirection[comp.region], {
751
+ easing: 'linear',
752
+ duration: 100
753
+ });
754
+ }
755
+ afterCollapse();
756
+ }
757
+ }
758
+ });
759
+ } else {
760
+ compEl.setLeftTop(-10000, -10000);
761
+ shadowLayout.layout();
762
+ afterCollapse();
763
+ }
764
+
765
+ return false;
766
+ },
767
+
768
+ // Hijack the expand operation to remove the placeholder and slide the region back in.
769
+ onBeforeRegionExpand: function(comp, animate) {
770
+ this.onPlaceHolderToolClick(null, null, null, {client: comp});
771
+ return false;
772
+ },
773
+
774
+ // Called when the collapsed placeholder is clicked to reinstate a "collapsed" (in reality hidden) Panel.
775
+ onPlaceHolderToolClick: function(e, target, owner, tool) {
776
+ var me = this,
777
+ comp = tool.client,
778
+
779
+ // Hide the placeholder unless it was the Component's preexisting splitter
780
+ hidePlaceholder = (comp.collapseMode != 'mini') || !comp.split,
781
+ compEl = comp.el,
782
+ toCompBox,
783
+ placeholder = comp.placeholder,
784
+ placeholderEl = placeholder.el,
785
+ shadowContainer = comp.shadowOwnerCt,
786
+ shadowLayout = shadowContainer.layout,
787
+ curSize,
788
+ sl = me.owner.suspendLayout,
789
+ scsl = shadowContainer.suspendLayout,
790
+ isFloating;
791
+
792
+ // If the slide in is still going, stop it.
793
+ // This will either leave the Component in its fully floated state (which is processed below)
794
+ // or in its collapsed state. Either way, we expand it..
795
+ if (comp.getActiveAnimation()) {
796
+ comp.stopAnimation();
797
+ }
798
+
799
+ // If the Component is fully floated when they click the placeholder Tool,
800
+ // it will be primed with a slide out animation object... so delete that
801
+ // and remove the mouseout listeners
802
+ if (comp.slideOutAnim) {
803
+ // Remove mouse leave monitors
804
+ compEl.un(comp.panelMouseMon);
805
+ placeholderEl.un(comp.placeholderMouseMon);
806
+
807
+ delete comp.slideOutAnim;
808
+ delete comp.panelMouseMon;
809
+ delete comp.placeholderMouseMon;
810
+
811
+ // If the Panel was floated and primed with a slideOut animation, we don't want to animate its layout operation.
812
+ isFloating = true;
813
+ }
814
+
815
+ // Do not trigger a layout during transition to expanded Component
816
+ me.owner.suspendLayout = true;
817
+ shadowContainer.suspendLayout = true;
818
+
819
+ // Prevent upward notifications from downstream layouts
820
+ shadowLayout.layoutBusy = true;
821
+ if (shadowContainer.componentLayout) {
822
+ shadowContainer.componentLayout.layoutBusy = true;
823
+ }
824
+ me.shadowContainer.layout.layoutBusy = true;
825
+ me.layoutBusy = true;
826
+ me.owner.componentLayout.layoutBusy = true;
827
+
828
+ // Unset the hidden and collapsed flags set in onBeforeRegionCollapse. The shadowLayout will now take it into account
829
+ // Find where the shadow Box layout plans to put the expanding Component.
830
+ comp.hidden = false;
831
+ comp.collapsed = false;
832
+ if (hidePlaceholder) {
833
+ placeholder.hidden = true;
834
+ }
835
+ toCompBox = shadowLayout.calculateChildBox(comp);
836
+
837
+ // Show the collapse tool in case it was hidden by the slide-in
838
+ if (comp.collapseTool) {
839
+ comp.collapseTool.show();
840
+ }
841
+
842
+ // If we're going to animate, we need to hide the component before moving it back into position
843
+ if (comp.animCollapse && !isFloating) {
844
+ compEl.setStyle('visibility', 'hidden');
845
+ }
846
+ compEl.setLeftTop(toCompBox.left, toCompBox.top);
847
+
848
+ // Equalize the size of the expanding Component prior to animation
849
+ // in case the layout area has changed size during the time it was collapsed.
850
+ curSize = comp.getSize();
851
+ if (curSize.height != toCompBox.height || curSize.width != toCompBox.width) {
852
+ me.setItemSize(comp, toCompBox.width, toCompBox.height);
853
+ }
854
+
855
+ // Jobs to be done after the expand has been done
856
+ function afterExpand() {
857
+ // Reinstate automatic laying out.
858
+ me.owner.suspendLayout = sl;
859
+ shadowContainer.suspendLayout = scsl;
860
+ delete shadowLayout.layoutBusy;
861
+ if (shadowContainer.componentLayout) {
862
+ delete shadowContainer.componentLayout.layoutBusy;
863
+ }
864
+ delete me.shadowContainer.layout.layoutBusy;
865
+ delete me.layoutBusy;
866
+ delete me.owner.componentLayout.layoutBusy;
867
+
868
+ // In case it was floated out and they clicked the re-expand tool
869
+ comp.removeCls(Ext.baseCSSPrefix + 'border-region-slide-in');
870
+
871
+ // Fire the expand event: The Panel has in fact been expanded, but by removal of an alternative Component
872
+ comp.fireEvent('expand', comp);
873
+ }
874
+
875
+ // Hide the placeholder
876
+ if (hidePlaceholder) {
877
+ placeholder.el.hide();
878
+ }
879
+
880
+ // Slide the expanding Component to its new position.
881
+ // When that is done, layout the layout.
882
+ if (comp.animCollapse && !isFloating) {
883
+ compEl.dom.style.zIndex = 100;
884
+ compEl.slideIn(me.slideDirection[comp.region], {
885
+ duration: Ext.Number.from(comp.animCollapse, Ext.fx.Anim.prototype.duration),
886
+ listeners: {
887
+ afteranimate: function() {
888
+ compEl.dom.style.zIndex = '';
889
+ comp.hidden = false;
890
+ shadowLayout.onLayout();
891
+ afterExpand();
892
+ }
893
+ }
894
+ });
895
+ } else {
896
+ shadowLayout.onLayout();
897
+ afterExpand();
898
+ }
899
+ },
900
+
901
+ floatCollapsedPanel: function(e, comp) {
902
+
903
+ if (comp.floatable === false) {
904
+ return;
905
+ }
906
+
907
+ var me = this,
908
+ compEl = comp.el,
909
+ placeholder = comp.placeholder,
910
+ placeholderEl = placeholder.el,
911
+ shadowContainer = comp.shadowOwnerCt,
912
+ shadowLayout = shadowContainer.layout,
913
+ placeholderBox = shadowLayout.getChildBox(placeholder),
914
+ scsl = shadowContainer.suspendLayout,
915
+ curSize, toCompBox, compAnim;
916
+
917
+ // Ignore clicks on tools.
918
+ if (e.getTarget('.' + Ext.baseCSSPrefix + 'tool')) {
919
+ return;
920
+ }
921
+
922
+ // It's *being* animated, ignore the click.
923
+ // Possible future enhancement: Stop and *reverse* the current active Fx.
924
+ if (compEl.getActiveAnimation()) {
925
+ return;
926
+ }
927
+
928
+ // If the Component is already fully floated when they click the placeholder,
929
+ // it will be primed with a slide out animation object... so slide it out.
930
+ if (comp.slideOutAnim) {
931
+ me.slideOutFloatedComponent(comp);
932
+ return;
933
+ }
934
+
935
+ // Function to be called when the mouse leaves the floated Panel
936
+ // Slide out when the mouse leaves the region bounded by the slid Component and its placeholder.
937
+ function onMouseLeaveFloated(e) {
938
+ var slideRegion = compEl.getRegion().union(placeholderEl.getRegion()).adjust(1, -1, -1, 1);
939
+
940
+ // If mouse is not within slide Region, slide it out
941
+ if (!slideRegion.contains(e.getPoint())) {
942
+ me.slideOutFloatedComponent(comp);
943
+ }
944
+ }
945
+
946
+ // Monitor for mouseouting of the placeholder. Hide it if they exit for half a second or more
947
+ comp.placeholderMouseMon = placeholderEl.monitorMouseLeave(500, onMouseLeaveFloated);
948
+
949
+ // Do not trigger a layout during slide out of the Component
950
+ shadowContainer.suspendLayout = true;
951
+
952
+ // Prevent upward notifications from downstream layouts
953
+ me.layoutBusy = true;
954
+ me.owner.componentLayout.layoutBusy = true;
955
+
956
+ // The collapse tool is hidden while slid.
957
+ // It is re-shown on expand.
958
+ if (comp.collapseTool) {
959
+ comp.collapseTool.hide();
960
+ }
961
+
962
+ // Set flags so that the layout will calculate the boxes for what we want
963
+ comp.hidden = false;
964
+ comp.collapsed = false;
965
+ placeholder.hidden = true;
966
+
967
+ // Recalculate new arrangement of the Component being floated.
968
+ toCompBox = shadowLayout.calculateChildBox(comp);
969
+ placeholder.hidden = false;
970
+
971
+ // Component to appear just after the placeholder, whatever "after" means in the context of the shadow Box layout.
972
+ if (comp.region == 'north' || comp.region == 'west') {
973
+ toCompBox[shadowLayout.parallelBefore] += placeholderBox[shadowLayout.parallelPrefix] - 1;
974
+ } else {
975
+ toCompBox[shadowLayout.parallelBefore] -= (placeholderBox[shadowLayout.parallelPrefix] - 1);
976
+ }
977
+ compEl.setStyle('visibility', 'hidden');
978
+ compEl.setLeftTop(toCompBox.left, toCompBox.top);
979
+
980
+ // Equalize the size of the expanding Component prior to animation
981
+ // in case the layout area has changed size during the time it was collapsed.
982
+ curSize = comp.getSize();
983
+ if (curSize.height != toCompBox.height || curSize.width != toCompBox.width) {
984
+ me.setItemSize(comp, toCompBox.width, toCompBox.height);
985
+ }
986
+
987
+ // This animation slides the collapsed Component's el out to just beyond its placeholder
988
+ compAnim = {
989
+ listeners: {
990
+ afteranimate: function() {
991
+ shadowContainer.suspendLayout = scsl;
992
+ delete me.layoutBusy;
993
+ delete me.owner.componentLayout.layoutBusy;
994
+
995
+ // Prime the Component with an Anim config object to slide it back out
996
+ compAnim.listeners = {
997
+ afterAnimate: function() {
998
+ compEl.show().removeCls(Ext.baseCSSPrefix + 'border-region-slide-in').setLeftTop(-10000, -10000);
999
+
1000
+ // Reinstate the correct, current state after slide out animation finishes
1001
+ comp.hidden = true;
1002
+ comp.collapsed = true;
1003
+ delete comp.slideOutAnim;
1004
+ delete comp.panelMouseMon;
1005
+ delete comp.placeholderMouseMon;
1006
+ }
1007
+ };
1008
+ comp.slideOutAnim = compAnim;
1009
+ }
1010
+ },
1011
+ duration: 500
1012
+ };
1013
+
1014
+ // Give the element the correct class which places it at a high z-index
1015
+ compEl.addCls(Ext.baseCSSPrefix + 'border-region-slide-in');
1016
+
1017
+ // Begin the slide in
1018
+ compEl.slideIn(me.slideDirection[comp.region], compAnim);
1019
+
1020
+ // Monitor for mouseouting of the slid area. Hide it if they exit for half a second or more
1021
+ comp.panelMouseMon = compEl.monitorMouseLeave(500, onMouseLeaveFloated);
1022
+
1023
+ },
1024
+
1025
+ slideOutFloatedComponent: function(comp) {
1026
+ var compEl = comp.el,
1027
+ slideOutAnim;
1028
+
1029
+ // Remove mouse leave monitors
1030
+ compEl.un(comp.panelMouseMon);
1031
+ comp.placeholder.el.un(comp.placeholderMouseMon);
1032
+
1033
+ // Slide the Component out
1034
+ compEl.slideOut(this.slideDirection[comp.region], comp.slideOutAnim);
1035
+
1036
+ delete comp.slideOutAnim;
1037
+ delete comp.panelMouseMon;
1038
+ delete comp.placeholderMouseMon;
1039
+ },
1040
+
1041
+ /*
1042
+ * @private
1043
+ * Ensure any collapsed placeholder Component is destroyed along with its region.
1044
+ * Can't do this in onDestroy because they may remove a Component and use it elsewhere.
1045
+ */
1046
+ onRegionDestroy: function(comp) {
1047
+ var placeholder = comp.placeholder;
1048
+ if (placeholder) {
1049
+ delete placeholder.ownerCt;
1050
+ placeholder.destroy();
1051
+ }
1052
+ },
1053
+
1054
+ /*
1055
+ * @private
1056
+ * Ensure any shadow Containers are destroyed.
1057
+ * Ensure we don't keep references to Components.
1058
+ */
1059
+ onDestroy: function() {
1060
+ var me = this,
1061
+ shadowContainer = me.shadowContainer,
1062
+ embeddedContainer = me.embeddedContainer;
1063
+
1064
+ if (shadowContainer) {
1065
+ delete shadowContainer.ownerCt;
1066
+ Ext.destroy(shadowContainer);
1067
+ }
1068
+
1069
+ if (embeddedContainer) {
1070
+ delete embeddedContainer.ownerCt;
1071
+ Ext.destroy(embeddedContainer);
1072
+ }
1073
+ delete me.regions;
1074
+ delete me.splitters;
1075
+ delete me.shadowContainer;
1076
+ delete me.embeddedContainer;
1077
+ me.callParent(arguments);
1078
+ }
1079
+ });