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,169 @@
1
+ /**
2
+ * This class is used internally to provide a single interface when using
3
+ * a locking grid. Internally, the locking grid creates two separate grids,
4
+ * so this class is used to map calls appropriately.
5
+ * @private
6
+ */
7
+ Ext.define('Ext.grid.LockingView', {
8
+
9
+ mixins: {
10
+ observable: 'Ext.util.Observable'
11
+ },
12
+
13
+ eventRelayRe: /^(beforeitem|beforecontainer|item|container|cell)/,
14
+
15
+ constructor: function(config){
16
+ var me = this,
17
+ eventNames = [],
18
+ eventRe = me.eventRelayRe,
19
+ locked = config.locked.getView(),
20
+ normal = config.normal.getView(),
21
+ events,
22
+ event;
23
+
24
+ Ext.apply(me, {
25
+ lockedView: locked,
26
+ normalView: normal,
27
+ lockedGrid: config.locked,
28
+ normalGrid: config.normal,
29
+ panel: config.panel
30
+ });
31
+ me.mixins.observable.constructor.call(me, config);
32
+
33
+ // relay events
34
+ events = locked.events;
35
+ for (event in events) {
36
+ if (events.hasOwnProperty(event) && eventRe.test(event)) {
37
+ eventNames.push(event);
38
+ }
39
+ }
40
+ me.relayEvents(locked, eventNames);
41
+ me.relayEvents(normal, eventNames);
42
+
43
+ normal.on({
44
+ scope: me,
45
+ itemmouseleave: me.onItemMouseLeave,
46
+ itemmouseenter: me.onItemMouseEnter
47
+ });
48
+
49
+ locked.on({
50
+ scope: me,
51
+ itemmouseleave: me.onItemMouseLeave,
52
+ itemmouseenter: me.onItemMouseEnter
53
+ });
54
+ },
55
+
56
+ getGridColumns: function() {
57
+ var cols = this.lockedGrid.headerCt.getGridColumns();
58
+ return cols.concat(this.normalGrid.headerCt.getGridColumns());
59
+ },
60
+
61
+ getEl: function(column){
62
+ return this.getViewForColumn(column).getEl();
63
+ },
64
+
65
+ getViewForColumn: function(column) {
66
+ var view = this.lockedView,
67
+ inLocked;
68
+
69
+ view.headerCt.cascade(function(col){
70
+ if (col === column) {
71
+ inLocked = true;
72
+ return false;
73
+ }
74
+ });
75
+
76
+ return inLocked ? view : this.normalView;
77
+ },
78
+
79
+ onItemMouseEnter: function(view, record){
80
+ var me = this,
81
+ locked = me.lockedView,
82
+ other = me.normalView,
83
+ item;
84
+
85
+ if (view.trackOver) {
86
+ if (view !== locked) {
87
+ other = locked;
88
+ }
89
+ item = other.getNode(record);
90
+ other.highlightItem(item);
91
+ }
92
+ },
93
+
94
+ onItemMouseLeave: function(view, record){
95
+ var me = this,
96
+ locked = me.lockedView,
97
+ other = me.normalView;
98
+
99
+ if (view.trackOver) {
100
+ if (view !== locked) {
101
+ other = locked;
102
+ }
103
+ other.clearHighlight();
104
+ }
105
+ },
106
+
107
+ relayFn: function(name, args){
108
+ args = args || [];
109
+
110
+ var view = this.lockedView;
111
+ view[name].apply(view, args || []);
112
+ view = this.normalView;
113
+ view[name].apply(view, args || []);
114
+ },
115
+
116
+ getSelectionModel: function(){
117
+ return this.panel.getSelectionModel();
118
+ },
119
+
120
+ getStore: function(){
121
+ return this.panel.store;
122
+ },
123
+
124
+ getNode: function(nodeInfo){
125
+ // default to the normal view
126
+ return this.normalView.getNode(nodeInfo);
127
+ },
128
+
129
+ getCell: function(record, column){
130
+ var view = this.getViewForColumn(column),
131
+ row;
132
+
133
+ row = view.getNode(record);
134
+ return Ext.fly(row).down(column.getCellSelector());
135
+ },
136
+
137
+ getRecord: function(node){
138
+ var result = this.lockedView.getRecord(node);
139
+ if (!node) {
140
+ result = this.normalView.getRecord(node);
141
+ }
142
+ return result;
143
+ },
144
+
145
+ addElListener: function(eventName, fn, scope){
146
+ this.relayFn('addElListener', arguments);
147
+ },
148
+
149
+ refreshNode: function(){
150
+ this.relayFn('refreshNode', arguments);
151
+ },
152
+
153
+ refresh: function(){
154
+ this.relayFn('refresh', arguments);
155
+ },
156
+
157
+ bindStore: function(){
158
+ this.relayFn('bindStore', arguments);
159
+ },
160
+
161
+ addRowCls: function(){
162
+ this.relayFn('addRowCls', arguments);
163
+ },
164
+
165
+ removeRowCls: function(){
166
+ this.relayFn('removeRowCls', arguments);
167
+ }
168
+
169
+ });
@@ -0,0 +1,539 @@
1
+ /**
2
+ * This class monitors scrolling of the {@link Ext.view.Table TableView} within a
3
+ * {@link Ext.grid.Panel GridPanel} which is using a buffered store to only cache
4
+ * and render a small section of a very large dataset.
5
+ *
6
+ * The GridPanel will instantiate this to perform monitoring, this class should
7
+ * never be instantiated by user code.
8
+ */
9
+ Ext.define('Ext.grid.PagingScroller', {
10
+
11
+ /**
12
+ * @cfg
13
+ * @deprecated This config is now ignored.
14
+ */
15
+ percentageFromEdge: 0.35,
16
+
17
+ /**
18
+ * @cfg
19
+ * The zone which causes a refresh of the rendered viewport. As soon as the edge
20
+ * of the rendered grid is this number of rows from the edge of the viewport, the view is moved.
21
+ */
22
+ numFromEdge: 2,
23
+
24
+ /**
25
+ * @cfg
26
+ * The number of extra rows to render on the trailing side of scrolling
27
+ * **outside the {@link #numFromEdge}** buffer as scrolling proceeds.
28
+ */
29
+ trailingBufferZone: 5,
30
+
31
+ /**
32
+ * @cfg
33
+ * The number of extra rows to render on the leading side of scrolling
34
+ * **outside the {@link #numFromEdge}** buffer as scrolling proceeds.
35
+ */
36
+ leadingBufferZone: 15,
37
+
38
+ /**
39
+ * @cfg
40
+ * This is the time in milliseconds to buffer load requests when scrolling the PagingScrollbar.
41
+ */
42
+ scrollToLoadBuffer: 200,
43
+
44
+ // private. Initial value of zero.
45
+ viewSize: 0,
46
+ // private. Start at default value
47
+ rowHeight: 21,
48
+ // private. Table extent at startup time
49
+ tableStart: 0,
50
+ tableEnd: 0,
51
+
52
+ constructor: function(config) {
53
+ var me = this;
54
+ me.variableRowHeight = config.variableRowHeight;
55
+ me.bindView(config.view);
56
+ Ext.apply(me, config);
57
+ me.callParent(arguments);
58
+ },
59
+
60
+ bindView: function(view) {
61
+ var me = this,
62
+ viewListeners = {
63
+ scroll: {
64
+ fn: me.onViewScroll,
65
+ element: 'el',
66
+ scope: me
67
+ },
68
+ render: me.onViewRender,
69
+ resize: me.onViewResize,
70
+ boxready: {
71
+ fn: me.onViewResize,
72
+ scope: me,
73
+ single: true
74
+ },
75
+ refresh: me.onViewRefresh,
76
+ scope: me
77
+ },
78
+ storeListeners = {
79
+ guaranteedrange: me.onGuaranteedRange,
80
+ scope: me
81
+ },
82
+ gridListeners = {
83
+ reconfigure: me.onGridReconfigure,
84
+ scope: me
85
+ };
86
+
87
+ // If there are variable row heights, then in beforeRefresh, we have to find a common
88
+ // row so that we can synchronize the table's top position after the refresh
89
+ if (me.variableRowHeight) {
90
+ viewListeners.beforerefresh = me.beforeViewRefresh;
91
+ }
92
+
93
+ // If we need unbinding...
94
+ if (me.view) {
95
+ me.view.el.un('scroll', me.onViewScroll, me); // un does not understand the element options
96
+ me.view.un(viewListeners);
97
+ me.store.un(storeListeners);
98
+ if (me.grid) {
99
+ me.grid.un(gridListeners);
100
+ }
101
+ delete me.view.refreshSize; // Remove the injected refreshSize implementation
102
+ }
103
+
104
+ me.view = view;
105
+ me.grid = me.view.up('tablepanel');
106
+ me.store = view.store;
107
+ if (view.rendered) {
108
+ me.viewSize = me.store.viewSize = Math.ceil(view.getHeight() / me.rowHeight) + me.trailingBufferZone + (me.numFromEdge * 2) + me.leadingBufferZone;
109
+ }
110
+
111
+ // During scrolling we do not need to refresh the height - the Grid height must be set by config or layout in order to create a scrollable
112
+ // table just larger than that, so removing the layout call improves efficiency and removes the flicker when the
113
+ // HeaderContainer is reset to scrollLeft:0, and then resynced on the very next "scroll" event.
114
+ me.view.refreshSize = Ext.Function.createInterceptor(me.view.refreshSize, me.beforeViewrefreshSize, me);
115
+
116
+ /**
117
+ * @property {Number} position
118
+ * Current pixel scroll position of the associated {@link Ext.view.Table View}.
119
+ */
120
+ me.position = 0;
121
+
122
+ // We are created in View constructor. There won't be an ownerCt at this time.
123
+ if (me.grid) {
124
+ me.grid.on(gridListeners);
125
+ } else {
126
+ me.view.on({
127
+ added: function() {
128
+ me.grid = me.view.up('tablepanel');
129
+ me.grid.on(gridListeners);
130
+ },
131
+ single: true
132
+ });
133
+ }
134
+
135
+ me.view.on(me.viewListeners = viewListeners);
136
+ me.store.on(storeListeners);
137
+ },
138
+
139
+ onGridReconfigure: function (grid) {
140
+ this.bindView(grid.view);
141
+ },
142
+
143
+ // Ensure that the stretcher element is inserted into the View as the first element.
144
+ onViewRender: function() {
145
+ var me = this,
146
+ el = me.view.el;
147
+
148
+ el.setStyle('position', 'relative');
149
+ me.stretcher = el.createChild({
150
+ style:{
151
+ position: 'absolute',
152
+ width: '1px',
153
+ height: 0,
154
+ top: 0,
155
+ left: 0
156
+ }
157
+ }, el.dom.firstChild);
158
+ },
159
+
160
+ onViewResize: function(view, width, height) {
161
+ var me = this,
162
+ newViewSize;
163
+
164
+ newViewSize = Math.ceil(height / me.rowHeight) + me.trailingBufferZone + (me.numFromEdge * 2) + me.leadingBufferZone;
165
+ if (newViewSize > me.viewSize) {
166
+ me.viewSize = me.store.viewSize = newViewSize;
167
+ me.handleViewScroll(me.lastScrollDirection || 1);
168
+ }
169
+ },
170
+
171
+ // Used for variable row heights. Try to find the offset from scrollTop of a common row
172
+ beforeViewRefresh: function() {
173
+ var me = this,
174
+ view = me.view,
175
+ rows,
176
+ direction = me.lastScrollDirection;
177
+
178
+ me.commonRecordIndex = undefined;
179
+
180
+ // If we are refreshing in response to a scroll,
181
+ // And we know where the previous start was,
182
+ // and we're not teleporting out of visible range
183
+ if (direction && (me.previousStart !== undefined) && (me.scrollProportion === undefined)) {
184
+ rows = view.getNodes();
185
+
186
+ // We have scrolled downwards
187
+ if (direction === 1) {
188
+
189
+ // If the ranges overlap, we are going to be able to position the table exactly
190
+ if (me.tableStart <= me.previousEnd) {
191
+ me.commonRecordIndex = rows.length - 1;
192
+
193
+ }
194
+ }
195
+ // We have scrolled upwards
196
+ else if (direction === -1) {
197
+
198
+ // If the ranges overlap, we are going to be able to position the table exactly
199
+ if (me.tableEnd >= me.previousStart) {
200
+ me.commonRecordIndex = 0;
201
+ }
202
+ }
203
+ // Cache the old offset of the common row from the scrollTop
204
+ me.scrollOffset = -view.el.getOffsetsTo(rows[me.commonRecordIndex])[1];
205
+
206
+ // In the new table the common row is at a different index
207
+ me.commonRecordIndex -= (me.tableStart - me.previousStart);
208
+ } else {
209
+ me.scrollOffset = undefined;
210
+ }
211
+ },
212
+
213
+ // Used for variable row heights. Try to find the offset from scrollTop of a common row
214
+ // Ensure, upon each refresh, that the stretcher element is the correct height
215
+ onViewRefresh: function() {
216
+ var me = this,
217
+ store = me.store,
218
+ newScrollHeight,
219
+ view = me.view,
220
+ viewEl = view.el,
221
+ viewDom = viewEl.dom,
222
+ rows,
223
+ newScrollOffset,
224
+ scrollDelta,
225
+ table = viewEl.child('table', true),
226
+ tableTop,
227
+ scrollTop;
228
+
229
+ // Scroll events caused by processing in here must be ignored, so disable for the duration
230
+ me.disabled = true;
231
+
232
+ // No scroll monitoring is needed if
233
+ // All data is in view OR
234
+ // Store is filtered locally.
235
+ // - scrolling a locally filtered page is obv a local operation within the context of a huge set of pages
236
+ // so local scrolling is appropriate.
237
+ if (store.getCount() === store.getTotalCount() || (store.isFiltered() && !store.remoteFilter)) {
238
+ me.stretcher.setHeight(0);
239
+ me.position = viewDom.scrollTop = 0;
240
+
241
+ // Chrome's scrolling went crazy upon zeroing of the stretcher, and left the view's scrollTop stuck at -15
242
+ // This is the only thing that fixes that
243
+ table.style.position = 'absolute';
244
+
245
+ // We remain disabled now because no scrolling is needed - we have the full dataset in the Store
246
+ return;
247
+ }
248
+
249
+ me.stretcher.setHeight(newScrollHeight = me.getScrollHeight());
250
+
251
+ scrollTop = viewDom.scrollTop;
252
+
253
+ // Flag to the refreshSize interceptor that regular refreshSize postprocessing should be vetoed.
254
+ me.isScrollRefresh = (scrollTop > 0);
255
+
256
+ // If we have had to calculate the store position from the pure scroll bar position,
257
+ // then we must calculate the table's vertical position from the scrollProportion
258
+ if (me.scrollProportion !== undefined) {
259
+ me.scrollProportion = scrollTop / (newScrollHeight - table.offsetHeight);
260
+ table.style.position = 'absolute';
261
+ table.style.top = (me.scrollProportion ? (newScrollHeight * me.scrollProportion) - (table.offsetHeight * me.scrollProportion) : 0) + 'px';
262
+ }
263
+ else {
264
+ table.style.position = 'absolute';
265
+ table.style.top = (tableTop = (me.tableStart||0) * me.rowHeight) + 'px';
266
+
267
+ // ScrollOffset to a common row was calculated in beforeViewRefresh, so we can synch table position with how it was before
268
+ if (me.scrollOffset) {
269
+ rows = view.getNodes();
270
+ newScrollOffset = -viewEl.getOffsetsTo(rows[me.commonRecordIndex])[1];
271
+ scrollDelta = newScrollOffset - me.scrollOffset;
272
+ me.position = (scrollTop += scrollDelta);
273
+ }
274
+
275
+ // If the table is not fully in view view, scroll to where it is in view.
276
+ // This will happen when the page goes out of view unexpectedly, outside the
277
+ // control of the PagingScroller. For example, a refresh caused by a remote sort or filter reverting
278
+ // back to page 1.
279
+ // Note that with buffered Stores, only remote sorting is allowed, otherwise the locally
280
+ // sorted page will be out of order with the whole dataset.
281
+ else if ((tableTop > scrollTop) || ((tableTop + table.offsetHeight) < scrollTop + viewDom.clientHeight)) {
282
+ me.lastScrollDirection = -1;
283
+ me.position = viewDom.scrollTop = tableTop;
284
+ }
285
+ }
286
+
287
+ // Re-enable upon function exit
288
+ me.disabled = false;
289
+ },
290
+
291
+ beforeViewrefreshSize: function() {
292
+ // Veto the refreshSize if the refresh is due to a scroll.
293
+ if (this.isScrollRefresh) {
294
+ return (this.isScrollRefresh = false);
295
+ }
296
+ },
297
+
298
+ onGuaranteedRange: function(range, start, end) {
299
+ var me = this,
300
+ ds = me.store;
301
+
302
+ // this should never happen
303
+ if (range.length && me.visibleStart < range[0].index) {
304
+ return;
305
+ }
306
+
307
+ // Cache last table position in dataset so that if we are using variableRowHeight,
308
+ // we can attempt to locate a common row to align the table on.
309
+ me.previousStart = me.tableStart;
310
+ me.previousEnd = me.tableEnd;
311
+
312
+ me.tableStart = start;
313
+ me.tableEnd = end;
314
+ ds.loadRecords(range);
315
+ },
316
+
317
+ onViewScroll: function(e, t) {
318
+ var me = this,
319
+ view = me.view,
320
+ lastPosition = me.position;
321
+
322
+ me.position = view.el.dom.scrollTop;
323
+
324
+ // Only check for nearing the edge if we are enabled.
325
+ // If there is no paging to be done (Store's dataset is all in memory) we will be disabled.
326
+ if (!me.disabled) {
327
+ me.lastScrollDirection = me.position > lastPosition ? 1 : -1;
328
+ // Check the position so we ignore horizontal scrolling
329
+ if (lastPosition !== me.position) {
330
+ me.handleViewScroll(me.lastScrollDirection);
331
+ }
332
+ }
333
+ },
334
+
335
+ handleViewScroll: function(direction) {
336
+ var me = this,
337
+ store = me.store,
338
+ view = me.view,
339
+ viewSize = me.viewSize,
340
+ totalCount = store.getTotalCount(),
341
+ highestStartPoint = totalCount - viewSize,
342
+ visibleStart = me.getFirstVisibleRowIndex(),
343
+ visibleEnd = me.getLastVisibleRowIndex(),
344
+ requestStart,
345
+ requestEnd;
346
+
347
+ // Only process if the total rows is larger than the visible page size
348
+ if (totalCount >= viewSize) {
349
+
350
+ // This is only set if we are using variable row height, and the thumb is dragged so that
351
+ // There are no remaining visible rows to vertically anchor the new table to.
352
+ // In this case we use the scrollProprtion to anchor the table to the correct relative
353
+ // position on the vertical axis.
354
+ me.scrollProportion = undefined;
355
+
356
+ // We're scrolling up
357
+ if (direction == -1) {
358
+ if (visibleStart !== undefined) {
359
+ if (visibleStart < (me.tableStart + me.numFromEdge)) {
360
+ requestStart = Math.max(0, visibleEnd + me.trailingBufferZone - viewSize);
361
+ }
362
+ }
363
+
364
+ // The only way we can end up without a visible start is if, in variableRowHeight mode, the user drags
365
+ // the thumb up out of the visible range. In this case, we have to estimate the start row index
366
+ else {
367
+ // If we have no visible rows to orientate with, then use the scroll proportion
368
+ me.scrollProportion = view.el.dom.scrollTop / (view.el.dom.scrollHeight - view.el.dom.clientHeight);
369
+ requestStart = Math.max(0, totalCount * me.scrollProportion - (viewSize / 2) - me.numFromEdge - ((me.leadingBufferZone + me.trailingBufferZone) / 2));
370
+ }
371
+ }
372
+ // We're scrolling down
373
+ else {
374
+ if (visibleStart !== undefined) {
375
+ if (visibleEnd > (me.tableEnd - me.numFromEdge)) {
376
+ requestStart = Math.max(0, visibleStart - me.trailingBufferZone);
377
+ }
378
+ }
379
+
380
+ // The only way we can end up without a visible end is if, in variableRowHeight mode, the user drags
381
+ // the thumb down out of the visible range. In this case, we have to estimate the start row index
382
+ else {
383
+ // If we have no visible rows to orientate with, then use the scroll proportion
384
+ me.scrollProportion = view.el.dom.scrollTop / (view.el.dom.scrollHeight - view.el.dom.clientHeight);
385
+ requestStart = totalCount * me.scrollProportion - (viewSize / 2) - me.numFromEdge - ((me.leadingBufferZone + me.trailingBufferZone) / 2);
386
+ }
387
+ }
388
+
389
+ // We scrolled close to the edge and the Store needs reloading
390
+ if (requestStart !== undefined) {
391
+ // The calculation walked off the end; Request the highest possible chunk which starts on an even row count (Because of row striping)
392
+ if (requestStart > highestStartPoint) {
393
+ requestStart = highestStartPoint & ~1;
394
+ requestEnd = totalCount - 1;
395
+ }
396
+ // Make sure first row is even to ensure correct even/odd row striping
397
+ else {
398
+ requestStart = requestStart & ~1;
399
+ requestEnd = requestStart + viewSize - 1;
400
+ }
401
+
402
+ // If range is satsfied within the prefetch buffer, then just draw it from the prefetch buffer
403
+ if (store.rangeCached(requestStart, requestEnd)) {
404
+ me.cancelLoad();
405
+ store.guaranteeRange(requestStart, requestEnd);
406
+ }
407
+
408
+ // Required range is not in the prefetch buffer. Ask the store to prefetch it.
409
+ // We will recieve a guaranteedrange event when that is done.
410
+ else {
411
+ me.attemptLoad(requestStart, requestEnd);
412
+ }
413
+ }
414
+ }
415
+ },
416
+
417
+ getFirstVisibleRowIndex: function() {
418
+ var me = this,
419
+ store = me.store,
420
+ view = me.view,
421
+ scrollTop = view.el.dom.scrollTop,
422
+ rows,
423
+ count,
424
+ i,
425
+ rowBottom;
426
+
427
+ if (me.variableRowHeight) {
428
+ rows = view.getNodes();
429
+ count = store.getCount();
430
+ for (i = 0; i < count; i++) {
431
+ rowBottom = Ext.fly(rows[i]).getOffsetsTo(view.el)[1] + rows[i].offsetHeight;
432
+
433
+ // Searching for the first visible row, and off the bottom of the clientArea, then there's no visible first row!
434
+ if (rowBottom > view.el.dom.clientHeight) {
435
+ return;
436
+ }
437
+
438
+ if (rowBottom > 0) {
439
+ return i + me.tableStart;
440
+ }
441
+ }
442
+ } else {
443
+ return Math.floor(scrollTop / me.rowHeight);
444
+ }
445
+ },
446
+
447
+ getLastVisibleRowIndex: function() {
448
+ var me = this,
449
+ store = me.store,
450
+ view = me.view,
451
+ clientHeight = view.el.dom.clientHeight,
452
+ rows,
453
+ count,
454
+ i,
455
+ rowTop;
456
+
457
+ if (me.variableRowHeight) {
458
+ rows = view.getNodes();
459
+ count = store.getCount();
460
+ for (i = count - 1; i >= 0; i--) {
461
+ rowTop = Ext.fly(rows[i]).getOffsetsTo(view.el)[1];
462
+
463
+ // Searching for the last visible row, and off the top of the clientArea, then there's no visible last row!
464
+ if (rowTop < 0) {
465
+ return;
466
+ }
467
+ if (rowTop < clientHeight) {
468
+ return i + me.tableStart;
469
+ }
470
+ }
471
+ } else {
472
+ return me.getFirstVisibleRowIndex() + Math.ceil(clientHeight / me.rowHeight) + 1;
473
+ }
474
+ },
475
+
476
+ getScrollHeight: function() {
477
+ var me = this,
478
+ view = me.view,
479
+ table,
480
+ firstRow,
481
+ store = me.store,
482
+ deltaHeight = 0,
483
+ doCalcHeight = !me.hasOwnProperty('rowHeight');
484
+
485
+ if (me.variableRowHeight) {
486
+ table = me.view.el.down('table', true);
487
+ if (doCalcHeight) {
488
+ me.initialTableHeight = table.offsetHeight;
489
+ me.rowHeight = me.initialTableHeight / me.store.getCount();
490
+ } else {
491
+ deltaHeight = table.offsetHeight - me.initialTableHeight;
492
+ }
493
+ } else if (doCalcHeight) {
494
+ firstRow = view.el.down(view.getItemSelector());
495
+ if (firstRow) {
496
+ me.rowHeight = firstRow.getHeight(false, true);
497
+ }
498
+ }
499
+
500
+ return Math.floor(store.getTotalCount() * me.rowHeight) + deltaHeight;
501
+ },
502
+
503
+ attemptLoad: function(start, end) {
504
+ var me = this;
505
+ if (me.scrollToLoadBuffer) {
506
+ if (!me.loadTask) {
507
+ me.loadTask = new Ext.util.DelayedTask(me.doAttemptLoad, me, []);
508
+ }
509
+ me.loadTask.delay(me.scrollToLoadBuffer, me.doAttemptLoad, me, [start, end]);
510
+ } else {
511
+ me.store.guaranteeRange(start, end);
512
+ }
513
+ },
514
+
515
+ cancelLoad: function() {
516
+ if (this.loadTask) {
517
+ this.loadTask.cancel();
518
+ }
519
+ },
520
+
521
+ doAttemptLoad: function(start, end) {
522
+ this.store.guaranteeRange(start, end);
523
+ },
524
+
525
+ destroy: function() {
526
+ var me = this,
527
+ scrollListener = me.viewListeners.scroll;
528
+
529
+ me.store.un({
530
+ guaranteedrange: me.onGuaranteedRange,
531
+ scope: me
532
+ });
533
+ me.view.un(me.viewListeners);
534
+ if (me.view.rendered) {
535
+ me.stretcher.remove();
536
+ me.view.el.un('scroll', scrollListener.fn, scrollListener.scope);
537
+ }
538
+ }
539
+ });