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,167 @@
1
+ /**
2
+ * This feature is used to place a summary row at the bottom of the grid. If using a grouping,
3
+ * see {@link Ext.grid.feature.GroupingSummary}. There are 2 aspects to calculating the summaries,
4
+ * calculation and rendering.
5
+ *
6
+ * ## Calculation
7
+ * The summary value needs to be calculated for each column in the grid. This is controlled
8
+ * by the summaryType option specified on the column. There are several built in summary types,
9
+ * which can be specified as a string on the column configuration. These call underlying methods
10
+ * on the store:
11
+ *
12
+ * - {@link Ext.data.Store#count count}
13
+ * - {@link Ext.data.Store#sum sum}
14
+ * - {@link Ext.data.Store#min min}
15
+ * - {@link Ext.data.Store#max max}
16
+ * - {@link Ext.data.Store#average average}
17
+ *
18
+ * Alternatively, the summaryType can be a function definition. If this is the case,
19
+ * the function is called with an array of records to calculate the summary value.
20
+ *
21
+ * ## Rendering
22
+ * Similar to a column, the summary also supports a summaryRenderer function. This
23
+ * summaryRenderer is called before displaying a value. The function is optional, if
24
+ * not specified the default calculated value is shown. The summaryRenderer is called with:
25
+ *
26
+ * - value {Object} - The calculated value.
27
+ * - summaryData {Object} - Contains all raw summary values for the row.
28
+ * - field {String} - The name of the field we are calculating
29
+ *
30
+ * ## Example Usage
31
+ *
32
+ * @example
33
+ * Ext.define('TestResult', {
34
+ * extend: 'Ext.data.Model',
35
+ * fields: ['student', {
36
+ * name: 'mark',
37
+ * type: 'int'
38
+ * }]
39
+ * });
40
+ *
41
+ * Ext.create('Ext.grid.Panel', {
42
+ * width: 200,
43
+ * height: 140,
44
+ * renderTo: document.body,
45
+ * features: [{
46
+ * ftype: 'summary'
47
+ * }],
48
+ * store: {
49
+ * model: 'TestResult',
50
+ * data: [{
51
+ * student: 'Student 1',
52
+ * mark: 84
53
+ * },{
54
+ * student: 'Student 2',
55
+ * mark: 72
56
+ * },{
57
+ * student: 'Student 3',
58
+ * mark: 96
59
+ * },{
60
+ * student: 'Student 4',
61
+ * mark: 68
62
+ * }]
63
+ * },
64
+ * columns: [{
65
+ * dataIndex: 'student',
66
+ * text: 'Name',
67
+ * summaryType: 'count',
68
+ * summaryRenderer: function(value, summaryData, dataIndex) {
69
+ * return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : '');
70
+ * }
71
+ * }, {
72
+ * dataIndex: 'mark',
73
+ * text: 'Mark',
74
+ * summaryType: 'average'
75
+ * }]
76
+ * });
77
+ */
78
+ Ext.define('Ext.grid.feature.Summary', {
79
+
80
+ /* Begin Definitions */
81
+
82
+ extend: 'Ext.grid.feature.AbstractSummary',
83
+
84
+ alias: 'feature.summary',
85
+
86
+ /* End Definitions */
87
+
88
+ /**
89
+ * Gets any fragments needed for the template.
90
+ * @private
91
+ * @return {Object} The fragments
92
+ */
93
+ getFragmentTpl: function() {
94
+ // this gets called before render, so we'll setup the data here.
95
+ this.summaryData = this.generateSummaryData();
96
+ return this.getSummaryFragments();
97
+ },
98
+
99
+ /**
100
+ * Overrides the closeRows method on the template so we can include our own custom
101
+ * footer.
102
+ * @private
103
+ * @return {Object} The custom fragments
104
+ */
105
+ getTableFragments: function(){
106
+ if (this.showSummaryRow) {
107
+ return {
108
+ closeRows: this.closeRows
109
+ };
110
+ }
111
+ },
112
+
113
+ /**
114
+ * Provide our own custom footer for the grid.
115
+ * @private
116
+ * @return {String} The custom footer
117
+ */
118
+ closeRows: function() {
119
+ return '</tpl>{[this.printSummaryRow()]}';
120
+ },
121
+
122
+ /**
123
+ * Gets the data for printing a template row
124
+ * @private
125
+ * @param {Number} index The index in the template
126
+ * @return {Array} The template values
127
+ */
128
+ getPrintData: function(index){
129
+ var me = this,
130
+ columns = me.view.headerCt.getColumnsForTpl(),
131
+ i = 0,
132
+ length = columns.length,
133
+ data = [],
134
+ active = me.summaryData,
135
+ column;
136
+
137
+ for (; i < length; ++i) {
138
+ column = columns[i];
139
+ column.gridSummaryValue = this.getColumnValue(column, active);
140
+ data.push(column);
141
+ }
142
+ return data;
143
+ },
144
+
145
+ /**
146
+ * Generates all of the summary data to be used when processing the template
147
+ * @private
148
+ * @return {Object} The summary data
149
+ */
150
+ generateSummaryData: function(){
151
+ var me = this,
152
+ data = {},
153
+ store = me.view.store,
154
+ columns = me.view.headerCt.getColumnsForTpl(),
155
+ i = 0,
156
+ length = columns.length,
157
+ fieldData,
158
+ key,
159
+ comp;
160
+
161
+ for (i = 0, length = columns.length; i < length; ++i) {
162
+ comp = Ext.getCmp(columns[i].id);
163
+ data[comp.id] = me.getSummary(store, comp.summaryType, comp.dataIndex, false);
164
+ }
165
+ return data;
166
+ }
167
+ });
@@ -0,0 +1,965 @@
1
+ /**
2
+ * Container which holds headers and is docked at the top or bottom of a TablePanel.
3
+ * The HeaderContainer drives resizing/moving/hiding of columns within the TableView.
4
+ * As headers are hidden, moved or resized the headercontainer is responsible for
5
+ * triggering changes within the view.
6
+ */
7
+ Ext.define('Ext.grid.header.Container', {
8
+ extend: 'Ext.container.Container',
9
+ requires: [
10
+ 'Ext.grid.ColumnLayout',
11
+ 'Ext.grid.plugin.HeaderResizer',
12
+ 'Ext.grid.plugin.HeaderReorderer'
13
+ ],
14
+ uses: [
15
+ 'Ext.grid.column.Column',
16
+ 'Ext.menu.Menu',
17
+ 'Ext.menu.CheckItem',
18
+ 'Ext.menu.Separator'
19
+ ],
20
+ border: true,
21
+
22
+ alias: 'widget.headercontainer',
23
+
24
+ baseCls: Ext.baseCSSPrefix + 'grid-header-ct',
25
+ dock: 'top',
26
+
27
+ /**
28
+ * @cfg {Number} weight
29
+ * HeaderContainer overrides the default weight of 0 for all docked items to 100.
30
+ * This is so that it has more priority over things like toolbars.
31
+ */
32
+ weight: 100,
33
+
34
+ defaultType: 'gridcolumn',
35
+
36
+ detachOnRemove: false,
37
+
38
+ /**
39
+ * @cfg {Number} defaultWidth
40
+ * Width of the header if no width or flex is specified.
41
+ */
42
+ defaultWidth: 100,
43
+
44
+ /**
45
+ * @cfg {Boolean} [sealed=false]
46
+ * Specify as `true` to constrain column dragging so that a column cannot be dragged into or out of this column.
47
+ *
48
+ * **Note that this config is only valid for column headers which contain child column headers, eg:**
49
+ * {
50
+ * sealed: true
51
+ * text: 'ExtJS',
52
+ * columns: [{
53
+ * text: '3.0.4',
54
+ * dataIndex: 'ext304'
55
+ * }, {
56
+ * text: '4.1.0',
57
+ * dataIndex: 'ext410'
58
+ * }
59
+ * }
60
+ *
61
+ */
62
+
63
+ //<locale>
64
+ sortAscText: 'Sort Ascending',
65
+ //</locale>
66
+ //<locale>
67
+ sortDescText: 'Sort Descending',
68
+ //</locale>
69
+ //<locale>
70
+ sortClearText: 'Clear Sort',
71
+ //</locale>
72
+ //<locale>
73
+ columnsText: 'Columns',
74
+ //</locale>
75
+
76
+ headerOpenCls: Ext.baseCSSPrefix + 'column-header-open',
77
+
78
+ // private; will probably be removed by 4.0
79
+ triStateSort: false,
80
+
81
+ ddLock: false,
82
+
83
+ dragging: false,
84
+
85
+ /**
86
+ * @property {Boolean} isGroupHeader
87
+ * True if this HeaderContainer is in fact a group header which contains sub headers.
88
+ */
89
+
90
+ /**
91
+ * @cfg {Boolean} sortable
92
+ * Provides the default sortable state for all Headers within this HeaderContainer.
93
+ * Also turns on or off the menus in the HeaderContainer. Note that the menu is
94
+ * shared across every header and therefore turning it off will remove the menu
95
+ * items for every header.
96
+ */
97
+ sortable: true,
98
+
99
+ initComponent: function() {
100
+ var me = this;
101
+
102
+ me.headerCounter = 0;
103
+ me.plugins = me.plugins || [];
104
+
105
+ // TODO: Pass in configurations to turn on/off dynamic
106
+ // resizing and disable resizing all together
107
+
108
+ // Only set up a Resizer and Reorderer for the topmost HeaderContainer.
109
+ // Nested Group Headers are themselves HeaderContainers
110
+ if (!me.isHeader) {
111
+ if (me.enableColumnResize) {
112
+ me.resizer = new Ext.grid.plugin.HeaderResizer();
113
+ me.plugins.push(me.resizer);
114
+ }
115
+ if (me.enableColumnMove) {
116
+ me.reorderer = new Ext.grid.plugin.HeaderReorderer();
117
+ me.plugins.push(me.reorderer);
118
+ }
119
+ }
120
+
121
+ // Base headers do not need a box layout
122
+ if (me.isHeader && !me.items) {
123
+ me.layout = me.layout || 'auto';
124
+ }
125
+ // HeaderContainer and Group header needs a gridcolumn layout.
126
+ else {
127
+ me.layout = Ext.apply({
128
+ type: 'gridcolumn',
129
+ align: 'stretchmax'
130
+ }, me.initialConfig.layout);
131
+ }
132
+ me.defaults = me.defaults || {};
133
+ Ext.applyIf(me.defaults, {
134
+ triStateSort: me.triStateSort,
135
+ sortable: me.sortable
136
+ });
137
+
138
+ me.menuTask = new Ext.util.DelayedTask(me.updateMenuDisabledState, me);
139
+ me.callParent();
140
+ me.addEvents(
141
+ /**
142
+ * @event columnresize
143
+ * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
144
+ * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
145
+ * @param {Number} width
146
+ */
147
+ 'columnresize',
148
+
149
+ /**
150
+ * @event headerclick
151
+ * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
152
+ * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
153
+ * @param {Ext.EventObject} e
154
+ * @param {HTMLElement} t
155
+ */
156
+ 'headerclick',
157
+
158
+ /**
159
+ * @event headertriggerclick
160
+ * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
161
+ * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
162
+ * @param {Ext.EventObject} e
163
+ * @param {HTMLElement} t
164
+ */
165
+ 'headertriggerclick',
166
+
167
+ /**
168
+ * @event columnmove
169
+ * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
170
+ * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
171
+ * @param {Number} fromIdx
172
+ * @param {Number} toIdx
173
+ */
174
+ 'columnmove',
175
+ /**
176
+ * @event columnhide
177
+ * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
178
+ * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
179
+ */
180
+ 'columnhide',
181
+ /**
182
+ * @event columnshow
183
+ * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
184
+ * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
185
+ */
186
+ 'columnshow',
187
+ /**
188
+ * @event sortchange
189
+ * @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
190
+ * @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
191
+ * @param {String} direction
192
+ */
193
+ 'sortchange',
194
+ /**
195
+ * @event menucreate
196
+ * Fired immediately after the column header menu is created.
197
+ * @param {Ext.grid.header.Container} ct This instance
198
+ * @param {Ext.menu.Menu} menu The Menu that was created
199
+ */
200
+ 'menucreate'
201
+ );
202
+ },
203
+
204
+ onDestroy: function() {
205
+ var me = this;
206
+
207
+ me.menuTask.cancel();
208
+ Ext.destroy(me.resizer, me.reorderer);
209
+ me.callParent();
210
+ },
211
+
212
+ applyColumnsState: function(columns) {
213
+ if (!columns || !columns.length) {
214
+ return;
215
+ }
216
+
217
+ var me = this,
218
+ items = me.items.items,
219
+ count = items.length,
220
+ i = 0,
221
+ length = columns.length,
222
+ c, col, columnState, index;
223
+
224
+ for (c = 0; c < length; c++) {
225
+ columnState = columns[c];
226
+
227
+ for (index = count; index--; ) {
228
+ col = items[index];
229
+ if (col.getStateId && col.getStateId() == columnState.id) {
230
+ // If a column in the new grid matches up with a saved state...
231
+ // Ensure that the column is restored to the state order.
232
+ // i is incremented upon every column match, so all persistent
233
+ // columns are ordered before any new columns.
234
+ if (i !== index) {
235
+ me.moveHeader(index, i);
236
+ }
237
+
238
+ if (col.applyColumnState) {
239
+ col.applyColumnState(columnState);
240
+ }
241
+ ++i;
242
+ break;
243
+ }
244
+ }
245
+ }
246
+ },
247
+
248
+ getColumnsState: function () {
249
+ var me = this,
250
+ columns = [],
251
+ state;
252
+
253
+ me.items.each(function (col) {
254
+ state = col.getColumnState && col.getColumnState();
255
+ if (state) {
256
+ columns.push(state);
257
+ }
258
+ });
259
+
260
+ return columns;
261
+ },
262
+
263
+ // Invalidate column cache on add
264
+ // We cannot refresh the View on every add because this method is called
265
+ // when the HeaderDropZone moves Headers around, that will also refresh the view
266
+ onAdd: function(c) {
267
+ var me = this;
268
+ if (!c.headerId) {
269
+ c.headerId = c.initialConfig.id || Ext.id(null, 'header-');
270
+ }
271
+
272
+ if (!c.stateId) {
273
+ // This was the headerId generated in 4.0, so to preserve saved state, we now
274
+ // assign a default stateId in that same manner. The stateId's of a column are
275
+ // not global at the stateProvider, but are local to the grid state data. The
276
+ // headerId should still follow our standard naming convention.
277
+ c.stateId = c.initialConfig.id || ('h' + (++me.headerCounter));
278
+ }
279
+
280
+ //<debug warn>
281
+ if (Ext.global.console && Ext.global.console.warn) {
282
+ if (!me._usedIDs) {
283
+ me._usedIDs = {};
284
+ }
285
+ if (me._usedIDs[c.headerId]) {
286
+ Ext.global.console.warn(this.$className, 'attempted to reuse an existing id', c.headerId);
287
+ }
288
+ me._usedIDs[c.headerId] = true;
289
+ }
290
+ //</debug>
291
+ me.callParent(arguments);
292
+ me.purgeCache();
293
+ },
294
+
295
+ // Invalidate column cache on remove
296
+ // We cannot refresh the View on every remove because this method is called
297
+ // when the HeaderDropZone moves Headers around, that will also refresh the view
298
+ onRemove: function(c) {
299
+ var me = this;
300
+ me.callParent(arguments);
301
+ me.purgeCache();
302
+ },
303
+
304
+ // @private
305
+ applyDefaults: function(config) {
306
+ var ret;
307
+ /*
308
+ * Ensure header.Container defaults don't get applied to a RowNumberer
309
+ * if an xtype is supplied. This isn't an ideal solution however it's
310
+ * much more likely that a RowNumberer with no options will be created,
311
+ * wanting to use the defaults specified on the class as opposed to
312
+ * those setup on the Container.
313
+ */
314
+ if (config && !config.isComponent && config.xtype == 'rownumberer') {
315
+ ret = config;
316
+ } else {
317
+ ret = this.callParent(arguments);
318
+ if (!('width' in ret) && !ret.flex) {
319
+ ret.width = this.defaultWidth;
320
+ }
321
+ }
322
+ return ret;
323
+ },
324
+
325
+ afterRender: function() {
326
+ this.callParent();
327
+ this.setSortState();
328
+
329
+ },
330
+
331
+ setSortState: function(){
332
+ var store = this.up('[store]').store,
333
+ sorters = store.sorters,
334
+ first = sorters.first(),
335
+ hd;
336
+
337
+ if (first) {
338
+ hd = this.down('gridcolumn[dataIndex=' + first.property +']');
339
+ if (hd) {
340
+ hd.setSortState(first.direction, false, true);
341
+ }
342
+ }
343
+ },
344
+
345
+ getHeaderMenu: function(){
346
+ var menu = this.getMenu(),
347
+ item;
348
+
349
+ if (menu) {
350
+ item = menu.child('#columnItem');
351
+ if (item) {
352
+ return item.menu;
353
+ }
354
+ }
355
+ return null;
356
+ },
357
+
358
+ onHeaderVisibilityChange: function(header, visible){
359
+ var me = this,
360
+ menu = me.getHeaderMenu(),
361
+ item;
362
+
363
+ if (menu) {
364
+ // If the header was hidden programmatically, sync the Menu state
365
+ item = me.getMenuItemForHeader(menu, header);
366
+ if (item) {
367
+ item.setChecked(visible, true);
368
+ }
369
+ // delay this since the headers may fire a number of times if we're hiding/showing groups
370
+ me.menuTask.delay(50);
371
+ }
372
+ },
373
+
374
+ /**
375
+ * @private
376
+ * Gets all "leaf" menu nodes and returns the checked count for those leaves.
377
+ * Only includes columns that are hideable via the menu
378
+ */
379
+ getLeafMenuItems: function() {
380
+ var me = this,
381
+ columns = me.getGridColumns(),
382
+ items = [],
383
+ i = 0,
384
+ count = 0,
385
+ len = columns.length,
386
+ menu = me.getMenu(),
387
+ item;
388
+
389
+ for (; i < len; ++i) {
390
+ item = columns[i];
391
+ if (item.hideable) {
392
+ item = me.getMenuItemForHeader(menu, item);
393
+ if (item) {
394
+ items.push(item);
395
+ if (item.checked) {
396
+ ++count;
397
+ }
398
+ }
399
+ }
400
+ }
401
+
402
+ return {
403
+ items: items,
404
+ checkedCount: count
405
+ };
406
+ },
407
+
408
+ updateMenuDisabledState: function(){
409
+ var me = this,
410
+ result = me.getLeafMenuItems(),
411
+ total = result.checkedCount,
412
+ items = result.items,
413
+ len = items.length,
414
+ i = 0,
415
+ rootItem = me.getMenu().child('#columnItem');
416
+
417
+ if (total <= 1) {
418
+ // only one column visible, prevent hiding of the remaining item
419
+ me.disableMenuItems(rootItem, Ext.ComponentQuery.query('[checked=true]', items)[0]);
420
+ } else {
421
+ // at least 2 visible, set the state appropriately
422
+ for (; i < len; ++i) {
423
+ me.setMenuItemState(total, rootItem, items[i]);
424
+ }
425
+ }
426
+ },
427
+
428
+ disableMenuItems: function(rootItem, item){
429
+ while (item && item != rootItem) {
430
+ item.disableCheckChange();
431
+ item = item.parentMenu.ownerItem;
432
+ }
433
+ },
434
+
435
+ setMenuItemState: function(total, rootItem, item){
436
+ var parentMenu,
437
+ checkedChildren;
438
+
439
+ while (item && item != rootItem) {
440
+ parentMenu = item.parentMenu;
441
+ checkedChildren = item.parentMenu.query('[checked=true]:not([menu])').length;
442
+ item.enableCheckChange();
443
+ item = parentMenu.ownerItem;
444
+ if (checkedChildren === total) {
445
+ // contains all the checked children, jump out the item and all parents
446
+ break;
447
+ }
448
+ }
449
+
450
+ // while we're not at the top, disable from the current item up
451
+ this.disableMenuItems(rootItem, item);
452
+ },
453
+
454
+ getMenuItemForHeader: function(menu, header){
455
+ return header ? menu.down('menucheckitem[headerId=' + header.id + ']') : null;
456
+ },
457
+
458
+ onHeaderShow: function(header) {
459
+ // Pass up to the GridSection
460
+ var me = this,
461
+ gridSection = me.ownerCt;
462
+
463
+ me.onHeaderVisibilityChange(header, true);
464
+
465
+ // Only update the grid UI when we are notified about base level Header shows;
466
+ // Group header shows just cause a layout of the HeaderContainer
467
+ if (!header.isGroupHeader) {
468
+ if (me.view) {
469
+ me.view.onHeaderShow(me, header, true);
470
+ }
471
+ if (gridSection) {
472
+ gridSection.onHeaderShow(me, header);
473
+ }
474
+ }
475
+ me.fireEvent('columnshow', me, header);
476
+ me.updateLayout();
477
+ },
478
+
479
+ onHeaderHide: function(header) {
480
+ // Pass up to the GridSection
481
+ var me = this,
482
+ gridSection = me.ownerCt;
483
+
484
+ me.onHeaderVisibilityChange(header, false);
485
+
486
+ // Only update the UI when we are notified about base level Header hides;
487
+ if (!header.isGroupHeader) {
488
+ if (me.view) {
489
+ me.view.ignoreTemplate = true;
490
+ me.view.onHeaderHide(me, header, true);
491
+ me.view.ignoreTemplate = false;
492
+ }
493
+ if (gridSection) {
494
+ gridSection.onHeaderHide(me, header);
495
+ }
496
+ me.updateLayout();
497
+ }
498
+ me.fireEvent('columnhide', me, header);
499
+ },
500
+
501
+ /**
502
+ * Temporarily lock the headerCt. This makes it so that clicking on headers
503
+ * don't trigger actions like sorting or opening of the header menu. This is
504
+ * done because extraneous events may be fired on the headers after interacting
505
+ * with a drag drop operation.
506
+ * @private
507
+ */
508
+ tempLock: function() {
509
+ this.ddLock = true;
510
+ Ext.Function.defer(function() {
511
+ this.ddLock = false;
512
+ }, 200, this);
513
+ },
514
+
515
+ onHeaderResize: function(header, w, suppressFocus) {
516
+ var me = this,
517
+ view = me.view,
518
+ gridSection = me.ownerCt,
519
+ viewEl;
520
+
521
+ // Do not react to header sizing during initial Panel layout when there is no view content to size.
522
+ if (view && (viewEl = view.el) && viewEl.dom.firstChild) {
523
+ me.tempLock();
524
+ view.onHeaderResize(header, w, suppressFocus);
525
+ if (gridSection) {
526
+ gridSection.onHeaderResize(me, header, w);
527
+ }
528
+ }
529
+ me.fireEvent('columnresize', this, header, w);
530
+ },
531
+
532
+ onHeaderClick: function(header, e, t) {
533
+ header.fireEvent('headerclick', this, header, e, t);
534
+ this.fireEvent("headerclick", this, header, e, t);
535
+ },
536
+
537
+ onHeaderTriggerClick: function(header, e, t) {
538
+ // generate and cache menu, provide ability to cancel/etc
539
+ var me = this;
540
+ if (header.fireEvent('headertriggerclick', me, header, e, t) !== false && me.fireEvent("headertriggerclick", me, header, e, t) !== false) {
541
+ me.showMenuBy(t, header);
542
+ }
543
+ },
544
+
545
+ showMenuBy: function(t, header) {
546
+ var menu = this.getMenu(),
547
+ ascItem = menu.down('#ascItem'),
548
+ descItem = menu.down('#descItem'),
549
+ sortableMth;
550
+
551
+ menu.activeHeader = menu.ownerCt = header;
552
+ menu.setFloatParent(header);
553
+ // TODO: remove coupling to Header's titleContainer el
554
+ header.titleEl.addCls(this.headerOpenCls);
555
+
556
+ // enable or disable asc & desc menu items based on header being sortable
557
+ sortableMth = header.sortable ? 'enable' : 'disable';
558
+ if (ascItem) {
559
+ ascItem[sortableMth]();
560
+ }
561
+ if (descItem) {
562
+ descItem[sortableMth]();
563
+ }
564
+ menu.showBy(t);
565
+ },
566
+
567
+ // remove the trigger open class when the menu is hidden
568
+ onMenuDeactivate: function() {
569
+ var menu = this.getMenu();
570
+ // TODO: remove coupling to Header's titleContainer el
571
+ menu.activeHeader.titleEl.removeCls(this.headerOpenCls);
572
+ },
573
+
574
+ moveHeader: function(fromIdx, toIdx) {
575
+
576
+ // An automatically expiring lock
577
+ this.tempLock();
578
+ this.onHeaderMoved(this.move(fromIdx, toIdx), fromIdx, toIdx);
579
+ },
580
+
581
+ purgeCache: function() {
582
+ var me = this;
583
+ // Delete column cache - column order has changed.
584
+ delete me.gridDataColumns;
585
+ delete me.hideableColumns;
586
+
587
+ // Menu changes when columns are moved. It will be recreated.
588
+ if (me.menu) {
589
+ // Must hide before destroy so that trigger el is deactivated
590
+ me.menu.hide();
591
+ me.menu.destroy();
592
+ delete me.menu;
593
+ }
594
+ },
595
+
596
+ onHeaderMoved: function(header, colsToMove, fromIdx, toIdx) {
597
+ var me = this,
598
+ gridSection = me.ownerCt;
599
+
600
+ if (gridSection && gridSection.onHeaderMove) {
601
+ gridSection.onHeaderMove(me, header, colsToMove, fromIdx, toIdx);
602
+ }
603
+ me.fireEvent("columnmove", me, header, fromIdx, toIdx);
604
+ },
605
+
606
+ /**
607
+ * Gets the menu (and will create it if it doesn't already exist)
608
+ * @private
609
+ */
610
+ getMenu: function() {
611
+ var me = this;
612
+
613
+ if (!me.menu) {
614
+ me.menu = new Ext.menu.Menu({
615
+ hideOnParentHide: false, // Persists when owning ColumnHeader is hidden
616
+ items: me.getMenuItems(),
617
+ listeners: {
618
+ deactivate: me.onMenuDeactivate,
619
+ scope: me
620
+ }
621
+ });
622
+ me.updateMenuDisabledState();
623
+ me.fireEvent('menucreate', me, me.menu);
624
+ }
625
+ return me.menu;
626
+ },
627
+
628
+ /**
629
+ * Returns an array of menu items to be placed into the shared menu
630
+ * across all headers in this header container.
631
+ * @returns {Array} menuItems
632
+ */
633
+ getMenuItems: function() {
634
+ var me = this,
635
+ menuItems = [],
636
+ hideableColumns = me.enableColumnHide ? me.getColumnMenu(me) : null;
637
+
638
+ if (me.sortable) {
639
+ menuItems = [{
640
+ itemId: 'ascItem',
641
+ text: me.sortAscText,
642
+ cls: Ext.baseCSSPrefix + 'hmenu-sort-asc',
643
+ handler: me.onSortAscClick,
644
+ scope: me
645
+ },{
646
+ itemId: 'descItem',
647
+ text: me.sortDescText,
648
+ cls: Ext.baseCSSPrefix + 'hmenu-sort-desc',
649
+ handler: me.onSortDescClick,
650
+ scope: me
651
+ }];
652
+ }
653
+ if (hideableColumns && hideableColumns.length) {
654
+ menuItems.push('-', {
655
+ itemId: 'columnItem',
656
+ text: me.columnsText,
657
+ cls: Ext.baseCSSPrefix + 'cols-icon',
658
+ menu: hideableColumns
659
+ });
660
+ }
661
+ return menuItems;
662
+ },
663
+
664
+ // sort asc when clicking on item in menu
665
+ onSortAscClick: function() {
666
+ var menu = this.getMenu(),
667
+ activeHeader = menu.activeHeader;
668
+
669
+ activeHeader.setSortState('ASC');
670
+ },
671
+
672
+ // sort desc when clicking on item in menu
673
+ onSortDescClick: function() {
674
+ var menu = this.getMenu(),
675
+ activeHeader = menu.activeHeader;
676
+
677
+ activeHeader.setSortState('DESC');
678
+ },
679
+
680
+ /**
681
+ * Returns an array of menu CheckItems corresponding to all immediate children
682
+ * of the passed Container which have been configured as hideable.
683
+ */
684
+ getColumnMenu: function(headerContainer) {
685
+ var menuItems = [],
686
+ i = 0,
687
+ item,
688
+ items = headerContainer.query('>gridcolumn[hideable]'),
689
+ itemsLn = items.length,
690
+ menuItem;
691
+
692
+ for (; i < itemsLn; i++) {
693
+ item = items[i];
694
+ menuItem = new Ext.menu.CheckItem({
695
+ text: item.menuText || item.text,
696
+ checked: !item.hidden,
697
+ hideOnClick: false,
698
+ headerId: item.id,
699
+ menu: item.isGroupHeader ? this.getColumnMenu(item) : undefined,
700
+ checkHandler: this.onColumnCheckChange,
701
+ scope: this
702
+ });
703
+ menuItems.push(menuItem);
704
+
705
+ // If the header is ever destroyed - for instance by dragging out the last remaining sub header,
706
+ // then the associated menu item must also be destroyed.
707
+ item.on({
708
+ destroy: Ext.Function.bind(menuItem.destroy, menuItem)
709
+ });
710
+ }
711
+ return menuItems;
712
+ },
713
+
714
+ onColumnCheckChange: function(checkItem, checked) {
715
+ var header = Ext.getCmp(checkItem.headerId);
716
+ header[checked ? 'show' : 'hide']();
717
+ },
718
+
719
+ /**
720
+ * Get the columns used for generating a template via TableChunker.
721
+ * Returns an array of all columns and their
722
+ *
723
+ * - dataIndex
724
+ * - align
725
+ * - width
726
+ * - id
727
+ * - columnId - used to create an identifying CSS class
728
+ * - cls The tdCls configuration from the Column object
729
+ *
730
+ * @private
731
+ */
732
+ getColumnsForTpl: function(flushCache) {
733
+ var cols = [],
734
+ headers = this.getGridColumns(flushCache),
735
+ headersLn = headers.length,
736
+ i = 0,
737
+ header,
738
+ width;
739
+
740
+ for (; i < headersLn; i++) {
741
+ header = headers[i];
742
+
743
+ if (header.hidden || header.up('headercontainer[hidden=true]')) {
744
+ width = 0;
745
+ } else {
746
+ width = header.getDesiredWidth();
747
+ }
748
+ cols.push({
749
+ dataIndex: header.dataIndex,
750
+ align: header.align,
751
+ width: width,
752
+ id: header.id,
753
+ cls: header.tdCls,
754
+ columnId: header.getItemId()
755
+ });
756
+ }
757
+ return cols;
758
+ },
759
+
760
+ /**
761
+ * Returns the number of <b>grid columns</b> descended from this HeaderContainer.
762
+ * Group Columns are HeaderContainers. All grid columns are returned, including hidden ones.
763
+ */
764
+ getColumnCount: function() {
765
+ return this.getGridColumns().length;
766
+ },
767
+
768
+ /**
769
+ * Gets the full width of all columns that are visible.
770
+ */
771
+ getFullWidth: function(flushCache) {
772
+ var fullWidth = 0,
773
+ headers = this.getVisibleGridColumns(flushCache),
774
+ headersLn = headers.length,
775
+ i = 0,
776
+ header;
777
+
778
+
779
+ for (; i < headersLn; i++) {
780
+ header = headers[i];
781
+ // use headers getDesiredWidth if its there
782
+ if (header.getDesiredWidth) {
783
+ fullWidth += header.getDesiredWidth() || 0;
784
+ // if injected a diff cmp use getWidth
785
+ } else {
786
+ fullWidth += header.getWidth();
787
+ }
788
+ }
789
+ return fullWidth;
790
+ },
791
+
792
+ // invoked internally by a header when not using triStateSorting
793
+ clearOtherSortStates: function(activeHeader) {
794
+ var headers = this.getGridColumns(),
795
+ headersLn = headers.length,
796
+ i = 0;
797
+
798
+ for (; i < headersLn; i++) {
799
+ if (headers[i] !== activeHeader) {
800
+ // unset the sortstate and dont recurse
801
+ headers[i].setSortState(null, true);
802
+ }
803
+ }
804
+ },
805
+
806
+ /**
807
+ * Returns an array of the **visible** columns in the grid. This goes down to the lowest column header
808
+ * level, and does not return **grouped** headers which contain sub headers.
809
+ * @param {Boolean} refreshCache If omitted, the cached set of columns will be returned. Pass true to refresh the cache.
810
+ * @returns {Array}
811
+ */
812
+ getVisibleGridColumns: function(refreshCache) {
813
+ return Ext.ComponentQuery.query(':not([hidden])', this.getGridColumns(refreshCache));
814
+ },
815
+
816
+ /**
817
+ * Returns an array of all columns which map to Store fields. This goes down to the lowest column header
818
+ * level, and does not return **grouped** headers which contain sub headers.
819
+ * @param {Boolean} refreshCache If omitted, the cached set of columns will be returned. Pass true to refresh the cache.
820
+ * @returns {Array}
821
+ */
822
+ getGridColumns: function(refreshCache) {
823
+ var me = this,
824
+ result = refreshCache ? null : me.gridDataColumns;
825
+
826
+ // Not already got the column cache, so collect the base columns
827
+ if (!result) {
828
+ me.gridDataColumns = result = [];
829
+ me.cascade(function(c) {
830
+ if ((c !== me) && !c.isGroupHeader) {
831
+ result.push(c);
832
+ }
833
+ });
834
+ }
835
+
836
+ return result;
837
+ },
838
+
839
+ /**
840
+ * @private
841
+ * For use by column headers in determining whether there are any hideable columns when deciding whether or not
842
+ * the header menu should be disabled.
843
+ */
844
+ getHideableColumns: function(refreshCache) {
845
+ var me = this,
846
+ result = refreshCache ? null : me.hideableColumns;
847
+
848
+ if (!result) {
849
+ result = me.hideableColumns = me.query('[hideable]');
850
+ }
851
+ return result;
852
+ },
853
+
854
+ /**
855
+ * Returns the index of a leaf level header regardless of what the nesting
856
+ * structure is.
857
+ *
858
+ * If a group header is passed, the index of the first leaf level heder within it is returned.
859
+ *
860
+ * @param {Ext.grid.column.Column} header The header to find the index of
861
+ * @return {Number} The index of the specified column header
862
+ */
863
+ getHeaderIndex: function(header) {
864
+ // If we are being asked the index of a group header, find the first leaf header node, and return the index of that
865
+ if (header.isGroupHeader) {
866
+ header = header.down(':not([isgroupHeader])');
867
+ }
868
+ return Ext.Array.indexOf(this.getGridColumns(), header);
869
+ },
870
+
871
+ /**
872
+ * Get a leaf level header by index regardless of what the nesting
873
+ * structure is.
874
+ * @param {Number} The column index for which to retrieve the column.
875
+ */
876
+ getHeaderAtIndex: function(index) {
877
+ var columns = this.getGridColumns();
878
+ return columns.length ? columns[index] : null;
879
+ },
880
+
881
+ /**
882
+ * When passed a column index, returns the closet *visible* column to that. If the column at the passed index is visible,
883
+ * that is returned. If it is hidden, either the next visible, or the previous visible column is returned.
884
+ * @param {Number} index Position at which to find the closest visible column.
885
+ */
886
+ getVisibleHeaderClosestToIndex: function(index) {
887
+ var result = this.getHeaderAtIndex(index);
888
+ if (result && result.hidden) {
889
+ result = result.next(':not([hidden])') || result.next(':not([hidden])');
890
+ }
891
+ return result;
892
+ },
893
+
894
+ /**
895
+ * Maps the record data to base it on the header id's.
896
+ * This correlates to the markup/template generated by
897
+ * TableChunker.
898
+ */
899
+ prepareData: function(data, rowIdx, record, view, panel) {
900
+ var me = this,
901
+ obj = {},
902
+ headers = me.gridDataColumns || me.getGridColumns(),
903
+ headersLn = headers.length,
904
+ colIdx = 0,
905
+ header,
906
+ headerId,
907
+ renderer,
908
+ value,
909
+ metaData,
910
+ store = panel.store;
911
+
912
+ for (; colIdx < headersLn; colIdx++) {
913
+ metaData = {
914
+ tdCls: '',
915
+ style: ''
916
+ };
917
+ header = headers[colIdx];
918
+ headerId = header.id;
919
+ renderer = header.renderer;
920
+ value = data[header.dataIndex];
921
+
922
+ if (typeof renderer == "function") {
923
+ value = renderer.call(
924
+ header.scope || me.ownerCt,
925
+ value,
926
+ // metadata per cell passing an obj by reference so that
927
+ // it can be manipulated inside the renderer
928
+ metaData,
929
+ record,
930
+ rowIdx,
931
+ colIdx,
932
+ store,
933
+ view
934
+ );
935
+ }
936
+
937
+ // <debug>
938
+ if (metaData.css) {
939
+ // This warning attribute is used by the compat layer
940
+ obj.cssWarning = true;
941
+ metaData.tdCls = metaData.css;
942
+ delete metaData.css;
943
+ }
944
+ // </debug>
945
+ if (me.markDirty) {
946
+ obj[headerId + '-modified'] = record.isModified(header.dataIndex) ? Ext.baseCSSPrefix + 'grid-dirty-cell' : '';
947
+ }
948
+ obj[headerId+'-tdCls'] = metaData.tdCls;
949
+ obj[headerId+'-tdAttr'] = metaData.tdAttr;
950
+ obj[headerId+'-style'] = metaData.style;
951
+ if (typeof value === 'undefined' || value === null || value === '') {
952
+ value = header.emptyCellText;
953
+ }
954
+ obj[headerId] = value;
955
+ }
956
+ return obj;
957
+ },
958
+
959
+ expandToFit: function(header) {
960
+ var view = this.view;
961
+ if (view) {
962
+ view.expandToFit(header);
963
+ }
964
+ }
965
+ });