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,1591 @@
1
+ /**
2
+ * @author Jacky Nguyen <jacky@sencha.com>
3
+ * @docauthor Jacky Nguyen <jacky@sencha.com>
4
+ * @class Ext.ClassManager
5
+ *
6
+ * Ext.ClassManager manages all classes and handles mapping from string class name to
7
+ * actual class objects throughout the whole framework. It is not generally accessed directly, rather through
8
+ * these convenient shorthands:
9
+ *
10
+ * - {@link Ext#define Ext.define}
11
+ * - {@link Ext#create Ext.create}
12
+ * - {@link Ext#widget Ext.widget}
13
+ * - {@link Ext#getClass Ext.getClass}
14
+ * - {@link Ext#getClassName Ext.getClassName}
15
+ *
16
+ * # Basic syntax:
17
+ *
18
+ * Ext.define(className, properties);
19
+ *
20
+ * in which `properties` is an object represent a collection of properties that apply to the class. See
21
+ * {@link Ext.ClassManager#create} for more detailed instructions.
22
+ *
23
+ * Ext.define('Person', {
24
+ * name: 'Unknown',
25
+ *
26
+ * constructor: function(name) {
27
+ * if (name) {
28
+ * this.name = name;
29
+ * }
30
+ * },
31
+ *
32
+ * eat: function(foodType) {
33
+ * alert("I'm eating: " + foodType);
34
+ *
35
+ * return this;
36
+ * }
37
+ * });
38
+ *
39
+ * var aaron = new Person("Aaron");
40
+ * aaron.eat("Sandwich"); // alert("I'm eating: Sandwich");
41
+ *
42
+ * Ext.Class has a powerful set of extensible {@link Ext.Class#registerPreprocessor pre-processors} which takes care of
43
+ * everything related to class creation, including but not limited to inheritance, mixins, configuration, statics, etc.
44
+ *
45
+ * # Inheritance:
46
+ *
47
+ * Ext.define('Developer', {
48
+ * extend: 'Person',
49
+ *
50
+ * constructor: function(name, isGeek) {
51
+ * this.isGeek = isGeek;
52
+ *
53
+ * // Apply a method from the parent class' prototype
54
+ * this.callParent([name]);
55
+ * },
56
+ *
57
+ * code: function(language) {
58
+ * alert("I'm coding in: " + language);
59
+ *
60
+ * this.eat("Bugs");
61
+ *
62
+ * return this;
63
+ * }
64
+ * });
65
+ *
66
+ * var jacky = new Developer("Jacky", true);
67
+ * jacky.code("JavaScript"); // alert("I'm coding in: JavaScript");
68
+ * // alert("I'm eating: Bugs");
69
+ *
70
+ * See {@link Ext.Base#callParent} for more details on calling superclass' methods
71
+ *
72
+ * # Mixins:
73
+ *
74
+ * Ext.define('CanPlayGuitar', {
75
+ * playGuitar: function() {
76
+ * alert("F#...G...D...A");
77
+ * }
78
+ * });
79
+ *
80
+ * Ext.define('CanComposeSongs', {
81
+ * composeSongs: function() { ... }
82
+ * });
83
+ *
84
+ * Ext.define('CanSing', {
85
+ * sing: function() {
86
+ * alert("I'm on the highway to hell...")
87
+ * }
88
+ * });
89
+ *
90
+ * Ext.define('Musician', {
91
+ * extend: 'Person',
92
+ *
93
+ * mixins: {
94
+ * canPlayGuitar: 'CanPlayGuitar',
95
+ * canComposeSongs: 'CanComposeSongs',
96
+ * canSing: 'CanSing'
97
+ * }
98
+ * })
99
+ *
100
+ * Ext.define('CoolPerson', {
101
+ * extend: 'Person',
102
+ *
103
+ * mixins: {
104
+ * canPlayGuitar: 'CanPlayGuitar',
105
+ * canSing: 'CanSing'
106
+ * },
107
+ *
108
+ * sing: function() {
109
+ * alert("Ahem....");
110
+ *
111
+ * this.mixins.canSing.sing.call(this);
112
+ *
113
+ * alert("[Playing guitar at the same time...]");
114
+ *
115
+ * this.playGuitar();
116
+ * }
117
+ * });
118
+ *
119
+ * var me = new CoolPerson("Jacky");
120
+ *
121
+ * me.sing(); // alert("Ahem...");
122
+ * // alert("I'm on the highway to hell...");
123
+ * // alert("[Playing guitar at the same time...]");
124
+ * // alert("F#...G...D...A");
125
+ *
126
+ * # Config:
127
+ *
128
+ * Ext.define('SmartPhone', {
129
+ * config: {
130
+ * hasTouchScreen: false,
131
+ * operatingSystem: 'Other',
132
+ * price: 500
133
+ * },
134
+ *
135
+ * isExpensive: false,
136
+ *
137
+ * constructor: function(config) {
138
+ * this.initConfig(config);
139
+ * },
140
+ *
141
+ * applyPrice: function(price) {
142
+ * this.isExpensive = (price > 500);
143
+ *
144
+ * return price;
145
+ * },
146
+ *
147
+ * applyOperatingSystem: function(operatingSystem) {
148
+ * if (!(/^(iOS|Android|BlackBerry)$/i).test(operatingSystem)) {
149
+ * return 'Other';
150
+ * }
151
+ *
152
+ * return operatingSystem;
153
+ * }
154
+ * });
155
+ *
156
+ * var iPhone = new SmartPhone({
157
+ * hasTouchScreen: true,
158
+ * operatingSystem: 'iOS'
159
+ * });
160
+ *
161
+ * iPhone.getPrice(); // 500;
162
+ * iPhone.getOperatingSystem(); // 'iOS'
163
+ * iPhone.getHasTouchScreen(); // true;
164
+ * iPhone.hasTouchScreen(); // true
165
+ *
166
+ * iPhone.isExpensive; // false;
167
+ * iPhone.setPrice(600);
168
+ * iPhone.getPrice(); // 600
169
+ * iPhone.isExpensive; // true;
170
+ *
171
+ * iPhone.setOperatingSystem('AlienOS');
172
+ * iPhone.getOperatingSystem(); // 'Other'
173
+ *
174
+ * # Statics:
175
+ *
176
+ * Ext.define('Computer', {
177
+ * statics: {
178
+ * factory: function(brand) {
179
+ * // 'this' in static methods refer to the class itself
180
+ * return new this(brand);
181
+ * }
182
+ * },
183
+ *
184
+ * constructor: function() { ... }
185
+ * });
186
+ *
187
+ * var dellComputer = Computer.factory('Dell');
188
+ *
189
+ * Also see {@link Ext.Base#statics} and {@link Ext.Base#self} for more details on accessing
190
+ * static properties within class methods
191
+ *
192
+ * @singleton
193
+ */
194
+ (function(Class, alias, arraySlice, arrayFrom, global) {
195
+
196
+ var Manager = Ext.ClassManager = {
197
+
198
+ /**
199
+ * @property {Object} classes
200
+ * All classes which were defined through the ClassManager. Keys are the
201
+ * name of the classes and the values are references to the classes.
202
+ * @private
203
+ */
204
+ classes: {},
205
+
206
+ /**
207
+ * @private
208
+ */
209
+ existCache: {},
210
+
211
+ /**
212
+ * @private
213
+ */
214
+ namespaceRewrites: [{
215
+ from: 'Ext.',
216
+ to: Ext
217
+ }],
218
+
219
+ /**
220
+ * @private
221
+ */
222
+ maps: {
223
+ alternateToName: {},
224
+ aliasToName: {},
225
+ nameToAliases: {},
226
+ nameToAlternates: {}
227
+ },
228
+
229
+ /** @private */
230
+ enableNamespaceParseCache: true,
231
+
232
+ /** @private */
233
+ namespaceParseCache: {},
234
+
235
+ /** @private */
236
+ instantiators: [],
237
+
238
+ /**
239
+ * Checks if a class has already been created.
240
+ *
241
+ * @param {String} className
242
+ * @return {Boolean} exist
243
+ */
244
+ isCreated: function(className) {
245
+ var existCache = this.existCache,
246
+ i, ln, part, root, parts;
247
+
248
+ //<debug error>
249
+ if (typeof className != 'string' || className.length < 1) {
250
+ throw new Error("[Ext.ClassManager] Invalid classname, must be a string and must not be empty");
251
+ }
252
+ //</debug>
253
+
254
+ if (this.classes[className] || existCache[className]) {
255
+ return true;
256
+ }
257
+
258
+ root = global;
259
+ parts = this.parseNamespace(className);
260
+
261
+ for (i = 0, ln = parts.length; i < ln; i++) {
262
+ part = parts[i];
263
+
264
+ if (typeof part != 'string') {
265
+ root = part;
266
+ } else {
267
+ if (!root || !root[part]) {
268
+ return false;
269
+ }
270
+
271
+ root = root[part];
272
+ }
273
+ }
274
+
275
+ existCache[className] = true;
276
+
277
+ this.triggerCreated(className);
278
+
279
+ return true;
280
+ },
281
+
282
+ /**
283
+ * @private
284
+ */
285
+ createdListeners: [],
286
+
287
+ /**
288
+ * @private
289
+ */
290
+ nameCreatedListeners: {},
291
+
292
+ /**
293
+ * @private
294
+ */
295
+ triggerCreated: function(className) {
296
+ var listeners = this.createdListeners,
297
+ nameListeners = this.nameCreatedListeners,
298
+ alternateNames = this.maps.nameToAlternates[className],
299
+ names = [className],
300
+ i, ln, j, subLn, listener, name;
301
+
302
+ for (i = 0,ln = listeners.length; i < ln; i++) {
303
+ listener = listeners[i];
304
+ listener.fn.call(listener.scope, className);
305
+ }
306
+
307
+ if (alternateNames) {
308
+ names.push.apply(names, alternateNames);
309
+ }
310
+
311
+ for (i = 0,ln = names.length; i < ln; i++) {
312
+ name = names[i];
313
+ listeners = nameListeners[name];
314
+
315
+ if (listeners) {
316
+ for (j = 0,subLn = listeners.length; j < subLn; j++) {
317
+ listener = listeners[j];
318
+ listener.fn.call(listener.scope, name);
319
+ }
320
+ delete nameListeners[name];
321
+ }
322
+ }
323
+ },
324
+
325
+ /**
326
+ * @private
327
+ */
328
+ onCreated: function(fn, scope, className) {
329
+ var listeners = this.createdListeners,
330
+ nameListeners = this.nameCreatedListeners,
331
+ listener = {
332
+ fn: fn,
333
+ scope: scope
334
+ };
335
+
336
+ if (className) {
337
+ if (this.isCreated(className)) {
338
+ fn.call(scope, className);
339
+ return;
340
+ }
341
+
342
+ if (!nameListeners[className]) {
343
+ nameListeners[className] = [];
344
+ }
345
+
346
+ nameListeners[className].push(listener);
347
+ }
348
+ else {
349
+ listeners.push(listener);
350
+ }
351
+ },
352
+
353
+ /**
354
+ * Supports namespace rewriting
355
+ * @private
356
+ */
357
+ parseNamespace: function(namespace) {
358
+ //<debug error>
359
+ if (typeof namespace != 'string') {
360
+ throw new Error("[Ext.ClassManager] Invalid namespace, must be a string");
361
+ }
362
+ //</debug>
363
+
364
+ var cache = this.namespaceParseCache,
365
+ parts,
366
+ rewrites,
367
+ root,
368
+ name,
369
+ rewrite, from, to, i, ln;
370
+
371
+ if (this.enableNamespaceParseCache) {
372
+ if (cache.hasOwnProperty(namespace)) {
373
+ return cache[namespace];
374
+ }
375
+ }
376
+
377
+ parts = [];
378
+ rewrites = this.namespaceRewrites;
379
+ root = global;
380
+ name = namespace;
381
+
382
+ for (i = 0, ln = rewrites.length; i < ln; i++) {
383
+ rewrite = rewrites[i];
384
+ from = rewrite.from;
385
+ to = rewrite.to;
386
+
387
+ if (name === from || name.substring(0, from.length) === from) {
388
+ name = name.substring(from.length);
389
+
390
+ if (typeof to != 'string') {
391
+ root = to;
392
+ } else {
393
+ parts = parts.concat(to.split('.'));
394
+ }
395
+
396
+ break;
397
+ }
398
+ }
399
+
400
+ parts.push(root);
401
+
402
+ parts = parts.concat(name.split('.'));
403
+
404
+ if (this.enableNamespaceParseCache) {
405
+ cache[namespace] = parts;
406
+ }
407
+
408
+ return parts;
409
+ },
410
+
411
+ /**
412
+ * Creates a namespace and assign the `value` to the created object
413
+ *
414
+ * Ext.ClassManager.setNamespace('MyCompany.pkg.Example', someObject);
415
+ *
416
+ * alert(MyCompany.pkg.Example === someObject); // alerts true
417
+ *
418
+ * @param {String} name
419
+ * @param {Object} value
420
+ */
421
+ setNamespace: function(name, value) {
422
+ var root = global,
423
+ parts = this.parseNamespace(name),
424
+ ln = parts.length - 1,
425
+ leaf = parts[ln],
426
+ i, part;
427
+
428
+ for (i = 0; i < ln; i++) {
429
+ part = parts[i];
430
+
431
+ if (typeof part != 'string') {
432
+ root = part;
433
+ } else {
434
+ if (!root[part]) {
435
+ root[part] = {};
436
+ }
437
+
438
+ root = root[part];
439
+ }
440
+ }
441
+
442
+ root[leaf] = value;
443
+
444
+ return root[leaf];
445
+ },
446
+
447
+ /**
448
+ * The new Ext.ns, supports namespace rewriting
449
+ * @private
450
+ */
451
+ createNamespaces: function() {
452
+ var root = global,
453
+ parts, part, i, j, ln, subLn;
454
+
455
+ for (i = 0, ln = arguments.length; i < ln; i++) {
456
+ parts = this.parseNamespace(arguments[i]);
457
+
458
+ for (j = 0, subLn = parts.length; j < subLn; j++) {
459
+ part = parts[j];
460
+
461
+ if (typeof part != 'string') {
462
+ root = part;
463
+ } else {
464
+ if (!root[part]) {
465
+ root[part] = {};
466
+ }
467
+
468
+ root = root[part];
469
+ }
470
+ }
471
+ }
472
+
473
+ return root;
474
+ },
475
+
476
+ /**
477
+ * Sets a name reference to a class.
478
+ *
479
+ * @param {String} name
480
+ * @param {Object} value
481
+ * @return {Ext.ClassManager} this
482
+ */
483
+ set: function(name, value) {
484
+ var me = this,
485
+ maps = me.maps,
486
+ nameToAlternates = maps.nameToAlternates,
487
+ targetName = me.getName(value),
488
+ alternates;
489
+
490
+ me.classes[name] = me.setNamespace(name, value);
491
+
492
+ if (targetName && targetName !== name) {
493
+ maps.alternateToName[name] = targetName;
494
+ alternates = nameToAlternates[targetName] || (nameToAlternates[targetName] = []);
495
+ alternates.push(name);
496
+ }
497
+
498
+ return this;
499
+ },
500
+
501
+ /**
502
+ * Retrieve a class by its name.
503
+ *
504
+ * @param {String} name
505
+ * @return {Ext.Class} class
506
+ */
507
+ get: function(name) {
508
+ var classes = this.classes,
509
+ root,
510
+ parts,
511
+ part, i, ln;
512
+
513
+ if (classes[name]) {
514
+ return classes[name];
515
+ }
516
+
517
+ root = global;
518
+ parts = this.parseNamespace(name);
519
+
520
+ for (i = 0, ln = parts.length; i < ln; i++) {
521
+ part = parts[i];
522
+
523
+ if (typeof part != 'string') {
524
+ root = part;
525
+ } else {
526
+ if (!root || !root[part]) {
527
+ return null;
528
+ }
529
+
530
+ root = root[part];
531
+ }
532
+ }
533
+
534
+ return root;
535
+ },
536
+
537
+ /**
538
+ * Register the alias for a class.
539
+ *
540
+ * @param {Ext.Class/String} cls a reference to a class or a className
541
+ * @param {String} alias Alias to use when referring to this class
542
+ */
543
+ setAlias: function(cls, alias) {
544
+ var aliasToNameMap = this.maps.aliasToName,
545
+ nameToAliasesMap = this.maps.nameToAliases,
546
+ className;
547
+
548
+ if (typeof cls == 'string') {
549
+ className = cls;
550
+ } else {
551
+ className = this.getName(cls);
552
+ }
553
+
554
+ if (alias && aliasToNameMap[alias] !== className) {
555
+ //<debug info>
556
+ if (aliasToNameMap[alias] && Ext.isDefined(global.console)) {
557
+ global.console.log("[Ext.ClassManager] Overriding existing alias: '" + alias + "' " +
558
+ "of: '" + aliasToNameMap[alias] + "' with: '" + className + "'. Be sure it's intentional.");
559
+ }
560
+ //</debug>
561
+
562
+ aliasToNameMap[alias] = className;
563
+ }
564
+
565
+ if (!nameToAliasesMap[className]) {
566
+ nameToAliasesMap[className] = [];
567
+ }
568
+
569
+ if (alias) {
570
+ Ext.Array.include(nameToAliasesMap[className], alias);
571
+ }
572
+
573
+ return this;
574
+ },
575
+
576
+ /**
577
+ * Get a reference to the class by its alias.
578
+ *
579
+ * @param {String} alias
580
+ * @return {Ext.Class} class
581
+ */
582
+ getByAlias: function(alias) {
583
+ return this.get(this.getNameByAlias(alias));
584
+ },
585
+
586
+ /**
587
+ * Get the name of a class by its alias.
588
+ *
589
+ * @param {String} alias
590
+ * @return {String} className
591
+ */
592
+ getNameByAlias: function(alias) {
593
+ return this.maps.aliasToName[alias] || '';
594
+ },
595
+
596
+ /**
597
+ * Get the name of a class by its alternate name.
598
+ *
599
+ * @param {String} alternate
600
+ * @return {String} className
601
+ */
602
+ getNameByAlternate: function(alternate) {
603
+ return this.maps.alternateToName[alternate] || '';
604
+ },
605
+
606
+ /**
607
+ * Get the aliases of a class by the class name
608
+ *
609
+ * @param {String} name
610
+ * @return {Array} aliases
611
+ */
612
+ getAliasesByName: function(name) {
613
+ return this.maps.nameToAliases[name] || [];
614
+ },
615
+
616
+ /**
617
+ * Get the name of the class by its reference or its instance;
618
+ * usually invoked by the shorthand {@link Ext#getClassName Ext.getClassName}
619
+ *
620
+ * Ext.ClassManager.getName(Ext.Action); // returns "Ext.Action"
621
+ *
622
+ * @param {Ext.Class/Object} object
623
+ * @return {String} className
624
+ */
625
+ getName: function(object) {
626
+ return object && object.$className || '';
627
+ },
628
+
629
+ /**
630
+ * Get the class of the provided object; returns null if it's not an instance
631
+ * of any class created with Ext.define. This is usually invoked by the shorthand {@link Ext#getClass Ext.getClass}
632
+ *
633
+ * var component = new Ext.Component();
634
+ *
635
+ * Ext.ClassManager.getClass(component); // returns Ext.Component
636
+ *
637
+ * @param {Object} object
638
+ * @return {Ext.Class} class
639
+ */
640
+ getClass: function(object) {
641
+ return object && object.self || null;
642
+ },
643
+
644
+ /**
645
+ * Defines a class.
646
+ * @deprecated 4.1.0 Use {@link Ext#define} instead, as that also supports creating overrides.
647
+ */
648
+ create: function(className, data, createdFn) {
649
+ //<debug error>
650
+ if (typeof className != 'string') {
651
+ throw new Error("[Ext.define] Invalid class name '" + className + "' specified, must be a non-empty string");
652
+ }
653
+ //</debug>
654
+
655
+ data.$className = className;
656
+
657
+ return new Class(data, function() {
658
+ var postprocessorStack = data.postprocessors || Manager.defaultPostprocessors,
659
+ registeredPostprocessors = Manager.postprocessors,
660
+ postprocessors = [],
661
+ postprocessor, i, ln, j, subLn, postprocessorProperties, postprocessorProperty;
662
+
663
+ delete data.postprocessors;
664
+
665
+ for (i = 0,ln = postprocessorStack.length; i < ln; i++) {
666
+ postprocessor = postprocessorStack[i];
667
+
668
+ if (typeof postprocessor == 'string') {
669
+ postprocessor = registeredPostprocessors[postprocessor];
670
+ postprocessorProperties = postprocessor.properties;
671
+
672
+ if (postprocessorProperties === true) {
673
+ postprocessors.push(postprocessor.fn);
674
+ }
675
+ else if (postprocessorProperties) {
676
+ for (j = 0,subLn = postprocessorProperties.length; j < subLn; j++) {
677
+ postprocessorProperty = postprocessorProperties[j];
678
+
679
+ if (data.hasOwnProperty(postprocessorProperty)) {
680
+ postprocessors.push(postprocessor.fn);
681
+ break;
682
+ }
683
+ }
684
+ }
685
+ }
686
+ else {
687
+ postprocessors.push(postprocessor);
688
+ }
689
+ }
690
+
691
+ data.postprocessors = postprocessors;
692
+ data.createdFn = createdFn;
693
+ Manager.processCreate(className, this, data);
694
+ });
695
+ },
696
+
697
+ processCreate: function(className, cls, clsData){
698
+ var me = this,
699
+ postprocessor = clsData.postprocessors.shift(),
700
+ createdFn = clsData.createdFn;
701
+
702
+ if (!postprocessor) {
703
+ me.set(className, cls);
704
+
705
+ if (createdFn) {
706
+ createdFn.call(cls, cls);
707
+ }
708
+
709
+ me.triggerCreated(className);
710
+ return;
711
+ }
712
+
713
+ if (postprocessor.call(me, className, cls, clsData, me.processCreate) !== false) {
714
+ me.processCreate(className, cls, clsData);
715
+ }
716
+ },
717
+
718
+ createOverride: function (className, data, createdFn) {
719
+ var me = this,
720
+ overriddenClassName = data.override,
721
+ requires = data.requires,
722
+ uses = data.uses,
723
+ classReady = function () {
724
+ var cls, temp;
725
+
726
+ if (requires) {
727
+ temp = requires;
728
+ requires = null; // do the real thing next time (which may be now)
729
+
730
+ // Since the override is going to be used (its target class is now
731
+ // created), we need to fetch the required classes for the override
732
+ // and call us back once they are loaded:
733
+ Ext.Loader.require(temp, classReady);
734
+ } else {
735
+ // The target class and the required classes for this override are
736
+ // ready, so we can apply the override now:
737
+ cls = me.get(overriddenClassName);
738
+
739
+ // We don't want to apply these:
740
+ delete data.override;
741
+ delete data.requires;
742
+ delete data.uses;
743
+
744
+ Ext.override(cls, data);
745
+
746
+ // This pushes the overridding file itself into Ext.Loader.history
747
+ // Hence if the target class never exists, the overriding file will
748
+ // never be included in the build.
749
+ me.triggerCreated(className);
750
+
751
+ if (uses) {
752
+ Ext.Loader.addUsedClasses(uses); // get these classes too!
753
+ }
754
+
755
+ if (createdFn) {
756
+ createdFn.call(cls); // last but not least!
757
+ }
758
+ }
759
+ };
760
+
761
+ me.existCache[className] = true;
762
+
763
+ // Override the target class right after it's created
764
+ me.onCreated(classReady, me, overriddenClassName);
765
+
766
+ return me;
767
+ },
768
+
769
+ /**
770
+ * Instantiate a class by its alias; usually invoked by the convenient shorthand {@link Ext#createByAlias Ext.createByAlias}
771
+ * If {@link Ext.Loader} is {@link Ext.Loader#setConfig enabled} and the class has not been defined yet, it will
772
+ * attempt to load the class via synchronous loading.
773
+ *
774
+ * var window = Ext.ClassManager.instantiateByAlias('widget.window', { width: 600, height: 800, ... });
775
+ *
776
+ * @param {String} alias
777
+ * @param {Object...} args Additional arguments after the alias will be passed to the
778
+ * class constructor.
779
+ * @return {Object} instance
780
+ */
781
+ instantiateByAlias: function() {
782
+ var alias = arguments[0],
783
+ args = arraySlice.call(arguments),
784
+ className = this.getNameByAlias(alias);
785
+
786
+ if (!className) {
787
+ className = this.maps.aliasToName[alias];
788
+
789
+ //<debug error>
790
+ if (!className) {
791
+ throw new Error("[Ext.createByAlias] Cannot create an instance of unrecognized alias: " + alias);
792
+ }
793
+ //</debug>
794
+
795
+ //<debug warn>
796
+ if (global.console) {
797
+ global.console.warn("[Ext.Loader] Synchronously loading '" + className + "'; consider adding " +
798
+ "Ext.require('" + alias + "') above Ext.onReady");
799
+ }
800
+ //</debug>
801
+
802
+ Ext.syncRequire(className);
803
+ }
804
+
805
+ args[0] = className;
806
+
807
+ return this.instantiate.apply(this, args);
808
+ },
809
+
810
+ /**
811
+ * @private
812
+ */
813
+ instantiate: function() {
814
+ var name = arguments[0],
815
+ nameType = typeof name,
816
+ args = arraySlice.call(arguments, 1),
817
+ alias = name,
818
+ possibleName, cls;
819
+
820
+ if (nameType != 'function') {
821
+ if (nameType != 'string' && args.length === 0) {
822
+ args = [name];
823
+ name = name.xclass;
824
+ }
825
+
826
+ //<debug error>
827
+ if (typeof name != 'string' || name.length < 1) {
828
+ throw new Error("[Ext.create] Invalid class name or alias '" + name + "' specified, must be a non-empty string");
829
+ }
830
+ //</debug>
831
+
832
+ cls = this.get(name);
833
+ }
834
+ else {
835
+ cls = name;
836
+ }
837
+
838
+ // No record of this class name, it's possibly an alias, so look it up
839
+ if (!cls) {
840
+ possibleName = this.getNameByAlias(name);
841
+
842
+ if (possibleName) {
843
+ name = possibleName;
844
+
845
+ cls = this.get(name);
846
+ }
847
+ }
848
+
849
+ // Still no record of this class name, it's possibly an alternate name, so look it up
850
+ if (!cls) {
851
+ possibleName = this.getNameByAlternate(name);
852
+
853
+ if (possibleName) {
854
+ name = possibleName;
855
+
856
+ cls = this.get(name);
857
+ }
858
+ }
859
+
860
+ // Still not existing at this point, try to load it via synchronous mode as the last resort
861
+ if (!cls) {
862
+ //<debug warn>
863
+ if (global.console) {
864
+ global.console.warn("[Ext.Loader] Synchronously loading '" + name + "'; consider adding " +
865
+ "Ext.require('" + ((possibleName) ? alias : name) + "') above Ext.onReady");
866
+ }
867
+ //</debug>
868
+
869
+ Ext.syncRequire(name);
870
+
871
+ cls = this.get(name);
872
+ }
873
+
874
+ //<debug error>
875
+ if (!cls) {
876
+ throw new Error("[Ext.create] Cannot create an instance of unrecognized class name / alias: " + alias);
877
+ }
878
+
879
+ if (typeof cls != 'function') {
880
+ throw new Error("[Ext.create] '" + name + "' is a singleton and cannot be instantiated");
881
+ }
882
+ //</debug>
883
+
884
+ return this.getInstantiator(args.length)(cls, args);
885
+ },
886
+
887
+ /**
888
+ * @private
889
+ * @param name
890
+ * @param args
891
+ */
892
+ dynInstantiate: function(name, args) {
893
+ args = arrayFrom(args, true);
894
+ args.unshift(name);
895
+
896
+ return this.instantiate.apply(this, args);
897
+ },
898
+
899
+ /**
900
+ * @private
901
+ * @param length
902
+ */
903
+ getInstantiator: function(length) {
904
+ var instantiators = this.instantiators,
905
+ instantiator,
906
+ i,
907
+ args;
908
+
909
+ instantiator = instantiators[length];
910
+
911
+ if (!instantiator) {
912
+ i = length;
913
+ args = [];
914
+
915
+ for (i = 0; i < length; i++) {
916
+ args.push('a[' + i + ']');
917
+ }
918
+
919
+ instantiator = instantiators[length] = new Function('c', 'a', 'return new c(' + args.join(',') + ')');
920
+ //<debug>
921
+ instantiator.displayName = "Ext.ClassManager.instantiate" + length;
922
+ //</debug>
923
+ }
924
+
925
+ return instantiator;
926
+ },
927
+
928
+ /**
929
+ * @private
930
+ */
931
+ postprocessors: {},
932
+
933
+ /**
934
+ * @private
935
+ */
936
+ defaultPostprocessors: [],
937
+
938
+ /**
939
+ * Register a post-processor function.
940
+ *
941
+ * @private
942
+ * @param {String} name
943
+ * @param {Function} postprocessor
944
+ */
945
+ registerPostprocessor: function(name, fn, properties, position, relativeTo) {
946
+ if (!position) {
947
+ position = 'last';
948
+ }
949
+
950
+ if (!properties) {
951
+ properties = [name];
952
+ }
953
+
954
+ this.postprocessors[name] = {
955
+ name: name,
956
+ properties: properties || false,
957
+ fn: fn
958
+ };
959
+
960
+ this.setDefaultPostprocessorPosition(name, position, relativeTo);
961
+
962
+ return this;
963
+ },
964
+
965
+ /**
966
+ * Set the default post processors array stack which are applied to every class.
967
+ *
968
+ * @private
969
+ * @param {String/Array} The name of a registered post processor or an array of registered names.
970
+ * @return {Ext.ClassManager} this
971
+ */
972
+ setDefaultPostprocessors: function(postprocessors) {
973
+ this.defaultPostprocessors = arrayFrom(postprocessors);
974
+
975
+ return this;
976
+ },
977
+
978
+ /**
979
+ * Insert this post-processor at a specific position in the stack, optionally relative to
980
+ * any existing post-processor
981
+ *
982
+ * @private
983
+ * @param {String} name The post-processor name. Note that it needs to be registered with
984
+ * {@link Ext.ClassManager#registerPostprocessor} before this
985
+ * @param {String} offset The insertion position. Four possible values are:
986
+ * 'first', 'last', or: 'before', 'after' (relative to the name provided in the third argument)
987
+ * @param {String} relativeName
988
+ * @return {Ext.ClassManager} this
989
+ */
990
+ setDefaultPostprocessorPosition: function(name, offset, relativeName) {
991
+ var defaultPostprocessors = this.defaultPostprocessors,
992
+ index;
993
+
994
+ if (typeof offset == 'string') {
995
+ if (offset === 'first') {
996
+ defaultPostprocessors.unshift(name);
997
+
998
+ return this;
999
+ }
1000
+ else if (offset === 'last') {
1001
+ defaultPostprocessors.push(name);
1002
+
1003
+ return this;
1004
+ }
1005
+
1006
+ offset = (offset === 'after') ? 1 : -1;
1007
+ }
1008
+
1009
+ index = Ext.Array.indexOf(defaultPostprocessors, relativeName);
1010
+
1011
+ if (index !== -1) {
1012
+ Ext.Array.splice(defaultPostprocessors, Math.max(0, index + offset), 0, name);
1013
+ }
1014
+
1015
+ return this;
1016
+ },
1017
+
1018
+ /**
1019
+ * Converts a string expression to an array of matching class names. An expression can either refers to class aliases
1020
+ * or class names. Expressions support wildcards:
1021
+ *
1022
+ * // returns ['Ext.window.Window']
1023
+ * var window = Ext.ClassManager.getNamesByExpression('widget.window');
1024
+ *
1025
+ * // returns ['widget.panel', 'widget.window', ...]
1026
+ * var allWidgets = Ext.ClassManager.getNamesByExpression('widget.*');
1027
+ *
1028
+ * // returns ['Ext.data.Store', 'Ext.data.ArrayProxy', ...]
1029
+ * var allData = Ext.ClassManager.getNamesByExpression('Ext.data.*');
1030
+ *
1031
+ * @param {String} expression
1032
+ * @return {String[]} classNames
1033
+ */
1034
+ getNamesByExpression: function(expression) {
1035
+ var nameToAliasesMap = this.maps.nameToAliases,
1036
+ names = [],
1037
+ name, alias, aliases, possibleName, regex, i, ln;
1038
+
1039
+ //<debug error>
1040
+ if (typeof expression != 'string' || expression.length < 1) {
1041
+ throw new Error("[Ext.ClassManager.getNamesByExpression] Expression " + expression + " is invalid, must be a non-empty string");
1042
+ }
1043
+ //</debug>
1044
+
1045
+ if (expression.indexOf('*') !== -1) {
1046
+ expression = expression.replace(/\*/g, '(.*?)');
1047
+ regex = new RegExp('^' + expression + '$');
1048
+
1049
+ for (name in nameToAliasesMap) {
1050
+ if (nameToAliasesMap.hasOwnProperty(name)) {
1051
+ aliases = nameToAliasesMap[name];
1052
+
1053
+ if (name.search(regex) !== -1) {
1054
+ names.push(name);
1055
+ }
1056
+ else {
1057
+ for (i = 0, ln = aliases.length; i < ln; i++) {
1058
+ alias = aliases[i];
1059
+
1060
+ if (alias.search(regex) !== -1) {
1061
+ names.push(name);
1062
+ break;
1063
+ }
1064
+ }
1065
+ }
1066
+ }
1067
+ }
1068
+
1069
+ } else {
1070
+ possibleName = this.getNameByAlias(expression);
1071
+
1072
+ if (possibleName) {
1073
+ names.push(possibleName);
1074
+ } else {
1075
+ possibleName = this.getNameByAlternate(expression);
1076
+
1077
+ if (possibleName) {
1078
+ names.push(possibleName);
1079
+ } else {
1080
+ names.push(expression);
1081
+ }
1082
+ }
1083
+ }
1084
+
1085
+ return names;
1086
+ }
1087
+ };
1088
+
1089
+ //<feature classSystem.alias>
1090
+ /**
1091
+ * @cfg {String[]} alias
1092
+ * @member Ext.Class
1093
+ * List of short aliases for class names. Most useful for defining xtypes for widgets:
1094
+ *
1095
+ * Ext.define('MyApp.CoolPanel', {
1096
+ * extend: 'Ext.panel.Panel',
1097
+ * alias: ['widget.coolpanel'],
1098
+ * title: 'Yeah!'
1099
+ * });
1100
+ *
1101
+ * // Using Ext.create
1102
+ * Ext.create('widget.coolpanel');
1103
+ *
1104
+ * // Using the shorthand for defining widgets by xtype
1105
+ * Ext.widget('panel', {
1106
+ * items: [
1107
+ * {xtype: 'coolpanel', html: 'Foo'},
1108
+ * {xtype: 'coolpanel', html: 'Bar'}
1109
+ * ]
1110
+ * });
1111
+ *
1112
+ * Besides "widget" for xtype there are alias namespaces like "feature" for ftype and "plugin" for ptype.
1113
+ */
1114
+ Manager.registerPostprocessor('alias', function(name, cls, data) {
1115
+ var aliases = data.alias,
1116
+ i, ln;
1117
+
1118
+ for (i = 0,ln = aliases.length; i < ln; i++) {
1119
+ alias = aliases[i];
1120
+
1121
+ this.setAlias(cls, alias);
1122
+ }
1123
+
1124
+ }, ['xtype', 'alias']);
1125
+ //</feature>
1126
+
1127
+ //<feature classSystem.singleton>
1128
+ /**
1129
+ * @cfg {Boolean} singleton
1130
+ * @member Ext.Class
1131
+ * When set to true, the class will be instantiated as singleton. For example:
1132
+ *
1133
+ * Ext.define('Logger', {
1134
+ * singleton: true,
1135
+ * log: function(msg) {
1136
+ * console.log(msg);
1137
+ * }
1138
+ * });
1139
+ *
1140
+ * Logger.log('Hello');
1141
+ */
1142
+ Manager.registerPostprocessor('singleton', function(name, cls, data, fn) {
1143
+ fn.call(this, name, new cls(), data);
1144
+ return false;
1145
+ });
1146
+ //</feature>
1147
+
1148
+ //<feature classSystem.alternateClassName>
1149
+ /**
1150
+ * @cfg {String/String[]} alternateClassName
1151
+ * @member Ext.Class
1152
+ * Defines alternate names for this class. For example:
1153
+ *
1154
+ * Ext.define('Developer', {
1155
+ * alternateClassName: ['Coder', 'Hacker'],
1156
+ * code: function(msg) {
1157
+ * alert('Typing... ' + msg);
1158
+ * }
1159
+ * });
1160
+ *
1161
+ * var joe = Ext.create('Developer');
1162
+ * joe.code('stackoverflow');
1163
+ *
1164
+ * var rms = Ext.create('Hacker');
1165
+ * rms.code('hack hack');
1166
+ */
1167
+ Manager.registerPostprocessor('alternateClassName', function(name, cls, data) {
1168
+ var alternates = data.alternateClassName,
1169
+ i, ln, alternate;
1170
+
1171
+ if (!(alternates instanceof Array)) {
1172
+ alternates = [alternates];
1173
+ }
1174
+
1175
+ for (i = 0, ln = alternates.length; i < ln; i++) {
1176
+ alternate = alternates[i];
1177
+
1178
+ //<debug error>
1179
+ if (typeof alternate != 'string') {
1180
+ throw new Error("[Ext.define] Invalid alternate of: '" + alternate + "' for class: '" + name + "'; must be a valid string");
1181
+ }
1182
+ //</debug>
1183
+
1184
+ this.set(alternate, cls);
1185
+ }
1186
+ });
1187
+ //</feature>
1188
+
1189
+ Ext.apply(Ext, {
1190
+ /**
1191
+ * Instantiate a class by either full name, alias or alternate name.
1192
+ *
1193
+ * If {@link Ext.Loader} is {@link Ext.Loader#setConfig enabled} and the class has
1194
+ * not been defined yet, it will attempt to load the class via synchronous loading.
1195
+ *
1196
+ * For example, all these three lines return the same result:
1197
+ *
1198
+ * // alias
1199
+ * var window = Ext.create('widget.window', {
1200
+ * width: 600,
1201
+ * height: 800,
1202
+ * ...
1203
+ * });
1204
+ *
1205
+ * // alternate name
1206
+ * var window = Ext.create('Ext.Window', {
1207
+ * width: 600,
1208
+ * height: 800,
1209
+ * ...
1210
+ * });
1211
+ *
1212
+ * // full class name
1213
+ * var window = Ext.create('Ext.window.Window', {
1214
+ * width: 600,
1215
+ * height: 800,
1216
+ * ...
1217
+ * });
1218
+ *
1219
+ * // single object with xclass property:
1220
+ * var window = Ext.create({
1221
+ * xclass: 'Ext.window.Window', // any valid value for 'name' (above)
1222
+ * width: 600,
1223
+ * height: 800,
1224
+ * ...
1225
+ * });
1226
+ *
1227
+ * @param {String} [name] The class name or alias. Can be specified as `xclass`
1228
+ * property if only one object parameter is specified.
1229
+ * @param {Object...} [args] Additional arguments after the name will be passed to
1230
+ * the class' constructor.
1231
+ * @return {Object} instance
1232
+ * @member Ext
1233
+ * @method create
1234
+ */
1235
+ create: alias(Manager, 'instantiate'),
1236
+
1237
+ /**
1238
+ * Convenient shorthand to create a widget by its xtype or a config object.
1239
+ * See also {@link Ext.ClassManager#instantiateByAlias}.
1240
+ *
1241
+ * var button = Ext.widget('button'); // Equivalent to Ext.create('widget.button');
1242
+ *
1243
+ * var panel = Ext.widget('panel', { // Equivalent to Ext.create('widget.panel')
1244
+ * title: 'Panel'
1245
+ * });
1246
+ *
1247
+ * var grid = Ext.widget({
1248
+ * xtype: 'grid',
1249
+ * ...
1250
+ * });
1251
+ *
1252
+ * If a {@link Ext.Component component} instance is passed, it is simply returned.
1253
+ *
1254
+ * @member Ext
1255
+ * @param {String} [name] The xtype of the widget to create.
1256
+ * @param {Object} [config] The configuration object for the widget constructor.
1257
+ * @return {Object} The widget instance
1258
+ */
1259
+ widget: function(name, config) {
1260
+ // forms:
1261
+ // 1: (xtype)
1262
+ // 2: (xtype, config)
1263
+ // 3: (config)
1264
+ // 4: (xtype, component)
1265
+ // 5: (component)
1266
+ //
1267
+ var xtype = name,
1268
+ alias, className, T, load;
1269
+
1270
+ if (typeof xtype != 'string') { // if (form 3 or 5)
1271
+ // first arg is config or component
1272
+ config = name; // arguments[0]
1273
+ xtype = config.xtype;
1274
+ } else {
1275
+ config = config || {};
1276
+ }
1277
+
1278
+ if (config.isComponent) {
1279
+ return config;
1280
+ }
1281
+
1282
+ alias = 'widget.' + xtype;
1283
+ className = Manager.getNameByAlias(alias);
1284
+
1285
+ // this is needed to support demand loading of the class
1286
+ if (!className) {
1287
+ load = true;
1288
+ }
1289
+
1290
+ T = Manager.get(className);
1291
+ if (load || !T) {
1292
+ return Manager.instantiateByAlias(alias, config);
1293
+ }
1294
+ return new T(config);
1295
+ },
1296
+
1297
+ /**
1298
+ * Convenient shorthand, see {@link Ext.ClassManager#instantiateByAlias}
1299
+ * @member Ext
1300
+ * @method createByAlias
1301
+ */
1302
+ createByAlias: alias(Manager, 'instantiateByAlias'),
1303
+
1304
+ /**
1305
+ * @method
1306
+ * Defines a class or override. A basic class is defined like this:
1307
+ *
1308
+ * Ext.define('My.awesome.Class', {
1309
+ * someProperty: 'something',
1310
+ *
1311
+ * someMethod: function() {
1312
+ * alert(s + this.someProperty);
1313
+ * }
1314
+ *
1315
+ * ...
1316
+ * });
1317
+ *
1318
+ * var obj = new My.awesome.Class();
1319
+ *
1320
+ * obj.someMethod('Say '); // alerts 'Say something'
1321
+ *
1322
+ * To defines an override, include the `override` property. The content of an
1323
+ * override is aggregated with the specified class in order to extend or modify
1324
+ * that class. This can be as simple as setting default property values or it can
1325
+ * extend and/or replace methods. This can also extend the statics of the class.
1326
+ *
1327
+ * One use for an override is to break a large class into manageable pieces.
1328
+ *
1329
+ * // File: /src/app/Panel.js
1330
+ *
1331
+ * Ext.define('My.app.Panel', {
1332
+ * extend: 'Ext.panel.Panel',
1333
+ * requires: [
1334
+ * 'My.app.PanelPart2',
1335
+ * 'My.app.PanelPart3'
1336
+ * ]
1337
+ *
1338
+ * constructor: function (config) {
1339
+ * this.callParent(arguments); // calls Ext.panel.Panel's constructor
1340
+ * //...
1341
+ * },
1342
+ *
1343
+ * statics: {
1344
+ * method: function () {
1345
+ * return 'abc';
1346
+ * }
1347
+ * }
1348
+ * });
1349
+ *
1350
+ * // File: /src/app/PanelPart2.js
1351
+ * Ext.define('My.app.PanelPart2', {
1352
+ * override: 'My.app.Panel',
1353
+ *
1354
+ * constructor: function (config) {
1355
+ * this.callParent(arguments); // calls My.app.Panel's constructor
1356
+ * //...
1357
+ * }
1358
+ * });
1359
+ *
1360
+ * Another use of overrides is to provide optional parts of classes that can be
1361
+ * independently required. In this case, the class may even be unaware of the
1362
+ * override altogether.
1363
+ *
1364
+ * Ext.define('My.ux.CoolTip', {
1365
+ * override: 'Ext.tip.ToolTip',
1366
+ *
1367
+ * constructor: function (config) {
1368
+ * this.callParent(arguments); // calls Ext.tip.ToolTip's constructor
1369
+ * //...
1370
+ * }
1371
+ * });
1372
+ *
1373
+ * The above override can now be required as normal.
1374
+ *
1375
+ * Ext.define('My.app.App', {
1376
+ * requires: [
1377
+ * 'My.ux.CoolTip'
1378
+ * ]
1379
+ * });
1380
+ *
1381
+ * Overrides can also contain statics:
1382
+ *
1383
+ * Ext.define('My.app.BarMod', {
1384
+ * override: 'Ext.foo.Bar',
1385
+ *
1386
+ * statics: {
1387
+ * method: function (x) {
1388
+ * return this.callParent([x * 2]); // call Ext.foo.Bar.method
1389
+ * }
1390
+ * }
1391
+ * });
1392
+ *
1393
+ * IMPORTANT: An override is only included in a build if the class it overrides is
1394
+ * required. Otherwise, the override, like the target class, is not included.
1395
+ *
1396
+ * @param {String} className The class name to create in string dot-namespaced format, for example:
1397
+ * 'My.very.awesome.Class', 'FeedViewer.plugin.CoolPager'
1398
+ * It is highly recommended to follow this simple convention:
1399
+ * - The root and the class name are 'CamelCased'
1400
+ * - Everything else is lower-cased
1401
+ * @param {Object} data The key - value pairs of properties to apply to this class. Property names can be of any valid
1402
+ * strings, except those in the reserved listed below:
1403
+ * - `mixins`
1404
+ * - `statics`
1405
+ * - `config`
1406
+ * - `alias`
1407
+ * - `self`
1408
+ * - `singleton`
1409
+ * - `alternateClassName`
1410
+ * - `override`
1411
+ *
1412
+ * @param {Function} createdFn Optional callback to execute after the class is created, the execution scope of which
1413
+ * (`this`) will be the newly created class itself.
1414
+ * @return {Ext.Base}
1415
+ * @markdown
1416
+ * @member Ext
1417
+ * @method define
1418
+ */
1419
+ define: function (className, data, createdFn) {
1420
+ if (data.override) {
1421
+ return Manager.createOverride.apply(Manager, arguments);
1422
+ }
1423
+
1424
+ return Manager.create.apply(Manager, arguments);
1425
+ },
1426
+
1427
+ /**
1428
+ * Convenient shorthand, see {@link Ext.ClassManager#getName}
1429
+ * @member Ext
1430
+ * @method getClassName
1431
+ */
1432
+ getClassName: alias(Manager, 'getName'),
1433
+
1434
+ /**
1435
+ * Returns the displayName property or className or object. When all else fails, returns "Anonymous".
1436
+ * @param {Object} object
1437
+ * @return {String}
1438
+ */
1439
+ getDisplayName: function(object) {
1440
+ if (object) {
1441
+ if (object.displayName) {
1442
+ return object.displayName;
1443
+ }
1444
+
1445
+ if (object.$name && object.$class) {
1446
+ return Ext.getClassName(object.$class) + '#' + object.$name;
1447
+ }
1448
+
1449
+ if (object.$className) {
1450
+ return object.$className;
1451
+ }
1452
+ }
1453
+
1454
+ return 'Anonymous';
1455
+ },
1456
+
1457
+ /**
1458
+ * Convenient shorthand, see {@link Ext.ClassManager#getClass}
1459
+ * @member Ext
1460
+ * @method getClass
1461
+ */
1462
+ getClass: alias(Manager, 'getClass'),
1463
+
1464
+ /**
1465
+ * Creates namespaces to be used for scoping variables and classes so that they are not global.
1466
+ * Specifying the last node of a namespace implicitly creates all other nodes. Usage:
1467
+ *
1468
+ * Ext.namespace('Company', 'Company.data');
1469
+ *
1470
+ * // equivalent and preferable to the above syntax
1471
+ * Ext.ns('Company.data');
1472
+ *
1473
+ * Company.Widget = function() { ... };
1474
+ *
1475
+ * Company.data.CustomStore = function(config) { ... };
1476
+ *
1477
+ * @param {String...} namespaces
1478
+ * @return {Object} The namespace object.
1479
+ * (If multiple arguments are passed, this will be the last namespace created)
1480
+ * @member Ext
1481
+ * @method namespace
1482
+ */
1483
+ namespace: alias(Manager, 'createNamespaces')
1484
+ });
1485
+
1486
+ /**
1487
+ * Old name for {@link Ext#widget}.
1488
+ * @deprecated 4.0.0 Use {@link Ext#widget} instead.
1489
+ * @method createWidget
1490
+ * @member Ext
1491
+ */
1492
+ Ext.createWidget = Ext.widget;
1493
+
1494
+ /**
1495
+ * Convenient alias for {@link Ext#namespace Ext.namespace}.
1496
+ * @inheritdoc Ext#namespace
1497
+ * @member Ext
1498
+ * @method ns
1499
+ */
1500
+ Ext.ns = Ext.namespace;
1501
+
1502
+ Class.registerPreprocessor('className', function(cls, data) {
1503
+ if (data.$className) {
1504
+ cls.$className = data.$className;
1505
+ //<debug>
1506
+ cls.displayName = cls.$className;
1507
+ //</debug>
1508
+ }
1509
+ }, true, 'first');
1510
+
1511
+ Class.registerPreprocessor('alias', function(cls, data) {
1512
+ var prototype = cls.prototype,
1513
+ xtypes = arrayFrom(data.xtype),
1514
+ aliases = arrayFrom(data.alias),
1515
+ widgetPrefix = 'widget.',
1516
+ widgetPrefixLength = widgetPrefix.length,
1517
+ xtypesChain = Array.prototype.slice.call(prototype.xtypesChain || []),
1518
+ xtypesMap = Ext.merge({}, prototype.xtypesMap || {}),
1519
+ i, ln, alias, xtype;
1520
+
1521
+ for (i = 0,ln = aliases.length; i < ln; i++) {
1522
+ alias = aliases[i];
1523
+
1524
+ //<debug error>
1525
+ if (typeof alias != 'string' || alias.length < 1) {
1526
+ throw new Error("[Ext.define] Invalid alias of: '" + alias + "' for class: '" + name + "'; must be a valid string");
1527
+ }
1528
+ //</debug>
1529
+
1530
+ if (alias.substring(0, widgetPrefixLength) === widgetPrefix) {
1531
+ xtype = alias.substring(widgetPrefixLength);
1532
+ Ext.Array.include(xtypes, xtype);
1533
+ }
1534
+ }
1535
+
1536
+ cls.xtype = data.xtype = xtypes[0];
1537
+ data.xtypes = xtypes;
1538
+
1539
+ for (i = 0,ln = xtypes.length; i < ln; i++) {
1540
+ xtype = xtypes[i];
1541
+
1542
+ if (!xtypesMap[xtype]) {
1543
+ xtypesMap[xtype] = true;
1544
+ xtypesChain.push(xtype);
1545
+ }
1546
+ }
1547
+
1548
+ data.xtypesChain = xtypesChain;
1549
+ data.xtypesMap = xtypesMap;
1550
+
1551
+ Ext.Function.interceptAfter(data, 'onClassCreated', function() {
1552
+ var mixins = prototype.mixins,
1553
+ key, mixin;
1554
+
1555
+ for (key in mixins) {
1556
+ if (mixins.hasOwnProperty(key)) {
1557
+ mixin = mixins[key];
1558
+
1559
+ xtypes = mixin.xtypes;
1560
+
1561
+ if (xtypes) {
1562
+ for (i = 0,ln = xtypes.length; i < ln; i++) {
1563
+ xtype = xtypes[i];
1564
+
1565
+ if (!xtypesMap[xtype]) {
1566
+ xtypesMap[xtype] = true;
1567
+ xtypesChain.push(xtype);
1568
+ }
1569
+ }
1570
+ }
1571
+ }
1572
+ }
1573
+ });
1574
+
1575
+ for (i = 0,ln = xtypes.length; i < ln; i++) {
1576
+ xtype = xtypes[i];
1577
+
1578
+ //<debug error>
1579
+ if (typeof xtype != 'string' || xtype.length < 1) {
1580
+ throw new Error("[Ext.define] Invalid xtype of: '" + xtype + "' for class: '" + name + "'; must be a valid non-empty string");
1581
+ }
1582
+ //</debug>
1583
+
1584
+ Ext.Array.include(aliases, widgetPrefix + xtype);
1585
+ }
1586
+
1587
+ data.alias = aliases;
1588
+
1589
+ }, ['xtype', 'alias']);
1590
+
1591
+ }(Ext.Class, Ext.Function.alias, Array.prototype.slice, Ext.Array.from, Ext.global));