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,148 @@
1
+ describe("Ext.Version", function() {
2
+ var version = new Ext.Version("1.2.3beta");
3
+
4
+ describe("toString", function() {
5
+ it("should cast to string", function() {
6
+ expect(version+"").toBe("1.2.3beta");
7
+ });
8
+ });
9
+
10
+ describe("getMajor", function() {
11
+ it("should return 1", function() {
12
+ expect(version.getMajor()).toBe(1);
13
+ });
14
+ });
15
+
16
+ describe("getMinor", function() {
17
+ it("should return 2", function() {
18
+ expect(version.getMinor()).toBe(2);
19
+ });
20
+ });
21
+
22
+ describe("getPatch", function() {
23
+ it("should return 3", function() {
24
+ expect(version.getPatch()).toBe(3);
25
+ });
26
+ });
27
+
28
+ describe("getBuild", function() {
29
+ it("should return 0", function() {
30
+ expect(version.getBuild()).toBe(0);
31
+ });
32
+ });
33
+
34
+ describe("getRelease", function() {
35
+ it("should return beta", function() {
36
+ expect(version.getRelease()).toBe("beta");
37
+ });
38
+ });
39
+
40
+ describe("getShortVersion", function() {
41
+ it("should return 123", function() {
42
+ expect(version.getShortVersion()).toBe("123");
43
+ });
44
+ });
45
+
46
+ describe("toArray", function() {
47
+ it("should return [1, 2, 3, 0, 'beta']", function() {
48
+ expect(version.toArray()).toEqual([1, 2, 3, 0, 'beta']);
49
+ });
50
+ });
51
+
52
+ describe("isGreaterThan", function() {
53
+ it("should be greater than 1.2.3alpha", function() {
54
+ expect(version.isGreaterThan("1.2.3alpha")).toBeTruthy();
55
+ });
56
+ it("should not be greater than 1.2.3RC", function() {
57
+ expect(version.isGreaterThan("1.2.3RC")).toBeFalsy();
58
+ });
59
+ });
60
+
61
+ describe("isLessThan", function() {
62
+ it("should not be smaller than 1.2.3alpha", function() {
63
+ expect(version.isLessThan("1.2.3alpha")).toBeFalsy();
64
+ });
65
+ it("should be smaller than 1.2.3RC", function() {
66
+ expect(version.isLessThan("1.2.3RC")).toBeTruthy();
67
+ });
68
+ });
69
+
70
+ describe("equals", function() {
71
+ it("should equals 1.2.3beta", function() {
72
+ expect(version.equals("1.2.3beta")).toBeTruthy();
73
+ });
74
+ });
75
+
76
+ describe("match", function() {
77
+ it("should match integer 1", function() {
78
+ expect(version.match(1)).toBeTruthy();
79
+ });
80
+ it("should match float 1.2", function() {
81
+ expect(version.match(1.2)).toBeTruthy();
82
+ });
83
+ it("should match string 1.2.3", function() {
84
+ expect(version.match("1.2.3")).toBeTruthy();
85
+ });
86
+ it("should not match string 1.2.3alpha", function() {
87
+ expect(version.match("1.2.3alpha")).toBeFalsy();
88
+ });
89
+ });
90
+
91
+ describe("setVersion", function() {
92
+ it("should return an instance of Ext.Version", function() {
93
+ Ext.setVersion("test", "1.0.1");
94
+ expect(Ext.getVersion("test") instanceof Ext.Version).toBe(true);
95
+ });
96
+ });
97
+
98
+ describe("statics", function() {
99
+ describe("getComponentValue", function() {
100
+ it("should return 0", function() {
101
+ expect(Ext.Version.getComponentValue(undefined)).toBe(0);
102
+ });
103
+
104
+ it("should return -2", function() {
105
+ expect(Ext.Version.getComponentValue(-2)).toBe(-2);
106
+ });
107
+
108
+ it("should return 2", function() {
109
+ expect(Ext.Version.getComponentValue("2")).toBe(2);
110
+ });
111
+
112
+ it("should return -5", function() {
113
+ expect(Ext.Version.getComponentValue("alpha")).toBe(-5);
114
+ });
115
+
116
+ it("should return unknown", function() {
117
+ expect(Ext.Version.getComponentValue("unknown")).toBe("unknown");
118
+ });
119
+ });
120
+
121
+ describe("compare", function() {
122
+ it("should return 1", function() {
123
+ expect(Ext.Version.compare("1.2.3beta", "1.2.2")).toBe(1);
124
+ expect(Ext.Version.compare("1.2.3beta", 1)).toBe(1);
125
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3dev")).toBe(1);
126
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3alpha")).toBe(1);
127
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3a")).toBe(1);
128
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3alpha")).toBe(1);
129
+ });
130
+
131
+
132
+ it("should return -1", function() {
133
+ expect(Ext.Version.compare("1.2.3beta", 2)).toBe(-1);
134
+ expect(Ext.Version.compare("1.2.3beta", "1.2.4")).toBe(-1);
135
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3RC")).toBe(-1);
136
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3rc")).toBe(-1);
137
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3#")).toBe(-1);
138
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3pl")).toBe(-1);
139
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3p")).toBe(-1);
140
+ });
141
+
142
+ it("should return 0", function() {
143
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3b")).toBe(0);
144
+ expect(Ext.Version.compare("1.2.3beta", "1.2.3beta")).toBe(0);
145
+ });
146
+ });
147
+ });
148
+ });
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
2
+ "http://www.w3.org/TR/html4/loose.dtd">
3
+ <html>
4
+ <head>
5
+ <script type="text/javascript" src="bootstrap.js"></script>
6
+ <script type="text/javascript">
7
+ Ext.require('*');
8
+ Ext.onReady(function() {
9
+ TestBootstrap.loadSpecs(function(){
10
+ if (parent && parent.Test) {
11
+ jasmine.getEnv().addReporter(parent.Test.SandBox.reporter);
12
+ }
13
+ jasmine.getEnv().execute();
14
+ });
15
+ });
16
+ </script>
17
+ </head>
18
+ <body></body>
19
+ </html>
@@ -0,0 +1,887 @@
1
+ /**
2
+ * @author Ed Spencer
3
+ *
4
+ * AbstractStore is a superclass of {@link Ext.data.Store} and {@link Ext.data.TreeStore}. It's never used directly,
5
+ * but offers a set of methods used by both of those subclasses.
6
+ *
7
+ * We've left it here in the docs for reference purposes, but unless you need to make a whole new type of Store, what
8
+ * you're probably looking for is {@link Ext.data.Store}. If you're still interested, here's a brief description of what
9
+ * AbstractStore is and is not.
10
+ *
11
+ * AbstractStore provides the basic configuration for anything that can be considered a Store. It expects to be
12
+ * given a {@link Ext.data.Model Model} that represents the type of data in the Store. It also expects to be given a
13
+ * {@link Ext.data.proxy.Proxy Proxy} that handles the loading of data into the Store.
14
+ *
15
+ * AbstractStore provides a few helpful methods such as {@link #method-load} and {@link #sync}, which load and save data
16
+ * respectively, passing the requests through the configured {@link #proxy}. Both built-in Store subclasses add extra
17
+ * behavior to each of these functions. Note also that each AbstractStore subclass has its own way of storing data -
18
+ * in {@link Ext.data.Store} the data is saved as a flat {@link Ext.util.MixedCollection MixedCollection}, whereas in
19
+ * {@link Ext.data.TreeStore TreeStore} we use a {@link Ext.data.Tree} to maintain the data's hierarchy.
20
+ *
21
+ * The store provides filtering and sorting support. This sorting/filtering can happen on the client side
22
+ * or can be completed on the server. This is controlled by the {@link Ext.data.Store#remoteSort remoteSort} and
23
+ * {@link Ext.data.Store#remoteFilter remoteFilter} config options. For more information see the {@link #sort} and
24
+ * {@link Ext.data.Store#filter filter} methods.
25
+ */
26
+ Ext.define('Ext.data.AbstractStore', {
27
+ requires: [
28
+ 'Ext.util.MixedCollection',
29
+ 'Ext.data.proxy.Proxy',
30
+ 'Ext.data.Operation',
31
+ 'Ext.util.Filter'
32
+ ],
33
+
34
+ mixins: {
35
+ observable: 'Ext.util.Observable',
36
+ sortable: 'Ext.util.Sortable'
37
+ },
38
+
39
+ statics: {
40
+ create: function(store) {
41
+ if (!store.isStore) {
42
+ if (!store.type) {
43
+ store.type = 'store';
44
+ }
45
+ store = Ext.createByAlias('store.' + store.type, store);
46
+ }
47
+ return store;
48
+ }
49
+ },
50
+
51
+ remoteSort : false,
52
+ remoteFilter: false,
53
+
54
+ /**
55
+ * @cfg {String/Ext.data.proxy.Proxy/Object} proxy
56
+ * The Proxy to use for this Store. This can be either a string, a config object or a Proxy instance -
57
+ * see {@link #setProxy} for details.
58
+ */
59
+
60
+ /**
61
+ * @cfg {Boolean/Object} autoLoad
62
+ * If data is not specified, and if autoLoad is true or an Object, this store's load method is automatically called
63
+ * after creation. If the value of autoLoad is an Object, this Object will be passed to the store's load method.
64
+ * Defaults to false.
65
+ */
66
+ autoLoad: undefined,
67
+
68
+ /**
69
+ * @cfg {Boolean} autoSync
70
+ * True to automatically sync the Store with its Proxy after every edit to one of its Records. Defaults to false.
71
+ */
72
+ autoSync: false,
73
+
74
+ /**
75
+ * @property {String} batchUpdateMode
76
+ * Sets the updating behavior based on batch synchronization. 'operation' (the default) will update the Store's
77
+ * internal representation of the data after each operation of the batch has completed, 'complete' will wait until
78
+ * the entire batch has been completed before updating the Store's data. 'complete' is a good choice for local
79
+ * storage proxies, 'operation' is better for remote proxies, where there is a comparatively high latency.
80
+ */
81
+ batchUpdateMode: 'operation',
82
+
83
+ /**
84
+ * @property {Boolean} filterOnLoad
85
+ * If true, any filters attached to this Store will be run after loading data, before the datachanged event is fired.
86
+ * Defaults to true, ignored if {@link Ext.data.Store#remoteFilter remoteFilter} is true
87
+ */
88
+ filterOnLoad: true,
89
+
90
+ /**
91
+ * @property {Boolean} sortOnLoad
92
+ * If true, any sorters attached to this Store will be run after loading data, before the datachanged event is fired.
93
+ * Defaults to true, igored if {@link Ext.data.Store#remoteSort remoteSort} is true
94
+ */
95
+ sortOnLoad: true,
96
+
97
+ /**
98
+ * @property {Boolean} implicitModel
99
+ * True if a model was created implicitly for this Store. This happens if a fields array is passed to the Store's
100
+ * constructor instead of a model constructor or name.
101
+ * @private
102
+ */
103
+ implicitModel: false,
104
+
105
+ /**
106
+ * @property {String} defaultProxyType
107
+ * The string type of the Proxy to create if none is specified. This defaults to creating a
108
+ * {@link Ext.data.proxy.Memory memory proxy}.
109
+ */
110
+ defaultProxyType: 'memory',
111
+
112
+ /**
113
+ * @property {Boolean} isDestroyed
114
+ * True if the Store has already been destroyed. If this is true, the reference to Store should be deleted
115
+ * as it will not function correctly any more.
116
+ */
117
+ isDestroyed: false,
118
+
119
+ /**
120
+ * @property {Boolean} isStore
121
+ * `true` in this class to identify an object as an instantiated Store, or subclass thereof.
122
+ */
123
+ isStore: true,
124
+
125
+ /**
126
+ * @cfg {String} storeId
127
+ * Unique identifier for this store. If present, this Store will be registered with the {@link Ext.data.StoreManager},
128
+ * making it easy to reuse elsewhere.
129
+ *
130
+ * Note that when store is instatiated by Controller, the storeId will be overridden by the name of the store.
131
+ */
132
+
133
+ /**
134
+ * @cfg {Object[]} fields
135
+ * This may be used in place of specifying a {@link #model} configuration. The fields should be a
136
+ * set of {@link Ext.data.Field} configuration objects. The store will automatically create a {@link Ext.data.Model}
137
+ * with these fields. In general this configuration option should be avoided, it exists for the purposes of
138
+ * backwards compatibility. For anything more complicated, such as specifying a particular id property or
139
+ * associations, a {@link Ext.data.Model} should be defined and specified for the {@link #model}
140
+ * config.
141
+ */
142
+
143
+ /**
144
+ * @cfg {String} model
145
+ * Name of the {@link Ext.data.Model Model} associated with this store.
146
+ * The string is used as an argument for {@link Ext.ModelManager#getModel}.
147
+ */
148
+
149
+ /**
150
+ * @cfg {Object[]} filters
151
+ * Array of {@link Ext.util.Filter Filters} for this store.
152
+ */
153
+
154
+ sortRoot: 'data',
155
+
156
+ //documented above
157
+ constructor: function(config) {
158
+ var me = this,
159
+ filters;
160
+
161
+ /**
162
+ * @event add
163
+ * Fired when a Model instance has been added to this Store
164
+ * @param {Ext.data.Store} store The store
165
+ * @param {Ext.data.Model[]} records The Model instances that were added
166
+ * @param {Number} index The index at which the instances were inserted
167
+ */
168
+
169
+ /**
170
+ * @event remove
171
+ * Fired when a Model instance has been removed from this Store
172
+ * @param {Ext.data.Store} store The Store object
173
+ * @param {Ext.data.Model} record The record that was removed
174
+ * @param {Number} index The index of the record that was removed
175
+ */
176
+
177
+ /**
178
+ * @event update
179
+ * Fires when a Model instance has been updated
180
+ * @param {Ext.data.Store} this
181
+ * @param {Ext.data.Model} record The Model instance that was updated
182
+ * @param {String} operation The update operation being performed. Value may be one of:
183
+ *
184
+ * Ext.data.Model.EDIT
185
+ * Ext.data.Model.REJECT
186
+ * Ext.data.Model.COMMIT
187
+ * @param {String[]} modifiedFieldNames Array of field names changed during edit.
188
+ */
189
+
190
+ /**
191
+ * @event datachanged
192
+ * Fires whenever the records in the Store have changed in some way - this could include adding or removing
193
+ * records, or updating the data in existing records
194
+ * @param {Ext.data.Store} this The data store
195
+ */
196
+
197
+ /**
198
+ * @event refresh
199
+ * Fires when the data cache has changed in a bulk manner (e.g., it has been sorted, filtered, etc.) and a
200
+ * widget that is using this Store as a Record cache should refresh its view.
201
+ * @param {Ext.data.Store} this The data store
202
+ */
203
+
204
+ /**
205
+ * @event beforeload
206
+ * Fires before a request is made for a new data object. If the beforeload handler returns false the load
207
+ * action will be canceled.
208
+ * @param {Ext.data.Store} store This Store
209
+ * @param {Ext.data.Operation} operation The Ext.data.Operation object that will be passed to the Proxy to
210
+ * load the Store
211
+ */
212
+
213
+ /**
214
+ * @event load
215
+ * Fires whenever the store reads data from a remote data source.
216
+ * @param {Ext.data.Store} this
217
+ * @param {Ext.data.Model[]} records An array of records
218
+ * @param {Boolean} successful True if the operation was successful.
219
+ */
220
+
221
+ /**
222
+ * @event write
223
+ * Fires whenever a successful write has been made via the configured {@link #proxy Proxy}
224
+ * @param {Ext.data.Store} store This Store
225
+ * @param {Ext.data.Operation} operation The {@link Ext.data.Operation Operation} object that was used in
226
+ * the write
227
+ */
228
+
229
+ /**
230
+ * @event beforesync
231
+ * Fired before a call to {@link #sync} is executed. Return false from any listener to cancel the sync
232
+ * @param {Object} options Hash of all records to be synchronized, broken down into create, update and destroy
233
+ */
234
+ /**
235
+ * @event clear
236
+ * Fired after the {@link #removeAll} method is called.
237
+ * @param {Ext.data.Store} this
238
+ */
239
+ /**
240
+ * @event metachange
241
+ * Fires when this store's underlying reader (available via the proxy) provides new metadata.
242
+ * Metadata usually consists of new field definitions, but can include any configuration data
243
+ * required by an application, and can be processed as needed in the event handler.
244
+ * This event is currently only fired for JsonReaders.
245
+ * @param {Ext.data.Store} this
246
+ * @param {Object} meta The JSON metadata
247
+ */
248
+
249
+ Ext.apply(me, config);
250
+ // don't use *config* anymore from here on... use *me* instead...
251
+
252
+ /**
253
+ * Temporary cache in which removed model instances are kept until successfully synchronised with a Proxy,
254
+ * at which point this is cleared.
255
+ * @protected
256
+ * @property {Ext.data.Model[]} removed
257
+ */
258
+ me.removed = [];
259
+
260
+ me.mixins.observable.constructor.apply(me, arguments);
261
+ me.model = Ext.ModelManager.getModel(me.model);
262
+
263
+ /**
264
+ * @property {Object} modelDefaults
265
+ * @private
266
+ * A set of default values to be applied to every model instance added via {@link #insert} or created via {@link #create}.
267
+ * This is used internally by associations to set foreign keys and other fields. See the Association classes source code
268
+ * for examples. This should not need to be used by application developers.
269
+ */
270
+ Ext.applyIf(me, {
271
+ modelDefaults: {}
272
+ });
273
+
274
+ //Supports the 3.x style of simply passing an array of fields to the store, implicitly creating a model
275
+ if (!me.model && me.fields) {
276
+ me.model = Ext.define('Ext.data.Store.ImplicitModel-' + (me.storeId || Ext.id()), {
277
+ extend: 'Ext.data.Model',
278
+ fields: me.fields,
279
+ proxy: me.proxy || me.defaultProxyType
280
+ });
281
+
282
+ delete me.fields;
283
+
284
+ me.implicitModel = true;
285
+ }
286
+
287
+ // <debug>
288
+ if (!me.model && me.useModelWarning !== false) {
289
+ if (Ext.isDefined(Ext.global.console)) {
290
+ Ext.global.console.warn('Store defined with no model. You may have mistyped the model name.');
291
+ }
292
+ }
293
+ // </debug>
294
+
295
+ //ensures that the Proxy is instantiated correctly
296
+ me.setProxy(me.proxy || me.model.getProxy());
297
+
298
+ me.proxy.on('metachange', me.onMetaChange, me);
299
+
300
+ if (me.id && !me.storeId) {
301
+ me.storeId = me.id;
302
+ delete me.id;
303
+ }
304
+
305
+ if (me.storeId) {
306
+ Ext.data.StoreManager.register(me);
307
+ }
308
+
309
+ me.mixins.sortable.initSortable.call(me);
310
+
311
+ /**
312
+ * @property {Ext.util.MixedCollection} filters
313
+ * The collection of {@link Ext.util.Filter Filters} currently applied to this Store
314
+ */
315
+ filters = me.decodeFilters(me.filters);
316
+ me.filters = new Ext.util.MixedCollection();
317
+ me.filters.addAll(filters);
318
+ },
319
+
320
+ /**
321
+ * Sets the Store's Proxy by string, config object or Proxy instance
322
+ * @param {String/Object/Ext.data.proxy.Proxy} proxy The new Proxy, which can be either a type string, a configuration object
323
+ * or an Ext.data.proxy.Proxy instance
324
+ * @return {Ext.data.proxy.Proxy} The attached Proxy object
325
+ */
326
+ setProxy: function(proxy) {
327
+ var me = this;
328
+
329
+ if (proxy instanceof Ext.data.proxy.Proxy) {
330
+ proxy.setModel(me.model);
331
+ } else {
332
+ if (Ext.isString(proxy)) {
333
+ proxy = {
334
+ type: proxy
335
+ };
336
+ }
337
+ Ext.applyIf(proxy, {
338
+ model: me.model
339
+ });
340
+
341
+ proxy = Ext.createByAlias('proxy.' + proxy.type, proxy);
342
+ }
343
+
344
+ me.proxy = proxy;
345
+
346
+ return me.proxy;
347
+ },
348
+
349
+ /**
350
+ * Returns the proxy currently attached to this proxy instance
351
+ * @return {Ext.data.proxy.Proxy} The Proxy instance
352
+ */
353
+ getProxy: function() {
354
+ return this.proxy;
355
+ },
356
+
357
+ // private
358
+ onMetaChange: function(proxy, meta) {
359
+ this.fireEvent('metachange', this, meta);
360
+ },
361
+
362
+ //saves any phantom records
363
+ create: function(data, options) {
364
+ var me = this,
365
+ instance = Ext.ModelManager.create(Ext.applyIf(data, me.modelDefaults), me.model.modelName),
366
+ operation;
367
+
368
+ options = options || {};
369
+
370
+ Ext.applyIf(options, {
371
+ action : 'create',
372
+ records: [instance]
373
+ });
374
+
375
+ operation = new Ext.data.Operation(options);
376
+
377
+ me.proxy.create(operation, me.onProxyWrite, me);
378
+
379
+ return instance;
380
+ },
381
+
382
+ read: function() {
383
+ return this.load.apply(this, arguments);
384
+ },
385
+
386
+ update: function(options) {
387
+ var me = this,
388
+ operation;
389
+ options = options || {};
390
+
391
+ Ext.applyIf(options, {
392
+ action : 'update',
393
+ records: me.getUpdatedRecords()
394
+ });
395
+
396
+ operation = new Ext.data.Operation(options);
397
+
398
+ return me.proxy.update(operation, me.onProxyWrite, me);
399
+ },
400
+
401
+ /**
402
+ * @private
403
+ * Callback for any write Operation over the Proxy. Updates the Store's MixedCollection to reflect
404
+ * the updates provided by the Proxy
405
+ */
406
+ onProxyWrite: function(operation) {
407
+ var me = this,
408
+ success = operation.wasSuccessful(),
409
+ records = operation.getRecords();
410
+
411
+ switch (operation.action) {
412
+ case 'create':
413
+ me.onCreateRecords(records, operation, success);
414
+ break;
415
+ case 'update':
416
+ me.onUpdateRecords(records, operation, success);
417
+ break;
418
+ case 'destroy':
419
+ me.onDestroyRecords(records, operation, success);
420
+ break;
421
+ }
422
+
423
+ if (success) {
424
+ me.fireEvent('write', me, operation);
425
+ me.fireEvent('datachanged', me);
426
+ me.fireEvent('refresh', me);
427
+ }
428
+ //this is a callback that would have been passed to the 'create', 'update' or 'destroy' function and is optional
429
+ Ext.callback(operation.callback, operation.scope || me, [records, operation, success]);
430
+ },
431
+
432
+ // may be implemented by store subclasses
433
+ onCreateRecords: Ext.emptyFn,
434
+
435
+ // may be implemented by store subclasses
436
+ onUpdateRecords: Ext.emptyFn,
437
+
438
+ /**
439
+ * Removes any records when a write is returned from the server.
440
+ * @private
441
+ * @param {Ext.data.Model[]} records The array of removed records
442
+ * @param {Ext.data.Operation} operation The operation that just completed
443
+ * @param {Boolean} success True if the operation was successful
444
+ */
445
+ onDestroyRecords: function(records, operation, success) {
446
+ if (success) {
447
+ this.removed = [];
448
+ }
449
+ },
450
+
451
+ //tells the attached proxy to destroy the given records
452
+ destroy: function(options) {
453
+ var me = this,
454
+ operation;
455
+
456
+ options = options || {};
457
+
458
+ Ext.applyIf(options, {
459
+ action : 'destroy',
460
+ records: me.getRemovedRecords()
461
+ });
462
+
463
+ operation = new Ext.data.Operation(options);
464
+
465
+ return me.proxy.destroy(operation, me.onProxyWrite, me);
466
+ },
467
+
468
+ /**
469
+ * @private
470
+ * Attached as the 'operationcomplete' event listener to a proxy's Batch object. By default just calls through
471
+ * to onProxyWrite.
472
+ */
473
+ onBatchOperationComplete: function(batch, operation) {
474
+ return this.onProxyWrite(operation);
475
+ },
476
+
477
+ /**
478
+ * @private
479
+ * Attached as the 'complete' event listener to a proxy's Batch object. Iterates over the batch operations
480
+ * and updates the Store's internal data MixedCollection.
481
+ */
482
+ onBatchComplete: function(batch, operation) {
483
+ var me = this,
484
+ operations = batch.operations,
485
+ length = operations.length,
486
+ i;
487
+
488
+ me.suspendEvents();
489
+
490
+ for (i = 0; i < length; i++) {
491
+ me.onProxyWrite(operations[i]);
492
+ }
493
+
494
+ me.resumeEvents();
495
+
496
+ me.fireEvent('datachanged', me);
497
+ me.fireEvent('refresh', me);
498
+ },
499
+
500
+ onBatchException: function(batch, operation) {
501
+ // //decide what to do... could continue with the next operation
502
+ // batch.start();
503
+ //
504
+ // //or retry the last operation
505
+ // batch.retry();
506
+ },
507
+
508
+ /**
509
+ * @private
510
+ * Filter function for new records.
511
+ */
512
+ filterNew: function(item) {
513
+ // only want phantom records that are valid
514
+ return item.phantom === true && item.isValid();
515
+ },
516
+
517
+ /**
518
+ * Returns all Model instances that are either currently a phantom (e.g. have no id), or have an ID but have not
519
+ * yet been saved on this Store (this happens when adding a non-phantom record from another Store into this one)
520
+ * @return {Ext.data.Model[]} The Model instances
521
+ */
522
+ getNewRecords: function() {
523
+ return [];
524
+ },
525
+
526
+ /**
527
+ * Returns all Model instances that have been updated in the Store but not yet synchronized with the Proxy
528
+ * @return {Ext.data.Model[]} The updated Model instances
529
+ */
530
+ getUpdatedRecords: function() {
531
+ return [];
532
+ },
533
+
534
+ /**
535
+ * Gets all {@link Ext.data.Model records} added or updated since the last commit. Note that the order of records
536
+ * returned is not deterministic and does not indicate the order in which records were modified. Note also that
537
+ * removed records are not included (use {@link #getRemovedRecords} for that).
538
+ * @return {Ext.data.Model[]} The added and updated Model instances
539
+ */
540
+ getModifiedRecords : function(){
541
+ return [].concat(this.getNewRecords(), this.getUpdatedRecords());
542
+ },
543
+
544
+ /**
545
+ * @private
546
+ * Filter function for updated records.
547
+ */
548
+ filterUpdated: function(item) {
549
+ // only want dirty records, not phantoms that are valid
550
+ return item.dirty === true && item.phantom !== true && item.isValid();
551
+ },
552
+
553
+ /**
554
+ * Returns any records that have been removed from the store but not yet destroyed on the proxy.
555
+ * @return {Ext.data.Model[]} The removed Model instances
556
+ */
557
+ getRemovedRecords: function() {
558
+ return this.removed;
559
+ },
560
+
561
+ filter: function(filters, value) {
562
+
563
+ },
564
+
565
+ /**
566
+ * @private
567
+ * Normalizes an array of filter objects, ensuring that they are all Ext.util.Filter instances
568
+ * @param {Object[]} filters The filters array
569
+ * @return {Ext.util.Filter[]} Array of Ext.util.Filter objects
570
+ */
571
+ decodeFilters: function(filters) {
572
+ if (!Ext.isArray(filters)) {
573
+ if (filters === undefined) {
574
+ filters = [];
575
+ } else {
576
+ filters = [filters];
577
+ }
578
+ }
579
+
580
+ var length = filters.length,
581
+ Filter = Ext.util.Filter,
582
+ config, i;
583
+
584
+ for (i = 0; i < length; i++) {
585
+ config = filters[i];
586
+
587
+ if (!(config instanceof Filter)) {
588
+ Ext.apply(config, {
589
+ root: 'data'
590
+ });
591
+
592
+ //support for 3.x style filters where a function can be defined as 'fn'
593
+ if (config.fn) {
594
+ config.filterFn = config.fn;
595
+ }
596
+
597
+ //support a function to be passed as a filter definition
598
+ if (typeof config == 'function') {
599
+ config = {
600
+ filterFn: config
601
+ };
602
+ }
603
+
604
+ filters[i] = new Filter(config);
605
+ }
606
+ }
607
+
608
+ return filters;
609
+ },
610
+
611
+ clearFilter: function(supressEvent) {
612
+
613
+ },
614
+
615
+ isFiltered: function() {
616
+
617
+ },
618
+
619
+ filterBy: function(fn, scope) {
620
+
621
+ },
622
+
623
+ /**
624
+ * Synchronizes the store with its {@link #proxy}. This asks the proxy to batch together any new, updated
625
+ * and deleted records in the store, updating the store's internal representation of the records
626
+ * as each operation completes.
627
+ *
628
+ * @param {Object} [options] Object containing one or more properties supported by the sync method (these get
629
+ * passed along to the underlying proxy's {@link Ext.data.Proxy#batch batch} method):
630
+ *
631
+ * @param {Ext.data.Batch/Object} [options.batch] A {@link Ext.data.Batch} object (or batch config to apply
632
+ * to the created batch). If unspecified a default batch will be auto-created as needed.
633
+ *
634
+ * @param {Function} [options.callback] The function to be called upon completion of the sync.
635
+ * The callback is called regardless of success or failure and is passed the following parameters:
636
+ * @param {Ext.data.Batch} options.callback.batch The {@link Ext.data.Batch batch} that was processed,
637
+ * containing all operations in their current state after processing
638
+ * @param {Object} options.callback.options The options argument that was originally passed into sync
639
+ *
640
+ * @param {Function} [options.success] The function to be called upon successful completion of the sync. The
641
+ * success function is called only if no exceptions were reported in any operations. If one or more exceptions
642
+ * occurred then the failure function will be called instead. The success function is called
643
+ * with the following parameters:
644
+ * @param {Ext.data.Batch} options.success.batch The {@link Ext.data.Batch batch} that was processed,
645
+ * containing all operations in their current state after processing
646
+ * @param {Object} options.success.options The options argument that was originally passed into sync
647
+ *
648
+ * @param {Function} [options.failure] The function to be called upon unsuccessful completion of the sync. The
649
+ * failure function is called when one or more operations returns an exception during processing (even if some
650
+ * operations were also successful). In this case you can check the batch's {@link Ext.data.Batch#exceptions
651
+ * exceptions} array to see exactly which operations had exceptions. The failure function is called with the
652
+ * following parameters:
653
+ * @param {Ext.data.Batch} options.failure.batch The {@link Ext.data.Batch} that was processed, containing all
654
+ * operations in their current state after processing
655
+ * @param {Object} options.failure.options The options argument that was originally passed into sync
656
+ *
657
+ * @param {Object} [options.scope] The scope in which to execute any callbacks (i.e. the `this` object inside
658
+ * the callback, success and/or failure functions). Defaults to the store's proxy.
659
+ *
660
+ * @return {Ext.data.Store} this
661
+ */
662
+ sync: function(options) {
663
+ var me = this,
664
+ operations = {},
665
+ toCreate = me.getNewRecords(),
666
+ toUpdate = me.getUpdatedRecords(),
667
+ toDestroy = me.getRemovedRecords(),
668
+ needsSync = false;
669
+
670
+ if (toCreate.length > 0) {
671
+ operations.create = toCreate;
672
+ needsSync = true;
673
+ }
674
+
675
+ if (toUpdate.length > 0) {
676
+ operations.update = toUpdate;
677
+ needsSync = true;
678
+ }
679
+
680
+ if (toDestroy.length > 0) {
681
+ operations.destroy = toDestroy;
682
+ needsSync = true;
683
+ }
684
+
685
+ if (needsSync && me.fireEvent('beforesync', operations) !== false) {
686
+ options = options || {};
687
+
688
+ me.proxy.batch(Ext.apply(options, {
689
+ operations: operations,
690
+ listeners: me.getBatchListeners()
691
+ }));
692
+ }
693
+
694
+ return me;
695
+ },
696
+
697
+ /**
698
+ * @private
699
+ * Returns an object which is passed in as the listeners argument to proxy.batch inside this.sync.
700
+ * This is broken out into a separate function to allow for customisation of the listeners
701
+ * @return {Object} The listeners object
702
+ */
703
+ getBatchListeners: function() {
704
+ var me = this,
705
+ listeners = {
706
+ scope: me,
707
+ exception: me.onBatchException
708
+ };
709
+
710
+ if (me.batchUpdateMode == 'operation') {
711
+ listeners.operationcomplete = me.onBatchOperationComplete;
712
+ } else {
713
+ listeners.complete = me.onBatchComplete;
714
+ }
715
+
716
+ return listeners;
717
+ },
718
+
719
+ /**
720
+ * Saves all pending changes via the configured {@link #proxy}. Use {@link #sync} instead.
721
+ * @deprecated 4.0.0 Will be removed in the next major version
722
+ */
723
+ save: function() {
724
+ return this.sync.apply(this, arguments);
725
+ },
726
+
727
+ /**
728
+ * Loads the Store using its configured {@link #proxy}.
729
+ * @param {Object} options (optional) config object. This is passed into the {@link Ext.data.Operation Operation}
730
+ * object that is created and then sent to the proxy's {@link Ext.data.proxy.Proxy#read} function
731
+ *
732
+ * @return {Ext.data.Store} this
733
+ */
734
+ load: function(options) {
735
+ var me = this,
736
+ operation;
737
+
738
+ options = options || {};
739
+
740
+ options.action = options.action || 'read';
741
+ options.filters = options.filters || me.filters.items;
742
+ options.sorters = options.sorters || me.getSorters();
743
+
744
+ operation = new Ext.data.Operation(options);
745
+
746
+ if (me.fireEvent('beforeload', me, operation) !== false) {
747
+ me.loading = true;
748
+ me.proxy.read(operation, me.onProxyLoad, me);
749
+ }
750
+
751
+ return me;
752
+ },
753
+
754
+ /**
755
+ * @private
756
+ * A model instance should call this method on the Store it has been {@link Ext.data.Model#join joined} to.
757
+ * @param {Ext.data.Model} record The model instance that was edited
758
+ * @param {String[]} modifiedFieldNames Array of field names changed during edit.
759
+ */
760
+ afterEdit : function(record, modifiedFieldNames) {
761
+ var me = this,
762
+ i, shouldSync;
763
+
764
+ if (me.autoSync && !me.autoSyncSuspended) {
765
+ for(i = modifiedFieldNames.length; i--;) {
766
+ // only sync if persistent fields were modified
767
+ if(record.fields.get(modifiedFieldNames[i]).persist) {
768
+ shouldSync = true;
769
+ break;
770
+ }
771
+ }
772
+ if(shouldSync) {
773
+ me.sync();
774
+ }
775
+ }
776
+
777
+ me.fireEvent('update', me, record, Ext.data.Model.EDIT, modifiedFieldNames);
778
+ },
779
+
780
+ /**
781
+ * @private
782
+ * A model instance should call this method on the Store it has been {@link Ext.data.Model#join joined} to..
783
+ * @param {Ext.data.Model} record The model instance that was edited
784
+ */
785
+ afterReject : function(record) {
786
+ // Must pass the 5th param (modifiedFieldNames) as null, otherwise the
787
+ // event firing machinery appends the listeners "options" object to the arg list
788
+ // which may get used as the modified fields array by a handler.
789
+ // This array is used for selective grid cell updating by Grid View.
790
+ // Null will be treated as though all cells need updating.
791
+ this.fireEvent('update', this, record, Ext.data.Model.REJECT, null);
792
+ },
793
+
794
+ /**
795
+ * @private
796
+ * A model instance should call this method on the Store it has been {@link Ext.data.Model#join joined} to.
797
+ * @param {Ext.data.Model} record The model instance that was edited
798
+ */
799
+ afterCommit : function(record) {
800
+ // Must pass the 5th param (modifiedFieldNames) as null, otherwise the
801
+ // event firing machinery appends the listeners "options" object to the arg list
802
+ // which may get used as the modified fields array by a handler.
803
+ // This array is used for selective grid cell updating by Grid View.
804
+ // Null will be treated as though all cells need updating.
805
+ this.fireEvent('update', this, record, Ext.data.Model.COMMIT, null);
806
+ },
807
+
808
+ // private
809
+ destroyStore: function() {
810
+ var me = this;
811
+
812
+ if (!me.isDestroyed) {
813
+ if (me.storeId) {
814
+ Ext.data.StoreManager.unregister(me);
815
+ }
816
+ me.clearData();
817
+ me.data = me.tree = me.sorters = me.filters = me.groupers = null;
818
+ if (me.reader) {
819
+ me.reader.destroyReader();
820
+ }
821
+ me.proxy = me.reader = me.writer = null;
822
+ me.clearListeners();
823
+ me.isDestroyed = true;
824
+
825
+ if (me.implicitModel) {
826
+ Ext.destroy(me.model);
827
+ } else {
828
+ me.model = null;
829
+ }
830
+ }
831
+ },
832
+
833
+ // private
834
+ doSort: function(sorterFn) {
835
+ var me = this;
836
+ if (me.remoteSort) {
837
+ //the load function will pick up the new sorters and request the sorted data from the proxy
838
+ me.load();
839
+ } else {
840
+ me.data.sortBy(sorterFn);
841
+ me.fireEvent('datachanged', me);
842
+ me.fireEvent('refresh', me);
843
+ }
844
+ },
845
+
846
+ // to be implemented by subclasses
847
+ clearData: Ext.emptyFn,
848
+
849
+ // to be implemented by subclasses
850
+ getCount: Ext.emptyFn,
851
+
852
+ // to be implemented by subclasses
853
+ getById: Ext.emptyFn,
854
+
855
+ /**
856
+ * Removes all records from the store. This method does a "fast remove",
857
+ * individual remove events are not called. The {@link #clear} event is
858
+ * fired upon completion.
859
+ * @method
860
+ */
861
+ removeAll: Ext.emptyFn,
862
+ // individual store subclasses should implement a "fast" remove
863
+ // and fire a clear event afterwards
864
+
865
+ /**
866
+ * Returns true if the Store is currently performing a load operation
867
+ * @return {Boolean} True if the Store is currently loading
868
+ */
869
+ isLoading: function() {
870
+ return !!this.loading;
871
+ },
872
+
873
+ /**
874
+ * Suspends automatically syncing the Store with its Proxy. Only applicable if {@link #autoSync} is `true`
875
+ */
876
+ suspendAutoSync: function() {
877
+ this.autoSyncSuspended = true;
878
+ },
879
+
880
+ /**
881
+ * Resumes automatically syncing the Store with its Proxy. Only applicable if {@link #autoSync} is `true`
882
+ */
883
+ resumeAutoSync: function() {
884
+ this.autoSyncSuspended = false;
885
+ }
886
+
887
+ });