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,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A class used to load remote content to an Element. Sample usage:
|
|
3
|
+
*
|
|
4
|
+
* Ext.get('el').load({
|
|
5
|
+
* url: 'myPage.php',
|
|
6
|
+
* scripts: true,
|
|
7
|
+
* params: {
|
|
8
|
+
* id: 1
|
|
9
|
+
* }
|
|
10
|
+
* });
|
|
11
|
+
*
|
|
12
|
+
* In general this class will not be instanced directly, rather the {@link Ext.Element#method-load} method
|
|
13
|
+
* will be used.
|
|
14
|
+
*/
|
|
15
|
+
Ext.define('Ext.ElementLoader', {
|
|
16
|
+
|
|
17
|
+
/* Begin Definitions */
|
|
18
|
+
|
|
19
|
+
mixins: {
|
|
20
|
+
observable: 'Ext.util.Observable'
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
uses: [
|
|
24
|
+
'Ext.data.Connection',
|
|
25
|
+
'Ext.Ajax'
|
|
26
|
+
],
|
|
27
|
+
|
|
28
|
+
statics: {
|
|
29
|
+
Renderer: {
|
|
30
|
+
Html: function(loader, response, active){
|
|
31
|
+
loader.getTarget().update(response.responseText, active.scripts === true);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
/* End Definitions */
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @cfg {String} url
|
|
41
|
+
* The url to retrieve the content from.
|
|
42
|
+
*/
|
|
43
|
+
url: null,
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @cfg {Object} params
|
|
47
|
+
* Any params to be attached to the Ajax request. These parameters will
|
|
48
|
+
* be overridden by any params in the load options.
|
|
49
|
+
*/
|
|
50
|
+
params: null,
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @cfg {Object} baseParams Params that will be attached to every request. These parameters
|
|
54
|
+
* will not be overridden by any params in the load options.
|
|
55
|
+
*/
|
|
56
|
+
baseParams: null,
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @cfg {Boolean/Object} autoLoad
|
|
60
|
+
* True to have the loader make a request as soon as it is created.
|
|
61
|
+
* This argument can also be a set of options that will be passed to {@link #method-load} is called.
|
|
62
|
+
*/
|
|
63
|
+
autoLoad: false,
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @cfg {HTMLElement/Ext.Element/String} target
|
|
67
|
+
* The target element for the loader. It can be the DOM element, the id or an {@link Ext.Element}.
|
|
68
|
+
*/
|
|
69
|
+
target: null,
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @cfg {Boolean/String} loadMask
|
|
73
|
+
* True or a string to show when the element is loading.
|
|
74
|
+
*/
|
|
75
|
+
loadMask: false,
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @cfg {Object} ajaxOptions
|
|
79
|
+
* Any additional options to be passed to the request, for example timeout or headers.
|
|
80
|
+
*/
|
|
81
|
+
ajaxOptions: null,
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @cfg {Boolean} scripts
|
|
85
|
+
* True to parse any inline script tags in the response.
|
|
86
|
+
*/
|
|
87
|
+
scripts: false,
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @cfg {Function} success
|
|
91
|
+
* A function to be called when a load request is successful.
|
|
92
|
+
* Will be called with the following config parameters:
|
|
93
|
+
*
|
|
94
|
+
* - this - The ElementLoader instance.
|
|
95
|
+
* - response - The response object.
|
|
96
|
+
* - options - Ajax options.
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @cfg {Function} failure A function to be called when a load request fails.
|
|
101
|
+
* Will be called with the following config parameters:
|
|
102
|
+
*
|
|
103
|
+
* - this - The ElementLoader instance.
|
|
104
|
+
* - response - The response object.
|
|
105
|
+
* - options - Ajax options.
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @cfg {Function} callback A function to be called when a load request finishes.
|
|
110
|
+
* Will be called with the following config parameters:
|
|
111
|
+
*
|
|
112
|
+
* - this - The ElementLoader instance.
|
|
113
|
+
* - success - True if successful request.
|
|
114
|
+
* - response - The response object.
|
|
115
|
+
* - options - Ajax options.
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @cfg {Object} scope
|
|
120
|
+
* The scope to execute the {@link #success} and {@link #failure} functions in.
|
|
121
|
+
*/
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @cfg {Function} renderer
|
|
125
|
+
* A custom function to render the content to the element. The function should
|
|
126
|
+
* return false if the renderer could not be applied. The passed parameters are:
|
|
127
|
+
*
|
|
128
|
+
* - The loader
|
|
129
|
+
* - The response
|
|
130
|
+
* - The active request
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @property {Boolean} isLoader
|
|
135
|
+
* `true` in this class to identify an object as an instantiated ElementLoader, or subclass thereof.
|
|
136
|
+
*/
|
|
137
|
+
isLoader: true,
|
|
138
|
+
|
|
139
|
+
constructor: function(config) {
|
|
140
|
+
var me = this,
|
|
141
|
+
autoLoad;
|
|
142
|
+
|
|
143
|
+
config = config || {};
|
|
144
|
+
Ext.apply(me, config);
|
|
145
|
+
me.setTarget(me.target);
|
|
146
|
+
me.addEvents(
|
|
147
|
+
/**
|
|
148
|
+
* @event beforeload
|
|
149
|
+
* Fires before a load request is made to the server.
|
|
150
|
+
* Returning false from an event listener can prevent the load
|
|
151
|
+
* from occurring.
|
|
152
|
+
* @param {Ext.ElementLoader} this
|
|
153
|
+
* @param {Object} options The options passed to the request
|
|
154
|
+
*/
|
|
155
|
+
'beforeload',
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* @event exception
|
|
159
|
+
* Fires after an unsuccessful load.
|
|
160
|
+
* @param {Ext.ElementLoader} this
|
|
161
|
+
* @param {Object} response The response from the server
|
|
162
|
+
* @param {Object} options The options passed to the request
|
|
163
|
+
*/
|
|
164
|
+
'exception',
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @event load
|
|
168
|
+
* Fires after a successful load.
|
|
169
|
+
* @param {Ext.ElementLoader} this
|
|
170
|
+
* @param {Object} response The response from the server
|
|
171
|
+
* @param {Object} options The options passed to the request
|
|
172
|
+
*/
|
|
173
|
+
'load'
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
// don't pass config because we have already applied it.
|
|
177
|
+
me.mixins.observable.constructor.call(me);
|
|
178
|
+
|
|
179
|
+
if (me.autoLoad) {
|
|
180
|
+
autoLoad = me.autoLoad;
|
|
181
|
+
if (autoLoad === true) {
|
|
182
|
+
autoLoad = {};
|
|
183
|
+
}
|
|
184
|
+
me.load(autoLoad);
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Sets an {@link Ext.Element} as the target of this loader.
|
|
190
|
+
* Note that if the target is changed, any active requests will be aborted.
|
|
191
|
+
* @param {String/HTMLElement/Ext.Element} target The element or its ID.
|
|
192
|
+
*/
|
|
193
|
+
setTarget: function(target){
|
|
194
|
+
var me = this;
|
|
195
|
+
target = Ext.get(target);
|
|
196
|
+
if (me.target && me.target != target) {
|
|
197
|
+
me.abort();
|
|
198
|
+
}
|
|
199
|
+
me.target = target;
|
|
200
|
+
},
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Returns the target of this loader.
|
|
204
|
+
* @return {Ext.Component} The target or null if none exists.
|
|
205
|
+
*/
|
|
206
|
+
getTarget: function(){
|
|
207
|
+
return this.target || null;
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Aborts the active load request
|
|
212
|
+
*/
|
|
213
|
+
abort: function(){
|
|
214
|
+
var active = this.active;
|
|
215
|
+
if (active !== undefined) {
|
|
216
|
+
Ext.Ajax.abort(active.request);
|
|
217
|
+
if (active.mask) {
|
|
218
|
+
this.removeMask();
|
|
219
|
+
}
|
|
220
|
+
delete this.active;
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Removes the mask on the target
|
|
226
|
+
* @private
|
|
227
|
+
*/
|
|
228
|
+
removeMask: function(){
|
|
229
|
+
this.target.unmask();
|
|
230
|
+
},
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Adds the mask on the target
|
|
234
|
+
* @private
|
|
235
|
+
* @param {Boolean/Object} mask The mask configuration
|
|
236
|
+
*/
|
|
237
|
+
addMask: function(mask){
|
|
238
|
+
this.target.mask(mask === true ? null : mask);
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Loads new data from the server.
|
|
243
|
+
* @param {Object} options The options for the request. They can be any configuration option that can be specified for
|
|
244
|
+
* the class, with the exception of the target option. Note that any options passed to the method will override any
|
|
245
|
+
* class defaults.
|
|
246
|
+
*/
|
|
247
|
+
load: function(options) {
|
|
248
|
+
//<debug>
|
|
249
|
+
if (!this.target) {
|
|
250
|
+
Ext.Error.raise('A valid target is required when loading content');
|
|
251
|
+
}
|
|
252
|
+
//</debug>
|
|
253
|
+
|
|
254
|
+
options = Ext.apply({}, options);
|
|
255
|
+
|
|
256
|
+
var me = this,
|
|
257
|
+
target = me.target,
|
|
258
|
+
mask = Ext.isDefined(options.loadMask) ? options.loadMask : me.loadMask,
|
|
259
|
+
params = Ext.apply({}, options.params),
|
|
260
|
+
ajaxOptions = Ext.apply({}, options.ajaxOptions),
|
|
261
|
+
callback = options.callback || me.callback,
|
|
262
|
+
scope = options.scope || me.scope || me,
|
|
263
|
+
request;
|
|
264
|
+
|
|
265
|
+
Ext.applyIf(ajaxOptions, me.ajaxOptions);
|
|
266
|
+
Ext.applyIf(options, ajaxOptions);
|
|
267
|
+
|
|
268
|
+
Ext.applyIf(params, me.params);
|
|
269
|
+
Ext.apply(params, me.baseParams);
|
|
270
|
+
|
|
271
|
+
Ext.applyIf(options, {
|
|
272
|
+
url: me.url
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
//<debug>
|
|
276
|
+
if (!options.url) {
|
|
277
|
+
Ext.Error.raise('You must specify the URL from which content should be loaded');
|
|
278
|
+
}
|
|
279
|
+
//</debug>
|
|
280
|
+
|
|
281
|
+
Ext.apply(options, {
|
|
282
|
+
scope: me,
|
|
283
|
+
params: params,
|
|
284
|
+
callback: me.onComplete
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
if (me.fireEvent('beforeload', me, options) === false) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (mask) {
|
|
292
|
+
me.addMask(mask);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
request = Ext.Ajax.request(options);
|
|
296
|
+
me.active = {
|
|
297
|
+
request: request,
|
|
298
|
+
options: options,
|
|
299
|
+
mask: mask,
|
|
300
|
+
scope: scope,
|
|
301
|
+
callback: callback,
|
|
302
|
+
success: options.success || me.success,
|
|
303
|
+
failure: options.failure || me.failure,
|
|
304
|
+
renderer: options.renderer || me.renderer,
|
|
305
|
+
scripts: Ext.isDefined(options.scripts) ? options.scripts : me.scripts
|
|
306
|
+
};
|
|
307
|
+
me.setOptions(me.active, options);
|
|
308
|
+
},
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Sets any additional options on the active request
|
|
312
|
+
* @private
|
|
313
|
+
* @param {Object} active The active request
|
|
314
|
+
* @param {Object} options The initial options
|
|
315
|
+
*/
|
|
316
|
+
setOptions: Ext.emptyFn,
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* Parses the response after the request completes
|
|
320
|
+
* @private
|
|
321
|
+
* @param {Object} options Ajax options
|
|
322
|
+
* @param {Boolean} success Success status of the request
|
|
323
|
+
* @param {Object} response The response object
|
|
324
|
+
*/
|
|
325
|
+
onComplete: function(options, success, response) {
|
|
326
|
+
var me = this,
|
|
327
|
+
active = me.active,
|
|
328
|
+
scope = active.scope,
|
|
329
|
+
renderer = me.getRenderer(active.renderer);
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
if (success) {
|
|
333
|
+
success = renderer.call(me, me, response, active) !== false;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
if (success) {
|
|
337
|
+
Ext.callback(active.success, scope, [me, response, options]);
|
|
338
|
+
me.fireEvent('load', me, response, options);
|
|
339
|
+
} else {
|
|
340
|
+
Ext.callback(active.failure, scope, [me, response, options]);
|
|
341
|
+
me.fireEvent('exception', me, response, options);
|
|
342
|
+
}
|
|
343
|
+
Ext.callback(active.callback, scope, [me, success, response, options]);
|
|
344
|
+
|
|
345
|
+
if (active.mask) {
|
|
346
|
+
me.removeMask();
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
delete me.active;
|
|
350
|
+
},
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* Gets the renderer to use
|
|
354
|
+
* @private
|
|
355
|
+
* @param {String/Function} renderer The renderer to use
|
|
356
|
+
* @return {Function} A rendering function to use.
|
|
357
|
+
*/
|
|
358
|
+
getRenderer: function(renderer){
|
|
359
|
+
if (Ext.isFunction(renderer)) {
|
|
360
|
+
return renderer;
|
|
361
|
+
}
|
|
362
|
+
return this.statics().Renderer.Html;
|
|
363
|
+
},
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Automatically refreshes the content over a specified period.
|
|
367
|
+
* @param {Number} interval The interval to refresh in ms.
|
|
368
|
+
* @param {Object} options (optional) The options to pass to the load method. See {@link #method-load}
|
|
369
|
+
*/
|
|
370
|
+
startAutoRefresh: function(interval, options){
|
|
371
|
+
var me = this;
|
|
372
|
+
me.stopAutoRefresh();
|
|
373
|
+
me.autoRefresh = setInterval(function(){
|
|
374
|
+
me.load(options);
|
|
375
|
+
}, interval);
|
|
376
|
+
},
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Clears any auto refresh. See {@link #startAutoRefresh}.
|
|
380
|
+
*/
|
|
381
|
+
stopAutoRefresh: function(){
|
|
382
|
+
clearInterval(this.autoRefresh);
|
|
383
|
+
delete this.autoRefresh;
|
|
384
|
+
},
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* Checks whether the loader is automatically refreshing. See {@link #startAutoRefresh}.
|
|
388
|
+
* @return {Boolean} True if the loader is automatically refreshing
|
|
389
|
+
*/
|
|
390
|
+
isAutoRefreshing: function(){
|
|
391
|
+
return Ext.isDefined(this.autoRefresh);
|
|
392
|
+
},
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Destroys the loader. Any active requests will be aborted.
|
|
396
|
+
*/
|
|
397
|
+
destroy: function(){
|
|
398
|
+
var me = this;
|
|
399
|
+
me.stopAutoRefresh();
|
|
400
|
+
delete me.target;
|
|
401
|
+
me.abort();
|
|
402
|
+
me.clearListeners();
|
|
403
|
+
}
|
|
404
|
+
});
|
|
@@ -0,0 +1,712 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The FocusManager is responsible for globally:
|
|
3
|
+
*
|
|
4
|
+
* 1. Managing component focus
|
|
5
|
+
* 2. Providing basic keyboard navigation
|
|
6
|
+
* 3. (optional) Provide a visual cue for focused components, in the form of a focus ring/frame.
|
|
7
|
+
*
|
|
8
|
+
* To activate the FocusManager, simply call `Ext.FocusManager.enable();`. In turn, you may
|
|
9
|
+
* deactivate the FocusManager by subsequently calling `Ext.FocusManager.disable();`. The
|
|
10
|
+
* FocusManager is disabled by default.
|
|
11
|
+
*
|
|
12
|
+
* To enable the optional focus frame, pass `true` or `{focusFrame: true}` to {@link #method-enable}.
|
|
13
|
+
*
|
|
14
|
+
* Another feature of the FocusManager is to provide basic keyboard focus navigation scoped to any {@link Ext.container.Container}
|
|
15
|
+
* that would like to have navigation between its child {@link Ext.Component}'s.
|
|
16
|
+
*
|
|
17
|
+
* @author Jarred Nicholls <jarred@sencha.com>
|
|
18
|
+
* @docauthor Jarred Nicholls <jarred@sencha.com>
|
|
19
|
+
*/
|
|
20
|
+
Ext.define('Ext.FocusManager', {
|
|
21
|
+
singleton: true,
|
|
22
|
+
alternateClassName: ['Ext.FocusMgr' ],
|
|
23
|
+
|
|
24
|
+
mixins: {
|
|
25
|
+
observable: 'Ext.util.Observable'
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
requires: [
|
|
29
|
+
'Ext.AbstractComponent',
|
|
30
|
+
'Ext.Component',
|
|
31
|
+
'Ext.ComponentManager',
|
|
32
|
+
'Ext.ComponentQuery',
|
|
33
|
+
'Ext.util.HashMap',
|
|
34
|
+
'Ext.util.KeyNav'
|
|
35
|
+
],
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @property {Boolean} enabled
|
|
39
|
+
* Whether or not the FocusManager is currently enabled
|
|
40
|
+
*/
|
|
41
|
+
enabled: false,
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @property {Ext.Component} focusedCmp
|
|
45
|
+
* The currently focused component.
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
focusElementCls: Ext.baseCSSPrefix + 'focus-element',
|
|
49
|
+
|
|
50
|
+
focusFrameCls: Ext.baseCSSPrefix + 'focus-frame',
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @property {String[]} whitelist
|
|
54
|
+
* A list of xtypes that should ignore certain navigation input keys and
|
|
55
|
+
* allow for the default browser event/behavior. These input keys include:
|
|
56
|
+
*
|
|
57
|
+
* 1. Backspace
|
|
58
|
+
* 2. Delete
|
|
59
|
+
* 3. Left
|
|
60
|
+
* 4. Right
|
|
61
|
+
* 5. Up
|
|
62
|
+
* 6. Down
|
|
63
|
+
*
|
|
64
|
+
* The FocusManager will not attempt to navigate when a component is an xtype (or descendents thereof)
|
|
65
|
+
* that belongs to this whitelist. E.g., an {@link Ext.form.field.Text} should allow
|
|
66
|
+
* the user to move the input cursor left and right, and to delete characters, etc.
|
|
67
|
+
*/
|
|
68
|
+
whitelist: [
|
|
69
|
+
'textfield'
|
|
70
|
+
],
|
|
71
|
+
|
|
72
|
+
constructor: function(config) {
|
|
73
|
+
var me = this,
|
|
74
|
+
CQ = Ext.ComponentQuery;
|
|
75
|
+
|
|
76
|
+
me.mixins.observable.constructor.call(me, config);
|
|
77
|
+
|
|
78
|
+
me.addEvents(
|
|
79
|
+
/**
|
|
80
|
+
* @event beforecomponentfocus
|
|
81
|
+
* Fires before a component becomes focused. Return `false` to prevent
|
|
82
|
+
* the component from gaining focus.
|
|
83
|
+
* @param {Ext.FocusManager} fm A reference to the FocusManager singleton
|
|
84
|
+
* @param {Ext.Component} cmp The component that is being focused
|
|
85
|
+
* @param {Ext.Component} previousCmp The component that was previously focused,
|
|
86
|
+
* or `undefined` if there was no previously focused component.
|
|
87
|
+
*/
|
|
88
|
+
'beforecomponentfocus',
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @event componentfocus
|
|
92
|
+
* Fires after a component becomes focused.
|
|
93
|
+
* @param {Ext.FocusManager} fm A reference to the FocusManager singleton
|
|
94
|
+
* @param {Ext.Component} cmp The component that has been focused
|
|
95
|
+
* @param {Ext.Component} previousCmp The component that was previously focused,
|
|
96
|
+
* or `undefined` if there was no previously focused component.
|
|
97
|
+
*/
|
|
98
|
+
'componentfocus',
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @event disable
|
|
102
|
+
* Fires when the FocusManager is disabled
|
|
103
|
+
* @param {Ext.FocusManager} fm A reference to the FocusManager singleton
|
|
104
|
+
*/
|
|
105
|
+
'disable',
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @event enable
|
|
109
|
+
* Fires when the FocusManager is enabled
|
|
110
|
+
* @param {Ext.FocusManager} fm A reference to the FocusManager singleton
|
|
111
|
+
*/
|
|
112
|
+
'enable'
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
me.focusTask = new Ext.util.DelayedTask(me.handleComponentFocus, me);
|
|
116
|
+
|
|
117
|
+
// Gain control on Component focus, blur, hide and destroy
|
|
118
|
+
Ext.override(Ext.AbstractComponent, {
|
|
119
|
+
onFocus: function() {
|
|
120
|
+
this.callParent(arguments);
|
|
121
|
+
if (me.enabled && this.hasFocus) {
|
|
122
|
+
Array.prototype.unshift.call(arguments, this);
|
|
123
|
+
me.onComponentFocus.apply(me, arguments);
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
onBlur: function() {
|
|
127
|
+
this.callParent(arguments);
|
|
128
|
+
if (me.enabled && !this.hasFocus) {
|
|
129
|
+
Array.prototype.unshift.call(arguments, this);
|
|
130
|
+
me.onComponentBlur.apply(me, arguments);
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
onDestroy: function() {
|
|
134
|
+
this.callParent(arguments);
|
|
135
|
+
if (me.enabled) {
|
|
136
|
+
Array.prototype.unshift.call(arguments, this);
|
|
137
|
+
me.onComponentDestroy.apply(me, arguments);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
Ext.override(Ext.Component, {
|
|
142
|
+
afterHide: function() {
|
|
143
|
+
this.callParent(arguments);
|
|
144
|
+
if (me.enabled) {
|
|
145
|
+
Array.prototype.unshift.call(arguments, this);
|
|
146
|
+
me.onComponentHide.apply(me, arguments);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
// Setup KeyNav that's bound to document to catch all
|
|
151
|
+
// unhandled/bubbled key events for navigation
|
|
152
|
+
me.keyNav = new Ext.util.KeyNav(Ext.getDoc(), {
|
|
153
|
+
disabled: true,
|
|
154
|
+
scope: me,
|
|
155
|
+
|
|
156
|
+
backspace: me.focusLast,
|
|
157
|
+
enter: me.navigateIn,
|
|
158
|
+
esc: me.navigateOut,
|
|
159
|
+
tab: me.navigateSiblings,
|
|
160
|
+
space: me.navigateIn,
|
|
161
|
+
del: me.focusLast,
|
|
162
|
+
left: me.navigateSiblings,
|
|
163
|
+
right: me.navigateSiblings,
|
|
164
|
+
down: me.navigateSiblings,
|
|
165
|
+
up: me.navigateSiblings
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
me.focusData = {};
|
|
169
|
+
me.subscribers = new Ext.util.HashMap();
|
|
170
|
+
me.focusChain = {};
|
|
171
|
+
|
|
172
|
+
// Setup some ComponentQuery pseudos
|
|
173
|
+
Ext.apply(CQ.pseudos, {
|
|
174
|
+
focusable: function(cmps) {
|
|
175
|
+
var len = cmps.length,
|
|
176
|
+
results = [],
|
|
177
|
+
i = 0,
|
|
178
|
+
c;
|
|
179
|
+
|
|
180
|
+
for (; i < len; i++) {
|
|
181
|
+
c = cmps[i];
|
|
182
|
+
if (c.isFocusable()) {
|
|
183
|
+
results.push(c);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
return results;
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
// Return the single next focusable sibling from the current idx in either direction (step -1 or 1)
|
|
191
|
+
nextFocus: function(cmps, idx, step) {
|
|
192
|
+
step = step || 1;
|
|
193
|
+
idx = parseInt(idx, 10);
|
|
194
|
+
|
|
195
|
+
var len = cmps.length,
|
|
196
|
+
i = idx, c;
|
|
197
|
+
|
|
198
|
+
for (;;) {
|
|
199
|
+
// Increment index, and loop round if off either end
|
|
200
|
+
if ((i += step) >= len) {
|
|
201
|
+
i = 0;
|
|
202
|
+
} else if (i < 0) {
|
|
203
|
+
i = len - 1;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// As soon as we loop back to the starting index, give up, there are no focusable siblings.
|
|
207
|
+
if (i === idx) {
|
|
208
|
+
return [];
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// If we have found a focusable sibling, return it
|
|
212
|
+
if ((c = cmps[i]).isFocusable()) {
|
|
213
|
+
return [c];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return [];
|
|
218
|
+
},
|
|
219
|
+
|
|
220
|
+
prevFocus: function(cmps, idx) {
|
|
221
|
+
return this.nextFocus(cmps, idx, -1);
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
root: function(cmps) {
|
|
225
|
+
var len = cmps.length,
|
|
226
|
+
results = [],
|
|
227
|
+
i = 0,
|
|
228
|
+
c;
|
|
229
|
+
|
|
230
|
+
for (; i < len; i++) {
|
|
231
|
+
c = cmps[i];
|
|
232
|
+
if (!c.ownerCt) {
|
|
233
|
+
results.push(c);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return results;
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Adds the specified xtype to the {@link #whitelist}.
|
|
244
|
+
* @param {String/String[]} xtype Adds the xtype(s) to the {@link #whitelist}.
|
|
245
|
+
*/
|
|
246
|
+
addXTypeToWhitelist: function(xtype) {
|
|
247
|
+
var me = this;
|
|
248
|
+
|
|
249
|
+
if (Ext.isArray(xtype)) {
|
|
250
|
+
Ext.Array.forEach(xtype, me.addXTypeToWhitelist, me);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
if (!Ext.Array.contains(me.whitelist, xtype)) {
|
|
255
|
+
me.whitelist.push(xtype);
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
|
|
259
|
+
clearComponent: function(cmp) {
|
|
260
|
+
clearTimeout(this.cmpFocusDelay);
|
|
261
|
+
if (!cmp.isDestroyed) {
|
|
262
|
+
cmp.blur();
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Disables the FocusManager by turning of all automatic focus management and keyboard navigation
|
|
268
|
+
*/
|
|
269
|
+
disable: function() {
|
|
270
|
+
var me = this;
|
|
271
|
+
|
|
272
|
+
if (!me.enabled) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
delete me.options;
|
|
277
|
+
me.enabled = false;
|
|
278
|
+
|
|
279
|
+
me.removeDOM();
|
|
280
|
+
|
|
281
|
+
// Stop handling key navigation
|
|
282
|
+
me.keyNav.disable();
|
|
283
|
+
|
|
284
|
+
me.fireEvent('disable', me);
|
|
285
|
+
},
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Enables the FocusManager by turning on all automatic focus management and keyboard navigation
|
|
289
|
+
* @param {Boolean/Object} options Either `true`/`false` to turn on the focus frame, or an object
|
|
290
|
+
* with the following options:
|
|
291
|
+
* @param {Boolean} [focusFrame=false] `true` to show the focus frame around a component when it is focused.
|
|
292
|
+
*/
|
|
293
|
+
enable: function(options) {
|
|
294
|
+
var me = this;
|
|
295
|
+
|
|
296
|
+
if (options === true) {
|
|
297
|
+
options = { focusFrame: true };
|
|
298
|
+
}
|
|
299
|
+
me.options = options = options || {};
|
|
300
|
+
|
|
301
|
+
if (me.enabled) {
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
// When calling addFocusListener on Containers, the FocusManager must be enabled, otherwise it won't do it.
|
|
306
|
+
me.enabled = true;
|
|
307
|
+
me.initDOM(options);
|
|
308
|
+
|
|
309
|
+
// Start handling key navigation
|
|
310
|
+
me.keyNav.enable();
|
|
311
|
+
|
|
312
|
+
// Finally, let's focus our global focus el so we start fresh
|
|
313
|
+
me.focusEl.focus();
|
|
314
|
+
delete me.focusedCmp;
|
|
315
|
+
|
|
316
|
+
me.fireEvent('enable', me);
|
|
317
|
+
},
|
|
318
|
+
|
|
319
|
+
focusLast: function(e) {
|
|
320
|
+
var me = this;
|
|
321
|
+
|
|
322
|
+
if (me.isWhitelisted(me.focusedCmp)) {
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Go back to last focused item
|
|
327
|
+
if (me.previousFocusedCmp) {
|
|
328
|
+
me.previousFocusedCmp.focus();
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
|
|
332
|
+
getRootComponents: function() {
|
|
333
|
+
var me = this,
|
|
334
|
+
CQ = Ext.ComponentQuery,
|
|
335
|
+
inline = CQ.query(':focusable:root:not([floating])'),
|
|
336
|
+
floating = CQ.query(':focusable:root[floating]');
|
|
337
|
+
|
|
338
|
+
// Floating items should go to the top of our root stack, and be ordered
|
|
339
|
+
// by their z-index (highest first)
|
|
340
|
+
floating.sort(function(a, b) {
|
|
341
|
+
return a.el.getZIndex() > b.el.getZIndex();
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
return floating.concat(inline);
|
|
345
|
+
},
|
|
346
|
+
|
|
347
|
+
initDOM: function(options) {
|
|
348
|
+
var me = this,
|
|
349
|
+
cls = me.focusFrameCls,
|
|
350
|
+
needListeners = Ext.ComponentQuery.query('{getFocusEl()}:not([focusListenerAdded])'),
|
|
351
|
+
i = 0, len = needListeners.length;
|
|
352
|
+
|
|
353
|
+
if (!Ext.isReady) {
|
|
354
|
+
return Ext.onReady(me.initDOM, me);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// When we are enabled, we must ensure that all Components which return a focusEl that is *not naturally focusable*
|
|
358
|
+
// have focus/blur listeners enabled to then trigger onFocus/onBlur handling so that we get to know about their focus action.
|
|
359
|
+
// These listeners are not added at initialization unless the FocusManager is enabled at that time.
|
|
360
|
+
for (; i < len; i++) {
|
|
361
|
+
needListeners[i].addFocusListener();
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// Make the document body the global focus element
|
|
365
|
+
if (!me.focusEl) {
|
|
366
|
+
me.focusEl = Ext.getBody();
|
|
367
|
+
me.focusEl.dom.tabIndex = -1;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// Create global focus frame
|
|
371
|
+
if (!me.focusFrame && options.focusFrame) {
|
|
372
|
+
me.focusFrame = Ext.getBody().createChild({
|
|
373
|
+
cls: cls,
|
|
374
|
+
children: [
|
|
375
|
+
{ cls: cls + '-top' },
|
|
376
|
+
{ cls: cls + '-bottom' },
|
|
377
|
+
{ cls: cls + '-left' },
|
|
378
|
+
{ cls: cls + '-right' }
|
|
379
|
+
],
|
|
380
|
+
style: 'top: -100px; left: -100px;'
|
|
381
|
+
});
|
|
382
|
+
me.focusFrame.setVisibilityMode(Ext.Element.DISPLAY);
|
|
383
|
+
me.focusFrame.hide().setLeftTop(0, 0);
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
|
|
387
|
+
isWhitelisted: function(cmp) {
|
|
388
|
+
return cmp && Ext.Array.some(this.whitelist, function(x) {
|
|
389
|
+
return cmp.isXType(x);
|
|
390
|
+
});
|
|
391
|
+
},
|
|
392
|
+
|
|
393
|
+
navigateIn: function(e) {
|
|
394
|
+
var me = this,
|
|
395
|
+
focusedCmp = me.focusedCmp,
|
|
396
|
+
defaultRoot,
|
|
397
|
+
firstChild;
|
|
398
|
+
|
|
399
|
+
if (me.isWhitelisted(focusedCmp)) {
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
if (!focusedCmp) {
|
|
404
|
+
// No focus yet, so focus the first root cmp on the page
|
|
405
|
+
defaultRoot = me.getRootComponents()[0];
|
|
406
|
+
if (defaultRoot) {
|
|
407
|
+
// If the default root is based upon the body, then it will already be focused, and will not fire a focus event to
|
|
408
|
+
// trigger its own onFocus processing, so we have to programatically blur it first.
|
|
409
|
+
if (defaultRoot.getFocusEl() === me.focusEl) {
|
|
410
|
+
me.focusEl.blur();
|
|
411
|
+
}
|
|
412
|
+
defaultRoot.focus();
|
|
413
|
+
}
|
|
414
|
+
} else {
|
|
415
|
+
// Drill into child ref items of the focused cmp, if applicable.
|
|
416
|
+
// This works for any Component with a getRefItems implementation.
|
|
417
|
+
firstChild = focusedCmp.hasFocus ? Ext.ComponentQuery.query('>:focusable', focusedCmp)[0] : focusedCmp;
|
|
418
|
+
if (firstChild) {
|
|
419
|
+
firstChild.focus();
|
|
420
|
+
} else {
|
|
421
|
+
// Let's try to fire a click event, as if it came from the mouse
|
|
422
|
+
if (Ext.isFunction(focusedCmp.onClick)) {
|
|
423
|
+
e.button = 0;
|
|
424
|
+
focusedCmp.onClick(e);
|
|
425
|
+
if (focusedCmp.isVisible(true)) {
|
|
426
|
+
focusedCmp.focus();
|
|
427
|
+
} else {
|
|
428
|
+
me.navigateOut();
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
},
|
|
434
|
+
|
|
435
|
+
navigateOut: function(e) {
|
|
436
|
+
var me = this,
|
|
437
|
+
parent;
|
|
438
|
+
|
|
439
|
+
if (!me.focusedCmp || !(parent = me.focusedCmp.up(':focusable'))) {
|
|
440
|
+
me.focusEl.focus();
|
|
441
|
+
} else {
|
|
442
|
+
parent.focus();
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
// In some browsers (Chrome) FocusManager can handle this before other
|
|
446
|
+
// handlers. Ext Windows have their own Esc key handling, so we need to
|
|
447
|
+
// return true here to allow the event to bubble.
|
|
448
|
+
return true;
|
|
449
|
+
},
|
|
450
|
+
|
|
451
|
+
navigateSiblings: function(e, source, parent) {
|
|
452
|
+
var me = this,
|
|
453
|
+
src = source || me,
|
|
454
|
+
key = e.getKey(),
|
|
455
|
+
EO = Ext.EventObject,
|
|
456
|
+
goBack = e.shiftKey || key == EO.LEFT || key == EO.UP,
|
|
457
|
+
checkWhitelist = key == EO.LEFT || key == EO.RIGHT || key == EO.UP || key == EO.DOWN,
|
|
458
|
+
nextSelector = goBack ? 'prev' : 'next',
|
|
459
|
+
idx, next, focusedCmp, siblings;
|
|
460
|
+
|
|
461
|
+
focusedCmp = (src.focusedCmp && src.focusedCmp.comp) || src.focusedCmp;
|
|
462
|
+
if (!focusedCmp && !parent) {
|
|
463
|
+
return true;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
if (checkWhitelist && me.isWhitelisted(focusedCmp)) {
|
|
467
|
+
return true;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// If no focused Component, or a root level one was focused, then siblings are root components.
|
|
471
|
+
if (!focusedCmp || focusedCmp.is(':root')) {
|
|
472
|
+
siblings = me.getRootComponents();
|
|
473
|
+
} else {
|
|
474
|
+
// Else if the focused component has a parent, get siblings from there
|
|
475
|
+
parent = parent || focusedCmp.up();
|
|
476
|
+
if (parent) {
|
|
477
|
+
siblings = parent.getRefItems();
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
// Navigate if we have found siblings.
|
|
483
|
+
if (siblings) {
|
|
484
|
+
idx = focusedCmp ? Ext.Array.indexOf(siblings, focusedCmp) : -1;
|
|
485
|
+
next = Ext.ComponentQuery.query(':' + nextSelector + 'Focus(' + idx + ')', siblings)[0];
|
|
486
|
+
if (next && focusedCmp !== next) {
|
|
487
|
+
next.focus();
|
|
488
|
+
return next;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
},
|
|
492
|
+
|
|
493
|
+
onComponentBlur: function(cmp, e) {
|
|
494
|
+
var me = this;
|
|
495
|
+
|
|
496
|
+
if (me.focusedCmp === cmp) {
|
|
497
|
+
me.previousFocusedCmp = cmp;
|
|
498
|
+
delete me.focusedCmp;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (me.focusFrame) {
|
|
502
|
+
me.focusFrame.hide();
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
|
|
506
|
+
onComponentFocus: function(cmp, e) {
|
|
507
|
+
var me = this,
|
|
508
|
+
chain = me.focusChain,
|
|
509
|
+
parent;
|
|
510
|
+
|
|
511
|
+
if (!cmp.isFocusable()) {
|
|
512
|
+
me.clearComponent(cmp);
|
|
513
|
+
|
|
514
|
+
// Check our focus chain, so we don't run into a never ending recursion
|
|
515
|
+
// If we've attempted (unsuccessfully) to focus this component before,
|
|
516
|
+
// then we're caught in a loop of child->parent->...->child and we
|
|
517
|
+
// need to cut the loop off rather than feed into it.
|
|
518
|
+
if (chain[cmp.id]) {
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
// Try to focus the parent instead
|
|
523
|
+
parent = cmp.up();
|
|
524
|
+
if (parent) {
|
|
525
|
+
// Add component to our focus chain to detect infinite focus loop
|
|
526
|
+
// before we fire off an attempt to focus our parent.
|
|
527
|
+
// See the comments above.
|
|
528
|
+
chain[cmp.id] = true;
|
|
529
|
+
parent.focus();
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
// Clear our focus chain when we have a focusable component
|
|
535
|
+
me.focusChain = {};
|
|
536
|
+
|
|
537
|
+
// Capture the focusEl to frame now.
|
|
538
|
+
// Button returns its encapsulating element during the focus phase
|
|
539
|
+
// So that element gets styled and framed.
|
|
540
|
+
me.focusTask.delay(10, null, null, [cmp, cmp.getFocusEl()]);
|
|
541
|
+
},
|
|
542
|
+
|
|
543
|
+
handleComponentFocus: function(cmp, focusEl) {
|
|
544
|
+
var me = this,
|
|
545
|
+
cls,
|
|
546
|
+
ff,
|
|
547
|
+
fw,
|
|
548
|
+
box,
|
|
549
|
+
bt,
|
|
550
|
+
bl,
|
|
551
|
+
bw,
|
|
552
|
+
bh,
|
|
553
|
+
ft,
|
|
554
|
+
fb,
|
|
555
|
+
fl,
|
|
556
|
+
fr;
|
|
557
|
+
|
|
558
|
+
if (me.fireEvent('beforecomponentfocus', me, cmp, me.previousFocusedCmp) === false) {
|
|
559
|
+
me.clearComponent(cmp);
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
me.focusedCmp = cmp;
|
|
564
|
+
|
|
565
|
+
// If we have a focus frame, show it around the focused component
|
|
566
|
+
if (me.shouldShowFocusFrame(cmp)) {
|
|
567
|
+
cls = '.' + me.focusFrameCls + '-';
|
|
568
|
+
ff = me.focusFrame;
|
|
569
|
+
box = focusEl.getPageBox();
|
|
570
|
+
|
|
571
|
+
// Size the focus frame's t/b/l/r according to the box
|
|
572
|
+
// This leaves a hole in the middle of the frame so user
|
|
573
|
+
// interaction w/ the mouse can continue
|
|
574
|
+
bt = box.top;
|
|
575
|
+
bl = box.left;
|
|
576
|
+
bw = box.width;
|
|
577
|
+
bh = box.height;
|
|
578
|
+
ft = ff.child(cls + 'top');
|
|
579
|
+
fb = ff.child(cls + 'bottom');
|
|
580
|
+
fl = ff.child(cls + 'left');
|
|
581
|
+
fr = ff.child(cls + 'right');
|
|
582
|
+
|
|
583
|
+
ft.setWidth(bw).setLeftTop(bl, bt);
|
|
584
|
+
fb.setWidth(bw).setLeftTop(bl, bt + bh - 2);
|
|
585
|
+
fl.setHeight(bh - 2).setLeftTop(bl, bt + 2);
|
|
586
|
+
fr.setHeight(bh - 2).setLeftTop(bl + bw - 2, bt + 2);
|
|
587
|
+
|
|
588
|
+
ff.show();
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
me.fireEvent('componentfocus', me, cmp, me.previousFocusedCmp);
|
|
592
|
+
},
|
|
593
|
+
|
|
594
|
+
onComponentHide: function(cmp) {
|
|
595
|
+
var me = this,
|
|
596
|
+
cmpHadFocus = false,
|
|
597
|
+
focusedCmp = me.focusedCmp,
|
|
598
|
+
parent;
|
|
599
|
+
|
|
600
|
+
if (focusedCmp) {
|
|
601
|
+
// See if the Component being hidden was the focused Component, or owns the focused Component
|
|
602
|
+
// In these cases, focus needs to be removed from the focused Component to the nearest focusable ancestor
|
|
603
|
+
cmpHadFocus = cmp.hasFocus || (cmp.isContainer && cmp.isAncestor(me.focusedCmp));
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
me.clearComponent(cmp);
|
|
607
|
+
|
|
608
|
+
// Move focus onto the nearest focusable ancestor, or this is there is none
|
|
609
|
+
if (cmpHadFocus && (parent = cmp.up(':focusable'))) {
|
|
610
|
+
parent.focus();
|
|
611
|
+
} else {
|
|
612
|
+
me.focusEl.focus();
|
|
613
|
+
}
|
|
614
|
+
},
|
|
615
|
+
|
|
616
|
+
onComponentDestroy: function() {
|
|
617
|
+
|
|
618
|
+
},
|
|
619
|
+
|
|
620
|
+
removeDOM: function() {
|
|
621
|
+
var me = this;
|
|
622
|
+
|
|
623
|
+
// If we are still enabled globally, or there are still subscribers
|
|
624
|
+
// then we will halt here, since our DOM stuff is still being used
|
|
625
|
+
if (me.enabled || me.subscribers.length) {
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
Ext.destroy(
|
|
630
|
+
me.focusFrame
|
|
631
|
+
);
|
|
632
|
+
delete me.focusEl;
|
|
633
|
+
delete me.focusFrame;
|
|
634
|
+
},
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* Removes the specified xtype from the {@link #whitelist}.
|
|
638
|
+
* @param {String/String[]} xtype Removes the xtype(s) from the {@link #whitelist}.
|
|
639
|
+
*/
|
|
640
|
+
removeXTypeFromWhitelist: function(xtype) {
|
|
641
|
+
var me = this;
|
|
642
|
+
|
|
643
|
+
if (Ext.isArray(xtype)) {
|
|
644
|
+
Ext.Array.forEach(xtype, me.removeXTypeFromWhitelist, me);
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
Ext.Array.remove(me.whitelist, xtype);
|
|
649
|
+
},
|
|
650
|
+
|
|
651
|
+
setupSubscriberKeys: function(container, keys) {
|
|
652
|
+
var me = this,
|
|
653
|
+
el = container.getFocusEl(),
|
|
654
|
+
scope = keys.scope,
|
|
655
|
+
handlers = {
|
|
656
|
+
backspace: me.focusLast,
|
|
657
|
+
enter: me.navigateIn,
|
|
658
|
+
esc: me.navigateOut,
|
|
659
|
+
scope: me
|
|
660
|
+
},
|
|
661
|
+
|
|
662
|
+
navSiblings = function(e) {
|
|
663
|
+
if (me.focusedCmp === container) {
|
|
664
|
+
// Root the sibling navigation to this container, so that we
|
|
665
|
+
// can automatically dive into the container, rather than forcing
|
|
666
|
+
// the user to hit the enter key to dive in.
|
|
667
|
+
return me.navigateSiblings(e, me, container);
|
|
668
|
+
} else {
|
|
669
|
+
return me.navigateSiblings(e);
|
|
670
|
+
}
|
|
671
|
+
};
|
|
672
|
+
|
|
673
|
+
Ext.iterate(keys, function(key, cb) {
|
|
674
|
+
handlers[key] = function(e) {
|
|
675
|
+
var ret = navSiblings(e);
|
|
676
|
+
|
|
677
|
+
if (Ext.isFunction(cb) && cb.call(scope || container, e, ret) === true) {
|
|
678
|
+
return true;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
return ret;
|
|
682
|
+
};
|
|
683
|
+
}, me);
|
|
684
|
+
|
|
685
|
+
return new Ext.util.KeyNav(el, handlers);
|
|
686
|
+
},
|
|
687
|
+
|
|
688
|
+
shouldShowFocusFrame: function(cmp) {
|
|
689
|
+
var me = this,
|
|
690
|
+
opts = me.options || {},
|
|
691
|
+
cmpFocusEl = cmp.getFocusEl(),
|
|
692
|
+
cmpFocusElTag = Ext.getDom(cmpFocusEl).tagName;
|
|
693
|
+
|
|
694
|
+
// Do not show a focus frame if
|
|
695
|
+
// 1. We are configured not to.
|
|
696
|
+
// 2. No Component was passed
|
|
697
|
+
if (!me.focusFrame || !cmp) {
|
|
698
|
+
return false;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
// Global trumps
|
|
702
|
+
if (opts.focusFrame) {
|
|
703
|
+
return true;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
if (me.focusData[cmp.id].focusFrame) {
|
|
707
|
+
return true;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
return false;
|
|
711
|
+
}
|
|
712
|
+
});
|