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,120 @@
1
+ /**
2
+ * A class which handles loading of data from a server into the Fields of an {@link Ext.form.Basic}.
3
+ *
4
+ * Instances of this class are only created by a {@link Ext.form.Basic Form} when {@link Ext.form.Basic#load load}ing.
5
+ *
6
+ * ## Response Packet Criteria
7
+ *
8
+ * A response packet **must** contain:
9
+ *
10
+ * - **`success`** property : Boolean
11
+ * - **`data`** property : Object
12
+ *
13
+ * The `data` property contains the values of Fields to load. The individual value object for each Field is passed to
14
+ * the Field's {@link Ext.form.field.Field#setValue setValue} method.
15
+ *
16
+ * ## JSON Packets
17
+ *
18
+ * By default, response packets are assumed to be JSON, so for the following form load call:
19
+ *
20
+ * var myFormPanel = new Ext.form.Panel({
21
+ * title: 'Client and routing info',
22
+ * items: [{
23
+ * fieldLabel: 'Client',
24
+ * name: 'clientName'
25
+ * }, {
26
+ * fieldLabel: 'Port of loading',
27
+ * name: 'portOfLoading'
28
+ * }, {
29
+ * fieldLabel: 'Port of discharge',
30
+ * name: 'portOfDischarge'
31
+ * }]
32
+ * });
33
+ * myFormPanel.{@link Ext.form.Panel#getForm getForm}().{@link Ext.form.Basic#load load}({
34
+ * url: '/getRoutingInfo.php',
35
+ * params: {
36
+ * consignmentRef: myConsignmentRef
37
+ * },
38
+ * failure: function(form, action) {
39
+ * Ext.Msg.alert("Load failed", action.result.errorMessage);
40
+ * }
41
+ * });
42
+ *
43
+ * a **success response** packet may look like this:
44
+ *
45
+ * {
46
+ * success: true,
47
+ * data: {
48
+ * clientName: "Fred. Olsen Lines",
49
+ * portOfLoading: "FXT",
50
+ * portOfDischarge: "OSL"
51
+ * }
52
+ * }
53
+ *
54
+ * while a **failure response** packet may look like this:
55
+ *
56
+ * {
57
+ * success: false,
58
+ * errorMessage: "Consignment reference not found"
59
+ * }
60
+ *
61
+ * Other data may be placed into the response for processing the {@link Ext.form.Basic Form}'s callback or event handler
62
+ * methods. The object decoded from this JSON is available in the {@link Ext.form.action.Action#result result} property.
63
+ */
64
+ Ext.define('Ext.form.action.Load', {
65
+ extend:'Ext.form.action.Action',
66
+ requires: ['Ext.data.Connection'],
67
+ alternateClassName: 'Ext.form.Action.Load',
68
+ alias: 'formaction.load',
69
+
70
+ type: 'load',
71
+
72
+ /**
73
+ * @private
74
+ */
75
+ run: function() {
76
+ Ext.Ajax.request(Ext.apply(
77
+ this.createCallback(),
78
+ {
79
+ method: this.getMethod(),
80
+ url: this.getUrl(),
81
+ headers: this.headers,
82
+ params: this.getParams()
83
+ }
84
+ ));
85
+ },
86
+
87
+ /**
88
+ * @private
89
+ */
90
+ onSuccess: function(response){
91
+ var result = this.processResponse(response),
92
+ form = this.form;
93
+ if (result === true || !result.success || !result.data) {
94
+ this.failureType = Ext.form.action.Action.LOAD_FAILURE;
95
+ form.afterAction(this, false);
96
+ return;
97
+ }
98
+ form.clearInvalid();
99
+ form.setValues(result.data);
100
+ form.afterAction(this, true);
101
+ },
102
+
103
+ /**
104
+ * @private
105
+ */
106
+ handleResponse: function(response) {
107
+ var reader = this.form.reader,
108
+ rs, data;
109
+ if (reader) {
110
+ rs = reader.read(response);
111
+ data = rs.records && rs.records[0] ? rs.records[0].data : null;
112
+ return {
113
+ success : rs.success,
114
+ data : data
115
+ };
116
+ }
117
+ return Ext.decode(response.responseText);
118
+ }
119
+ });
120
+
@@ -0,0 +1,34 @@
1
+ /**
2
+ * A class which handles submission of data from {@link Ext.form.Basic Form}s using a standard `<form>` element submit.
3
+ * It does not handle the response from the submit.
4
+ *
5
+ * If validation of the form fields fails, the Form's afterAction method will be called. Otherwise, afterAction will not
6
+ * be called.
7
+ *
8
+ * Instances of this class are only created by a {@link Ext.form.Basic Form} when
9
+ * {@link Ext.form.Basic#submit submit}ting, when the form's {@link Ext.form.Basic#standardSubmit} config option is true.
10
+ */
11
+ Ext.define('Ext.form.action.StandardSubmit', {
12
+ extend:'Ext.form.action.Submit',
13
+ alias: 'formaction.standardsubmit',
14
+
15
+ /**
16
+ * @cfg {String} target
17
+ * Optional target attribute to be used for the form when submitting.
18
+ *
19
+ * Defaults to the current window/frame.
20
+ */
21
+
22
+ /**
23
+ * @private
24
+ * Perform the form submit. Creates and submits a temporary form element containing an input element for each
25
+ * field value returned by {@link Ext.form.Basic#getValues}, plus any configured {@link #params params} or
26
+ * {@link Ext.form.Basic#baseParams baseParams}.
27
+ */
28
+ doSubmit: function() {
29
+ var form = this.buildForm();
30
+ form.submit();
31
+ Ext.removeNode(form);
32
+ }
33
+
34
+ });
@@ -0,0 +1,257 @@
1
+ /**
2
+ * A class which handles submission of data from {@link Ext.form.Basic Form}s and processes the returned response.
3
+ *
4
+ * Instances of this class are only created by a {@link Ext.form.Basic Form} when
5
+ * {@link Ext.form.Basic#submit submit}ting.
6
+ *
7
+ * # Response Packet Criteria
8
+ *
9
+ * A response packet may contain:
10
+ *
11
+ * - **`success`** property : Boolean - required.
12
+ *
13
+ * - **`errors`** property : Object - optional, contains error messages for invalid fields.
14
+ *
15
+ * # JSON Packets
16
+ *
17
+ * By default, response packets are assumed to be JSON, so a typical response packet may look like this:
18
+ *
19
+ * {
20
+ * success: false,
21
+ * errors: {
22
+ * clientCode: "Client not found",
23
+ * portOfLoading: "This field must not be null"
24
+ * }
25
+ * }
26
+ *
27
+ * Other data may be placed into the response for processing by the {@link Ext.form.Basic}'s callback or event handler
28
+ * methods. The object decoded from this JSON is available in the {@link Ext.form.action.Action#result result} property.
29
+ *
30
+ * Alternatively, if an {@link Ext.form.Basic#errorReader errorReader} is specified as an
31
+ * {@link Ext.data.reader.Xml XmlReader}:
32
+ *
33
+ * errorReader: new Ext.data.reader.Xml({
34
+ * record : 'field',
35
+ * success: '@success'
36
+ * }, [
37
+ * 'id', 'msg'
38
+ * ]
39
+ * )
40
+ *
41
+ * then the results may be sent back in XML format:
42
+ *
43
+ * <?xml version="1.0" encoding="UTF-8"?>
44
+ * <message success="false">
45
+ * <errors>
46
+ * <field>
47
+ * <id>clientCode</id>
48
+ * <msg><![CDATA[Code not found. <br /><i>This is a test validation message from the server </i>]]></msg>
49
+ * </field>
50
+ * <field>
51
+ * <id>portOfLoading</id>
52
+ * <msg><![CDATA[Port not found. <br /><i>This is a test validation message from the server </i>]]></msg>
53
+ * </field>
54
+ * </errors>
55
+ * </message>
56
+ *
57
+ * Other elements may be placed into the response XML for processing by the {@link Ext.form.Basic}'s callback or event
58
+ * handler methods. The XML document is available in the {@link Ext.form.Basic#errorReader errorReader}'s
59
+ * {@link Ext.data.reader.Xml#xmlData xmlData} property.
60
+ */
61
+ Ext.define('Ext.form.action.Submit', {
62
+ extend:'Ext.form.action.Action',
63
+ alternateClassName: 'Ext.form.Action.Submit',
64
+ alias: 'formaction.submit',
65
+
66
+ type: 'submit',
67
+
68
+ /**
69
+ * @cfg {Boolean} [clientValidation=true]
70
+ * Determines whether a Form's fields are validated in a final call to {@link Ext.form.Basic#isValid isValid} prior
71
+ * to submission. Pass false in the Form's submit options to prevent this.
72
+ */
73
+
74
+ // inherit docs
75
+ run : function(){
76
+ var form = this.form;
77
+ if (this.clientValidation === false || form.isValid()) {
78
+ this.doSubmit();
79
+ } else {
80
+ // client validation failed
81
+ this.failureType = Ext.form.action.Action.CLIENT_INVALID;
82
+ form.afterAction(this, false);
83
+ }
84
+ },
85
+
86
+ /**
87
+ * @private
88
+ * Performs the submit of the form data.
89
+ */
90
+ doSubmit: function() {
91
+ var formEl,
92
+ ajaxOptions = Ext.apply(this.createCallback(), {
93
+ url: this.getUrl(),
94
+ method: this.getMethod(),
95
+ headers: this.headers
96
+ });
97
+
98
+ // For uploads we need to create an actual form that contains the file upload fields,
99
+ // and pass that to the ajax call so it can do its iframe-based submit method.
100
+ if (this.form.hasUpload()) {
101
+ formEl = ajaxOptions.form = this.buildForm();
102
+ ajaxOptions.isUpload = true;
103
+ } else {
104
+ ajaxOptions.params = this.getParams();
105
+ }
106
+
107
+ Ext.Ajax.request(ajaxOptions);
108
+
109
+ if (formEl) {
110
+ Ext.removeNode(formEl);
111
+ }
112
+ },
113
+
114
+ /**
115
+ * @private
116
+ * Builds the full set of parameters from the field values plus any additional configured params.
117
+ */
118
+ getParams: function() {
119
+ var nope = false,
120
+ configParams = this.callParent(),
121
+ fieldParams = this.form.getValues(nope, nope, this.submitEmptyText !== nope);
122
+ return Ext.apply({}, fieldParams, configParams);
123
+ },
124
+
125
+ /**
126
+ * @private
127
+ * Builds a form element containing fields corresponding to all the parameters to be
128
+ * submitted (everything returned by {@link #getParams}.
129
+ *
130
+ * NOTE: the form element is automatically added to the DOM, so any code that uses
131
+ * it must remove it from the DOM after finishing with it.
132
+ *
133
+ * @return {HTMLElement}
134
+ */
135
+ buildForm: function() {
136
+ var fieldsSpec = [],
137
+ formSpec,
138
+ formEl,
139
+ basicForm = this.form,
140
+ params = this.getParams(),
141
+ uploadFields = [],
142
+ fields = basicForm.getFields().items,
143
+ f,
144
+ fLen = fields.length,
145
+ field, key, value, v, vLen,
146
+ u, uLen;
147
+
148
+ for (f = 0; f < fLen; f++) {
149
+ field = fields[f];
150
+
151
+ if (field.isFileUpload()) {
152
+ uploadFields.push(field);
153
+ }
154
+ }
155
+
156
+ function addField(name, val) {
157
+ fieldsSpec.push({
158
+ tag: 'input',
159
+ type: 'hidden',
160
+ name: name,
161
+ value: Ext.String.htmlEncode(val)
162
+ });
163
+ }
164
+
165
+ for (key in params) {
166
+ if (params.hasOwnProperty(key)) {
167
+ value = params[key];
168
+
169
+ if (Ext.isArray(value)) {
170
+ vLen = value.length;
171
+ for (v = 0; v < vLen; v++) {
172
+ addField(key, value[v]);
173
+ }
174
+ } else {
175
+ addField(key, value);
176
+ }
177
+ }
178
+ }
179
+
180
+ formSpec = {
181
+ tag: 'form',
182
+ action: this.getUrl(),
183
+ method: this.getMethod(),
184
+ target: this.target || '_self',
185
+ style: 'display:none',
186
+ cn: fieldsSpec
187
+ };
188
+
189
+ // Set the proper encoding for file uploads
190
+ if (uploadFields.length) {
191
+ formSpec.encoding = formSpec.enctype = 'multipart/form-data';
192
+ }
193
+
194
+ // Create the form
195
+ formEl = Ext.DomHelper.append(Ext.getBody(), formSpec);
196
+
197
+ // Special handling for file upload fields: since browser security measures prevent setting
198
+ // their values programatically, and prevent carrying their selected values over when cloning,
199
+ // we have to move the actual field instances out of their components and into the form.
200
+ uLen = uploadFields.length;
201
+
202
+ for (u = 0; u < uLen; u++) {
203
+ field = uploadFields[u];
204
+ if (field.rendered) { // can only have a selected file value after being rendered
205
+ formEl.appendChild(field.extractFileInput());
206
+ }
207
+ }
208
+
209
+ return formEl;
210
+ },
211
+
212
+
213
+
214
+ /**
215
+ * @private
216
+ */
217
+ onSuccess: function(response) {
218
+ var form = this.form,
219
+ success = true,
220
+ result = this.processResponse(response);
221
+ if (result !== true && !result.success) {
222
+ if (result.errors) {
223
+ form.markInvalid(result.errors);
224
+ }
225
+ this.failureType = Ext.form.action.Action.SERVER_INVALID;
226
+ success = false;
227
+ }
228
+ form.afterAction(this, success);
229
+ },
230
+
231
+ /**
232
+ * @private
233
+ */
234
+ handleResponse: function(response) {
235
+ var form = this.form,
236
+ errorReader = form.errorReader,
237
+ rs, errors, i, len, records;
238
+ if (errorReader) {
239
+ rs = errorReader.read(response);
240
+ records = rs.records;
241
+ errors = [];
242
+ if (records) {
243
+ for(i = 0, len = records.length; i < len; i++) {
244
+ errors[i] = records[i].data;
245
+ }
246
+ }
247
+ if (errors.length < 1) {
248
+ errors = null;
249
+ }
250
+ return {
251
+ success : rs.success,
252
+ errors : errors
253
+ };
254
+ }
255
+ return Ext.decode(response.responseText);
256
+ }
257
+ });
@@ -0,0 +1,813 @@
1
+ /**
2
+ * @docauthor Jason Johnston <jason@sencha.com>
3
+ *
4
+ * Base class for form fields that provides default event handling, rendering, and other common functionality
5
+ * needed by all form field types. Utilizes the {@link Ext.form.field.Field} mixin for value handling and validation,
6
+ * and the {@link Ext.form.Labelable} mixin to provide label and error message display.
7
+ *
8
+ * In most cases you will want to use a subclass, such as {@link Ext.form.field.Text} or {@link Ext.form.field.Checkbox},
9
+ * rather than creating instances of this class directly. However if you are implementing a custom form field,
10
+ * using this as the parent class is recommended.
11
+ *
12
+ * # Values and Conversions
13
+ *
14
+ * Because Base implements the Field mixin, it has a main value that can be initialized with the
15
+ * {@link #value} config and manipulated via the {@link #getValue} and {@link #setValue} methods. This main
16
+ * value can be one of many data types appropriate to the current field, for instance a {@link Ext.form.field.Date Date}
17
+ * field would use a JavaScript Date object as its value type. However, because the field is rendered as a HTML
18
+ * input, this value data type can not always be directly used in the rendered field.
19
+ *
20
+ * Therefore Base introduces the concept of a "raw value". This is the value of the rendered HTML input field,
21
+ * and is normally a String. The {@link #getRawValue} and {@link #setRawValue} methods can be used to directly
22
+ * work with the raw value, though it is recommended to use getValue and setValue in most cases.
23
+ *
24
+ * Conversion back and forth between the main value and the raw value is handled by the {@link #valueToRaw} and
25
+ * {@link #rawToValue} methods. If you are implementing a subclass that uses a non-String value data type, you
26
+ * should override these methods to handle the conversion.
27
+ *
28
+ * # Rendering
29
+ *
30
+ * The content of the field body is defined by the {@link #fieldSubTpl} XTemplate, with its argument data
31
+ * created by the {@link #getSubTplData} method. Override this template and/or method to create custom
32
+ * field renderings.
33
+ *
34
+ * # Example usage:
35
+ *
36
+ * @example
37
+ * // A simple subclass of Base that creates a HTML5 search field. Redirects to the
38
+ * // searchUrl when the Enter key is pressed.222
39
+ * Ext.define('Ext.form.SearchField', {
40
+ * extend: 'Ext.form.field.Base',
41
+ * alias: 'widget.searchfield',
42
+ *
43
+ * inputType: 'search',
44
+ *
45
+ * // Config defining the search URL
46
+ * searchUrl: 'http://www.google.com/search?q={0}',
47
+ *
48
+ * // Add specialkey listener
49
+ * initComponent: function() {
50
+ * this.callParent();
51
+ * this.on('specialkey', this.checkEnterKey, this);
52
+ * },
53
+ *
54
+ * // Handle enter key presses, execute the search if the field has a value
55
+ * checkEnterKey: function(field, e) {
56
+ * var value = this.getValue();
57
+ * if (e.getKey() === e.ENTER && !Ext.isEmpty(value)) {
58
+ * location.href = Ext.String.format(this.searchUrl, value);
59
+ * }
60
+ * }
61
+ * });
62
+ *
63
+ * Ext.create('Ext.form.Panel', {
64
+ * title: 'Base Example',
65
+ * bodyPadding: 5,
66
+ * width: 250,
67
+ *
68
+ * // Fields will be arranged vertically, stretched to full width
69
+ * layout: 'anchor',
70
+ * defaults: {
71
+ * anchor: '100%'
72
+ * },
73
+ * items: [{
74
+ * xtype: 'searchfield',
75
+ * fieldLabel: 'Search',
76
+ * name: 'query'
77
+ * }],
78
+ * renderTo: Ext.getBody()
79
+ * });
80
+ */
81
+ Ext.define('Ext.form.field.Base', {
82
+ extend: 'Ext.Component',
83
+ mixins: {
84
+ labelable: 'Ext.form.Labelable',
85
+ field: 'Ext.form.field.Field'
86
+ },
87
+ alias: 'widget.field',
88
+ alternateClassName: ['Ext.form.Field', 'Ext.form.BaseField'],
89
+ requires: ['Ext.util.DelayedTask', 'Ext.XTemplate', 'Ext.layout.component.field.Field'],
90
+
91
+ /**
92
+ * @cfg {Ext.XTemplate} fieldSubTpl
93
+ * The content of the field body is defined by this config option.
94
+ * @private
95
+ */
96
+ fieldSubTpl: [ // note: {id} here is really {inputId}, but {cmpId} is available
97
+ '<input id="{id}" type="{type}" {inputAttrTpl}',
98
+ ' size="1"', // allows inputs to fully respect CSS widths across all browsers
99
+ '<tpl if="name"> name="{name}"</tpl>',
100
+ '<tpl if="value"> value="{[Ext.util.Format.htmlEncode(values.value)]}"</tpl>',
101
+ '<tpl if="placeholder"> placeholder="{placeholder}"</tpl>',
102
+ '<tpl if="maxLength !== undefined"> maxlength="{maxLength}"</tpl>',
103
+ '<tpl if="readOnly"> readonly="readonly"</tpl>',
104
+ '<tpl if="disabled"> disabled="disabled"</tpl>',
105
+ '<tpl if="tabIdx"> tabIndex="{tabIdx}"</tpl>',
106
+ '<tpl if="fieldStyle"> style="{fieldStyle}"</tpl>',
107
+ ' class="{fieldCls} {typeCls} {editableCls}" autocomplete="off"/>',
108
+ {
109
+ disableFormats: true
110
+ }
111
+ ],
112
+
113
+ subTplInsertions: [
114
+ /**
115
+ * @cfg {String/Array/Ext.XTemplate} inputAttrTpl
116
+ * An optional string or `XTemplate` configuration to insert in the field markup
117
+ * inside the input element (as attributes). If an `XTemplate` is used, the component's
118
+ * {@link #getSubTplData subTpl data} serves as the context.
119
+ */
120
+ 'inputAttrTpl'
121
+ ],
122
+
123
+ /**
124
+ * @cfg {String} name
125
+ * The name of the field. This is used as the parameter name when including the field value
126
+ * in a {@link Ext.form.Basic#submit form submit()}. If no name is configured, it falls back to the {@link #inputId}.
127
+ * To prevent the field from being included in the form submit, set {@link #submitValue} to false.
128
+ */
129
+
130
+ /**
131
+ * @cfg {String} inputType
132
+ * The type attribute for input fields -- e.g. radio, text, password, file. The extended types
133
+ * supported by HTML5 inputs (url, email, etc.) may also be used, though using them will cause older browsers to
134
+ * fall back to 'text'.
135
+ *
136
+ * The type 'password' must be used to render that field type currently -- there is no separate Ext component for
137
+ * that. You can use {@link Ext.form.field.File} which creates a custom-rendered file upload field, but if you want
138
+ * a plain unstyled file input you can use a Base with inputType:'file'.
139
+ */
140
+ inputType: 'text',
141
+
142
+ /**
143
+ * @cfg {Number} tabIndex
144
+ * The tabIndex for this field. Note this only applies to fields that are rendered, not those which are built via
145
+ * applyTo
146
+ */
147
+
148
+ /**
149
+ * @cfg {String} invalidText
150
+ * The error text to use when marking a field invalid and no message is provided
151
+ */
152
+ //<locale>
153
+ invalidText : 'The value in this field is invalid',
154
+ //</locale>
155
+
156
+ /**
157
+ * @cfg {String} [fieldCls='x-form-field']
158
+ * The default CSS class for the field input
159
+ */
160
+ fieldCls : Ext.baseCSSPrefix + 'form-field',
161
+
162
+ /**
163
+ * @cfg {String} fieldStyle
164
+ * Optional CSS style(s) to be applied to the {@link #inputEl field input element}. Should be a valid argument to
165
+ * {@link Ext.Element#applyStyles}. Defaults to undefined. See also the {@link #setFieldStyle} method for changing
166
+ * the style after initialization.
167
+ */
168
+
169
+ /**
170
+ * @cfg {String} [focusCls='x-form-focus']
171
+ * The CSS class to use when the field receives focus
172
+ */
173
+ focusCls : 'form-focus',
174
+
175
+ /**
176
+ * @cfg {String} dirtyCls
177
+ * The CSS class to use when the field value {@link #isDirty is dirty}.
178
+ */
179
+ dirtyCls : Ext.baseCSSPrefix + 'form-dirty',
180
+
181
+ /**
182
+ * @cfg {String[]} checkChangeEvents
183
+ * A list of event names that will be listened for on the field's {@link #inputEl input element}, which will cause
184
+ * the field's value to be checked for changes. If a change is detected, the {@link #change change event} will be
185
+ * fired, followed by validation if the {@link #validateOnChange} option is enabled.
186
+ *
187
+ * Defaults to ['change', 'propertychange'] in Internet Explorer, and ['change', 'input', 'textInput', 'keyup',
188
+ * 'dragdrop'] in other browsers. This catches all the ways that field values can be changed in most supported
189
+ * browsers; the only known exceptions at the time of writing are:
190
+ *
191
+ * - Safari 3.2 and older: cut/paste in textareas via the context menu, and dragging text into textareas
192
+ * - Opera 10 and 11: dragging text into text fields and textareas, and cut via the context menu in text fields
193
+ * and textareas
194
+ * - Opera 9: Same as Opera 10 and 11, plus paste from context menu in text fields and textareas
195
+ *
196
+ * If you need to guarantee on-the-fly change notifications including these edge cases, you can call the
197
+ * {@link #checkChange} method on a repeating interval, e.g. using {@link Ext.TaskManager}, or if the field is within
198
+ * a {@link Ext.form.Panel}, you can use the FormPanel's {@link Ext.form.Panel#pollForChanges} configuration to set up
199
+ * such a task automatically.
200
+ */
201
+ checkChangeEvents: Ext.isIE && (!document.documentMode || document.documentMode < 9) ?
202
+ ['change', 'propertychange'] :
203
+ ['change', 'input', 'textInput', 'keyup', 'dragdrop'],
204
+
205
+ /**
206
+ * @cfg {Number} checkChangeBuffer
207
+ * Defines a timeout in milliseconds for buffering {@link #checkChangeEvents} that fire in rapid succession.
208
+ * Defaults to 50 milliseconds.
209
+ */
210
+ checkChangeBuffer: 50,
211
+
212
+ componentLayout: 'field',
213
+
214
+ /**
215
+ * @cfg {Boolean} readOnly
216
+ * true to mark the field as readOnly in HTML.
217
+ *
218
+ * **Note**: this only sets the element's readOnly DOM attribute. Setting `readOnly=true`, for example, will not
219
+ * disable triggering a ComboBox or Date; it gives you the option of forcing the user to choose via the trigger
220
+ * without typing in the text box. To hide the trigger use `{@link Ext.form.field.Trigger#hideTrigger hideTrigger}`.
221
+ */
222
+ readOnly : false,
223
+
224
+ /**
225
+ * @cfg {String} readOnlyCls
226
+ * The CSS class applied to the component's main element when it is {@link #readOnly}.
227
+ */
228
+ readOnlyCls: Ext.baseCSSPrefix + 'form-readonly',
229
+
230
+ /**
231
+ * @cfg {String} inputId
232
+ * The id that will be given to the generated input DOM element. Defaults to an automatically generated id. If you
233
+ * configure this manually, you must make sure it is unique in the document.
234
+ */
235
+
236
+ /**
237
+ * @cfg {Boolean} validateOnBlur
238
+ * Whether the field should validate when it loses focus. This will cause fields to be validated
239
+ * as the user steps through the fields in the form regardless of whether they are making changes to those fields
240
+ * along the way. See also {@link #validateOnChange}.
241
+ */
242
+ validateOnBlur: true,
243
+
244
+ // private
245
+ hasFocus : false,
246
+
247
+ baseCls: Ext.baseCSSPrefix + 'field',
248
+
249
+ maskOnDisable: false,
250
+
251
+ // private
252
+ initComponent : function() {
253
+ var me = this;
254
+
255
+ me.callParent();
256
+
257
+ me.subTplData = me.subTplData || {};
258
+
259
+ me.addEvents(
260
+ /**
261
+ * @event specialkey
262
+ * Fires when any key related to navigation (arrows, tab, enter, esc, etc.) is pressed. To handle other keys
263
+ * see {@link Ext.util.KeyMap}. You can check {@link Ext.EventObject#getKey} to determine which key was
264
+ * pressed. For example:
265
+ *
266
+ * var form = new Ext.form.Panel({
267
+ * ...
268
+ * items: [{
269
+ * fieldLabel: 'Field 1',
270
+ * name: 'field1',
271
+ * allowBlank: false
272
+ * },{
273
+ * fieldLabel: 'Field 2',
274
+ * name: 'field2',
275
+ * listeners: {
276
+ * specialkey: function(field, e){
277
+ * // e.HOME, e.END, e.PAGE_UP, e.PAGE_DOWN,
278
+ * // e.TAB, e.ESC, arrow keys: e.LEFT, e.RIGHT, e.UP, e.DOWN
279
+ * if (e.{@link Ext.EventObject#getKey getKey()} == e.ENTER) {
280
+ * var form = field.up('form').getForm();
281
+ * form.submit();
282
+ * }
283
+ * }
284
+ * }
285
+ * }
286
+ * ],
287
+ * ...
288
+ * });
289
+ *
290
+ * @param {Ext.form.field.Base} this
291
+ * @param {Ext.EventObject} e The event object
292
+ */
293
+ 'specialkey',
294
+
295
+ /**
296
+ * @event writeablechange
297
+ * Fires when this field changes its read-only status.
298
+ * @param {Ext.form.field.Base} this
299
+ * @param {Boolean} Read only flag
300
+ */
301
+ 'writeablechange'
302
+ );
303
+
304
+ // Init mixins
305
+ me.initLabelable();
306
+ me.initField();
307
+
308
+ // Default name to inputId
309
+ if (!me.name) {
310
+ me.name = me.getInputId();
311
+ }
312
+ },
313
+
314
+ beforeRender: function(){
315
+ var me = this;
316
+
317
+ me.callParent(arguments);
318
+ me.beforeLabelableRender(arguments);
319
+ if (me.readOnly) {
320
+ me.addCls(me.readOnlyCls);
321
+ }
322
+ },
323
+
324
+ /**
325
+ * Returns the input id for this field. If none was specified via the {@link #inputId} config, then an id will be
326
+ * automatically generated.
327
+ */
328
+ getInputId: function() {
329
+ return this.inputId || (this.inputId = this.id + '-inputEl');
330
+ },
331
+
332
+ /**
333
+ * Creates and returns the data object to be used when rendering the {@link #fieldSubTpl}.
334
+ * @return {Object} The template data
335
+ * @template
336
+ */
337
+ getSubTplData: function() {
338
+ var me = this,
339
+ type = me.inputType,
340
+ inputId = me.getInputId(),
341
+ data;
342
+
343
+ data = Ext.apply({
344
+ id : inputId,
345
+ cmpId : me.id,
346
+ name : me.name || inputId,
347
+ disabled : me.disabled,
348
+ readOnly : me.readOnly,
349
+ value : me.getRawValue(),
350
+ type : type,
351
+ fieldCls : me.fieldCls,
352
+ fieldStyle : me.getFieldStyle(),
353
+ tabIdx : me.tabIndex,
354
+ typeCls : Ext.baseCSSPrefix + 'form-' + (type === 'password' ? 'text' : type)
355
+ }, me.subTplData);
356
+
357
+ me.getInsertionRenderData(data, me.subTplInsertions);
358
+
359
+ return data;
360
+ },
361
+
362
+ afterFirstLayout: function() {
363
+ this.callParent();
364
+ var el = this.inputEl;
365
+ if (el) {
366
+ el.selectable();
367
+ }
368
+ },
369
+
370
+ applyRenderSelectors: function() {
371
+ var me = this;
372
+
373
+ me.callParent();
374
+
375
+ /**
376
+ * @property {Ext.Element} inputEl
377
+ * The input Element for this Field. Only available after the field has been rendered.
378
+ */
379
+ me.inputEl = me.el.getById(me.getInputId());
380
+ },
381
+
382
+ /**
383
+ * Gets the markup to be inserted into the outer template's bodyEl. For fields this is the actual input element.
384
+ */
385
+ getSubTplMarkup: function() {
386
+ return this.getTpl('fieldSubTpl').apply(this.getSubTplData());
387
+ },
388
+
389
+ initRenderTpl: function() {
390
+ var me = this;
391
+ if (!me.hasOwnProperty('renderTpl')) {
392
+ me.renderTpl = me.getTpl('labelableRenderTpl');
393
+ }
394
+ return me.callParent();
395
+ },
396
+
397
+ initRenderData: function() {
398
+ return Ext.applyIf(this.callParent(), this.getLabelableRenderData());
399
+ },
400
+
401
+ /**
402
+ * Set the {@link #fieldStyle CSS style} of the {@link #inputEl field input element}.
403
+ * @param {String/Object/Function} style The style(s) to apply. Should be a valid argument to {@link
404
+ * Ext.Element#applyStyles}.
405
+ */
406
+ setFieldStyle: function(style) {
407
+ var me = this,
408
+ inputEl = me.inputEl;
409
+ if (inputEl) {
410
+ inputEl.applyStyles(style);
411
+ }
412
+ me.fieldStyle = style;
413
+ },
414
+
415
+ getFieldStyle: function() {
416
+ return 'width:100%;' + (Ext.isObject(this.fieldStyle) ? Ext.DomHelper.generateStyles(this.fieldStyle) : this.fieldStyle ||'');
417
+ },
418
+
419
+ // private
420
+ onRender : function() {
421
+ var me = this;
422
+ me.callParent(arguments);
423
+ me.onLabelableRender();
424
+ me.renderActiveError();
425
+ },
426
+
427
+ getFocusEl: function() {
428
+ return this.inputEl;
429
+ },
430
+
431
+ isFileUpload: function() {
432
+ return this.inputType === 'file';
433
+ },
434
+
435
+ extractFileInput: function() {
436
+ var me = this,
437
+ fileInput = me.isFileUpload() ? me.inputEl.dom : null,
438
+ clone;
439
+ if (fileInput) {
440
+ clone = fileInput.cloneNode(true);
441
+ fileInput.parentNode.replaceChild(clone, fileInput);
442
+ me.inputEl = Ext.get(clone);
443
+ }
444
+ return fileInput;
445
+ },
446
+
447
+ // private override to use getSubmitValue() as a convenience
448
+ getSubmitData: function() {
449
+ var me = this,
450
+ data = null,
451
+ val;
452
+ if (!me.disabled && me.submitValue && !me.isFileUpload()) {
453
+ val = me.getSubmitValue();
454
+ if (val !== null) {
455
+ data = {};
456
+ data[me.getName()] = val;
457
+ }
458
+ }
459
+ return data;
460
+ },
461
+
462
+ /**
463
+ * Returns the value that would be included in a standard form submit for this field. This will be combined with the
464
+ * field's name to form a name=value pair in the {@link #getSubmitData submitted parameters}. If an empty string is
465
+ * returned then just the name= will be submitted; if null is returned then nothing will be submitted.
466
+ *
467
+ * Note that the value returned will have been {@link #processRawValue processed} but may or may not have been
468
+ * successfully {@link #validate validated}.
469
+ *
470
+ * @return {String} The value to be submitted, or null.
471
+ */
472
+ getSubmitValue: function() {
473
+ return this.processRawValue(this.getRawValue());
474
+ },
475
+
476
+ /**
477
+ * Returns the raw value of the field, without performing any normalization, conversion, or validation. To get a
478
+ * normalized and converted value see {@link #getValue}.
479
+ * @return {String} value The raw String value of the field
480
+ */
481
+ getRawValue: function() {
482
+ var me = this,
483
+ v = (me.inputEl ? me.inputEl.getValue() : Ext.value(me.rawValue, ''));
484
+ me.rawValue = v;
485
+ return v;
486
+ },
487
+
488
+ /**
489
+ * Sets the field's raw value directly, bypassing {@link #valueToRaw value conversion}, change detection, and
490
+ * validation. To set the value with these additional inspections see {@link #setValue}.
491
+ * @param {Object} value The value to set
492
+ * @return {Object} value The field value that is set
493
+ */
494
+ setRawValue: function(value) {
495
+ var me = this;
496
+ value = Ext.value(value, '');
497
+ me.rawValue = value;
498
+
499
+ // Some Field subclasses may not render an inputEl
500
+ if (me.inputEl) {
501
+ me.inputEl.dom.value = value;
502
+ }
503
+ return value;
504
+ },
505
+
506
+ /**
507
+ * Converts a mixed-type value to a raw representation suitable for displaying in the field. This allows controlling
508
+ * how value objects passed to {@link #setValue} are shown to the user, including localization. For instance, for a
509
+ * {@link Ext.form.field.Date}, this would control how a Date object passed to {@link #setValue} would be converted
510
+ * to a String for display in the field.
511
+ *
512
+ * See {@link #rawToValue} for the opposite conversion.
513
+ *
514
+ * The base implementation simply does a standard toString conversion, and converts {@link Ext#isEmpty empty values}
515
+ * to an empty string.
516
+ *
517
+ * @param {Object} value The mixed-type value to convert to the raw representation.
518
+ * @return {Object} The converted raw value.
519
+ */
520
+ valueToRaw: function(value) {
521
+ return '' + Ext.value(value, '');
522
+ },
523
+
524
+ /**
525
+ * Converts a raw input field value into a mixed-type value that is suitable for this particular field type. This
526
+ * allows controlling the normalization and conversion of user-entered values into field-type-appropriate values,
527
+ * e.g. a Date object for {@link Ext.form.field.Date}, and is invoked by {@link #getValue}.
528
+ *
529
+ * It is up to individual implementations to decide how to handle raw values that cannot be successfully converted
530
+ * to the desired object type.
531
+ *
532
+ * See {@link #valueToRaw} for the opposite conversion.
533
+ *
534
+ * The base implementation does no conversion, returning the raw value untouched.
535
+ *
536
+ * @param {Object} rawValue
537
+ * @return {Object} The converted value.
538
+ */
539
+ rawToValue: function(rawValue) {
540
+ return rawValue;
541
+ },
542
+
543
+ /**
544
+ * Performs any necessary manipulation of a raw field value to prepare it for {@link #rawToValue conversion} and/or
545
+ * {@link #validate validation}, for instance stripping out ignored characters. In the base implementation it does
546
+ * nothing; individual subclasses may override this as needed.
547
+ *
548
+ * @param {Object} value The unprocessed string value
549
+ * @return {Object} The processed string value
550
+ */
551
+ processRawValue: function(value) {
552
+ return value;
553
+ },
554
+
555
+ /**
556
+ * Returns the current data value of the field. The type of value returned is particular to the type of the
557
+ * particular field (e.g. a Date object for {@link Ext.form.field.Date}), as the result of calling {@link #rawToValue} on
558
+ * the field's {@link #processRawValue processed} String value. To return the raw String value, see {@link #getRawValue}.
559
+ * @return {Object} value The field value
560
+ */
561
+ getValue: function() {
562
+ var me = this,
563
+ val = me.rawToValue(me.processRawValue(me.getRawValue()));
564
+ me.value = val;
565
+ return val;
566
+ },
567
+
568
+ /**
569
+ * Sets a data value into the field and runs the change detection and validation. To set the value directly
570
+ * without these inspections see {@link #setRawValue}.
571
+ * @param {Object} value The value to set
572
+ * @return {Ext.form.field.Field} this
573
+ */
574
+ setValue: function(value) {
575
+ var me = this;
576
+ me.setRawValue(me.valueToRaw(value));
577
+ return me.mixins.field.setValue.call(me, value);
578
+ },
579
+
580
+ onBoxReady: function() {
581
+ var me = this;
582
+ me.callParent();
583
+
584
+ if (me.setReadOnlyOnBoxReady) {
585
+ me.setReadOnly(me.readOnly);
586
+ }
587
+
588
+ },
589
+
590
+ //private
591
+ onDisable: function() {
592
+ var me = this,
593
+ inputEl = me.inputEl;
594
+
595
+ me.callParent();
596
+ if (inputEl) {
597
+ inputEl.dom.disabled = true;
598
+ if (me.hasActiveError()) {
599
+ // clear invalid state since the field is now disabled
600
+ me.clearInvalid();
601
+ me.needsValidateOnEnable = true;
602
+ }
603
+ }
604
+ },
605
+
606
+ //private
607
+ onEnable: function() {
608
+ var me = this,
609
+ inputEl = me.inputEl;
610
+
611
+ me.callParent();
612
+ if (inputEl) {
613
+ inputEl.dom.disabled = false;
614
+ if (me.needsValidateOnEnable) {
615
+ delete me.needsValidateOnEnable;
616
+ // will trigger errors to be shown
617
+ me.forceValidation = true;
618
+ me.isValid();
619
+ delete me.forceValidation;
620
+ }
621
+ }
622
+ },
623
+
624
+ /**
625
+ * Sets the read only state of this field.
626
+ * @param {Boolean} readOnly Whether the field should be read only.
627
+ */
628
+ setReadOnly: function(readOnly) {
629
+ var me = this,
630
+ inputEl = me.inputEl;
631
+ readOnly = !!readOnly;
632
+ me[readOnly ? 'addCls' : 'removeCls'](me.readOnlyCls);
633
+ me.readOnly = readOnly;
634
+ if (inputEl) {
635
+ inputEl.dom.readOnly = readOnly;
636
+ } else if (me.rendering) {
637
+ me.setReadOnlyOnBoxReady = true;
638
+ }
639
+ me.fireEvent('writeablechange', me, readOnly);
640
+ },
641
+
642
+ // private
643
+ fireKey: function(e){
644
+ if(e.isSpecialKey()){
645
+ this.fireEvent('specialkey', this, new Ext.EventObjectImpl(e));
646
+ }
647
+ },
648
+
649
+ // private
650
+ initEvents : function(){
651
+ var me = this,
652
+ inputEl = me.inputEl,
653
+ onChangeTask,
654
+ onChangeEvent,
655
+ events = me.checkChangeEvents,
656
+ e,
657
+ eLen = events.length,
658
+ event;
659
+
660
+ // standardise buffer across all browsers + OS-es for consistent event order.
661
+ // (the 10ms buffer for Editors fixes a weird FF/Win editor issue when changing OS window focus)
662
+ if (me.inEditor) {
663
+ me.onBlur = Ext.Function.createBuffered(me.onBlur, 10);
664
+ }
665
+ if (inputEl) {
666
+ me.mon(inputEl, Ext.EventManager.getKeyEvent(), me.fireKey, me);
667
+
668
+ // listen for immediate value changes
669
+ onChangeTask = new Ext.util.DelayedTask(me.checkChange, me);
670
+ me.onChangeEvent = onChangeEvent = function() {
671
+ onChangeTask.delay(me.checkChangeBuffer);
672
+ };
673
+
674
+ for (e = 0; e < eLen; e++) {
675
+ event = events[e];
676
+
677
+ if (event === 'propertychange') {
678
+ me.usesPropertychange = true;
679
+ }
680
+
681
+ me.mon(inputEl, event, onChangeEvent);
682
+ }
683
+ }
684
+ me.callParent();
685
+ },
686
+
687
+ doComponentLayout: function() {
688
+ var me = this,
689
+ inputEl = me.inputEl,
690
+ usesPropertychange = me.usesPropertychange,
691
+ ename = 'propertychange',
692
+ onChangeEvent = me.onChangeEvent;
693
+
694
+ // In IE if propertychange is one of the checkChangeEvents, we need to remove
695
+ // the listener prior to layout and re-add it after, to prevent it from firing
696
+ // needlessly for attribute and style changes applied to the inputEl.
697
+ if (usesPropertychange) {
698
+ me.mun(inputEl, ename, onChangeEvent);
699
+ }
700
+ me.callParent(arguments);
701
+ if (usesPropertychange) {
702
+ me.mon(inputEl, ename, onChangeEvent);
703
+ }
704
+ },
705
+
706
+ /**
707
+ * @private Called when the field's dirty state changes. Adds/removes the {@link #dirtyCls} on the main element.
708
+ * @param {Boolean} isDirty
709
+ */
710
+ onDirtyChange: function(isDirty) {
711
+ this[isDirty ? 'addCls' : 'removeCls'](this.dirtyCls);
712
+ },
713
+
714
+
715
+ /**
716
+ * Returns whether or not the field value is currently valid by {@link #getErrors validating} the
717
+ * {@link #processRawValue processed raw value} of the field. **Note**: {@link #disabled} fields are
718
+ * always treated as valid.
719
+ *
720
+ * @return {Boolean} True if the value is valid, else false
721
+ */
722
+ isValid : function() {
723
+ var me = this,
724
+ disabled = me.disabled,
725
+ validate = me.forceValidation || !disabled;
726
+
727
+
728
+ return validate ? me.validateValue(me.processRawValue(me.getRawValue())) : disabled;
729
+ },
730
+
731
+
732
+ /**
733
+ * Uses {@link #getErrors} to build an array of validation errors. If any errors are found, they are passed to
734
+ * {@link #markInvalid} and false is returned, otherwise true is returned.
735
+ *
736
+ * Previously, subclasses were invited to provide an implementation of this to process validations - from 3.2
737
+ * onwards {@link #getErrors} should be overridden instead.
738
+ *
739
+ * @param {Object} value The value to validate
740
+ * @return {Boolean} True if all validations passed, false if one or more failed
741
+ */
742
+ validateValue: function(value) {
743
+ var me = this,
744
+ errors = me.getErrors(value),
745
+ isValid = Ext.isEmpty(errors);
746
+ if (!me.preventMark) {
747
+ if (isValid) {
748
+ me.clearInvalid();
749
+ } else {
750
+ me.markInvalid(errors);
751
+ }
752
+ }
753
+
754
+ return isValid;
755
+ },
756
+
757
+ /**
758
+ * Display one or more error messages associated with this field, using {@link #msgTarget} to determine how to
759
+ * display the messages and applying {@link #invalidCls} to the field's UI element.
760
+ *
761
+ * **Note**: this method does not cause the Field's {@link #validate} or {@link #isValid} methods to return `false`
762
+ * if the value does _pass_ validation. So simply marking a Field as invalid will not prevent submission of forms
763
+ * submitted with the {@link Ext.form.action.Submit#clientValidation} option set.
764
+ *
765
+ * @param {String/String[]} errors The validation message(s) to display.
766
+ */
767
+ markInvalid : function(errors) {
768
+ // Save the message and fire the 'invalid' event
769
+ var me = this,
770
+ oldMsg = me.getActiveError();
771
+ me.setActiveErrors(Ext.Array.from(errors));
772
+ if (oldMsg !== me.getActiveError()) {
773
+ me.updateLayout();
774
+ }
775
+ },
776
+
777
+ /**
778
+ * Clear any invalid styles/messages for this field.
779
+ *
780
+ * **Note**: this method does not cause the Field's {@link #validate} or {@link #isValid} methods to return `true`
781
+ * if the value does not _pass_ validation. So simply clearing a field's errors will not necessarily allow
782
+ * submission of forms submitted with the {@link Ext.form.action.Submit#clientValidation} option set.
783
+ */
784
+ clearInvalid : function() {
785
+ // Clear the message and fire the 'valid' event
786
+ var me = this,
787
+ hadError = me.hasActiveError();
788
+ me.unsetActiveError();
789
+ if (hadError) {
790
+ me.updateLayout();
791
+ }
792
+ },
793
+
794
+ /**
795
+ * @private Overrides the method from the Ext.form.Labelable mixin to also add the invalidCls to the inputEl,
796
+ * as that is required for proper styling in IE with nested fields (due to lack of child selector)
797
+ */
798
+ renderActiveError: function() {
799
+ var me = this,
800
+ hasError = me.hasActiveError();
801
+ if (me.inputEl) {
802
+ // Add/remove invalid class
803
+ me.inputEl[hasError ? 'addCls' : 'removeCls'](me.invalidCls + '-field');
804
+ }
805
+ me.mixins.labelable.renderActiveError.call(me);
806
+ },
807
+
808
+
809
+ getActionEl: function() {
810
+ return this.inputEl || this.el;
811
+ }
812
+
813
+ });