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