extjs-rails 4.1.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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,234 @@
1
+ /**
2
+ * This is the layout style of choice for creating structural layouts in a multi-column format where the width of each
3
+ * column can be specified as a percentage or fixed width, but the height is allowed to vary based on the content. This
4
+ * class is intended to be extended or created via the layout:'column' {@link Ext.container.Container#layout} config,
5
+ * and should generally not need to be created directly via the new keyword.
6
+ *
7
+ * ColumnLayout does not have any direct config options (other than inherited ones), but it does support a specific
8
+ * config property of `columnWidth` that can be included in the config of any panel added to it. The layout will use
9
+ * the columnWidth (if present) or width of each panel during layout to determine how to size each panel. If width or
10
+ * columnWidth is not specified for a given panel, its width will default to the panel's width (or auto).
11
+ *
12
+ * The width property is always evaluated as pixels, and must be a number greater than or equal to 1. The columnWidth
13
+ * property is always evaluated as a percentage, and must be a decimal value greater than 0 and less than 1 (e.g., .25).
14
+ *
15
+ * The basic rules for specifying column widths are pretty simple. The logic makes two passes through the set of
16
+ * contained panels. During the first layout pass, all panels that either have a fixed width or none specified (auto)
17
+ * are skipped, but their widths are subtracted from the overall container width.
18
+ *
19
+ * During the second pass, all panels with columnWidths are assigned pixel widths in proportion to their percentages
20
+ * based on the total **remaining** container width. In other words, percentage width panels are designed to fill
21
+ * the space left over by all the fixed-width and/or auto-width panels. Because of this, while you can specify any
22
+ * number of columns with different percentages, the columnWidths must always add up to 1 (or 100%) when added
23
+ * together, otherwise your layout may not render as expected.
24
+ *
25
+ * @example
26
+ * // All columns are percentages -- they must add up to 1
27
+ * Ext.create('Ext.panel.Panel', {
28
+ * title: 'Column Layout - Percentage Only',
29
+ * width: 350,
30
+ * height: 250,
31
+ * layout:'column',
32
+ * items: [{
33
+ * title: 'Column 1',
34
+ * columnWidth: 0.25
35
+ * },{
36
+ * title: 'Column 2',
37
+ * columnWidth: 0.55
38
+ * },{
39
+ * title: 'Column 3',
40
+ * columnWidth: 0.20
41
+ * }],
42
+ * renderTo: Ext.getBody()
43
+ * });
44
+ *
45
+ * // Mix of width and columnWidth -- all columnWidth values must add up
46
+ * // to 1. The first column will take up exactly 120px, and the last two
47
+ * // columns will fill the remaining container width.
48
+ *
49
+ * Ext.create('Ext.Panel', {
50
+ * title: 'Column Layout - Mixed',
51
+ * width: 350,
52
+ * height: 250,
53
+ * layout:'column',
54
+ * items: [{
55
+ * title: 'Column 1',
56
+ * width: 120
57
+ * },{
58
+ * title: 'Column 2',
59
+ * columnWidth: 0.7
60
+ * },{
61
+ * title: 'Column 3',
62
+ * columnWidth: 0.3
63
+ * }],
64
+ * renderTo: Ext.getBody()
65
+ * });
66
+ */
67
+ Ext.define('Ext.layout.container.Column', {
68
+
69
+ extend: 'Ext.layout.container.Container',
70
+ alias: ['layout.column'],
71
+ alternateClassName: 'Ext.layout.ColumnLayout',
72
+
73
+ type: 'column',
74
+
75
+ itemCls: Ext.baseCSSPrefix + 'column',
76
+
77
+ targetCls: Ext.baseCSSPrefix + 'column-layout-ct',
78
+
79
+ // Columns with a columnWidth have their width managed.
80
+ columnWidthSizePolicy: {
81
+ setsWidth: 1,
82
+ setsHeight: 0
83
+ },
84
+
85
+ childEls: [
86
+ 'innerCt'
87
+ ],
88
+
89
+ manageOverflow: 2,
90
+
91
+ renderTpl: [
92
+ '<div id="{ownerId}-innerCt" class="',Ext.baseCSSPrefix,'column-inner">',
93
+ '{%this.renderBody(out,values)%}',
94
+ '<div class="',Ext.baseCSSPrefix,'clear"></div>',
95
+ '</div>',
96
+ '{%this.renderPadder(out,values)%}'
97
+ ],
98
+
99
+ getItemSizePolicy: function (item) {
100
+ if (item.columnWidth) {
101
+ return this.columnWidthSizePolicy;
102
+ }
103
+ return this.autoSizePolicy;
104
+ },
105
+
106
+ beginLayout: function() {
107
+ this.callParent(arguments);
108
+ this.innerCt.dom.style.width = '';
109
+ },
110
+
111
+ calculate: function (ownerContext) {
112
+ var me = this,
113
+ containerSize = me.getContainerSize(ownerContext),
114
+ state = ownerContext.state;
115
+
116
+ if (state.calculatedColumns || (state.calculatedColumns = me.calculateColumns(ownerContext))) {
117
+ if (me.calculateHeights(ownerContext)) {
118
+ me.calculateOverflow(ownerContext, containerSize);
119
+ return;
120
+ }
121
+ }
122
+
123
+ me.done = false;
124
+ },
125
+
126
+ calculateColumns: function (ownerContext) {
127
+ var me = this,
128
+ containerSize = me.getContainerSize(ownerContext),
129
+ innerCtContext = ownerContext.getEl('innerCt', me),
130
+ items = ownerContext.childItems,
131
+ len = items.length,
132
+ contentWidth = 0,
133
+ blocked, availableWidth, i, itemContext, itemMarginWidth, itemWidth;
134
+
135
+ // Can never decide upon necessity of vertical scrollbar (and therefore, narrower
136
+ // content width) until the component layout has published a height for the target
137
+ // element.
138
+ if (!ownerContext.heightModel.shrinkWrap && !ownerContext.targetContext.hasProp('height')) {
139
+ return false;
140
+ }
141
+
142
+ // No parallel measurement, cannot lay out boxes.
143
+ if (!containerSize.gotWidth) { //\\ TODO: Deal with target padding width
144
+ ownerContext.targetContext.block(me, 'width');
145
+ blocked = true;
146
+ } else {
147
+ availableWidth = containerSize.width;
148
+
149
+ innerCtContext.setWidth(availableWidth);
150
+ }
151
+
152
+ // we need the widths of the columns we don't manage to proceed so we block on them
153
+ // if they are not ready...
154
+ for (i = 0; i < len; ++i) {
155
+ itemContext = items[i];
156
+
157
+ // this is needed below for non-calculated columns, but is also needed in the
158
+ // next loop for calculated columns... this way we only call getMarginInfo in
159
+ // this loop and use the marginInfo property in the next...
160
+ itemMarginWidth = itemContext.getMarginInfo().width;
161
+
162
+ if (!itemContext.widthModel.calculated) {
163
+ itemWidth = itemContext.getProp('width');
164
+ if (typeof itemWidth != 'number') {
165
+ itemContext.block(me, 'width');
166
+ blocked = true;
167
+ }
168
+
169
+ contentWidth += itemWidth + itemMarginWidth;
170
+ }
171
+ }
172
+
173
+ if (!blocked) {
174
+ availableWidth = (availableWidth < contentWidth) ? 0 : availableWidth - contentWidth;
175
+
176
+ for (i = 0; i < len; ++i) {
177
+ itemContext = items[i];
178
+ if (itemContext.widthModel.calculated) {
179
+ itemMarginWidth = itemContext.marginInfo.width; // always set by above loop
180
+ itemWidth = itemContext.target.columnWidth;
181
+ itemWidth = Math.floor(itemWidth * availableWidth) - itemMarginWidth;
182
+ itemWidth = itemContext.setWidth(itemWidth); // constrains to min/maxWidth
183
+ contentWidth += itemWidth + itemMarginWidth;
184
+ }
185
+ }
186
+
187
+ ownerContext.setContentWidth(contentWidth);
188
+ }
189
+
190
+ // we registered all the values that block this calculation, so abort now if blocked...
191
+ return !blocked;
192
+ },
193
+
194
+ calculateHeights: function (ownerContext) {
195
+ var me = this,
196
+ items = ownerContext.childItems,
197
+ len = items.length,
198
+ blocked, i, itemContext;
199
+
200
+ // in order for innerCt to have the proper height, all the items must have height
201
+ // correct in the DOM...
202
+ blocked = false;
203
+ for (i = 0; i < len; ++i) {
204
+ itemContext = items[i];
205
+
206
+ if (!itemContext.hasDomProp('height')) {
207
+ itemContext.domBlock(me, 'height');
208
+ blocked = true;
209
+ }
210
+ }
211
+
212
+ if (!blocked) {
213
+ ownerContext.setContentHeight(me.innerCt.getHeight() + ownerContext.targetContext.getPaddingInfo().height);
214
+ }
215
+
216
+ return !blocked;
217
+ },
218
+
219
+ finishedLayout: function (ownerContext) {
220
+ var bc = ownerContext.bodyContext;
221
+
222
+ // Owner may not have a body - this seems to only be needed for Panels.
223
+ if (bc && (Ext.isIE6 || Ext.isIE7 || Ext.isIEQuirks)) {
224
+ // Fix for https://sencha.jira.com/browse/EXTJSIV-4979
225
+ bc.el.repaint();
226
+ }
227
+
228
+ this.callParent(arguments);
229
+ },
230
+
231
+ getRenderTarget : function() {
232
+ return this.innerCt;
233
+ }
234
+ });
@@ -0,0 +1,961 @@
1
+ /**
2
+ * This class is intended to be extended or created via the {@link Ext.container.Container#layout layout}
3
+ * configuration property. See {@link Ext.container.Container#layout} for additional details.
4
+ */
5
+ Ext.define('Ext.layout.container.Container', {
6
+
7
+ /* Begin Definitions */
8
+
9
+ extend: 'Ext.layout.Layout',
10
+
11
+ alternateClassName: 'Ext.layout.ContainerLayout',
12
+
13
+ mixins: {
14
+ elementCt: 'Ext.util.ElementContainer'
15
+ },
16
+
17
+ requires: [
18
+ 'Ext.XTemplate'
19
+ ],
20
+
21
+ type: 'container',
22
+
23
+ /* End Definitions */
24
+
25
+ /**
26
+ * @cfg {String} itemCls
27
+ * An optional extra CSS class that will be added to the container. This can be useful for
28
+ * adding customized styles to the container or any of its children using standard CSS
29
+ * rules. See {@link Ext.Component}.{@link Ext.Component#componentCls componentCls} also.
30
+ */
31
+
32
+ /**
33
+ * @cfg {Number} [manageOverflow=0]
34
+ * One of the following values:
35
+ *
36
+ * - 0 if the layout should ignore overflow.
37
+ * - 1 if the layout should be rerun if scrollbars are needed.
38
+ * - 2 if the layout should also correct padding when overflowed.
39
+ */
40
+ manageOverflow: 0,
41
+
42
+ /**
43
+ * @private
44
+ * Called by an owning Panel before the Panel begins its collapse process.
45
+ * Most layouts will not need to override the default Ext.emptyFn implementation.
46
+ */
47
+ beginCollapse: Ext.emptyFn,
48
+
49
+ /**
50
+ * @private
51
+ * Called by an owning Panel before the Panel begins its expand process.
52
+ * Most layouts will not need to override the default Ext.emptyFn implementation.
53
+ */
54
+ beginExpand: Ext.emptyFn,
55
+
56
+ /**
57
+ * An object which contains boolean properties specifying which properties are to be
58
+ * animated upon flush of child Component ContextItems. For example, Accordion would
59
+ * have:
60
+ *
61
+ * {
62
+ * y: true,
63
+ * height: true
64
+ * }
65
+ *
66
+ * @private
67
+ */
68
+ animatePolicy: null,
69
+
70
+ childEls: [
71
+ /**
72
+ * @property {Ext.Element} overflowPadderEl
73
+ * The element used to correct body padding during overflow.
74
+ */
75
+ 'overflowPadderEl'
76
+ ],
77
+
78
+ renderTpl: [
79
+ '{%this.renderBody(out,values)%}'
80
+ ],
81
+
82
+ usesContainerHeight: true,
83
+ usesContainerWidth: true,
84
+ usesHeight: true,
85
+ usesWidth: true,
86
+
87
+
88
+ /**
89
+ * @cfg {Boolean} [reserveScrollbar=false]
90
+ * Set to `true` to leave space for a vertical scrollbar (if the OS shows space-consuming scrollbars) regardless
91
+ * of whether a scrollbar is needed.
92
+ *
93
+ * This is useful if content height changes during application usage, but you do not want the calculated width
94
+ * of child items to change when a scrollbar appears or disappears. The scrollbar will appear in the reserved space,
95
+ * and the calculated width of child Components will not change.
96
+ *
97
+ * @example
98
+ * Ext.define('Employee', {
99
+ * extend: 'Ext.data.Model',
100
+ * fields: [
101
+ * {name: 'rating', type: 'int'},
102
+ * {name: 'salary', type: 'float'},
103
+ * {name: 'name'}
104
+ * ]
105
+ * });
106
+ *
107
+ * function createFakeData(count) {
108
+ * var firstNames = ['Ed', 'Tommy', 'Aaron', 'Abe', 'Jamie', 'Adam', 'Dave', 'David', 'Jay', 'Nicolas', 'Nige'],
109
+ * lastNames = ['Spencer', 'Maintz', 'Conran', 'Elias', 'Avins', 'Mishcon', 'Kaneda', 'Davis', 'Robinson', 'Ferrero', 'White'],
110
+ * ratings = [1, 2, 3, 4, 5],
111
+ * salaries = [100, 400, 900, 1500, 1000000];
112
+ *
113
+ * var data = [];
114
+ * for (var i = 0; i < (count || 25); i++) {
115
+ * var ratingId = Math.floor(Math.random() * ratings.length),
116
+ * salaryId = Math.floor(Math.random() * salaries.length),
117
+ * firstNameId = Math.floor(Math.random() * firstNames.length),
118
+ * lastNameId = Math.floor(Math.random() * lastNames.length),
119
+ *
120
+ * rating = ratings[ratingId],
121
+ * salary = salaries[salaryId],
122
+ * name = Ext.String.format("{0} {1}", firstNames[firstNameId], lastNames[lastNameId]);
123
+ *
124
+ * data.push({
125
+ * rating: rating,
126
+ * salary: salary,
127
+ * name: name
128
+ * });
129
+ * }
130
+ * store.loadData(data);
131
+ * }
132
+ *
133
+ * // create the Data Store
134
+ * var store = Ext.create('Ext.data.Store', {
135
+ * id: 'store',
136
+ * model: 'Employee',
137
+ * proxy: {
138
+ * type: 'memory'
139
+ * }
140
+ * });
141
+ * createFakeData(10);
142
+ *
143
+ * var grid = Ext.create('Ext.grid.Panel', {
144
+ * title: 'Grid loaded with varying number of records',
145
+ * anchor: '100%',
146
+ * store: store,
147
+ * columns: [{
148
+ * xtype: 'rownumberer',
149
+ * width: 40,
150
+ * sortable: false
151
+ * },{
152
+ * text: 'Name',
153
+ * flex: 1,
154
+ * sortable: true,
155
+ * dataIndex: 'name'
156
+ * },{
157
+ * text: 'Rating',
158
+ * width: 125,
159
+ * sortable: true,
160
+ * dataIndex: 'rating'
161
+ * },{
162
+ * text: 'Salary',
163
+ * width: 125,
164
+ * sortable: true,
165
+ * dataIndex: 'salary',
166
+ * align: 'right',
167
+ * renderer: Ext.util.Format.usMoney
168
+ * }]
169
+ * });
170
+ *
171
+ * Ext.create('Ext.panel.Panel', {
172
+ * renderTo: document.body,
173
+ * width: 800,
174
+ * height: 600,
175
+ * layout: {
176
+ * type: 'anchor',
177
+ * reserveScrollbar: true // There will be a gap even when there's no scrollbar
178
+ * },
179
+ * autoScroll: true,
180
+ * items: grid,
181
+ * tbar: {
182
+ * defaults: {
183
+ * handler: function(b) {
184
+ * createFakeData(b.count);
185
+ * }
186
+ * },
187
+ * items: [{
188
+ * text: '10 Items',
189
+ * count: 10
190
+ * },{
191
+ * text: '100 Items',
192
+ * count: 100
193
+ * },{
194
+ * text: '300 Items',
195
+ * count: 300
196
+ * },{
197
+ * text: '1000 Items',
198
+ * count: 1000
199
+ * },{
200
+ * text: '5000 Items',
201
+ * count: 5000
202
+ * }]
203
+ * }
204
+ * });
205
+ *
206
+ */
207
+ reserveScrollbar: false,
208
+
209
+ // Begin with no previous adjustments
210
+ lastOverflowAdjust: {
211
+ width: 0,
212
+ height: 0
213
+ },
214
+
215
+ constructor: function () {
216
+ this.callParent(arguments);
217
+ this.mixins.elementCt.constructor.call(this);
218
+ },
219
+
220
+ destroy : function() {
221
+ this.callParent();
222
+ this.mixins.elementCt.destroy.call(this);
223
+ },
224
+
225
+ initLayout: function() {
226
+ var me = this,
227
+ scrollbarWidth = Ext.getScrollbarSize().width;
228
+
229
+ me.callParent();
230
+
231
+ // Create a default lastOverflowAdjust based upon scrolling configuration.
232
+ // If the Container is to overflow, or we *always* reserve space for a scrollbar
233
+ // then reserve space for a vertical scrollbar
234
+ if (scrollbarWidth && me.manageOverflow && !me.hasOwnProperty('lastOverflowAdjust')) {
235
+ if (me.owner.autoScroll || me.reserveScrollbar) {
236
+ me.lastOverflowAdjust = {
237
+ width: scrollbarWidth,
238
+ height: 0
239
+ };
240
+ }
241
+ }
242
+ },
243
+
244
+ /**
245
+ * In addition to work done by our base classes, containers benefit from some extra
246
+ * cached data. The following properties are added to the ownerContext:
247
+ *
248
+ * - visibleItems: the result of {@link #getVisibleItems}
249
+ * - childItems: the ContextItem[] for each visible item
250
+ * - targetContext: the ContextItem for the {@link #getTarget} element
251
+ */
252
+ beginLayout: function (ownerContext) {
253
+ this.callParent(arguments);
254
+
255
+ ownerContext.targetContext = ownerContext.getEl('getTarget', this);
256
+
257
+ this.cacheChildItems(ownerContext);
258
+ },
259
+
260
+ beginLayoutCycle: function (ownerContext, firstCycle) {
261
+ var me = this,
262
+ padEl = me.overflowPadderEl;
263
+
264
+ me.callParent(arguments);
265
+
266
+ // Begin with the scrollbar adjustment that we used last time - this is more likely to be correct
267
+ // than beginning with no adjustment at all
268
+ if (!ownerContext.state.overflowAdjust) {
269
+ ownerContext.state.overflowAdjust = me.lastOverflowAdjust;
270
+ }
271
+
272
+ if (firstCycle) {
273
+ if (me.usesContainerHeight) {
274
+ ++ownerContext.consumersContainerHeight;
275
+ }
276
+ if (me.usesContainerWidth) {
277
+ ++ownerContext.consumersContainerWidth;
278
+ }
279
+ }
280
+
281
+ if (padEl) {
282
+ padEl.setStyle('display', 'none');
283
+ }
284
+ },
285
+
286
+ completeLayout: function (ownerContext) {
287
+ // Cache the scrollbar adjustment
288
+ this.lastOverflowAdjust = ownerContext.state.overflowAdjust;
289
+ },
290
+
291
+ cacheChildItems: function (ownerContext) {
292
+ var context = ownerContext.context,
293
+ childItems = [],
294
+ items = this.getVisibleItems(),
295
+ length = items.length,
296
+ i;
297
+
298
+ ownerContext.childItems = childItems;
299
+ ownerContext.visibleItems = items;
300
+
301
+ for (i = 0; i < length; ++i) {
302
+ childItems.push(context.getCmp(items[i]));
303
+ }
304
+ },
305
+
306
+ cacheElements: function () {
307
+ var owner = this.owner;
308
+
309
+ this.applyChildEls(owner.el, owner.id); // from ElementContainer mixin
310
+ },
311
+
312
+ calculateContentSize: function (ownerContext, dimensions) {
313
+ var me = this,
314
+ containerDimensions = (dimensions || 0) | me.manageOverflow |
315
+ ((ownerContext.widthModel.shrinkWrap ? 1 : 0) |
316
+ (ownerContext.heightModel.shrinkWrap ? 2 : 0)),
317
+ calcWidth = (containerDimensions & 1) || undefined,
318
+ calcHeight = (containerDimensions & 2) || undefined,
319
+ childItems = ownerContext.childItems,
320
+ length = childItems.length,
321
+ contentHeight = 0,
322
+ contentWidth = 0,
323
+ needed = 0,
324
+ props = ownerContext.props,
325
+ targetXY, targetX, targetY, targetPadding,
326
+ borders, child, childContext, childX, childY, height, i, margins, width, xy;
327
+
328
+ if (calcWidth) {
329
+ if (isNaN(props.contentWidth)) {
330
+ ++needed;
331
+ } else {
332
+ calcWidth = undefined;
333
+ }
334
+ }
335
+ if (calcHeight) {
336
+ if (isNaN(props.contentHeight)) {
337
+ ++needed;
338
+ } else {
339
+ calcHeight = undefined;
340
+ }
341
+ }
342
+
343
+ if (needed) {
344
+ // TODO - this is rather brute force... maybe a wrapping el or clientHeight/Width
345
+ // trick might help. Whatever we do, it must either work for Absolute layout or
346
+ // at least be correctable by an overridden method in that derived class.
347
+ for (i = 0; i < length; ++i) {
348
+ childContext = childItems[i];
349
+ child = childContext.target;
350
+ height = calcHeight && childContext.getProp('height');
351
+ width = calcWidth && childContext.getProp('width');
352
+ margins = childContext.getMarginInfo();
353
+
354
+ // getXY is the root method here (meaning that we cannot avoid getting both
355
+ // even if we need only one), so dip into the DOM if something is needed
356
+ if ((calcWidth && isNaN(child.x)) || (calcHeight && isNaN(child.y))) {
357
+ xy = child.el.getXY();
358
+ if (!targetXY) {
359
+ targetXY = ownerContext.targetContext.el.getXY();
360
+ borders = ownerContext.targetContext.getBorderInfo();
361
+ targetX = targetXY[0] + borders.left;
362
+ targetY = targetXY[1] + borders.top;
363
+ }
364
+ // not worth avoiding the possibly useless calculation here:
365
+ childX = xy[0] - targetX;
366
+ childY = xy[1] - targetY;
367
+ } else {
368
+ // not worth avoiding these either:
369
+ childX = child.x;
370
+ childY = child.y;
371
+ }
372
+ // XY includes the top/left margin
373
+
374
+ height += margins.bottom;
375
+ width += margins.right;
376
+
377
+ contentHeight = Math.max(contentHeight, childY + height);
378
+ contentWidth = Math.max(contentWidth, childX + width);
379
+
380
+ if (isNaN(contentHeight) && isNaN(contentWidth)) {
381
+ me.done = false;
382
+ return;
383
+ }
384
+ }
385
+
386
+ if (calcWidth || calcHeight) {
387
+ targetPadding = ownerContext.targetContext.getPaddingInfo();
388
+ }
389
+ if (calcWidth && !ownerContext.setContentWidth(contentWidth + targetPadding.right)) {
390
+ me.done = false;
391
+ }
392
+ if (calcHeight && !ownerContext.setContentHeight(contentHeight + targetPadding.bottom)) {
393
+ me.done = false;
394
+ }
395
+
396
+ /* add a '/' to turn on this log ('//* enables, '/*' disables)
397
+ if (me.done) {
398
+ var el = ownerContext.targetContext.el.dom;
399
+ Ext.log(this.owner.id, '.contentSize: ', contentWidth, 'x', contentHeight,
400
+ ' => scrollSize: ', el.scrollWidth, 'x', el.scrollHeight);
401
+ }/**/
402
+ }
403
+ },
404
+
405
+ /**
406
+ * Handles overflow processing for a container. This should be called once the layout
407
+ * has determined contentWidth/Height. In addition to the ownerContext passed to the
408
+ * {@link #calculate} method, this method also needs the containerSize (the object
409
+ * returned by {@link #getContainerSize}).
410
+ *
411
+ * @param {Ext.layout.ContextItem} ownerContext
412
+ * @param {Object} containerSize
413
+ * @param {Number} dimensions A bit mask for the overflow managed dimensions. The 0-bit
414
+ * is for `width` and the 1-bit is for `height`. In other words, a value of 1 would be
415
+ * only `width`, 2 would be only `height` and 3 would be both.
416
+ */
417
+ calculateOverflow: function (ownerContext, containerSize, dimensions) {
418
+ var me = this,
419
+ owner = me.owner,
420
+ manageOverflow = me.manageOverflow,
421
+ state = ownerContext.state,
422
+ overflowAdjust = state.overflowAdjust,
423
+ padWidth, padHeight, padElContext, padding, scrollRangeFlags,
424
+ overflow, scrollbarSize, contentW, contentH, ownerW, ownerH, scrollbars,
425
+ xauto, yauto;
426
+
427
+ if (manageOverflow && !state.secondPass && !me.reserveScrollbar) {
428
+ // Determine the dimensions that have overflow:auto applied. If these come by
429
+ // way of component config, this does not require a DOM read:
430
+ if (owner.autoScroll) {
431
+ xauto = yauto = true;
432
+ } else {
433
+ if (owner.overflowX) {
434
+ xauto = owner.overflowX == 'auto';
435
+ } else {
436
+ overflow = ownerContext.targetContext.getStyle('overflow-x');
437
+ xauto = overflow && overflow != 'hidden' && overflow != 'scroll';
438
+ }
439
+
440
+ if (owner.overflowY) {
441
+ yauto = owner.overflowY == 'auto';
442
+ } else {
443
+ overflow = ownerContext.targetContext.getStyle('overflow-y');
444
+ yauto = overflow && overflow != 'hidden' && overflow != 'scroll';
445
+ }
446
+ }
447
+
448
+ // If the container layout is not using width, we don't need to adjust for the
449
+ // vscroll (likewise for height). Perhaps we don't even need to run the layout
450
+ // again if the adjustments won't have any effect on the result!
451
+ if (!containerSize.gotWidth) {
452
+ xauto = false;
453
+ }
454
+ if (!containerSize.gotHeight) {
455
+ yauto = false;
456
+ }
457
+
458
+ if (xauto || yauto) {
459
+ scrollbarSize = Ext.getScrollbarSize();
460
+
461
+ // as a container we calculate contentWidth/Height, so we don't want
462
+ // to use getProp and make it look like we are triggered by them...
463
+ contentW = ownerContext.peek('contentWidth');
464
+ contentH = ownerContext.peek('contentHeight');
465
+ ownerW = containerSize.width;
466
+ ownerH = containerSize.height;
467
+
468
+ scrollbars = me.getScrollbarsNeeded(ownerW, ownerH, contentW, contentH);
469
+ state.overflowState = scrollbars;
470
+
471
+ if (typeof dimensions == 'number') {
472
+ scrollbars &= ~dimensions; // ignore dimensions that have no effect
473
+ }
474
+
475
+ overflowAdjust = {
476
+ width: (xauto && (scrollbars & 2)) ? scrollbarSize.width : 0,
477
+ height: (yauto && (scrollbars & 1)) ? scrollbarSize.height : 0
478
+ };
479
+
480
+ // We can have 0-sized scrollbars (new Mac OS) and so don't invalidate
481
+ // the layout unless this will change something...
482
+ if (overflowAdjust.width !== me.lastOverflowAdjust.width || overflowAdjust.height !== me.lastOverflowAdjust.height) {
483
+ me.done = false;
484
+
485
+ // we pass overflowAdjust and overflowState in as state for the next
486
+ // cycle (these are discarded if one of our ownerCt's invalidates):
487
+ ownerContext.invalidate({
488
+ state: {
489
+ overflowAdjust: overflowAdjust,
490
+ overflowState: state.overflowState,
491
+ secondPass: true
492
+ }
493
+ });
494
+ }
495
+ }
496
+ }
497
+
498
+ if (!me.done) {
499
+ return;
500
+ }
501
+
502
+ padElContext = ownerContext.padElContext ||
503
+ (ownerContext.padElContext = ownerContext.getEl('overflowPadderEl', me));
504
+
505
+ // Even if overflow does not effect the layout, we still do need the padEl to be
506
+ // sized or hidden appropriately...
507
+ if (padElContext) {
508
+ scrollbars = state.overflowState; // the true overflow state
509
+ padWidth = containerSize.width;
510
+ padHeight = 0;// TODO me.padHeightAdj; // 0 or 1
511
+
512
+ if (scrollbars) {
513
+ padding = ownerContext.targetContext.getPaddingInfo();
514
+ scrollRangeFlags = me.scrollRangeFlags;
515
+
516
+ if ((scrollbars & 2) && (scrollRangeFlags & 1)) { // if (vscroll and loses bottom)
517
+ padHeight += padding.bottom;
518
+ }
519
+
520
+ if ((scrollbars & 1) && (scrollRangeFlags & 4)) { // if (hscroll and loses right)
521
+ padWidth += padding.right;
522
+ }
523
+ padElContext.setProp('display', '');
524
+ padElContext.setSize(padWidth, padHeight);
525
+ } else {
526
+ padElContext.setProp('display', 'none');
527
+ }
528
+ }
529
+ },
530
+
531
+ /**
532
+ * Adds layout's itemCls and owning Container's itemCls
533
+ * @protected
534
+ */
535
+ configureItem: function(item) {
536
+ var me = this,
537
+ ownerItemCls = me.owner.itemCls,
538
+ addClasses = [].concat(me.itemCls || []);
539
+
540
+ me.callParent(arguments);
541
+
542
+ if (ownerItemCls) {
543
+ addClasses = Ext.Array.push(addClasses, ownerItemCls);
544
+ }
545
+ item.addCls(addClasses);
546
+ },
547
+
548
+ doRenderBody: function (out, renderData) {
549
+ // Careful! This method is bolted on to the renderTpl so all we get for context is
550
+ // the renderData! The "this" pointer is the renderTpl instance!
551
+
552
+ this.renderItems(out, renderData);
553
+ this.renderContent(out, renderData);
554
+ },
555
+
556
+ doRenderContainer: function (out, renderData) {
557
+ // Careful! This method is bolted on to the renderTpl so all we get for context is
558
+ // the renderData! The "this" pointer is the renderTpl instance!
559
+
560
+ var me = renderData.$comp.layout,
561
+ tpl = me.getRenderTpl(),
562
+ data = me.getRenderData();
563
+
564
+ tpl.applyOut(data, out);
565
+ },
566
+
567
+ doRenderItems: function (out, renderData) {
568
+ // Careful! This method is bolted on to the renderTpl so all we get for context is
569
+ // the renderData! The "this" pointer is the renderTpl instance!
570
+
571
+ var me = renderData.$layout,
572
+ tree = me.getRenderTree();
573
+
574
+ if (tree) {
575
+ Ext.DomHelper.generateMarkup(tree, out);
576
+ }
577
+ },
578
+
579
+ /**
580
+ * Creates an element that makes bottom/right body padding consistent across browsers.
581
+ * This element is sized based on the need for scrollbars in {@link #calculateOverflow}.
582
+ * If the {@link #manageOverflow} option is false, this element is not created.
583
+ *
584
+ * See {@link #getScrollRangeFlags} for more details.
585
+ */
586
+ doRenderPadder: function (out, renderData) {
587
+ // Careful! This method is bolted on to the renderTpl so all we get for context is
588
+ // the renderData! The "this" pointer is the renderTpl instance!
589
+
590
+ var me = renderData.$layout,
591
+ owner = me.owner,
592
+ scrollRangeFlags = me.getScrollRangeFlags();
593
+
594
+ if (me.manageOverflow == 2) {
595
+ if (scrollRangeFlags & 5) { // if (loses parent bottom and/or right padding)
596
+ out.push('<div id="',owner.id,'-overflowPadderEl" ',
597
+ 'style="font-size: 1px; width:1px; height: 1px;');
598
+
599
+ // We won't want the height of the padder to cause problems when we only
600
+ // want to adjust for right padding, so we relatively position it up 1px so
601
+ // its height of 1px will have no vertical effect. This trick does not work
602
+ // on IE due to bugs (the effects are worse than the off-by-1px in scroll
603
+ // height).
604
+ //
605
+ /* turns out this does not work on FF (5) either... TODO
606
+ if (Ext.isIE || Ext.isGecko) {
607
+ me.padHeightAdj = 0;
608
+ } else {
609
+ me.padHeightAdj = 1;
610
+ out.push('position: relative; top: -1px;');
611
+ }/**/
612
+
613
+ out.push('"></div>');
614
+
615
+ me.scrollRangeFlags = scrollRangeFlags; // remember for calculateOverflow
616
+ }
617
+ }
618
+ },
619
+
620
+ finishRender: function () {
621
+ var me = this,
622
+ target, items;
623
+
624
+ me.callParent();
625
+
626
+ me.cacheElements();
627
+
628
+ target = me.getRenderTarget();
629
+ items = me.getLayoutItems();
630
+
631
+ if (me.targetCls) {
632
+ me.getTarget().addCls(me.targetCls);
633
+ }
634
+
635
+ me.finishRenderItems(target, items);
636
+ },
637
+
638
+ /**
639
+ * @private
640
+ * Called for every layout in the layout context after all the layouts have been finally flushed
641
+ */
642
+ notifyOwner: function() {
643
+ this.owner.afterLayout(this);
644
+ },
645
+
646
+ /**
647
+ * Returns the container size (that of the target). Only the fixed-sized dimensions can
648
+ * be returned because the shrinkWrap dimensions are based on the contentWidth/Height
649
+ * as determined by the container layout.
650
+ *
651
+ * If the {@link #calculateOverflow} method is used and if {@link #manageOverflow} is
652
+ * true, this may adjust the width/height by the size of scrollbars.
653
+ *
654
+ * @param {Ext.layout.ContextItem} ownerContext The owner's context item.
655
+ * @param {Boolean} [inDom=false] True if the container size must be in the DOM.
656
+ * @return {Object} The size
657
+ * @return {Number} return.width The width
658
+ * @return {Number} return.height The height
659
+ * @protected
660
+ */
661
+ getContainerSize : function(ownerContext, inDom) {
662
+ // Subtle But Important:
663
+ //
664
+ // We don't want to call getProp/hasProp et.al. unless we in fact need that value
665
+ // for our results! If we call it and don't need it, the layout manager will think
666
+ // we depend on it and will schedule us again should it change.
667
+
668
+ var targetContext = ownerContext.targetContext,
669
+ frameInfo = targetContext.getFrameInfo(),
670
+ padding = targetContext.getPaddingInfo(),
671
+ got = 0,
672
+ needed = 0,
673
+ overflowAdjust = ownerContext.state.overflowAdjust,
674
+ gotWidth, gotHeight, width, height;
675
+
676
+ // In an shrinkWrap width/height case, we must not ask for any of these dimensions
677
+ // because they will be determined by contentWidth/Height which is calculated by
678
+ // this layout...
679
+
680
+ // Fit/Card layouts are able to set just the width of children, allowing child's
681
+ // resulting height to autosize the Container.
682
+ // See examples/tabs/tabs.html for an example of this.
683
+
684
+ if (!ownerContext.widthModel.shrinkWrap) {
685
+ ++needed;
686
+ width = inDom ? targetContext.getDomProp('width') : targetContext.getProp('width');
687
+ gotWidth = (typeof width == 'number');
688
+ if (gotWidth) {
689
+ ++got;
690
+ width -= frameInfo.width + padding.width;
691
+ if (overflowAdjust) {
692
+ width -= overflowAdjust.width;
693
+ }
694
+ }
695
+ }
696
+
697
+ if (!ownerContext.heightModel.shrinkWrap) {
698
+ ++needed;
699
+ height = inDom ? targetContext.getDomProp('height') : targetContext.getProp('height');
700
+ gotHeight = (typeof height == 'number');
701
+ if (gotHeight) {
702
+ ++got;
703
+ height -= frameInfo.height + padding.height;
704
+ if (overflowAdjust) {
705
+ height -= overflowAdjust.height;
706
+ }
707
+ }
708
+ }
709
+
710
+ return {
711
+ width: width,
712
+ height: height,
713
+ needed: needed,
714
+ got: got,
715
+ gotAll: got == needed,
716
+ gotWidth: gotWidth,
717
+ gotHeight: gotHeight
718
+ };
719
+ },
720
+
721
+ /**
722
+ * Returns an array of child components either for a render phase (Performed in the beforeLayout
723
+ * method of the layout's base class), or the layout phase (onLayout).
724
+ * @return {Ext.Component[]} of child components
725
+ */
726
+ getLayoutItems: function() {
727
+ var owner = this.owner,
728
+ items = owner && owner.items;
729
+
730
+ return (items && items.items) || [];
731
+ },
732
+
733
+ getRenderData: function () {
734
+ var comp = this.owner;
735
+
736
+ return {
737
+ $comp: comp,
738
+ $layout: this,
739
+ ownerId: comp.id
740
+ };
741
+ },
742
+
743
+ /**
744
+ * @protected
745
+ * Returns all items that are rendered
746
+ * @return {Array} All matching items
747
+ */
748
+ getRenderedItems: function() {
749
+ var me = this,
750
+ target = me.getRenderTarget(),
751
+ items = me.getLayoutItems(),
752
+ ln = items.length,
753
+ renderedItems = [],
754
+ i, item;
755
+
756
+ for (i = 0; i < ln; i++) {
757
+ item = items[i];
758
+ if (item.rendered && me.isValidParent(item, target, i)) {
759
+ renderedItems.push(item);
760
+ }
761
+ }
762
+
763
+ return renderedItems;
764
+ },
765
+
766
+ /**
767
+ * Returns the element into which rendering must take place. Defaults to the owner Container's
768
+ * target element.
769
+ *
770
+ * May be overridden in layout managers which implement an inner element.
771
+ *
772
+ * @return {Ext.Element}
773
+ */
774
+ getRenderTarget: function() {
775
+ return this.owner.getTargetEl();
776
+ },
777
+
778
+ /**
779
+ * Returns the element into which extra functional DOM elements can be inserted. Defaults to the owner Component's encapsulating element.
780
+ *
781
+ * May be overridden in Component layout managers which implement a {@link #getRenderTarget component render target} which must only
782
+ * contain child components.
783
+ * @return {Ext.Element}
784
+ */
785
+ getElementTarget: function() {
786
+ return this.getRenderTarget();
787
+ },
788
+
789
+ getRenderTpl: function () {
790
+ var me = this,
791
+ renderTpl = Ext.XTemplate.getTpl(this, 'renderTpl');
792
+
793
+ // Make sure all standard callout methods for the owner component are placed on the
794
+ // XTemplate instance (but only once please):
795
+ if (!renderTpl.renderContent) {
796
+ me.owner.setupRenderTpl(renderTpl);
797
+ }
798
+
799
+ return renderTpl;
800
+ },
801
+
802
+ getRenderTree: function () {
803
+ var result,
804
+ items = this.owner.items,
805
+ itemsGen,
806
+ renderCfgs = {};
807
+
808
+ do {
809
+ itemsGen = items.generation;
810
+ result = this.getItemsRenderTree(this.getLayoutItems(), renderCfgs);
811
+ } while (items.generation !== itemsGen);
812
+ return result;
813
+ },
814
+
815
+ getScrollbarsNeeded: function (width, height, contentWidth, contentHeight) {
816
+ var scrollbarSize = Ext.getScrollbarSize(),
817
+ hasWidth = typeof width == 'number',
818
+ hasHeight = typeof height == 'number',
819
+ needHorz = 0,
820
+ needVert = 0;
821
+
822
+ // No space-consuming scrollbars.
823
+ if (!scrollbarSize.width) {
824
+ return 0;
825
+ }
826
+ if (hasHeight && height < contentHeight) {
827
+ needVert = 2;
828
+ width -= scrollbarSize.width;
829
+ }
830
+
831
+ if (hasWidth && width < contentWidth) {
832
+ needHorz = 1;
833
+ if (!needVert && hasHeight) {
834
+ height -= scrollbarSize.height;
835
+ if (height < contentHeight) {
836
+ needVert = 2;
837
+ }
838
+ }
839
+ }
840
+
841
+ return needVert + needHorz;
842
+ },
843
+
844
+ /**
845
+ * Returns flags indicating cross-browser handling of scrollHeight/Width. In particular,
846
+ * IE has issues with padding-bottom in a scrolling element (it does not include that
847
+ * padding in the scrollHeight). Also, margin-bottom on a child in a scrolling element
848
+ * can be lost.
849
+ *
850
+ * All browsers seem to ignore margin-right on children and padding-right on the parent
851
+ * element (the one with the overflow)
852
+ *
853
+ * This method returns a number with the follow bit positions set based on things not
854
+ * accounted for in scrollHeight and scrollWidth:
855
+ *
856
+ * - 1: Scrolling element's padding-bottom is not included in scrollHeight.
857
+ * - 2: Last child's margin-bottom is not included in scrollHeight.
858
+ * - 4: Scrolling element's padding-right is not included in scrollWidth.
859
+ * - 8: Child's margin-right is not included in scrollWidth.
860
+ *
861
+ * To work around the margin-bottom issue, it is sufficient to create a 0px tall last
862
+ * child that will "hide" the margin. This can also be handled by wrapping the children
863
+ * in an element, again "hiding" the margin. Wrapping the elements is about the only
864
+ * way to preserve their right margins. This is the strategy used by Column layout.
865
+ *
866
+ * To work around the padding-bottom problem, since it is comes from a style on the
867
+ * parent element, about the only simple fix is to create a last child with height
868
+ * equal to padding-bottom. To preserve the right padding, the sizing element needs to
869
+ * have a width that includes the right padding.
870
+ */
871
+ getScrollRangeFlags: (function () {
872
+ var flags = -1;
873
+
874
+ return function () {
875
+ if (flags < 0) {
876
+ var div = Ext.getBody().createChild({
877
+ //cls: 'x-border-box x-hide-offsets',
878
+ cls: Ext.baseCSSPrefix + 'border-box',
879
+ style: {
880
+ width: '100px', height: '100px', padding: '10px',
881
+ overflow: 'auto'
882
+ },
883
+ children: [{
884
+ style: {
885
+ border: '1px solid red',
886
+ width: '150px', height: '150px',
887
+ margin: '0 5px 5px 0' // TRBL
888
+ }
889
+ }]
890
+ }),
891
+ scrollHeight = div.dom.scrollHeight,
892
+ scrollWidth = div.dom.scrollWidth,
893
+ heightFlags = {
894
+ // right answer, nothing missing:
895
+ 175: 0,
896
+ // missing parent padding-bottom:
897
+ 165: 1,
898
+ // missing child margin-bottom:
899
+ 170: 2,
900
+ // missing both
901
+ 160: 3
902
+ },
903
+ widthFlags = {
904
+ // right answer, nothing missing:
905
+ 175: 0,
906
+ // missing parent padding-right:
907
+ 165: 4,
908
+ // missing child margin-right:
909
+ 170: 8,
910
+ // missing both
911
+ 160: 12
912
+ };
913
+
914
+ flags = (heightFlags[scrollHeight] || 0) | (widthFlags[scrollWidth] || 0);
915
+ //Ext.log('flags=',flags.toString(2));
916
+ div.remove();
917
+ }
918
+
919
+ return flags;
920
+ };
921
+ }()),
922
+
923
+ /**
924
+ * Returns the owner component's resize element.
925
+ * @return {Ext.Element}
926
+ */
927
+ getTarget: function() {
928
+ return this.owner.getTargetEl();
929
+ },
930
+
931
+ /**
932
+ * @protected
933
+ * Returns all items that are both rendered and visible
934
+ * @return {Array} All matching items
935
+ */
936
+ getVisibleItems: function() {
937
+ var target = this.getRenderTarget(),
938
+ items = this.getLayoutItems(),
939
+ ln = items.length,
940
+ visibleItems = [],
941
+ i, item;
942
+
943
+ for (i = 0; i < ln; i++) {
944
+ item = items[i];
945
+ if (item.rendered && this.isValidParent(item, target, i) && item.hidden !== true) {
946
+ visibleItems.push(item);
947
+ }
948
+ }
949
+
950
+ return visibleItems;
951
+ },
952
+
953
+ setupRenderTpl: function (renderTpl) {
954
+ var me = this;
955
+
956
+ renderTpl.renderBody = me.doRenderBody;
957
+ renderTpl.renderContainer = me.doRenderContainer;
958
+ renderTpl.renderItems = me.doRenderItems;
959
+ renderTpl.renderPadder = me.doRenderPadder;
960
+ }
961
+ });