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,323 @@
1
+ describe("Ext.Number", function(){
2
+ var Number = Ext.Number;
3
+
4
+ describe("constraining a number", function(){
5
+ describe("integers", function(){
6
+ describe("if the number is within the constaints", function(){
7
+ it("should leave the number alone if it is equal to the min and the max", function(){
8
+ expect(Number.constrain(1, 1, 1)).toEqual(1);
9
+ });
10
+
11
+ it("should leave the number alone if it is equal to the min", function(){
12
+ expect(Number.constrain(1, 1, 5)).toEqual(1);
13
+ });
14
+
15
+ it("should leave the number alone if it is equal to the max", function(){
16
+ expect(Number.constrain(5, 1, 5)).toEqual(5);
17
+ });
18
+
19
+ it("should leave the number alone if it is within the min and the max", function(){
20
+ expect(Number.constrain(3, 1, 5)).toEqual(3);
21
+ });
22
+
23
+ it("should leave a negative number alone if it is within the min and the max", function(){
24
+ expect(Number.constrain(-3, -5, -1)).toEqual(-3);
25
+ });
26
+ });
27
+
28
+ describe("if the number is not within the constraints", function(){
29
+ it("should make the number equal to the min value", function(){
30
+ expect(Number.constrain(1, 3, 5)).toEqual(3);
31
+ });
32
+
33
+ it("should make the number equal to the max value", function(){
34
+ expect(Number.constrain(100, 1, 5)).toEqual(5);
35
+ });
36
+
37
+ describe("and the number is negative", function(){
38
+ it("should make the number equal to the min value", function(){
39
+ expect(Number.constrain(-10, -50, -30)).toEqual(-30);
40
+ });
41
+
42
+ it("should make the number equal to the max value", function(){
43
+ expect(Number.constrain(-100, -50, -30)).toEqual(-50);
44
+ });
45
+ });
46
+ });
47
+
48
+ describe("constrain NaN", function() {
49
+ it("should never constrain a NaN between two numbers", function(){
50
+ expect(isNaN(Number.constrain(NaN, 3, 5))).toEqual(true);
51
+ });
52
+ it("should never constrain a NaN between zero and undefined", function(){
53
+ expect(isNaN(Number.constrain(NaN, 0, undefined))).toEqual(true);
54
+ });
55
+ it("should never constrain a NaN between undefined and zero", function(){
56
+ expect(isNaN(Number.constrain(NaN, undefined, 0))).toEqual(true);
57
+ });
58
+ it("should never constrain a NaN between a number and undefined", function(){
59
+ expect(isNaN(Number.constrain(NaN, 10, undefined))).toEqual(true);
60
+ });
61
+ it("should never constrain a NaN between undefined and a number", function(){
62
+ expect(isNaN(Number.constrain(NaN, undefined, 10))).toEqual(true);
63
+ });
64
+ it("should never constrain a NaN between two undefined values", function(){
65
+ expect(isNaN(Number.constrain(NaN, undefined, undefined))).toEqual(true);
66
+ });
67
+ });
68
+
69
+ describe("constrain with NaN/undefined max", function() {
70
+ it("should ignore NaN max", function(){
71
+ expect(Number.constrain(2, 1, NaN)).toEqual(2);
72
+ });
73
+ it("should ignore NaN max and limit to min", function(){
74
+ expect(Number.constrain(2, 5, NaN)).toEqual(5);
75
+ });
76
+ it("should ignore undefined max", function(){
77
+ expect(Number.constrain(2, 1, undefined)).toEqual(2);
78
+ });
79
+ it("should ignore undefined max and limit to min", function(){
80
+ expect(Number.constrain(2, 5, undefined)).toEqual(5);
81
+ });
82
+ });
83
+
84
+ describe("constrain with NaN/undefined min", function() {
85
+ it("should ignore NaN min", function(){
86
+ expect(Number.constrain(2, NaN, 5)).toEqual(2);
87
+ });
88
+ it("should ignore NaN min and limit to max", function(){
89
+ expect(Number.constrain(20, NaN, 5)).toEqual(5);
90
+ });
91
+ it("should ignore undefined min", function(){
92
+ expect(Number.constrain(2, undefined, 5)).toEqual(2);
93
+ });
94
+ it("should ignore undefined min and limit to max", function(){
95
+ expect(Number.constrain(20, undefined, 5)).toEqual(5);
96
+ });
97
+ });
98
+
99
+ describe("constrain with NaN/undefined min/max", function() {
100
+ it("should ignore NaN min/max", function(){
101
+ expect(Number.constrain(2, NaN, NaN)).toEqual(2);
102
+ });
103
+ it("should ignore undefined min/max", function(){
104
+ expect(Number.constrain(2, undefined, undefined)).toEqual(2);
105
+ });
106
+ it("should ignore NaN min and undefined max", function(){
107
+ expect(Number.constrain(2, NaN, undefined)).toEqual(2);
108
+ });
109
+ it("should ignore undefined min and NaN max", function(){
110
+ expect(Number.constrain(2, undefined, NaN)).toEqual(2);
111
+ });
112
+ });
113
+ });
114
+
115
+ describe("floating point numbers", function(){
116
+ describe("if the number is within the constaints", function(){
117
+ it("should leave the number alone", function(){
118
+ expect(Number.constrain(3.3, 3.1, 3.5)).toEqual(3.3);
119
+ });
120
+
121
+ it("should leave a negative number alone", function(){
122
+ expect(Number.constrain(-3.3, -3.5, -3.1)).toEqual(-3.3);
123
+ });
124
+ });
125
+
126
+ describe("and the number is negative", function(){
127
+ it("should make the number equal to the min value", function(){
128
+ expect(Number.constrain(-3.3, -3.1, -3)).toEqual(-3.1);
129
+ });
130
+
131
+ it("should make the number equal to the max value", function(){
132
+ expect(Number.constrain(-2.1, -3.1, -3)).toEqual(-3);
133
+ });
134
+ });
135
+ });
136
+ });
137
+
138
+ describe("toFixed", function(){
139
+
140
+ var f = Number.toFixed;
141
+
142
+ it("should return a string", function(){
143
+ expect(typeof f(1)).toEqual('string');
144
+ });
145
+
146
+ it("should default precision to 0", function(){
147
+ expect(f(1.23456)).toEqual('1');
148
+ });
149
+
150
+ it("should output the correct number of decimal places", function(){
151
+ expect(f(1, 3)).toEqual('1.000');
152
+ });
153
+
154
+ it("should round correctly", function(){
155
+ expect(f(1.9834657, 1)).toEqual('2.0');
156
+ });
157
+
158
+ it("should round with negative numbers", function(){
159
+ expect(f(-3.4265, 2)).toEqual('-3.43');
160
+ });
161
+ });
162
+
163
+ describe("snap", function(){
164
+
165
+ // Params are (value, snapincrement, minValue, maxValue)
166
+ var snap = Number.snap;
167
+
168
+ it("should enforce minValue if increment is zero", function(){
169
+ expect(snap(40, 0, 50, 100)).toEqual(50);
170
+ });
171
+
172
+ it("should enforce maxValue if increment is zero", function(){
173
+ expect(snap(5000, 0, 0, 100)).toEqual(100);
174
+ });
175
+
176
+ it("should enforce minValue if passed", function(){
177
+ expect(snap(0, 2, 1, 100)).toEqual(1);
178
+ });
179
+
180
+ it("should not enforce a minimum if no minValue passed", function(){
181
+ expect(snap(21, 2, undefined, 100)).toEqual(22);
182
+ });
183
+
184
+ it("should enforce maxValue if passed", function(){
185
+ expect(snap(1000, 2, undefined, 100)).toEqual(100);
186
+ });
187
+
188
+ it("should not enforce a maximum if no maxValue passed", function(){
189
+ expect(snap(21, 2, undefined, undefined)).toEqual(22);
190
+ });
191
+
192
+ it("should snap to a snap point based upon zero", function(){
193
+ expect(snap(56, 2, 55, 65)).toEqual(56);
194
+ expect(snap(100, 2, 55, 66)).toEqual(66);
195
+ });
196
+
197
+ it("should enforce the minValue", function(){
198
+ expect(snap(20, 2, 55, 65)).toEqual(55);
199
+ });
200
+
201
+ it("should round to the nearest snap point", function(){
202
+ expect(snap(4, 5, 0, 100)).toEqual(5);
203
+ });
204
+
205
+ it("should snap negative numbers", function() {
206
+ expect(snap(-9, 10, -100, 0)).toBe(-10);
207
+ expect(snap(-1, 10, -100, 0)).toBe(0);
208
+ });
209
+
210
+ });
211
+
212
+ describe("snapInRange", function(){
213
+
214
+ // Params are (value, snapincrement, minValue, maxValue)
215
+ var snapInRange = Number.snapInRange;
216
+
217
+ it("should enforce minValue if increment is zero", function(){
218
+ expect(snapInRange(50, 0, 0, 100)).toEqual(50);
219
+ });
220
+
221
+ it("should enforce maxValue if increment is zero", function(){
222
+ expect(snapInRange(5000, 0, 0, 100)).toEqual(100);
223
+ });
224
+
225
+ it("should enforce minValue if passed", function(){
226
+ expect(snapInRange(0, 2, 1, 100)).toEqual(1);
227
+ });
228
+
229
+ it("should not enforce a minimum if no minValue passed", function(){
230
+ expect(snapInRange(21, 2, undefined, 100)).toEqual(22);
231
+ });
232
+
233
+ it("should enforce maxValue if passed", function(){
234
+ expect(snapInRange(1000, 2, undefined, 100)).toEqual(100);
235
+ });
236
+
237
+ it("should not enforce a maximum if no maxValue passed", function(){
238
+ expect(snapInRange(21, 2, undefined, undefined)).toEqual(22);
239
+ });
240
+
241
+ // Valid values are 55, 57, 59, 61, 63, 65
242
+ it("should snap to a snap point based upon the minValue", function(){
243
+ expect(snapInRange(56, 2, 55, 65)).toEqual(57);
244
+ });
245
+
246
+ it("should enforce the minValue", function(){
247
+ expect(snapInRange(20, 2, 55, 65)).toEqual(55);
248
+ });
249
+
250
+ // Valid values are still 55, 57, 59, 61, 63, 65
251
+ it("should snap to a snap point based upon the minValue even if maxValue is not on a snap point", function(){
252
+ expect(snapInRange(100, 2, 55, 66)).toEqual(67);
253
+ });
254
+
255
+ it("should round to the nearest snap point", function() {
256
+ expect(snapInRange(4, 5, 0, 100)).toEqual(5);
257
+
258
+ expect(snapInRange(10, 10, 1, 101)).toBe(11);
259
+ expect(snapInRange(11, 10, 1, 101)).toBe(11);
260
+ expect(snapInRange(12, 10, 1, 101)).toBe(11);
261
+ expect(snapInRange(20, 10, 1, 101)).toBe(21);
262
+ expect(snapInRange(21, 10, 1, 101)).toBe(21);
263
+ expect(snapInRange(22, 10, 1, 101)).toBe(21);
264
+ });
265
+
266
+ it("should handle negative ranges", function() {
267
+ expect(snapInRange(-10, 10, -101, -1)).toBe(-11);
268
+ expect(snapInRange(-11, 10, -101, -1)).toBe(-11);
269
+ expect(snapInRange(-12, 10, -101, -1)).toBe(-11);
270
+ expect(snapInRange(-20, 10, -101, -1)).toBe(-21);
271
+ expect(snapInRange(-21, 10, -101, -1)).toBe(-21);
272
+ expect(snapInRange(-22, 10, -101, -1)).toBe(-21);
273
+ });
274
+ });
275
+
276
+ describe("from", function() {
277
+ var from = Ext.Number.from;
278
+
279
+ it("should handle numbers", function() {
280
+ expect(from(2, 1)).toBe(2);
281
+ expect(from(-2, 1)).toBe(-2);
282
+ expect(from(999999, 1)).toBe(999999);
283
+ expect(from(-999999, 1)).toBe(-999999);
284
+ expect(from(999999.999, 1)).toBe(999999.999);
285
+ expect(from(-999999.999, 1)).toBe(-999999.999);
286
+ });
287
+
288
+ it("should handle strings that represent numbers", function() {
289
+ expect(from("2", 1)).toBe(2);
290
+ expect(from("-2", 1)).toBe(-2);
291
+ expect(from("999999", 1)).toBe(999999);
292
+ expect(from("-999999", 1)).toBe(-999999);
293
+ expect(from("999999.999", 1)).toBe(999999.999);
294
+ expect(from("-999999.999", 1)).toBe(-999999.999);
295
+ });
296
+
297
+ it("should handle infinity", function() {
298
+ expect(from(1/0, 1)).toBe(window.Number.POSITIVE_INFINITY);
299
+ expect(from(-1/0, 1)).toBe(window.Number.NEGATIVE_INFINITY);
300
+ });
301
+
302
+ it("should return default value if value is not a number or numeric string", function() {
303
+ expect(from("", 100)).toBe(100);
304
+ expect(from(true, 100)).toBe(100);
305
+ expect(from(false, 100)).toBe(100);
306
+ expect(from("I would like to be a number", 100)).toBe(100);
307
+ expect(from("12345ImAlmostANumber", 100)).toBe(100);
308
+ });
309
+ });
310
+
311
+ describe("randomInt", function() {
312
+ var randomInt = Ext.Number.randomInt;
313
+ it("should return a random integer within the specified range", function() {
314
+ expect(randomInt(0, 100)).not.toBeLessThan(0);
315
+ expect(randomInt(0, 100)).not.toBeGreaterThan(100);
316
+ expect(randomInt(-100, 0)).not.toBeLessThan(-100);
317
+ expect(randomInt(-100, 0)).not.toBeGreaterThan(0);
318
+ expect(randomInt(1, 1)).toBe(1);
319
+ expect(randomInt(1, 1)).toBe(1);
320
+ });
321
+ });
322
+
323
+ });
@@ -0,0 +1,591 @@
1
+ describe("Ext.Object", function(){
2
+
3
+ describe("getKeys", function(){
4
+ var getKeys = Ext.Object.getKeys;
5
+ it("should return an empty array for a null value", function(){
6
+ expect(getKeys(null)).toEqual([]);
7
+ });
8
+
9
+ it("should return an empty array for an empty object", function(){
10
+ expect(getKeys({})).toEqual([]);
11
+ });
12
+
13
+ it("should return all the keys in the object", function(){
14
+ expect(getKeys({
15
+ foo: 1,
16
+ bar: 2,
17
+ baz: 3
18
+ })).toEqual(['foo', 'bar', 'baz']);
19
+ });
20
+ });
21
+
22
+ describe("getValues", function(){
23
+ var getValues = Ext.Object.getValues;
24
+ it("should return an empty array for a null value", function(){
25
+ expect(getValues(null)).toEqual([]);
26
+ });
27
+
28
+ it("should return an empty array for an empty object", function(){
29
+ expect(getValues({})).toEqual([]);
30
+ });
31
+
32
+ it("should return all the values in the object", function(){
33
+ expect(getValues({
34
+ foo: 1,
35
+ bar: 2,
36
+ baz: 3
37
+ })).toEqual([1, 2, 3]);
38
+ });
39
+ });
40
+
41
+ describe("getKey", function(){
42
+ var getKey = Ext.Object.getKey;
43
+
44
+ it("should return null for a null object", function(){
45
+ expect(getKey(null, 'foo')).toBeNull();
46
+ });
47
+
48
+ it("should return null for an empty object", function(){
49
+ expect(getKey({}, 'foo')).toBeNull();
50
+ });
51
+
52
+ it("should return null if the value doesn't exist", function(){
53
+ expect(getKey({
54
+ foo: 1,
55
+ bar: 2
56
+ }, 3)).toBeNull();
57
+ });
58
+
59
+ it("should only do strict matching", function(){
60
+ expect(getKey({
61
+ foo: 1
62
+ }, '1')).toBeNull();
63
+ });
64
+
65
+ it("should return the correct key if it matches", function(){
66
+ expect(getKey({
67
+ foo: 1
68
+ }, 1)).toEqual('foo');
69
+ });
70
+
71
+ it("should only return the first matched value", function(){
72
+ expect(getKey({
73
+ bar: 1,
74
+ foo: 1
75
+ }, 1)).toEqual('bar');
76
+ });
77
+ });
78
+
79
+ describe("each", function(){
80
+ var each = Ext.Object.each;
81
+
82
+ describe("scope/params", function(){
83
+ it("should execute using the passed scope", function(){
84
+ var scope = {},
85
+ actual;
86
+
87
+ each({
88
+ foo: 1,
89
+ bar: 'value',
90
+ baz: false
91
+ }, function(){
92
+ actual = this;
93
+ }, scope);
94
+ expect(actual).toBe(scope);
95
+ });
96
+
97
+ it("should default the scope to the object", function(){
98
+ var o = {
99
+ foo: 1,
100
+ bar: 'value',
101
+ baz: false
102
+ }, actual;
103
+
104
+ each(o, function(){
105
+ actual = this;
106
+ });
107
+ expect(actual).toBe(o);
108
+ });
109
+
110
+ it("should execute passing the key value and object", function(){
111
+ var keys = [],
112
+ values = [],
113
+ data = {
114
+ foo: 1,
115
+ bar: 'value',
116
+ baz: false
117
+ },
118
+ obj;
119
+
120
+ each(data, function(key, value, o){
121
+ keys.push(key);
122
+ values.push(value);
123
+ obj = o;
124
+ });
125
+
126
+ expect(keys).toEqual(['foo', 'bar', 'baz']);
127
+ expect(values).toEqual([1, 'value', false]);
128
+ expect(obj).toBe(data);
129
+ });
130
+ });
131
+
132
+ describe("stopping", function(){
133
+ it("should not stop by default", function(){
134
+ var count = 0;
135
+ each({
136
+ a: 1,
137
+ b: 2,
138
+ c: 3,
139
+ d: 4
140
+ }, function(){
141
+ ++count;
142
+ });
143
+ expect(count).toEqual(4);
144
+ });
145
+
146
+ it("should only stop if the function returns false", function(){
147
+ var count = 0;
148
+ each({
149
+ a: 1,
150
+ b: 2,
151
+ c: 3,
152
+ d: 4
153
+ }, function(){
154
+ ++count;
155
+ return null;
156
+ });
157
+ expect(count).toEqual(4);
158
+ });
159
+
160
+ it("should stop immediately when false is returned", function(){
161
+ var count = 0;
162
+ each({
163
+ a: 1,
164
+ b: 2,
165
+ c: 3,
166
+ d: 4
167
+ }, function(key){
168
+ ++count;
169
+ return key != 'b';
170
+ });
171
+ expect(count).toEqual(2);
172
+ });
173
+ });
174
+ });
175
+
176
+ describe("toQueryString", function(){
177
+ var toQueryString = Ext.Object.toQueryString;
178
+
179
+ describe("defaults", function(){
180
+ it("should return an empty string for a null object", function(){
181
+ expect(toQueryString(null)).toEqual('');
182
+ });
183
+
184
+ it("should return an empty string for an empty object", function(){
185
+ expect(toQueryString({})).toEqual('');
186
+ });
187
+ });
188
+
189
+ describe("simple values", function(){
190
+ it("should separate a property/value by an =", function(){
191
+ expect(toQueryString({
192
+ foo: 1
193
+ })).toEqual('foo=1');
194
+ });
195
+
196
+ it("should separate pairs by an &", function(){
197
+ expect(toQueryString({
198
+ foo: 1,
199
+ bar: 2
200
+ })).toEqual('foo=1&bar=2');
201
+ });
202
+
203
+ it("should handle properties with empty values", function(){
204
+ expect(toQueryString({
205
+ foo: null
206
+ })).toEqual('foo=');
207
+ });
208
+
209
+ it("should encode dates", function(){
210
+ var d = new Date(2011, 0, 1);
211
+ expect(toQueryString({
212
+ foo: d
213
+ })).toEqual('foo=2011-01-01T00%3A00%3A00');
214
+ });
215
+
216
+ it("should url encode the key", function(){
217
+ expect(toQueryString({
218
+ 'a prop': 1
219
+ })).toEqual('a%20prop=1');
220
+ });
221
+
222
+ it("should url encode the value", function(){
223
+ expect(toQueryString({
224
+ prop: '$300 & 5 cents'
225
+ })).toEqual('prop=%24300%20%26%205%20cents');
226
+ });
227
+
228
+ it("should encode both key and value at the same time", function(){
229
+ expect(toQueryString({
230
+ 'a prop': '$300'
231
+ })).toEqual('a%20prop=%24300');
232
+ });
233
+ });
234
+
235
+ describe("arrays", function(){
236
+ it("should support an array value", function(){
237
+ expect(toQueryString({
238
+ foo: [1, 2, 3]
239
+ })).toEqual('foo=1&foo=2&foo=3');
240
+ });
241
+
242
+ it("should be able to support multiple arrays", function(){
243
+ expect(toQueryString({
244
+ foo: [1, 2],
245
+ bar: [3, 4]
246
+ })).toEqual('foo=1&foo=2&bar=3&bar=4');
247
+ });
248
+
249
+ it("should be able to mix arrays and normal values", function(){
250
+ expect(toQueryString({
251
+ foo: 'val1',
252
+ bar: ['val2', 'val3'],
253
+ baz: 'val4'
254
+ })).toEqual('foo=val1&bar=val2&bar=val3&baz=val4');
255
+ });
256
+ });
257
+
258
+ describe("recursive", function() {
259
+ it("should support both nested arrays and objects", function() {
260
+ expect(decodeURIComponent(Ext.Object.toQueryString({
261
+ username: 'Jacky',
262
+ dateOfBirth: {
263
+ day: 1,
264
+ month: 2,
265
+ year: 1911
266
+ },
267
+ hobbies: ['coding', 'eating', 'sleeping', [1,2]]
268
+ }, true))).toEqual('username=Jacky&dateOfBirth[day]=1&dateOfBirth[month]=2&dateOfBirth[year]=1911&hobbies[0]=coding&hobbies[1]=eating&hobbies[2]=sleeping&hobbies[3][0]=1&hobbies[3][1]=2')
269
+ })
270
+ });
271
+
272
+ });
273
+
274
+ describe("merge", function(){
275
+ var merge = Ext.Object.merge;
276
+
277
+ describe("complex values", function(){
278
+ it("should copy a simple object but not have the same reference", function(){
279
+ var o = {
280
+ foo: 'prop',
281
+ tada: {
282
+ blah: 'bleh'
283
+ }
284
+ },
285
+ result = merge({}, o);
286
+
287
+ expect(result).toEqual({
288
+ foo: 'prop',
289
+ tada: {
290
+ blah: 'bleh'
291
+ }
292
+ });
293
+ expect(result).not.toBe(o);
294
+ });
295
+
296
+ it("should NOT merge an instance (the constructor of which is not Object)", function(){
297
+ var instance = new Ext.Base(),
298
+ o = {
299
+ foo: instance
300
+ },
301
+ result = merge({}, o);
302
+
303
+ expect(result.foo).toBe(instance);
304
+ });
305
+ });
306
+
307
+ describe("overwriting properties", function(){
308
+ it("should merge objects if an object exists on the source and the passed value is an object literal", function(){
309
+ expect(merge({
310
+ prop: {
311
+ foo: 1
312
+ }
313
+ }, {
314
+ prop: {
315
+ bar: 2
316
+ }
317
+ })).toEqual({
318
+ prop: {
319
+ foo: 1,
320
+ bar: 2
321
+ }
322
+ });
323
+ });
324
+
325
+ it("should replace the value of the target object if it is not an object", function(){
326
+ var o = new Ext.Base(),
327
+ result = merge({
328
+ prop: 1
329
+ }, {
330
+ prop: o
331
+ });
332
+
333
+ expect(result.prop).toEqual(o);
334
+ expect(result.prop).toBe(o);
335
+ });
336
+
337
+ it("should overwrite simple values", function(){
338
+ expect(merge({
339
+ prop: 1
340
+ }, {
341
+ prop: 2
342
+ })).toEqual({
343
+ prop: 2
344
+ });
345
+ });
346
+ });
347
+
348
+ describe("merging objects", function(){
349
+ it("should merge objects", function(){
350
+ expect(merge({}, {
351
+ foo: 1
352
+ })).toEqual({
353
+ foo: 1
354
+ });
355
+ });
356
+
357
+ it("should merge right to left", function(){
358
+ expect(merge({}, {
359
+ foo: 1
360
+ }, {
361
+ foo: 2
362
+ }, {
363
+ foo: 3
364
+ })).toEqual({
365
+ foo: 3
366
+ })
367
+ });
368
+ });
369
+
370
+ it("should modify and return the source", function(){
371
+ var o = {},
372
+ result = merge(o, {
373
+ foo: 'bar'
374
+ });
375
+
376
+ expect(result.foo).toEqual('bar');
377
+ expect(result).toBe(o);
378
+
379
+ });
380
+ });
381
+
382
+ describe("toQueryObjects", function() {
383
+ var object = {
384
+ username: 'Jacky',
385
+ dateOfBirth: {
386
+ day: 1,
387
+ month: 2,
388
+ year: 1911
389
+ },
390
+ hobbies: ['coding', 'eating', 'sleeping', [1,2,3]]
391
+ };
392
+
393
+ it("simple key value", function() {
394
+ expect(Ext.Object.toQueryObjects('username', 'Jacky')).toEqual([
395
+ {
396
+ name: 'username',
397
+ value: 'Jacky'
398
+ }
399
+ ]);
400
+ });
401
+
402
+ it("non-recursive array", function() {
403
+ expect(Ext.Object.toQueryObjects('hobbies', ['eating', 'sleeping', 'coding'])).toEqual([
404
+ {
405
+ name: 'hobbies',
406
+ value: 'eating'
407
+ },
408
+ {
409
+ name: 'hobbies',
410
+ value: 'sleeping'
411
+ },
412
+ {
413
+ name: 'hobbies',
414
+ value: 'coding'
415
+ }
416
+ ]);
417
+ });
418
+
419
+ it("recursive object", function() {
420
+ expect(Ext.Object.toQueryObjects('dateOfBirth', {
421
+ day: 1,
422
+ month: 2,
423
+ year: 1911,
424
+ somethingElse: {
425
+ nested: {
426
+ very: 'very',
427
+ deep: {
428
+ inHere: true
429
+ }
430
+ }
431
+ }
432
+ }, true)).toEqual([
433
+ {
434
+ name: 'dateOfBirth[day]',
435
+ value: 1
436
+ },
437
+ {
438
+ name: 'dateOfBirth[month]',
439
+ value: 2
440
+ },
441
+ {
442
+ name: 'dateOfBirth[year]',
443
+ value: 1911
444
+ },
445
+ {
446
+ name: 'dateOfBirth[somethingElse][nested][very]',
447
+ value: 'very'
448
+ },
449
+ {
450
+ name: 'dateOfBirth[somethingElse][nested][deep][inHere]',
451
+ value: true
452
+ }
453
+ ]);
454
+ });
455
+
456
+ it("recursive array", function() {
457
+ expect(Ext.Object.toQueryObjects('hobbies', [
458
+ 'eating', 'sleeping', 'coding', ['even', ['more']]
459
+ ], true)).toEqual([
460
+ {
461
+ name: 'hobbies[0]',
462
+ value: 'eating'
463
+ },
464
+ {
465
+ name: 'hobbies[1]',
466
+ value: 'sleeping'
467
+ },
468
+ {
469
+ name: 'hobbies[2]',
470
+ value: 'coding'
471
+ },
472
+ {
473
+ name: 'hobbies[3][0]',
474
+ value: 'even'
475
+ },
476
+ {
477
+ name: 'hobbies[3][1][0]',
478
+ value: 'more'
479
+ }
480
+ ]);
481
+ });
482
+ });
483
+
484
+ describe("fromQueryString", function() {
485
+ var fromQueryString = Ext.Object.fromQueryString;
486
+
487
+ describe("standard mode", function() {
488
+ it("empty string", function(){
489
+ expect(fromQueryString('')).toEqual({});
490
+ });
491
+
492
+ it("simple single key value pair", function(){
493
+ expect(fromQueryString('name=Jacky')).toEqual({name: 'Jacky'});
494
+ });
495
+
496
+ it("simple single key value pair with empty value", function(){
497
+ expect(fromQueryString('name=')).toEqual({name: ''});
498
+ });
499
+
500
+ it("multiple key value pairs", function(){
501
+ expect(fromQueryString('name=Jacky&loves=food')).toEqual({name: 'Jacky', loves: 'food'});
502
+ });
503
+
504
+ it("multiple key value pairs with URI encoded component", function(){
505
+ expect(fromQueryString('a%20property=%24300%20%26%205%20cents')).toEqual({'a property': '$300 & 5 cents'});
506
+ });
507
+
508
+ it("simple array", function(){
509
+ expect(fromQueryString('foo=1&foo=2&foo=3')).toEqual({foo: ['1', '2', '3']});
510
+ });
511
+ });
512
+
513
+ describe("recursive mode", function() {
514
+ it("empty string", function(){
515
+ expect(fromQueryString('', true)).toEqual({});
516
+ });
517
+
518
+ it("simple single key value pair", function(){
519
+ expect(fromQueryString('name=Jacky', true)).toEqual({name: 'Jacky'});
520
+ });
521
+
522
+ it("simple single key value pair with empty value", function(){
523
+ expect(fromQueryString('name=', true)).toEqual({name: ''});
524
+ });
525
+
526
+ it("multiple key value pairs", function(){
527
+ expect(fromQueryString('name=Jacky&loves=food', true)).toEqual({name: 'Jacky', loves: 'food'});
528
+ });
529
+
530
+ it("multiple key value pairs with URI encoded component", function(){
531
+ expect(fromQueryString('a%20property=%24300%20%26%205%20cents', true)).toEqual({'a property': '$300 & 5 cents'});
532
+ });
533
+
534
+ it("simple array (last value with the same name will overwrite previous value)", function(){
535
+ expect(fromQueryString('foo=1&foo=2&foo=3', true)).toEqual({foo: '3'});
536
+ });
537
+
538
+ it("simple array with empty brackets", function(){
539
+ expect(fromQueryString('foo[]=1&foo[]=2&foo[]=3', true)).toEqual({foo: ['1', '2', '3']});
540
+ });
541
+
542
+ it("simple array with non-empty brackets", function(){
543
+ expect(fromQueryString('foo[0]=1&foo[1]=2&foo[2]=3', true)).toEqual({foo: ['1', '2', '3']});
544
+ });
545
+
546
+ it("simple array with non-empty brackets and non sequential keys", function(){
547
+ expect(fromQueryString('foo[3]=1&foo[1]=2&foo[2]=3&foo[0]=0', true)).toEqual({foo: ['0', '2', '3', '1']});
548
+ });
549
+
550
+ it("simple array with non-empty brackets and non sequential keys and holes", function(){
551
+ expect(fromQueryString('foo[3]=1&foo[1]=2&foo[2]=3', true)).toEqual({foo: [undefined, '2', '3', '1']});
552
+ });
553
+
554
+ it("nested array", function(){
555
+ expect(fromQueryString('some[0][0]=stuff&some[0][1]=morestuff&some[0][]=otherstuff&some[1]=thingelse', true)).toEqual({
556
+ some: [
557
+ ['stuff', 'morestuff', 'otherstuff'],
558
+ 'thingelse'
559
+ ]
560
+ });
561
+ });
562
+
563
+ it("nested object", function(){
564
+ expect(fromQueryString('dateOfBirth[day]=1&dateOfBirth[month]=2&dateOfBirth[year]=1911&dateOfBirth[extra][hour]=4&dateOfBirth[extra][minute]=30', true)).toEqual({
565
+ dateOfBirth: {
566
+ day: '1',
567
+ month: '2',
568
+ year: '1911',
569
+ extra: {
570
+ hour: '4',
571
+ minute: '30'
572
+ }
573
+ }
574
+ });
575
+ });
576
+
577
+ it("nested mixed types", function(){
578
+ expect(fromQueryString('username=Jacky&dateOfBirth[day]=1&dateOfBirth[month]=2&dateOfBirth[year]=1911&hobbies[0]=coding&hobbies[1]=eating&hobbies[2]=sleeping&hobbies[3][0]=nested&hobbies[3][1]=stuff', true)).toEqual({
579
+ username: 'Jacky',
580
+ dateOfBirth: {
581
+ day: '1',
582
+ month: '2',
583
+ year: '1911'
584
+ },
585
+ hobbies: ['coding', 'eating', 'sleeping', ['nested', 'stuff']]
586
+ });
587
+ });
588
+ });
589
+ });
590
+
591
+ });