extjs-rails 4.1.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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,110 @@
1
+ /**
2
+ * @docauthor Jason Johnston <jason@sencha.com>
3
+ *
4
+ * Produces a standalone `<label />` element which can be inserted into a form and be associated with a field
5
+ * in that form using the {@link #forId} property.
6
+ *
7
+ * **NOTE:** in most cases it will be more appropriate to use the {@link Ext.form.Labelable#fieldLabel fieldLabel}
8
+ * and associated config properties ({@link Ext.form.Labelable#labelAlign}, {@link Ext.form.Labelable#labelWidth},
9
+ * etc.) in field components themselves, as that allows labels to be uniformly sized throughout the form.
10
+ * Ext.form.Label should only be used when your layout can not be achieved with the standard
11
+ * {@link Ext.form.Labelable field layout}.
12
+ *
13
+ * You will likely be associating the label with a field component that extends {@link Ext.form.field.Base}, so
14
+ * you should make sure the {@link #forId} is set to the same value as the {@link Ext.form.field.Base#inputId inputId}
15
+ * of that field.
16
+ *
17
+ * The label's text can be set using either the {@link #text} or {@link #html} configuration properties; the
18
+ * difference between the two is that the former will automatically escape HTML characters when rendering, while
19
+ * the latter will not.
20
+ *
21
+ * # Example
22
+ *
23
+ * This example creates a Label after its associated Text field, an arrangement that cannot currently
24
+ * be achieved using the standard Field layout's labelAlign.
25
+ *
26
+ * @example
27
+ * Ext.create('Ext.form.Panel', {
28
+ * title: 'Field with Label',
29
+ * width: 400,
30
+ * bodyPadding: 10,
31
+ * renderTo: Ext.getBody(),
32
+ * layout: {
33
+ * type: 'hbox',
34
+ * align: 'middle'
35
+ * },
36
+ * items: [{
37
+ * xtype: 'textfield',
38
+ * hideLabel: true,
39
+ * flex: 1
40
+ * }, {
41
+ * xtype: 'label',
42
+ * forId: 'myFieldId',
43
+ * text: 'My Awesome Field',
44
+ * margin: '0 0 0 10'
45
+ * }]
46
+ * });
47
+ */
48
+ Ext.define('Ext.form.Label', {
49
+ extend:'Ext.Component',
50
+ alias: 'widget.label',
51
+ requires: ['Ext.util.Format'],
52
+
53
+ autoEl: 'label',
54
+
55
+ /**
56
+ * @cfg {String} [text='']
57
+ * The plain text to display within the label. If you need to include HTML
58
+ * tags within the label's innerHTML, use the {@link #html} config instead.
59
+ */
60
+ /**
61
+ * @cfg {String} forId
62
+ * The id of the input element to which this label will be bound via the standard HTML 'for'
63
+ * attribute. If not specified, the attribute will not be added to the label. In most cases you will be
64
+ * associating the label with a {@link Ext.form.field.Base} component, so you should make sure this matches
65
+ * the {@link Ext.form.field.Base#inputId inputId} of that field.
66
+ */
67
+ /**
68
+ * @cfg {String} [html='']
69
+ * An HTML fragment that will be used as the label's innerHTML.
70
+ * Note that if {@link #text} is specified it will take precedence and this value will be ignored.
71
+ */
72
+
73
+ maskOnDisable: false,
74
+
75
+ getElConfig: function(){
76
+ var me = this;
77
+
78
+ me.html = me.text ? Ext.util.Format.htmlEncode(me.text) : (me.html || '');
79
+ return Ext.apply(me.callParent(), {
80
+ htmlFor: me.forId || ''
81
+ });
82
+ },
83
+
84
+ /**
85
+ * Updates the label's innerHTML with the specified string.
86
+ * @param {String} text The new label text
87
+ * @param {Boolean} [encode=true] False to skip HTML-encoding the text when rendering it
88
+ * to the label. This might be useful if you want to include tags in the label's innerHTML rather
89
+ * than rendering them as string literals per the default logic.
90
+ * @return {Ext.form.Label} this
91
+ */
92
+ setText : function(text, encode){
93
+ var me = this;
94
+
95
+ encode = encode !== false;
96
+ if(encode) {
97
+ me.text = text;
98
+ delete me.html;
99
+ } else {
100
+ me.html = text;
101
+ delete me.text;
102
+ }
103
+
104
+ if(me.rendered){
105
+ me.el.dom.innerHTML = encode !== false ? Ext.util.Format.htmlEncode(text) : text;
106
+ }
107
+ return this;
108
+ }
109
+ });
110
+
@@ -0,0 +1,764 @@
1
+ /**
2
+ * A mixin which allows a component to be configured and decorated with a label and/or error message as is
3
+ * common for form fields. This is used by e.g. Ext.form.field.Base and Ext.form.FieldContainer
4
+ * to let them be managed by the Field layout.
5
+ *
6
+ * NOTE: This mixin is mainly for internal library use and most users should not need to use it directly. It
7
+ * is more likely you will want to use one of the component classes that import this mixin, such as
8
+ * Ext.form.field.Base or Ext.form.FieldContainer.
9
+ *
10
+ * Use of this mixin does not make a component a field in the logical sense, meaning it does not provide any
11
+ * logic or state related to values or validation; that is handled by the related Ext.form.field.Field
12
+ * mixin. These two mixins may be used separately (for example Ext.form.FieldContainer is Labelable but not a
13
+ * Field), or in combination (for example Ext.form.field.Base implements both and has logic for connecting the
14
+ * two.)
15
+ *
16
+ * Component classes which use this mixin should use the Field layout
17
+ * or a derivation thereof to properly size and position the label and message according to the component config.
18
+ * They must also call the {@link #initLabelable} method during component initialization to ensure the mixin gets
19
+ * set up correctly.
20
+ *
21
+ * @docauthor Jason Johnston <jason@sencha.com>
22
+ */
23
+ Ext.define("Ext.form.Labelable", {
24
+ requires: ['Ext.XTemplate'],
25
+
26
+ autoEl: {
27
+ tag: 'table',
28
+ cellpadding: 0
29
+ },
30
+
31
+ childEls: [
32
+ /**
33
+ * @property {Ext.Element} labelCell
34
+ * The `<TD>` Element which contains the label Element for this component. Only available after the component has been rendered.
35
+ */
36
+ 'labelCell',
37
+
38
+ /**
39
+ * @property {Ext.Element} labelEl
40
+ * The label Element for this component. Only available after the component has been rendered.
41
+ */
42
+ 'labelEl',
43
+
44
+ /**
45
+ * @property {Ext.Element} bodyEl
46
+ * The div Element wrapping the component's contents. Only available after the component has been rendered.
47
+ */
48
+ 'bodyEl',
49
+
50
+ /**
51
+ * @property {Ext.Element} errorEl
52
+ * The div Element that will contain the component's error message(s). Note that depending on the configured
53
+ * {@link #msgTarget}, this element may be hidden in favor of some other form of presentation, but will always
54
+ * be present in the DOM for use by assistive technologies.
55
+ */
56
+ 'errorEl',
57
+
58
+ 'inputRow'
59
+ ],
60
+
61
+ /**
62
+ * @cfg {String/String[]/Ext.XTemplate} labelableRenderTpl
63
+ * The rendering template for the field decorations. Component classes using this mixin
64
+ * should include logic to use this as their {@link Ext.AbstractComponent#renderTpl renderTpl},
65
+ * and implement the {@link #getSubTplMarkup} method to generate the field body content.
66
+ *
67
+ * The structure of a field is a table as follows:
68
+ *
69
+ * If `label:align: 'left|top'`:
70
+ *
71
+ * +----------------------+------------+---------+--------------+
72
+ * | Label: | InputField | sideErrorEl |
73
+ * +----------------------+------------+---------+-------------+
74
+ * | | underErrorEl (colspan=3) |
75
+ * +-----------------------------------------------------------+
76
+ *
77
+ * Or, if `labelAlign: 'top'`:
78
+ *
79
+ * +-----------------------------------------------------------+
80
+ * | labelAlign:'top' label: (colspan=3) |
81
+ * +----------------------+------------+---------+-------------+
82
+ * | InputField (colspan=2) | sideErrorEl |
83
+ * +----------------------+------------+---------+-------------+
84
+ * | underErrorEl (colspan=3) |
85
+ * +-----------------------------------------------------------+
86
+ *
87
+ * The total columns always adds up to 3 (even if `labelAlign: 'top'`) because when
88
+ * rendered into a {@link Ext.layout.container.Form} layout, just the `TR` of the table
89
+ * will be placed into the form's main `TABLE`, and the columns of all the siblings
90
+ * must match so that they all line up.
91
+ *
92
+ * When the triggerCell or side error cell are hidden or shown, the input cell's colspan
93
+ * is recalculated to maintain the correct 3 visible column count.
94
+ * @private
95
+ */
96
+ labelableRenderTpl: [
97
+
98
+ // Top TR if labelAlign =='top'
99
+ '<tpl if="labelAlign==\'top\'">',
100
+ '<tr>',
101
+ '<td id="{id}-labelCell" colspan="3" style="{labelCellStyle}" {labelCellAttrs}>',
102
+ '{beforeLabelTpl}',
103
+ '<label id="{id}-labelEl" {labelAttrTpl}<tpl if="inputId"> for="{inputId}"</tpl> class="{labelCls}"',
104
+ '<tpl if="labelStyle"> style="{labelStyle}"</tpl>>',
105
+ '{beforeLabelTextTpl}',
106
+ '<tpl if="fieldLabel">{fieldLabel}{labelSeparator}</tpl>',
107
+ '{afterLabelTextTpl}',
108
+ '</label>',
109
+ '{afterLabelTpl}',
110
+ '</td>',
111
+ '</tr>',
112
+ '</tpl>',
113
+
114
+ // body row. If a heighted Field (eg TextArea, HtmlEditor, this must greedily consume height.
115
+ '<tr id="{id}-inputRow" <tpl if="inFormLayout">id="{id}"</tpl>>',
116
+
117
+ // Label cell
118
+ '<tpl if="labelOnLeft">',
119
+ '<td id="{id}-labelCell" style="{labelCellStyle}" {labelCellAttrs}>',
120
+ '{beforeLabelTpl}',
121
+ '<label id="{id}-labelEl" {labelAttrTpl}<tpl if="inputId"> for="{inputId}"</tpl> class="{labelCls}"',
122
+ '<tpl if="labelStyle"> style="{labelStyle}"</tpl>>',
123
+ '{beforeLabelTextTpl}',
124
+ '<tpl if="fieldLabel">{fieldLabel}{labelSeparator}</tpl>',
125
+ '{afterLabelTextTpl}',
126
+ '</label>',
127
+ '{afterLabelTpl}',
128
+ '</td>',
129
+ '</tpl>',
130
+
131
+ // Body of the input. That will be an input element, or, from a TriggerField, a table containing an input cell and trigger cell(s)
132
+ '<td class="{baseBodyCls} {fieldBodyCls}" id="{id}-bodyEl" role="presentation" colspan="{bodyColspan}">',
133
+ '{beforeSubTpl}',
134
+ '{[values.$comp.getSubTplMarkup()]}',
135
+ '{afterSubTpl}',
136
+ '</td>',
137
+
138
+ // Side error element
139
+ '<tpl if="msgTarget==\'side\'">',
140
+ '<td id="{id}-errorEl" class="{errorMsgCls}" style="display:none" width="{errorIconWidth}"></td>',
141
+ '</tpl>',
142
+ '</tr>',
143
+
144
+ // Under error element is another TR
145
+ '<tpl if="msgTarget==\'under\'">',
146
+ '<tr>',
147
+ // Align under the input element
148
+ '<tpl if="labelOnLeft">',
149
+ '<td></td>',
150
+ '</tpl>',
151
+ '<td id="{id}-errorEl" class="{errorMsgClass}" colspan="{[values.labelOnLeft ? 2 : 3]}" style="display:none"></td>',
152
+ '</tr>',
153
+ '</tpl>',
154
+ {
155
+ disableFormats: true
156
+ }
157
+ ],
158
+
159
+ /**
160
+ * @cfg {String/String[]/Ext.XTemplate} activeErrorsTpl
161
+ * The template used to format the Array of error messages passed to {@link #setActiveErrors} into a single HTML
162
+ * string. By default this renders each message as an item in an unordered list.
163
+ */
164
+ activeErrorsTpl: [
165
+ '<tpl if="errors && errors.length">',
166
+ '<ul><tpl for="errors"><li>{.}</li></tpl></ul>',
167
+ '</tpl>'
168
+ ],
169
+
170
+ /**
171
+ * @property {Boolean} isFieldLabelable
172
+ * Flag denoting that this object is labelable as a field. Always true.
173
+ */
174
+ isFieldLabelable: true,
175
+
176
+ /**
177
+ * @cfg {String} formItemCls
178
+ * A CSS class to be applied to the outermost element to denote that it is participating in the form field layout.
179
+ */
180
+ formItemCls: Ext.baseCSSPrefix + 'form-item',
181
+
182
+ /**
183
+ * @cfg {String} labelCls
184
+ * The CSS class to be applied to the label element. This (single) CSS class is used to formulate the renderSelector
185
+ * and drives the field layout where it is concatenated with a hyphen ('-') and {@link #labelAlign}. To add
186
+ * additional classes, use {@link #labelClsExtra}.
187
+ */
188
+ labelCls: Ext.baseCSSPrefix + 'form-item-label',
189
+
190
+ /**
191
+ * @cfg {String} labelClsExtra
192
+ * An optional string of one or more additional CSS classes to add to the label element. Defaults to empty.
193
+ */
194
+
195
+ /**
196
+ * @cfg {String} errorMsgCls
197
+ * The CSS class to be applied to the error message element.
198
+ */
199
+ errorMsgCls: Ext.baseCSSPrefix + 'form-error-msg',
200
+
201
+ /**
202
+ * @cfg {String} baseBodyCls
203
+ * The CSS class to be applied to the body content element.
204
+ */
205
+ baseBodyCls: Ext.baseCSSPrefix + 'form-item-body',
206
+
207
+ /**
208
+ * @cfg {String} fieldBodyCls
209
+ * An extra CSS class to be applied to the body content element in addition to {@link #baseBodyCls}.
210
+ */
211
+ fieldBodyCls: '',
212
+
213
+ /**
214
+ * @cfg {String} clearCls
215
+ * The CSS class to be applied to the special clearing div rendered directly after the field contents wrapper to
216
+ * provide field clearing.
217
+ */
218
+ clearCls: Ext.baseCSSPrefix + 'clear',
219
+
220
+ /**
221
+ * @cfg {String} invalidCls
222
+ * The CSS class to use when marking the component invalid.
223
+ */
224
+ invalidCls : Ext.baseCSSPrefix + 'form-invalid',
225
+
226
+ /**
227
+ * @cfg {String} fieldLabel
228
+ * The label for the field. It gets appended with the {@link #labelSeparator}, and its position and sizing is
229
+ * determined by the {@link #labelAlign}, {@link #labelWidth}, and {@link #labelPad} configs.
230
+ */
231
+ fieldLabel: undefined,
232
+
233
+ /**
234
+ * @cfg {String} labelAlign
235
+ * Controls the position and alignment of the {@link #fieldLabel}. Valid values are:
236
+ *
237
+ * - "left" (the default) - The label is positioned to the left of the field, with its text aligned to the left.
238
+ * Its width is determined by the {@link #labelWidth} config.
239
+ * - "top" - The label is positioned above the field.
240
+ * - "right" - The label is positioned to the left of the field, with its text aligned to the right.
241
+ * Its width is determined by the {@link #labelWidth} config.
242
+ */
243
+ labelAlign : 'left',
244
+
245
+ /**
246
+ * @cfg {Number} labelWidth
247
+ * The width of the {@link #fieldLabel} in pixels. Only applicable if the {@link #labelAlign} is set to "left" or
248
+ * "right".
249
+ */
250
+ labelWidth: 100,
251
+
252
+ /**
253
+ * @cfg {Number} labelPad
254
+ * The amount of space in pixels between the {@link #fieldLabel} and the input field.
255
+ */
256
+ labelPad : 5,
257
+
258
+ /**
259
+ * @cfg {String} labelSeparator
260
+ * Character(s) to be inserted at the end of the {@link #fieldLabel label text}.
261
+ */
262
+ //<locale>
263
+ labelSeparator : ':',
264
+ //</locale>
265
+
266
+ /**
267
+ * @cfg {String} labelStyle
268
+ * A CSS style specification string to apply directly to this field's label.
269
+ */
270
+
271
+ /**
272
+ * @cfg {Boolean} hideLabel
273
+ * Set to true to completely hide the label element ({@link #fieldLabel} and {@link #labelSeparator}). Also see
274
+ * {@link #hideEmptyLabel}, which controls whether space will be reserved for an empty fieldLabel.
275
+ */
276
+ hideLabel: false,
277
+
278
+ /**
279
+ * @cfg {Boolean} hideEmptyLabel
280
+ * When set to true, the label element ({@link #fieldLabel} and {@link #labelSeparator}) will be automatically
281
+ * hidden if the {@link #fieldLabel} is empty. Setting this to false will cause the empty label element to be
282
+ * rendered and space to be reserved for it; this is useful if you want a field without a label to line up with
283
+ * other labeled fields in the same form.
284
+ *
285
+ * If you wish to unconditionall hide the label even if a non-empty fieldLabel is configured, then set the {@link
286
+ * #hideLabel} config to true.
287
+ */
288
+ hideEmptyLabel: true,
289
+
290
+ /**
291
+ * @cfg {Boolean} preventMark
292
+ * true to disable displaying any {@link #setActiveError error message} set on this object.
293
+ */
294
+ preventMark: false,
295
+
296
+ /**
297
+ * @cfg {Boolean} autoFitErrors
298
+ * Whether to adjust the component's body area to make room for 'side' or 'under' {@link #msgTarget error messages}.
299
+ */
300
+ autoFitErrors: true,
301
+
302
+ /**
303
+ * @cfg {String} msgTarget
304
+ * The location where the error message text should display. Must be one of the following values:
305
+ *
306
+ * - `qtip` Display a quick tip containing the message when the user hovers over the field.
307
+ * This is the default.
308
+ *
309
+ * **{@link Ext.tip.QuickTipManager#init} must have been called for this setting to work.**
310
+ *
311
+ * - `title` Display the message in a default browser title attribute popup.
312
+ * - `under` Add a block div beneath the field containing the error message.
313
+ * - `side` Add an error icon to the right of the field, displaying the message in a popup on hover.
314
+ * - `none` Don't display any error message. This might be useful if you are implementing custom error display.
315
+ * - `[element id]` Add the error message directly to the innerHTML of the specified element.
316
+ */
317
+ msgTarget: 'qtip',
318
+
319
+ /**
320
+ * @cfg {String} activeError
321
+ * If specified, then the component will be displayed with this value as its active error when first rendered. Use
322
+ * {@link #setActiveError} or {@link #unsetActiveError} to change it after component creation.
323
+ */
324
+
325
+ /**
326
+ * @private
327
+ * Tells the layout system that the height can be measured immediately because the width does not need setting.
328
+ */
329
+ noWrap: true,
330
+
331
+ labelableInsertions: [
332
+ /**
333
+ * @cfg {String/Array/Ext.XTemplate} beforeLabelTpl
334
+ * An optional string or `XTemplate` configuration to insert in the field markup
335
+ * before the label element. If an `XTemplate` is used, the component's {@link Ext.AbstractComponent#renderData render data}
336
+ * serves as the context.
337
+ */
338
+ 'beforeLabelTpl',
339
+
340
+ /**
341
+ * @cfg {String/Array/Ext.XTemplate} afterLabelTpl
342
+ * An optional string or `XTemplate` configuration to insert in the field markup
343
+ * after the label element. If an `XTemplate` is used, the component's {@link Ext.AbstractComponent#renderData render data}
344
+ * serves as the context.
345
+ */
346
+ 'afterLabelTpl',
347
+
348
+ /**
349
+ * @cfg {String/Array/Ext.XTemplate} beforeSubTpl
350
+ * An optional string or `XTemplate` configuration to insert in the field markup
351
+ * before the {@link #getSubTplMarkup subTpl markup}. If an `XTemplate` is used, the
352
+ * component's {@link Ext.AbstractComponent#renderData render data} serves as the context.
353
+ */
354
+ 'beforeSubTpl',
355
+
356
+ /**
357
+ * @cfg {String/Array/Ext.XTemplate} afterSubTpl
358
+ * An optional string or `XTemplate` configuration to insert in the field markup
359
+ * after the {@link #getSubTplMarkup subTpl markup}. If an `XTemplate` is used, the
360
+ * component's {@link Ext.AbstractComponent#renderData render data} serves as the context.
361
+ */
362
+ 'afterSubTpl',
363
+
364
+ /**
365
+ * @cfg {String/Array/Ext.XTemplate} beforeLabelTextTpl
366
+ * An optional string or `XTemplate` configuration to insert in the field markup
367
+ * before the label text. If an `XTemplate` is used, the component's {@link Ext.AbstractComponent#renderData render data}
368
+ * serves as the context.
369
+ */
370
+ 'beforeLabelTextTpl',
371
+
372
+ /**
373
+ * @cfg {String/Array/Ext.XTemplate} afterLabelTextTpl
374
+ * An optional string or `XTemplate` configuration to insert in the field markup
375
+ * after the label text. If an `XTemplate` is used, the component's {@link Ext.AbstractComponent#renderData render data}
376
+ * serves as the context.
377
+ */
378
+ 'afterLabelTextTpl',
379
+
380
+ /**
381
+ * @cfg {String/Array/Ext.XTemplate} labelAttrTpl
382
+ * An optional string or `XTemplate` configuration to insert in the field markup
383
+ * inside the label element (as attributes). If an `XTemplate` is used, the component's
384
+ * {@link Ext.AbstractComponent#renderData render data} serves as the context.
385
+ */
386
+ 'labelAttrTpl'
387
+ ],
388
+
389
+ labelableRenderProps: 'allowBlank,labelAlign,fieldBodyCls,baseBodyCls,clearCls,labelSeparator,msgTarget',
390
+
391
+ /**
392
+ * Performs initialization of this mixin. Component classes using this mixin should call this method during their
393
+ * own initialization.
394
+ */
395
+ initLabelable: function() {
396
+ var me = this,
397
+ padding = me.padding;
398
+
399
+ // This Component is rendered as a table. Padding doesn't work on tables
400
+ // Before padding can be applied to the encapsulating table element, copy the padding into
401
+ // an extraMargins property which is to be added to all computed margins post render :(
402
+ if (padding) {
403
+ me.padding = undefined;
404
+ me.extraMargins = Ext.Element.parseBox(padding);
405
+ }
406
+
407
+ me.addCls(me.formItemCls);
408
+
409
+ // Prevent first render of active error, at Field render time from signalling a change from undefined to "
410
+ me.lastActiveError = '';
411
+
412
+ me.addEvents(
413
+ /**
414
+ * @event errorchange
415
+ * Fires when the active error message is changed via {@link #setActiveError}.
416
+ * @param {Ext.form.Labelable} this
417
+ * @param {String} error The active error message
418
+ */
419
+ 'errorchange'
420
+ );
421
+ },
422
+
423
+ /**
424
+ * Returns the label for the field. Defaults to simply returning the {@link #fieldLabel} config. Can be overridden
425
+ * to provide
426
+ * @return {String} The configured field label, or empty string if not defined
427
+ */
428
+ getFieldLabel: function() {
429
+ return this.fieldLabel || '';
430
+ },
431
+
432
+ /**
433
+ * Set the label of this field.
434
+ * @param {String} label The new label. The {@link #labelSeparator} will be automatically appended to the label
435
+ * string.
436
+ */
437
+ setFieldLabel: function(label){
438
+ label = label || '';
439
+
440
+ var me = this,
441
+ separator = me.labelSeparator,
442
+ labelEl = me.labelEl,
443
+ last;
444
+
445
+ me.fieldLabel = label;
446
+ if (me.rendered) {
447
+ if (Ext.isEmpty(label) && me.hideEmptyLabel) {
448
+ labelEl.parent().setDisplayed('none');
449
+ } else {
450
+ if (separator) {
451
+ last = label.substr(label.length - 1);
452
+ // append separator if necessary
453
+ if (last != separator) {
454
+ label += separator;
455
+ }
456
+ }
457
+ labelEl.update(label);
458
+ labelEl.parent().setDisplayed('');
459
+ }
460
+ me.updateLayout();
461
+ }
462
+ },
463
+
464
+ getInsertionRenderData: function (data, names) {
465
+ var i = names.length,
466
+ name, value;
467
+
468
+ while (i--) {
469
+ name = names[i];
470
+ value = this[name];
471
+
472
+ if (value) {
473
+ if (typeof value != 'string') {
474
+ if (!value.isTemplate) {
475
+ value = Ext.XTemplate.getTpl(this, name);
476
+ }
477
+ value = value.apply(data);
478
+ }
479
+ }
480
+
481
+ data[name] = value || '';
482
+ }
483
+
484
+ return data;
485
+ },
486
+
487
+ /**
488
+ * Generates the arguments for the field decorations {@link #labelableRenderTpl rendering template}.
489
+ * @return {Object} The template arguments
490
+ * @protected
491
+ */
492
+ getLabelableRenderData: function() {
493
+ var me = this,
494
+ data,
495
+ tempEl;
496
+
497
+ if (!Ext.form.Labelable.errorIconWidth) {
498
+ Ext.form.Labelable.errorIconWidth = (tempEl = Ext.getBody().createChild({style: 'position:absolute', cls: Ext.baseCSSPrefix + 'form-invalid-icon'})).getWidth();
499
+ tempEl.remove();
500
+ }
501
+
502
+ data = Ext.copyTo({
503
+ inFormLayout : me.ownerLayout && me.ownerLayout.type === 'form',
504
+ inputId : me.getInputId(),
505
+ labelOnLeft : me.labelAlign != 'top',
506
+ fieldLabel : me.getFieldLabel(),
507
+ labelCellStyle : me.getLabelCellStyle(),
508
+ labelCellAttrs : me.getLabelCellAttrs(),
509
+ labelCls : me.getLabelCls(),
510
+ labelStyle : me.getLabelStyle(),
511
+ bodyColspan : me.getBodyColspan(),
512
+ errorMsgCls : me.errorMsgCls + (me.autoFitErrors ? '' : ' ' + Ext.baseCSSPrefix + 'external-error-icon'),
513
+ errorIconWidth : Ext.form.Labelable.errorIconWidth
514
+ },
515
+ me, me.labelableRenderProps, true);
516
+
517
+ me.getInsertionRenderData(data, me.labelableInsertions);
518
+
519
+ return data;
520
+ },
521
+
522
+ beforeLabelableRender: function() {
523
+ var me = this;
524
+ if (me.ownerLayout) {
525
+ me.addCls(Ext.baseCSSPrefix + me.ownerLayout.type + '-form-item');
526
+ }
527
+ },
528
+
529
+ onLabelableRender: function() {
530
+ var me = this,
531
+ margins,
532
+ side,
533
+ style = {};
534
+
535
+ if (me.extraMargins) {
536
+ margins = me.el.getMargin();
537
+ for (side in margins) {
538
+ if (margins.hasOwnProperty(side)) {
539
+ style['margin-' + side] = (margins[side] + me.extraMargins[side]) + 'px';
540
+ }
541
+ }
542
+ me.el.setStyle(style);
543
+ }
544
+ },
545
+
546
+ /**
547
+ * Checks if the field has a visible label
548
+ * @return {Boolean} True if the field has a visible label
549
+ */
550
+ hasVisibleLabel: function(){
551
+ if (this.hideLabel) {
552
+ return false;
553
+ }
554
+ return !(this.hideEmptyLabel && !this.getFieldLabel());
555
+ },
556
+
557
+ /**
558
+ * @private
559
+ * Calculates the colspan value for the body cell - the cell which contains the input field.
560
+ *
561
+ * The field table structure contains 4 columns:
562
+ */
563
+ getBodyColspan: function() {
564
+ var me = this,
565
+ hideLabelCell = !me.hasVisibleLabel(),
566
+ result;
567
+
568
+ // In the base case, the body cell spans itself, the triggerWrap cell, and the sideErrorEl by default, so 3
569
+ // If the label cell is hidden, or on the row above, the body cell must span the left label cell too, so 4
570
+ // TriggerFields which show the trigger cell, decrement this in the subclass implementation.
571
+ result = (hideLabelCell || me.labelAlign === 'top') ? 3 : 2;
572
+
573
+ if (me.hasActiveError()) {
574
+ result--;
575
+ }
576
+
577
+ return result;
578
+ },
579
+
580
+ getLabelCls: function(){
581
+ var labelCls = this.labelCls,
582
+ labelClsExtra = this.labelClsExtra;
583
+
584
+ return labelClsExtra ? labelCls + ' ' + labelClsExtra : labelCls;
585
+ },
586
+
587
+ getLabelCellStyle: function() {
588
+ var me = this,
589
+ hideLabelCell = me.hideLabel || (!me.fieldLabel && me.hideEmptyLabel);
590
+
591
+ return hideLabelCell ? 'display:none;' : '';
592
+ },
593
+
594
+ getLabelCellAttrs: function() {
595
+ var me = this,
596
+ labelAlign = me.labelAlign,
597
+ result = '';
598
+
599
+ if (labelAlign !== 'top') {
600
+ result = 'valign="top" halign="' + labelAlign + '" width="' + (me.labelWidth + me.labelPad) + '"';
601
+ }
602
+ return result + ' class="' + Ext.baseCSSPrefix + 'field-label-cell"';
603
+ },
604
+
605
+ /**
606
+ * Gets any label styling for the labelEl
607
+ * @private
608
+ * @return {String} The label styling
609
+ */
610
+ getLabelStyle: function(){
611
+ var me = this,
612
+ labelPad = me.labelPad,
613
+ labelStyle = '';
614
+
615
+ // Calculate label styles up front rather than in the Field layout for speed; this
616
+ // is safe because label alignment/width/pad are not expected to change.
617
+ if (me.labelAlign === 'top') {
618
+ labelStyle = 'margin-bottom:' + labelPad + 'px;';
619
+ } else {
620
+ if (me.labelWidth) {
621
+ labelStyle = 'width:' + me.labelWidth + 'px;';
622
+ }
623
+ labelStyle += 'margin-right:' + labelPad + 'px;';
624
+ }
625
+
626
+ return labelStyle + (me.labelStyle || '');
627
+ },
628
+
629
+ /**
630
+ * Gets the markup to be inserted into the outer template's bodyEl. Defaults to empty string, should be implemented
631
+ * by classes including this mixin as needed.
632
+ * @return {String} The markup to be inserted
633
+ * @protected
634
+ */
635
+ getSubTplMarkup: function() {
636
+ return '';
637
+ },
638
+
639
+ /**
640
+ * Get the input id, if any, for this component. This is used as the "for" attribute on the label element.
641
+ * Implementing subclasses may also use this as e.g. the id for their own input element.
642
+ * @return {String} The input id
643
+ */
644
+ getInputId: function() {
645
+ return '';
646
+ },
647
+
648
+ /**
649
+ * Gets the active error message for this component, if any. This does not trigger validation on its own, it merely
650
+ * returns any message that the component may already hold.
651
+ * @return {String} The active error message on the component; if there is no error, an empty string is returned.
652
+ */
653
+ getActiveError : function() {
654
+ return this.activeError || '';
655
+ },
656
+
657
+ /**
658
+ * Tells whether the field currently has an active error message. This does not trigger validation on its own, it
659
+ * merely looks for any message that the component may already hold.
660
+ * @return {Boolean}
661
+ */
662
+ hasActiveError: function() {
663
+ return !!this.getActiveError();
664
+ },
665
+
666
+ /**
667
+ * Sets the active error message to the given string. This replaces the entire error message contents with the given
668
+ * string. Also see {@link #setActiveErrors} which accepts an Array of messages and formats them according to the
669
+ * {@link #activeErrorsTpl}. Note that this only updates the error message element's text and attributes, you'll
670
+ * have to call doComponentLayout to actually update the field's layout to match. If the field extends {@link
671
+ * Ext.form.field.Base} you should call {@link Ext.form.field.Base#markInvalid markInvalid} instead.
672
+ * @param {String} msg The error message
673
+ */
674
+ setActiveError: function(msg) {
675
+ this.setActiveErrors(msg);
676
+ },
677
+
678
+ /**
679
+ * Gets an Array of any active error messages currently applied to the field. This does not trigger validation on
680
+ * its own, it merely returns any messages that the component may already hold.
681
+ * @return {String[]} The active error messages on the component; if there are no errors, an empty Array is
682
+ * returned.
683
+ */
684
+ getActiveErrors: function() {
685
+ return this.activeErrors || [];
686
+ },
687
+
688
+ /**
689
+ * Set the active error message to an Array of error messages. The messages are formatted into a single message
690
+ * string using the {@link #activeErrorsTpl}. Also see {@link #setActiveError} which allows setting the entire error
691
+ * contents with a single string. Note that this only updates the error message element's text and attributes,
692
+ * you'll have to call doComponentLayout to actually update the field's layout to match. If the field extends
693
+ * {@link Ext.form.field.Base} you should call {@link Ext.form.field.Base#markInvalid markInvalid} instead.
694
+ * @param {String[]} errors The error messages
695
+ */
696
+ setActiveErrors: function(errors) {
697
+ errors = Ext.Array.from(errors);
698
+ this.activeError = errors[0];
699
+ this.activeErrors = errors;
700
+ this.activeError = this.getTpl('activeErrorsTpl').apply({errors: errors});
701
+ this.renderActiveError();
702
+ },
703
+
704
+ /**
705
+ * Clears the active error message(s). Note that this only clears the error message element's text and attributes,
706
+ * you'll have to call doComponentLayout to actually update the field's layout to match. If the field extends {@link
707
+ * Ext.form.field.Base} you should call {@link Ext.form.field.Base#clearInvalid clearInvalid} instead.
708
+ */
709
+ unsetActiveError: function() {
710
+ delete this.activeError;
711
+ delete this.activeErrors;
712
+ this.renderActiveError();
713
+ },
714
+
715
+ /**
716
+ * @private
717
+ * Updates the rendered DOM to match the current activeError. This only updates the content and
718
+ * attributes, you'll have to call doComponentLayout to actually update the display.
719
+ */
720
+ renderActiveError: function() {
721
+ var me = this,
722
+ activeError = me.getActiveError(),
723
+ hasError = !!activeError;
724
+
725
+ if (activeError !== me.lastActiveError) {
726
+ me.fireEvent('errorchange', me, activeError);
727
+ me.lastActiveError = activeError;
728
+ }
729
+
730
+ if (me.rendered && !me.isDestroyed && !me.preventMark) {
731
+ // Add/remove invalid class
732
+ me.el[hasError ? 'addCls' : 'removeCls'](me.invalidCls);
733
+
734
+ // Update the aria-invalid attribute
735
+ me.getActionEl().dom.setAttribute('aria-invalid', hasError);
736
+
737
+ // Update the errorEl (There will only be one if msgTarget is 'side' or 'under') with the error message text
738
+ if (me.errorEl) {
739
+ me.errorEl.dom.innerHTML = activeError;
740
+ }
741
+ }
742
+ },
743
+
744
+ /**
745
+ * Applies a set of default configuration values to this Labelable instance. For each of the properties in the given
746
+ * object, check if this component hasOwnProperty that config; if not then it's inheriting a default value from its
747
+ * prototype and we should apply the default value.
748
+ * @param {Object} defaults The defaults to apply to the object.
749
+ */
750
+ setFieldDefaults: function(defaults) {
751
+ var me = this,
752
+ val, key;
753
+
754
+ for (key in defaults) {
755
+ if (defaults.hasOwnProperty(key)) {
756
+ val = defaults[key];
757
+
758
+ if (!me.hasOwnProperty(key)) {
759
+ me[key] = val;
760
+ }
761
+ }
762
+ }
763
+ }
764
+ });