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,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is the layout style of choice for creating structural layouts in a multi-column format where the width of each
|
|
3
|
+
* column can be specified as a percentage or fixed width, but the height is allowed to vary based on the content. This
|
|
4
|
+
* class is intended to be extended or created via the layout:'column' {@link Ext.container.Container#layout} config,
|
|
5
|
+
* and should generally not need to be created directly via the new keyword.
|
|
6
|
+
*
|
|
7
|
+
* ColumnLayout does not have any direct config options (other than inherited ones), but it does support a specific
|
|
8
|
+
* config property of `columnWidth` that can be included in the config of any panel added to it. The layout will use
|
|
9
|
+
* the columnWidth (if present) or width of each panel during layout to determine how to size each panel. If width or
|
|
10
|
+
* columnWidth is not specified for a given panel, its width will default to the panel's width (or auto).
|
|
11
|
+
*
|
|
12
|
+
* The width property is always evaluated as pixels, and must be a number greater than or equal to 1. The columnWidth
|
|
13
|
+
* property is always evaluated as a percentage, and must be a decimal value greater than 0 and less than 1 (e.g., .25).
|
|
14
|
+
*
|
|
15
|
+
* The basic rules for specifying column widths are pretty simple. The logic makes two passes through the set of
|
|
16
|
+
* contained panels. During the first layout pass, all panels that either have a fixed width or none specified (auto)
|
|
17
|
+
* are skipped, but their widths are subtracted from the overall container width.
|
|
18
|
+
*
|
|
19
|
+
* During the second pass, all panels with columnWidths are assigned pixel widths in proportion to their percentages
|
|
20
|
+
* based on the total **remaining** container width. In other words, percentage width panels are designed to fill
|
|
21
|
+
* the space left over by all the fixed-width and/or auto-width panels. Because of this, while you can specify any
|
|
22
|
+
* number of columns with different percentages, the columnWidths must always add up to 1 (or 100%) when added
|
|
23
|
+
* together, otherwise your layout may not render as expected.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* // All columns are percentages -- they must add up to 1
|
|
27
|
+
* Ext.create('Ext.panel.Panel', {
|
|
28
|
+
* title: 'Column Layout - Percentage Only',
|
|
29
|
+
* width: 350,
|
|
30
|
+
* height: 250,
|
|
31
|
+
* layout:'column',
|
|
32
|
+
* items: [{
|
|
33
|
+
* title: 'Column 1',
|
|
34
|
+
* columnWidth: 0.25
|
|
35
|
+
* },{
|
|
36
|
+
* title: 'Column 2',
|
|
37
|
+
* columnWidth: 0.55
|
|
38
|
+
* },{
|
|
39
|
+
* title: 'Column 3',
|
|
40
|
+
* columnWidth: 0.20
|
|
41
|
+
* }],
|
|
42
|
+
* renderTo: Ext.getBody()
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* // Mix of width and columnWidth -- all columnWidth values must add up
|
|
46
|
+
* // to 1. The first column will take up exactly 120px, and the last two
|
|
47
|
+
* // columns will fill the remaining container width.
|
|
48
|
+
*
|
|
49
|
+
* Ext.create('Ext.Panel', {
|
|
50
|
+
* title: 'Column Layout - Mixed',
|
|
51
|
+
* width: 350,
|
|
52
|
+
* height: 250,
|
|
53
|
+
* layout:'column',
|
|
54
|
+
* items: [{
|
|
55
|
+
* title: 'Column 1',
|
|
56
|
+
* width: 120
|
|
57
|
+
* },{
|
|
58
|
+
* title: 'Column 2',
|
|
59
|
+
* columnWidth: 0.7
|
|
60
|
+
* },{
|
|
61
|
+
* title: 'Column 3',
|
|
62
|
+
* columnWidth: 0.3
|
|
63
|
+
* }],
|
|
64
|
+
* renderTo: Ext.getBody()
|
|
65
|
+
* });
|
|
66
|
+
*/
|
|
67
|
+
Ext.define('Ext.layout.container.Column', {
|
|
68
|
+
|
|
69
|
+
extend: 'Ext.layout.container.Container',
|
|
70
|
+
alias: ['layout.column'],
|
|
71
|
+
alternateClassName: 'Ext.layout.ColumnLayout',
|
|
72
|
+
|
|
73
|
+
type: 'column',
|
|
74
|
+
|
|
75
|
+
itemCls: Ext.baseCSSPrefix + 'column',
|
|
76
|
+
|
|
77
|
+
targetCls: Ext.baseCSSPrefix + 'column-layout-ct',
|
|
78
|
+
|
|
79
|
+
// Columns with a columnWidth have their width managed.
|
|
80
|
+
columnWidthSizePolicy: {
|
|
81
|
+
setsWidth: 1,
|
|
82
|
+
setsHeight: 0
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
childEls: [
|
|
86
|
+
'innerCt'
|
|
87
|
+
],
|
|
88
|
+
|
|
89
|
+
manageOverflow: 2,
|
|
90
|
+
|
|
91
|
+
renderTpl: [
|
|
92
|
+
'<div id="{ownerId}-innerCt" class="',Ext.baseCSSPrefix,'column-inner">',
|
|
93
|
+
'{%this.renderBody(out,values)%}',
|
|
94
|
+
'<div class="',Ext.baseCSSPrefix,'clear"></div>',
|
|
95
|
+
'</div>',
|
|
96
|
+
'{%this.renderPadder(out,values)%}'
|
|
97
|
+
],
|
|
98
|
+
|
|
99
|
+
getItemSizePolicy: function (item) {
|
|
100
|
+
if (item.columnWidth) {
|
|
101
|
+
return this.columnWidthSizePolicy;
|
|
102
|
+
}
|
|
103
|
+
return this.autoSizePolicy;
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
beginLayout: function() {
|
|
107
|
+
this.callParent(arguments);
|
|
108
|
+
this.innerCt.dom.style.width = '';
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
calculate: function (ownerContext) {
|
|
112
|
+
var me = this,
|
|
113
|
+
containerSize = me.getContainerSize(ownerContext),
|
|
114
|
+
state = ownerContext.state;
|
|
115
|
+
|
|
116
|
+
if (state.calculatedColumns || (state.calculatedColumns = me.calculateColumns(ownerContext))) {
|
|
117
|
+
if (me.calculateHeights(ownerContext)) {
|
|
118
|
+
me.calculateOverflow(ownerContext, containerSize);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
me.done = false;
|
|
124
|
+
},
|
|
125
|
+
|
|
126
|
+
calculateColumns: function (ownerContext) {
|
|
127
|
+
var me = this,
|
|
128
|
+
containerSize = me.getContainerSize(ownerContext),
|
|
129
|
+
innerCtContext = ownerContext.getEl('innerCt', me),
|
|
130
|
+
items = ownerContext.childItems,
|
|
131
|
+
len = items.length,
|
|
132
|
+
contentWidth = 0,
|
|
133
|
+
blocked, availableWidth, i, itemContext, itemMarginWidth, itemWidth;
|
|
134
|
+
|
|
135
|
+
// Can never decide upon necessity of vertical scrollbar (and therefore, narrower
|
|
136
|
+
// content width) until the component layout has published a height for the target
|
|
137
|
+
// element.
|
|
138
|
+
if (!ownerContext.heightModel.shrinkWrap && !ownerContext.targetContext.hasProp('height')) {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// No parallel measurement, cannot lay out boxes.
|
|
143
|
+
if (!containerSize.gotWidth) { //\\ TODO: Deal with target padding width
|
|
144
|
+
ownerContext.targetContext.block(me, 'width');
|
|
145
|
+
blocked = true;
|
|
146
|
+
} else {
|
|
147
|
+
availableWidth = containerSize.width;
|
|
148
|
+
|
|
149
|
+
innerCtContext.setWidth(availableWidth);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// we need the widths of the columns we don't manage to proceed so we block on them
|
|
153
|
+
// if they are not ready...
|
|
154
|
+
for (i = 0; i < len; ++i) {
|
|
155
|
+
itemContext = items[i];
|
|
156
|
+
|
|
157
|
+
// this is needed below for non-calculated columns, but is also needed in the
|
|
158
|
+
// next loop for calculated columns... this way we only call getMarginInfo in
|
|
159
|
+
// this loop and use the marginInfo property in the next...
|
|
160
|
+
itemMarginWidth = itemContext.getMarginInfo().width;
|
|
161
|
+
|
|
162
|
+
if (!itemContext.widthModel.calculated) {
|
|
163
|
+
itemWidth = itemContext.getProp('width');
|
|
164
|
+
if (typeof itemWidth != 'number') {
|
|
165
|
+
itemContext.block(me, 'width');
|
|
166
|
+
blocked = true;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
contentWidth += itemWidth + itemMarginWidth;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
if (!blocked) {
|
|
174
|
+
availableWidth = (availableWidth < contentWidth) ? 0 : availableWidth - contentWidth;
|
|
175
|
+
|
|
176
|
+
for (i = 0; i < len; ++i) {
|
|
177
|
+
itemContext = items[i];
|
|
178
|
+
if (itemContext.widthModel.calculated) {
|
|
179
|
+
itemMarginWidth = itemContext.marginInfo.width; // always set by above loop
|
|
180
|
+
itemWidth = itemContext.target.columnWidth;
|
|
181
|
+
itemWidth = Math.floor(itemWidth * availableWidth) - itemMarginWidth;
|
|
182
|
+
itemWidth = itemContext.setWidth(itemWidth); // constrains to min/maxWidth
|
|
183
|
+
contentWidth += itemWidth + itemMarginWidth;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
ownerContext.setContentWidth(contentWidth);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// we registered all the values that block this calculation, so abort now if blocked...
|
|
191
|
+
return !blocked;
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
calculateHeights: function (ownerContext) {
|
|
195
|
+
var me = this,
|
|
196
|
+
items = ownerContext.childItems,
|
|
197
|
+
len = items.length,
|
|
198
|
+
blocked, i, itemContext;
|
|
199
|
+
|
|
200
|
+
// in order for innerCt to have the proper height, all the items must have height
|
|
201
|
+
// correct in the DOM...
|
|
202
|
+
blocked = false;
|
|
203
|
+
for (i = 0; i < len; ++i) {
|
|
204
|
+
itemContext = items[i];
|
|
205
|
+
|
|
206
|
+
if (!itemContext.hasDomProp('height')) {
|
|
207
|
+
itemContext.domBlock(me, 'height');
|
|
208
|
+
blocked = true;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (!blocked) {
|
|
213
|
+
ownerContext.setContentHeight(me.innerCt.getHeight() + ownerContext.targetContext.getPaddingInfo().height);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return !blocked;
|
|
217
|
+
},
|
|
218
|
+
|
|
219
|
+
finishedLayout: function (ownerContext) {
|
|
220
|
+
var bc = ownerContext.bodyContext;
|
|
221
|
+
|
|
222
|
+
// Owner may not have a body - this seems to only be needed for Panels.
|
|
223
|
+
if (bc && (Ext.isIE6 || Ext.isIE7 || Ext.isIEQuirks)) {
|
|
224
|
+
// Fix for https://sencha.jira.com/browse/EXTJSIV-4979
|
|
225
|
+
bc.el.repaint();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
this.callParent(arguments);
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
getRenderTarget : function() {
|
|
232
|
+
return this.innerCt;
|
|
233
|
+
}
|
|
234
|
+
});
|
|
@@ -0,0 +1,961 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class is intended to be extended or created via the {@link Ext.container.Container#layout layout}
|
|
3
|
+
* configuration property. See {@link Ext.container.Container#layout} for additional details.
|
|
4
|
+
*/
|
|
5
|
+
Ext.define('Ext.layout.container.Container', {
|
|
6
|
+
|
|
7
|
+
/* Begin Definitions */
|
|
8
|
+
|
|
9
|
+
extend: 'Ext.layout.Layout',
|
|
10
|
+
|
|
11
|
+
alternateClassName: 'Ext.layout.ContainerLayout',
|
|
12
|
+
|
|
13
|
+
mixins: {
|
|
14
|
+
elementCt: 'Ext.util.ElementContainer'
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
requires: [
|
|
18
|
+
'Ext.XTemplate'
|
|
19
|
+
],
|
|
20
|
+
|
|
21
|
+
type: 'container',
|
|
22
|
+
|
|
23
|
+
/* End Definitions */
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @cfg {String} itemCls
|
|
27
|
+
* An optional extra CSS class that will be added to the container. This can be useful for
|
|
28
|
+
* adding customized styles to the container or any of its children using standard CSS
|
|
29
|
+
* rules. See {@link Ext.Component}.{@link Ext.Component#componentCls componentCls} also.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @cfg {Number} [manageOverflow=0]
|
|
34
|
+
* One of the following values:
|
|
35
|
+
*
|
|
36
|
+
* - 0 if the layout should ignore overflow.
|
|
37
|
+
* - 1 if the layout should be rerun if scrollbars are needed.
|
|
38
|
+
* - 2 if the layout should also correct padding when overflowed.
|
|
39
|
+
*/
|
|
40
|
+
manageOverflow: 0,
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @private
|
|
44
|
+
* Called by an owning Panel before the Panel begins its collapse process.
|
|
45
|
+
* Most layouts will not need to override the default Ext.emptyFn implementation.
|
|
46
|
+
*/
|
|
47
|
+
beginCollapse: Ext.emptyFn,
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @private
|
|
51
|
+
* Called by an owning Panel before the Panel begins its expand process.
|
|
52
|
+
* Most layouts will not need to override the default Ext.emptyFn implementation.
|
|
53
|
+
*/
|
|
54
|
+
beginExpand: Ext.emptyFn,
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* An object which contains boolean properties specifying which properties are to be
|
|
58
|
+
* animated upon flush of child Component ContextItems. For example, Accordion would
|
|
59
|
+
* have:
|
|
60
|
+
*
|
|
61
|
+
* {
|
|
62
|
+
* y: true,
|
|
63
|
+
* height: true
|
|
64
|
+
* }
|
|
65
|
+
*
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
animatePolicy: null,
|
|
69
|
+
|
|
70
|
+
childEls: [
|
|
71
|
+
/**
|
|
72
|
+
* @property {Ext.Element} overflowPadderEl
|
|
73
|
+
* The element used to correct body padding during overflow.
|
|
74
|
+
*/
|
|
75
|
+
'overflowPadderEl'
|
|
76
|
+
],
|
|
77
|
+
|
|
78
|
+
renderTpl: [
|
|
79
|
+
'{%this.renderBody(out,values)%}'
|
|
80
|
+
],
|
|
81
|
+
|
|
82
|
+
usesContainerHeight: true,
|
|
83
|
+
usesContainerWidth: true,
|
|
84
|
+
usesHeight: true,
|
|
85
|
+
usesWidth: true,
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @cfg {Boolean} [reserveScrollbar=false]
|
|
90
|
+
* Set to `true` to leave space for a vertical scrollbar (if the OS shows space-consuming scrollbars) regardless
|
|
91
|
+
* of whether a scrollbar is needed.
|
|
92
|
+
*
|
|
93
|
+
* This is useful if content height changes during application usage, but you do not want the calculated width
|
|
94
|
+
* of child items to change when a scrollbar appears or disappears. The scrollbar will appear in the reserved space,
|
|
95
|
+
* and the calculated width of child Components will not change.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* Ext.define('Employee', {
|
|
99
|
+
* extend: 'Ext.data.Model',
|
|
100
|
+
* fields: [
|
|
101
|
+
* {name: 'rating', type: 'int'},
|
|
102
|
+
* {name: 'salary', type: 'float'},
|
|
103
|
+
* {name: 'name'}
|
|
104
|
+
* ]
|
|
105
|
+
* });
|
|
106
|
+
*
|
|
107
|
+
* function createFakeData(count) {
|
|
108
|
+
* var firstNames = ['Ed', 'Tommy', 'Aaron', 'Abe', 'Jamie', 'Adam', 'Dave', 'David', 'Jay', 'Nicolas', 'Nige'],
|
|
109
|
+
* lastNames = ['Spencer', 'Maintz', 'Conran', 'Elias', 'Avins', 'Mishcon', 'Kaneda', 'Davis', 'Robinson', 'Ferrero', 'White'],
|
|
110
|
+
* ratings = [1, 2, 3, 4, 5],
|
|
111
|
+
* salaries = [100, 400, 900, 1500, 1000000];
|
|
112
|
+
*
|
|
113
|
+
* var data = [];
|
|
114
|
+
* for (var i = 0; i < (count || 25); i++) {
|
|
115
|
+
* var ratingId = Math.floor(Math.random() * ratings.length),
|
|
116
|
+
* salaryId = Math.floor(Math.random() * salaries.length),
|
|
117
|
+
* firstNameId = Math.floor(Math.random() * firstNames.length),
|
|
118
|
+
* lastNameId = Math.floor(Math.random() * lastNames.length),
|
|
119
|
+
*
|
|
120
|
+
* rating = ratings[ratingId],
|
|
121
|
+
* salary = salaries[salaryId],
|
|
122
|
+
* name = Ext.String.format("{0} {1}", firstNames[firstNameId], lastNames[lastNameId]);
|
|
123
|
+
*
|
|
124
|
+
* data.push({
|
|
125
|
+
* rating: rating,
|
|
126
|
+
* salary: salary,
|
|
127
|
+
* name: name
|
|
128
|
+
* });
|
|
129
|
+
* }
|
|
130
|
+
* store.loadData(data);
|
|
131
|
+
* }
|
|
132
|
+
*
|
|
133
|
+
* // create the Data Store
|
|
134
|
+
* var store = Ext.create('Ext.data.Store', {
|
|
135
|
+
* id: 'store',
|
|
136
|
+
* model: 'Employee',
|
|
137
|
+
* proxy: {
|
|
138
|
+
* type: 'memory'
|
|
139
|
+
* }
|
|
140
|
+
* });
|
|
141
|
+
* createFakeData(10);
|
|
142
|
+
*
|
|
143
|
+
* var grid = Ext.create('Ext.grid.Panel', {
|
|
144
|
+
* title: 'Grid loaded with varying number of records',
|
|
145
|
+
* anchor: '100%',
|
|
146
|
+
* store: store,
|
|
147
|
+
* columns: [{
|
|
148
|
+
* xtype: 'rownumberer',
|
|
149
|
+
* width: 40,
|
|
150
|
+
* sortable: false
|
|
151
|
+
* },{
|
|
152
|
+
* text: 'Name',
|
|
153
|
+
* flex: 1,
|
|
154
|
+
* sortable: true,
|
|
155
|
+
* dataIndex: 'name'
|
|
156
|
+
* },{
|
|
157
|
+
* text: 'Rating',
|
|
158
|
+
* width: 125,
|
|
159
|
+
* sortable: true,
|
|
160
|
+
* dataIndex: 'rating'
|
|
161
|
+
* },{
|
|
162
|
+
* text: 'Salary',
|
|
163
|
+
* width: 125,
|
|
164
|
+
* sortable: true,
|
|
165
|
+
* dataIndex: 'salary',
|
|
166
|
+
* align: 'right',
|
|
167
|
+
* renderer: Ext.util.Format.usMoney
|
|
168
|
+
* }]
|
|
169
|
+
* });
|
|
170
|
+
*
|
|
171
|
+
* Ext.create('Ext.panel.Panel', {
|
|
172
|
+
* renderTo: document.body,
|
|
173
|
+
* width: 800,
|
|
174
|
+
* height: 600,
|
|
175
|
+
* layout: {
|
|
176
|
+
* type: 'anchor',
|
|
177
|
+
* reserveScrollbar: true // There will be a gap even when there's no scrollbar
|
|
178
|
+
* },
|
|
179
|
+
* autoScroll: true,
|
|
180
|
+
* items: grid,
|
|
181
|
+
* tbar: {
|
|
182
|
+
* defaults: {
|
|
183
|
+
* handler: function(b) {
|
|
184
|
+
* createFakeData(b.count);
|
|
185
|
+
* }
|
|
186
|
+
* },
|
|
187
|
+
* items: [{
|
|
188
|
+
* text: '10 Items',
|
|
189
|
+
* count: 10
|
|
190
|
+
* },{
|
|
191
|
+
* text: '100 Items',
|
|
192
|
+
* count: 100
|
|
193
|
+
* },{
|
|
194
|
+
* text: '300 Items',
|
|
195
|
+
* count: 300
|
|
196
|
+
* },{
|
|
197
|
+
* text: '1000 Items',
|
|
198
|
+
* count: 1000
|
|
199
|
+
* },{
|
|
200
|
+
* text: '5000 Items',
|
|
201
|
+
* count: 5000
|
|
202
|
+
* }]
|
|
203
|
+
* }
|
|
204
|
+
* });
|
|
205
|
+
*
|
|
206
|
+
*/
|
|
207
|
+
reserveScrollbar: false,
|
|
208
|
+
|
|
209
|
+
// Begin with no previous adjustments
|
|
210
|
+
lastOverflowAdjust: {
|
|
211
|
+
width: 0,
|
|
212
|
+
height: 0
|
|
213
|
+
},
|
|
214
|
+
|
|
215
|
+
constructor: function () {
|
|
216
|
+
this.callParent(arguments);
|
|
217
|
+
this.mixins.elementCt.constructor.call(this);
|
|
218
|
+
},
|
|
219
|
+
|
|
220
|
+
destroy : function() {
|
|
221
|
+
this.callParent();
|
|
222
|
+
this.mixins.elementCt.destroy.call(this);
|
|
223
|
+
},
|
|
224
|
+
|
|
225
|
+
initLayout: function() {
|
|
226
|
+
var me = this,
|
|
227
|
+
scrollbarWidth = Ext.getScrollbarSize().width;
|
|
228
|
+
|
|
229
|
+
me.callParent();
|
|
230
|
+
|
|
231
|
+
// Create a default lastOverflowAdjust based upon scrolling configuration.
|
|
232
|
+
// If the Container is to overflow, or we *always* reserve space for a scrollbar
|
|
233
|
+
// then reserve space for a vertical scrollbar
|
|
234
|
+
if (scrollbarWidth && me.manageOverflow && !me.hasOwnProperty('lastOverflowAdjust')) {
|
|
235
|
+
if (me.owner.autoScroll || me.reserveScrollbar) {
|
|
236
|
+
me.lastOverflowAdjust = {
|
|
237
|
+
width: scrollbarWidth,
|
|
238
|
+
height: 0
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* In addition to work done by our base classes, containers benefit from some extra
|
|
246
|
+
* cached data. The following properties are added to the ownerContext:
|
|
247
|
+
*
|
|
248
|
+
* - visibleItems: the result of {@link #getVisibleItems}
|
|
249
|
+
* - childItems: the ContextItem[] for each visible item
|
|
250
|
+
* - targetContext: the ContextItem for the {@link #getTarget} element
|
|
251
|
+
*/
|
|
252
|
+
beginLayout: function (ownerContext) {
|
|
253
|
+
this.callParent(arguments);
|
|
254
|
+
|
|
255
|
+
ownerContext.targetContext = ownerContext.getEl('getTarget', this);
|
|
256
|
+
|
|
257
|
+
this.cacheChildItems(ownerContext);
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
beginLayoutCycle: function (ownerContext, firstCycle) {
|
|
261
|
+
var me = this,
|
|
262
|
+
padEl = me.overflowPadderEl;
|
|
263
|
+
|
|
264
|
+
me.callParent(arguments);
|
|
265
|
+
|
|
266
|
+
// Begin with the scrollbar adjustment that we used last time - this is more likely to be correct
|
|
267
|
+
// than beginning with no adjustment at all
|
|
268
|
+
if (!ownerContext.state.overflowAdjust) {
|
|
269
|
+
ownerContext.state.overflowAdjust = me.lastOverflowAdjust;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (firstCycle) {
|
|
273
|
+
if (me.usesContainerHeight) {
|
|
274
|
+
++ownerContext.consumersContainerHeight;
|
|
275
|
+
}
|
|
276
|
+
if (me.usesContainerWidth) {
|
|
277
|
+
++ownerContext.consumersContainerWidth;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (padEl) {
|
|
282
|
+
padEl.setStyle('display', 'none');
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
|
|
286
|
+
completeLayout: function (ownerContext) {
|
|
287
|
+
// Cache the scrollbar adjustment
|
|
288
|
+
this.lastOverflowAdjust = ownerContext.state.overflowAdjust;
|
|
289
|
+
},
|
|
290
|
+
|
|
291
|
+
cacheChildItems: function (ownerContext) {
|
|
292
|
+
var context = ownerContext.context,
|
|
293
|
+
childItems = [],
|
|
294
|
+
items = this.getVisibleItems(),
|
|
295
|
+
length = items.length,
|
|
296
|
+
i;
|
|
297
|
+
|
|
298
|
+
ownerContext.childItems = childItems;
|
|
299
|
+
ownerContext.visibleItems = items;
|
|
300
|
+
|
|
301
|
+
for (i = 0; i < length; ++i) {
|
|
302
|
+
childItems.push(context.getCmp(items[i]));
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
|
|
306
|
+
cacheElements: function () {
|
|
307
|
+
var owner = this.owner;
|
|
308
|
+
|
|
309
|
+
this.applyChildEls(owner.el, owner.id); // from ElementContainer mixin
|
|
310
|
+
},
|
|
311
|
+
|
|
312
|
+
calculateContentSize: function (ownerContext, dimensions) {
|
|
313
|
+
var me = this,
|
|
314
|
+
containerDimensions = (dimensions || 0) | me.manageOverflow |
|
|
315
|
+
((ownerContext.widthModel.shrinkWrap ? 1 : 0) |
|
|
316
|
+
(ownerContext.heightModel.shrinkWrap ? 2 : 0)),
|
|
317
|
+
calcWidth = (containerDimensions & 1) || undefined,
|
|
318
|
+
calcHeight = (containerDimensions & 2) || undefined,
|
|
319
|
+
childItems = ownerContext.childItems,
|
|
320
|
+
length = childItems.length,
|
|
321
|
+
contentHeight = 0,
|
|
322
|
+
contentWidth = 0,
|
|
323
|
+
needed = 0,
|
|
324
|
+
props = ownerContext.props,
|
|
325
|
+
targetXY, targetX, targetY, targetPadding,
|
|
326
|
+
borders, child, childContext, childX, childY, height, i, margins, width, xy;
|
|
327
|
+
|
|
328
|
+
if (calcWidth) {
|
|
329
|
+
if (isNaN(props.contentWidth)) {
|
|
330
|
+
++needed;
|
|
331
|
+
} else {
|
|
332
|
+
calcWidth = undefined;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (calcHeight) {
|
|
336
|
+
if (isNaN(props.contentHeight)) {
|
|
337
|
+
++needed;
|
|
338
|
+
} else {
|
|
339
|
+
calcHeight = undefined;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
if (needed) {
|
|
344
|
+
// TODO - this is rather brute force... maybe a wrapping el or clientHeight/Width
|
|
345
|
+
// trick might help. Whatever we do, it must either work for Absolute layout or
|
|
346
|
+
// at least be correctable by an overridden method in that derived class.
|
|
347
|
+
for (i = 0; i < length; ++i) {
|
|
348
|
+
childContext = childItems[i];
|
|
349
|
+
child = childContext.target;
|
|
350
|
+
height = calcHeight && childContext.getProp('height');
|
|
351
|
+
width = calcWidth && childContext.getProp('width');
|
|
352
|
+
margins = childContext.getMarginInfo();
|
|
353
|
+
|
|
354
|
+
// getXY is the root method here (meaning that we cannot avoid getting both
|
|
355
|
+
// even if we need only one), so dip into the DOM if something is needed
|
|
356
|
+
if ((calcWidth && isNaN(child.x)) || (calcHeight && isNaN(child.y))) {
|
|
357
|
+
xy = child.el.getXY();
|
|
358
|
+
if (!targetXY) {
|
|
359
|
+
targetXY = ownerContext.targetContext.el.getXY();
|
|
360
|
+
borders = ownerContext.targetContext.getBorderInfo();
|
|
361
|
+
targetX = targetXY[0] + borders.left;
|
|
362
|
+
targetY = targetXY[1] + borders.top;
|
|
363
|
+
}
|
|
364
|
+
// not worth avoiding the possibly useless calculation here:
|
|
365
|
+
childX = xy[0] - targetX;
|
|
366
|
+
childY = xy[1] - targetY;
|
|
367
|
+
} else {
|
|
368
|
+
// not worth avoiding these either:
|
|
369
|
+
childX = child.x;
|
|
370
|
+
childY = child.y;
|
|
371
|
+
}
|
|
372
|
+
// XY includes the top/left margin
|
|
373
|
+
|
|
374
|
+
height += margins.bottom;
|
|
375
|
+
width += margins.right;
|
|
376
|
+
|
|
377
|
+
contentHeight = Math.max(contentHeight, childY + height);
|
|
378
|
+
contentWidth = Math.max(contentWidth, childX + width);
|
|
379
|
+
|
|
380
|
+
if (isNaN(contentHeight) && isNaN(contentWidth)) {
|
|
381
|
+
me.done = false;
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
if (calcWidth || calcHeight) {
|
|
387
|
+
targetPadding = ownerContext.targetContext.getPaddingInfo();
|
|
388
|
+
}
|
|
389
|
+
if (calcWidth && !ownerContext.setContentWidth(contentWidth + targetPadding.right)) {
|
|
390
|
+
me.done = false;
|
|
391
|
+
}
|
|
392
|
+
if (calcHeight && !ownerContext.setContentHeight(contentHeight + targetPadding.bottom)) {
|
|
393
|
+
me.done = false;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/* add a '/' to turn on this log ('//* enables, '/*' disables)
|
|
397
|
+
if (me.done) {
|
|
398
|
+
var el = ownerContext.targetContext.el.dom;
|
|
399
|
+
Ext.log(this.owner.id, '.contentSize: ', contentWidth, 'x', contentHeight,
|
|
400
|
+
' => scrollSize: ', el.scrollWidth, 'x', el.scrollHeight);
|
|
401
|
+
}/**/
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Handles overflow processing for a container. This should be called once the layout
|
|
407
|
+
* has determined contentWidth/Height. In addition to the ownerContext passed to the
|
|
408
|
+
* {@link #calculate} method, this method also needs the containerSize (the object
|
|
409
|
+
* returned by {@link #getContainerSize}).
|
|
410
|
+
*
|
|
411
|
+
* @param {Ext.layout.ContextItem} ownerContext
|
|
412
|
+
* @param {Object} containerSize
|
|
413
|
+
* @param {Number} dimensions A bit mask for the overflow managed dimensions. The 0-bit
|
|
414
|
+
* is for `width` and the 1-bit is for `height`. In other words, a value of 1 would be
|
|
415
|
+
* only `width`, 2 would be only `height` and 3 would be both.
|
|
416
|
+
*/
|
|
417
|
+
calculateOverflow: function (ownerContext, containerSize, dimensions) {
|
|
418
|
+
var me = this,
|
|
419
|
+
owner = me.owner,
|
|
420
|
+
manageOverflow = me.manageOverflow,
|
|
421
|
+
state = ownerContext.state,
|
|
422
|
+
overflowAdjust = state.overflowAdjust,
|
|
423
|
+
padWidth, padHeight, padElContext, padding, scrollRangeFlags,
|
|
424
|
+
overflow, scrollbarSize, contentW, contentH, ownerW, ownerH, scrollbars,
|
|
425
|
+
xauto, yauto;
|
|
426
|
+
|
|
427
|
+
if (manageOverflow && !state.secondPass && !me.reserveScrollbar) {
|
|
428
|
+
// Determine the dimensions that have overflow:auto applied. If these come by
|
|
429
|
+
// way of component config, this does not require a DOM read:
|
|
430
|
+
if (owner.autoScroll) {
|
|
431
|
+
xauto = yauto = true;
|
|
432
|
+
} else {
|
|
433
|
+
if (owner.overflowX) {
|
|
434
|
+
xauto = owner.overflowX == 'auto';
|
|
435
|
+
} else {
|
|
436
|
+
overflow = ownerContext.targetContext.getStyle('overflow-x');
|
|
437
|
+
xauto = overflow && overflow != 'hidden' && overflow != 'scroll';
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
if (owner.overflowY) {
|
|
441
|
+
yauto = owner.overflowY == 'auto';
|
|
442
|
+
} else {
|
|
443
|
+
overflow = ownerContext.targetContext.getStyle('overflow-y');
|
|
444
|
+
yauto = overflow && overflow != 'hidden' && overflow != 'scroll';
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
// If the container layout is not using width, we don't need to adjust for the
|
|
449
|
+
// vscroll (likewise for height). Perhaps we don't even need to run the layout
|
|
450
|
+
// again if the adjustments won't have any effect on the result!
|
|
451
|
+
if (!containerSize.gotWidth) {
|
|
452
|
+
xauto = false;
|
|
453
|
+
}
|
|
454
|
+
if (!containerSize.gotHeight) {
|
|
455
|
+
yauto = false;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
if (xauto || yauto) {
|
|
459
|
+
scrollbarSize = Ext.getScrollbarSize();
|
|
460
|
+
|
|
461
|
+
// as a container we calculate contentWidth/Height, so we don't want
|
|
462
|
+
// to use getProp and make it look like we are triggered by them...
|
|
463
|
+
contentW = ownerContext.peek('contentWidth');
|
|
464
|
+
contentH = ownerContext.peek('contentHeight');
|
|
465
|
+
ownerW = containerSize.width;
|
|
466
|
+
ownerH = containerSize.height;
|
|
467
|
+
|
|
468
|
+
scrollbars = me.getScrollbarsNeeded(ownerW, ownerH, contentW, contentH);
|
|
469
|
+
state.overflowState = scrollbars;
|
|
470
|
+
|
|
471
|
+
if (typeof dimensions == 'number') {
|
|
472
|
+
scrollbars &= ~dimensions; // ignore dimensions that have no effect
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
overflowAdjust = {
|
|
476
|
+
width: (xauto && (scrollbars & 2)) ? scrollbarSize.width : 0,
|
|
477
|
+
height: (yauto && (scrollbars & 1)) ? scrollbarSize.height : 0
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
// We can have 0-sized scrollbars (new Mac OS) and so don't invalidate
|
|
481
|
+
// the layout unless this will change something...
|
|
482
|
+
if (overflowAdjust.width !== me.lastOverflowAdjust.width || overflowAdjust.height !== me.lastOverflowAdjust.height) {
|
|
483
|
+
me.done = false;
|
|
484
|
+
|
|
485
|
+
// we pass overflowAdjust and overflowState in as state for the next
|
|
486
|
+
// cycle (these are discarded if one of our ownerCt's invalidates):
|
|
487
|
+
ownerContext.invalidate({
|
|
488
|
+
state: {
|
|
489
|
+
overflowAdjust: overflowAdjust,
|
|
490
|
+
overflowState: state.overflowState,
|
|
491
|
+
secondPass: true
|
|
492
|
+
}
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
if (!me.done) {
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
padElContext = ownerContext.padElContext ||
|
|
503
|
+
(ownerContext.padElContext = ownerContext.getEl('overflowPadderEl', me));
|
|
504
|
+
|
|
505
|
+
// Even if overflow does not effect the layout, we still do need the padEl to be
|
|
506
|
+
// sized or hidden appropriately...
|
|
507
|
+
if (padElContext) {
|
|
508
|
+
scrollbars = state.overflowState; // the true overflow state
|
|
509
|
+
padWidth = containerSize.width;
|
|
510
|
+
padHeight = 0;// TODO me.padHeightAdj; // 0 or 1
|
|
511
|
+
|
|
512
|
+
if (scrollbars) {
|
|
513
|
+
padding = ownerContext.targetContext.getPaddingInfo();
|
|
514
|
+
scrollRangeFlags = me.scrollRangeFlags;
|
|
515
|
+
|
|
516
|
+
if ((scrollbars & 2) && (scrollRangeFlags & 1)) { // if (vscroll and loses bottom)
|
|
517
|
+
padHeight += padding.bottom;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
if ((scrollbars & 1) && (scrollRangeFlags & 4)) { // if (hscroll and loses right)
|
|
521
|
+
padWidth += padding.right;
|
|
522
|
+
}
|
|
523
|
+
padElContext.setProp('display', '');
|
|
524
|
+
padElContext.setSize(padWidth, padHeight);
|
|
525
|
+
} else {
|
|
526
|
+
padElContext.setProp('display', 'none');
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
},
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Adds layout's itemCls and owning Container's itemCls
|
|
533
|
+
* @protected
|
|
534
|
+
*/
|
|
535
|
+
configureItem: function(item) {
|
|
536
|
+
var me = this,
|
|
537
|
+
ownerItemCls = me.owner.itemCls,
|
|
538
|
+
addClasses = [].concat(me.itemCls || []);
|
|
539
|
+
|
|
540
|
+
me.callParent(arguments);
|
|
541
|
+
|
|
542
|
+
if (ownerItemCls) {
|
|
543
|
+
addClasses = Ext.Array.push(addClasses, ownerItemCls);
|
|
544
|
+
}
|
|
545
|
+
item.addCls(addClasses);
|
|
546
|
+
},
|
|
547
|
+
|
|
548
|
+
doRenderBody: function (out, renderData) {
|
|
549
|
+
// Careful! This method is bolted on to the renderTpl so all we get for context is
|
|
550
|
+
// the renderData! The "this" pointer is the renderTpl instance!
|
|
551
|
+
|
|
552
|
+
this.renderItems(out, renderData);
|
|
553
|
+
this.renderContent(out, renderData);
|
|
554
|
+
},
|
|
555
|
+
|
|
556
|
+
doRenderContainer: function (out, renderData) {
|
|
557
|
+
// Careful! This method is bolted on to the renderTpl so all we get for context is
|
|
558
|
+
// the renderData! The "this" pointer is the renderTpl instance!
|
|
559
|
+
|
|
560
|
+
var me = renderData.$comp.layout,
|
|
561
|
+
tpl = me.getRenderTpl(),
|
|
562
|
+
data = me.getRenderData();
|
|
563
|
+
|
|
564
|
+
tpl.applyOut(data, out);
|
|
565
|
+
},
|
|
566
|
+
|
|
567
|
+
doRenderItems: function (out, renderData) {
|
|
568
|
+
// Careful! This method is bolted on to the renderTpl so all we get for context is
|
|
569
|
+
// the renderData! The "this" pointer is the renderTpl instance!
|
|
570
|
+
|
|
571
|
+
var me = renderData.$layout,
|
|
572
|
+
tree = me.getRenderTree();
|
|
573
|
+
|
|
574
|
+
if (tree) {
|
|
575
|
+
Ext.DomHelper.generateMarkup(tree, out);
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Creates an element that makes bottom/right body padding consistent across browsers.
|
|
581
|
+
* This element is sized based on the need for scrollbars in {@link #calculateOverflow}.
|
|
582
|
+
* If the {@link #manageOverflow} option is false, this element is not created.
|
|
583
|
+
*
|
|
584
|
+
* See {@link #getScrollRangeFlags} for more details.
|
|
585
|
+
*/
|
|
586
|
+
doRenderPadder: function (out, renderData) {
|
|
587
|
+
// Careful! This method is bolted on to the renderTpl so all we get for context is
|
|
588
|
+
// the renderData! The "this" pointer is the renderTpl instance!
|
|
589
|
+
|
|
590
|
+
var me = renderData.$layout,
|
|
591
|
+
owner = me.owner,
|
|
592
|
+
scrollRangeFlags = me.getScrollRangeFlags();
|
|
593
|
+
|
|
594
|
+
if (me.manageOverflow == 2) {
|
|
595
|
+
if (scrollRangeFlags & 5) { // if (loses parent bottom and/or right padding)
|
|
596
|
+
out.push('<div id="',owner.id,'-overflowPadderEl" ',
|
|
597
|
+
'style="font-size: 1px; width:1px; height: 1px;');
|
|
598
|
+
|
|
599
|
+
// We won't want the height of the padder to cause problems when we only
|
|
600
|
+
// want to adjust for right padding, so we relatively position it up 1px so
|
|
601
|
+
// its height of 1px will have no vertical effect. This trick does not work
|
|
602
|
+
// on IE due to bugs (the effects are worse than the off-by-1px in scroll
|
|
603
|
+
// height).
|
|
604
|
+
//
|
|
605
|
+
/* turns out this does not work on FF (5) either... TODO
|
|
606
|
+
if (Ext.isIE || Ext.isGecko) {
|
|
607
|
+
me.padHeightAdj = 0;
|
|
608
|
+
} else {
|
|
609
|
+
me.padHeightAdj = 1;
|
|
610
|
+
out.push('position: relative; top: -1px;');
|
|
611
|
+
}/**/
|
|
612
|
+
|
|
613
|
+
out.push('"></div>');
|
|
614
|
+
|
|
615
|
+
me.scrollRangeFlags = scrollRangeFlags; // remember for calculateOverflow
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
},
|
|
619
|
+
|
|
620
|
+
finishRender: function () {
|
|
621
|
+
var me = this,
|
|
622
|
+
target, items;
|
|
623
|
+
|
|
624
|
+
me.callParent();
|
|
625
|
+
|
|
626
|
+
me.cacheElements();
|
|
627
|
+
|
|
628
|
+
target = me.getRenderTarget();
|
|
629
|
+
items = me.getLayoutItems();
|
|
630
|
+
|
|
631
|
+
if (me.targetCls) {
|
|
632
|
+
me.getTarget().addCls(me.targetCls);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
me.finishRenderItems(target, items);
|
|
636
|
+
},
|
|
637
|
+
|
|
638
|
+
/**
|
|
639
|
+
* @private
|
|
640
|
+
* Called for every layout in the layout context after all the layouts have been finally flushed
|
|
641
|
+
*/
|
|
642
|
+
notifyOwner: function() {
|
|
643
|
+
this.owner.afterLayout(this);
|
|
644
|
+
},
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* Returns the container size (that of the target). Only the fixed-sized dimensions can
|
|
648
|
+
* be returned because the shrinkWrap dimensions are based on the contentWidth/Height
|
|
649
|
+
* as determined by the container layout.
|
|
650
|
+
*
|
|
651
|
+
* If the {@link #calculateOverflow} method is used and if {@link #manageOverflow} is
|
|
652
|
+
* true, this may adjust the width/height by the size of scrollbars.
|
|
653
|
+
*
|
|
654
|
+
* @param {Ext.layout.ContextItem} ownerContext The owner's context item.
|
|
655
|
+
* @param {Boolean} [inDom=false] True if the container size must be in the DOM.
|
|
656
|
+
* @return {Object} The size
|
|
657
|
+
* @return {Number} return.width The width
|
|
658
|
+
* @return {Number} return.height The height
|
|
659
|
+
* @protected
|
|
660
|
+
*/
|
|
661
|
+
getContainerSize : function(ownerContext, inDom) {
|
|
662
|
+
// Subtle But Important:
|
|
663
|
+
//
|
|
664
|
+
// We don't want to call getProp/hasProp et.al. unless we in fact need that value
|
|
665
|
+
// for our results! If we call it and don't need it, the layout manager will think
|
|
666
|
+
// we depend on it and will schedule us again should it change.
|
|
667
|
+
|
|
668
|
+
var targetContext = ownerContext.targetContext,
|
|
669
|
+
frameInfo = targetContext.getFrameInfo(),
|
|
670
|
+
padding = targetContext.getPaddingInfo(),
|
|
671
|
+
got = 0,
|
|
672
|
+
needed = 0,
|
|
673
|
+
overflowAdjust = ownerContext.state.overflowAdjust,
|
|
674
|
+
gotWidth, gotHeight, width, height;
|
|
675
|
+
|
|
676
|
+
// In an shrinkWrap width/height case, we must not ask for any of these dimensions
|
|
677
|
+
// because they will be determined by contentWidth/Height which is calculated by
|
|
678
|
+
// this layout...
|
|
679
|
+
|
|
680
|
+
// Fit/Card layouts are able to set just the width of children, allowing child's
|
|
681
|
+
// resulting height to autosize the Container.
|
|
682
|
+
// See examples/tabs/tabs.html for an example of this.
|
|
683
|
+
|
|
684
|
+
if (!ownerContext.widthModel.shrinkWrap) {
|
|
685
|
+
++needed;
|
|
686
|
+
width = inDom ? targetContext.getDomProp('width') : targetContext.getProp('width');
|
|
687
|
+
gotWidth = (typeof width == 'number');
|
|
688
|
+
if (gotWidth) {
|
|
689
|
+
++got;
|
|
690
|
+
width -= frameInfo.width + padding.width;
|
|
691
|
+
if (overflowAdjust) {
|
|
692
|
+
width -= overflowAdjust.width;
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
if (!ownerContext.heightModel.shrinkWrap) {
|
|
698
|
+
++needed;
|
|
699
|
+
height = inDom ? targetContext.getDomProp('height') : targetContext.getProp('height');
|
|
700
|
+
gotHeight = (typeof height == 'number');
|
|
701
|
+
if (gotHeight) {
|
|
702
|
+
++got;
|
|
703
|
+
height -= frameInfo.height + padding.height;
|
|
704
|
+
if (overflowAdjust) {
|
|
705
|
+
height -= overflowAdjust.height;
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
return {
|
|
711
|
+
width: width,
|
|
712
|
+
height: height,
|
|
713
|
+
needed: needed,
|
|
714
|
+
got: got,
|
|
715
|
+
gotAll: got == needed,
|
|
716
|
+
gotWidth: gotWidth,
|
|
717
|
+
gotHeight: gotHeight
|
|
718
|
+
};
|
|
719
|
+
},
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* Returns an array of child components either for a render phase (Performed in the beforeLayout
|
|
723
|
+
* method of the layout's base class), or the layout phase (onLayout).
|
|
724
|
+
* @return {Ext.Component[]} of child components
|
|
725
|
+
*/
|
|
726
|
+
getLayoutItems: function() {
|
|
727
|
+
var owner = this.owner,
|
|
728
|
+
items = owner && owner.items;
|
|
729
|
+
|
|
730
|
+
return (items && items.items) || [];
|
|
731
|
+
},
|
|
732
|
+
|
|
733
|
+
getRenderData: function () {
|
|
734
|
+
var comp = this.owner;
|
|
735
|
+
|
|
736
|
+
return {
|
|
737
|
+
$comp: comp,
|
|
738
|
+
$layout: this,
|
|
739
|
+
ownerId: comp.id
|
|
740
|
+
};
|
|
741
|
+
},
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* @protected
|
|
745
|
+
* Returns all items that are rendered
|
|
746
|
+
* @return {Array} All matching items
|
|
747
|
+
*/
|
|
748
|
+
getRenderedItems: function() {
|
|
749
|
+
var me = this,
|
|
750
|
+
target = me.getRenderTarget(),
|
|
751
|
+
items = me.getLayoutItems(),
|
|
752
|
+
ln = items.length,
|
|
753
|
+
renderedItems = [],
|
|
754
|
+
i, item;
|
|
755
|
+
|
|
756
|
+
for (i = 0; i < ln; i++) {
|
|
757
|
+
item = items[i];
|
|
758
|
+
if (item.rendered && me.isValidParent(item, target, i)) {
|
|
759
|
+
renderedItems.push(item);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
return renderedItems;
|
|
764
|
+
},
|
|
765
|
+
|
|
766
|
+
/**
|
|
767
|
+
* Returns the element into which rendering must take place. Defaults to the owner Container's
|
|
768
|
+
* target element.
|
|
769
|
+
*
|
|
770
|
+
* May be overridden in layout managers which implement an inner element.
|
|
771
|
+
*
|
|
772
|
+
* @return {Ext.Element}
|
|
773
|
+
*/
|
|
774
|
+
getRenderTarget: function() {
|
|
775
|
+
return this.owner.getTargetEl();
|
|
776
|
+
},
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* Returns the element into which extra functional DOM elements can be inserted. Defaults to the owner Component's encapsulating element.
|
|
780
|
+
*
|
|
781
|
+
* May be overridden in Component layout managers which implement a {@link #getRenderTarget component render target} which must only
|
|
782
|
+
* contain child components.
|
|
783
|
+
* @return {Ext.Element}
|
|
784
|
+
*/
|
|
785
|
+
getElementTarget: function() {
|
|
786
|
+
return this.getRenderTarget();
|
|
787
|
+
},
|
|
788
|
+
|
|
789
|
+
getRenderTpl: function () {
|
|
790
|
+
var me = this,
|
|
791
|
+
renderTpl = Ext.XTemplate.getTpl(this, 'renderTpl');
|
|
792
|
+
|
|
793
|
+
// Make sure all standard callout methods for the owner component are placed on the
|
|
794
|
+
// XTemplate instance (but only once please):
|
|
795
|
+
if (!renderTpl.renderContent) {
|
|
796
|
+
me.owner.setupRenderTpl(renderTpl);
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
return renderTpl;
|
|
800
|
+
},
|
|
801
|
+
|
|
802
|
+
getRenderTree: function () {
|
|
803
|
+
var result,
|
|
804
|
+
items = this.owner.items,
|
|
805
|
+
itemsGen,
|
|
806
|
+
renderCfgs = {};
|
|
807
|
+
|
|
808
|
+
do {
|
|
809
|
+
itemsGen = items.generation;
|
|
810
|
+
result = this.getItemsRenderTree(this.getLayoutItems(), renderCfgs);
|
|
811
|
+
} while (items.generation !== itemsGen);
|
|
812
|
+
return result;
|
|
813
|
+
},
|
|
814
|
+
|
|
815
|
+
getScrollbarsNeeded: function (width, height, contentWidth, contentHeight) {
|
|
816
|
+
var scrollbarSize = Ext.getScrollbarSize(),
|
|
817
|
+
hasWidth = typeof width == 'number',
|
|
818
|
+
hasHeight = typeof height == 'number',
|
|
819
|
+
needHorz = 0,
|
|
820
|
+
needVert = 0;
|
|
821
|
+
|
|
822
|
+
// No space-consuming scrollbars.
|
|
823
|
+
if (!scrollbarSize.width) {
|
|
824
|
+
return 0;
|
|
825
|
+
}
|
|
826
|
+
if (hasHeight && height < contentHeight) {
|
|
827
|
+
needVert = 2;
|
|
828
|
+
width -= scrollbarSize.width;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
if (hasWidth && width < contentWidth) {
|
|
832
|
+
needHorz = 1;
|
|
833
|
+
if (!needVert && hasHeight) {
|
|
834
|
+
height -= scrollbarSize.height;
|
|
835
|
+
if (height < contentHeight) {
|
|
836
|
+
needVert = 2;
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
return needVert + needHorz;
|
|
842
|
+
},
|
|
843
|
+
|
|
844
|
+
/**
|
|
845
|
+
* Returns flags indicating cross-browser handling of scrollHeight/Width. In particular,
|
|
846
|
+
* IE has issues with padding-bottom in a scrolling element (it does not include that
|
|
847
|
+
* padding in the scrollHeight). Also, margin-bottom on a child in a scrolling element
|
|
848
|
+
* can be lost.
|
|
849
|
+
*
|
|
850
|
+
* All browsers seem to ignore margin-right on children and padding-right on the parent
|
|
851
|
+
* element (the one with the overflow)
|
|
852
|
+
*
|
|
853
|
+
* This method returns a number with the follow bit positions set based on things not
|
|
854
|
+
* accounted for in scrollHeight and scrollWidth:
|
|
855
|
+
*
|
|
856
|
+
* - 1: Scrolling element's padding-bottom is not included in scrollHeight.
|
|
857
|
+
* - 2: Last child's margin-bottom is not included in scrollHeight.
|
|
858
|
+
* - 4: Scrolling element's padding-right is not included in scrollWidth.
|
|
859
|
+
* - 8: Child's margin-right is not included in scrollWidth.
|
|
860
|
+
*
|
|
861
|
+
* To work around the margin-bottom issue, it is sufficient to create a 0px tall last
|
|
862
|
+
* child that will "hide" the margin. This can also be handled by wrapping the children
|
|
863
|
+
* in an element, again "hiding" the margin. Wrapping the elements is about the only
|
|
864
|
+
* way to preserve their right margins. This is the strategy used by Column layout.
|
|
865
|
+
*
|
|
866
|
+
* To work around the padding-bottom problem, since it is comes from a style on the
|
|
867
|
+
* parent element, about the only simple fix is to create a last child with height
|
|
868
|
+
* equal to padding-bottom. To preserve the right padding, the sizing element needs to
|
|
869
|
+
* have a width that includes the right padding.
|
|
870
|
+
*/
|
|
871
|
+
getScrollRangeFlags: (function () {
|
|
872
|
+
var flags = -1;
|
|
873
|
+
|
|
874
|
+
return function () {
|
|
875
|
+
if (flags < 0) {
|
|
876
|
+
var div = Ext.getBody().createChild({
|
|
877
|
+
//cls: 'x-border-box x-hide-offsets',
|
|
878
|
+
cls: Ext.baseCSSPrefix + 'border-box',
|
|
879
|
+
style: {
|
|
880
|
+
width: '100px', height: '100px', padding: '10px',
|
|
881
|
+
overflow: 'auto'
|
|
882
|
+
},
|
|
883
|
+
children: [{
|
|
884
|
+
style: {
|
|
885
|
+
border: '1px solid red',
|
|
886
|
+
width: '150px', height: '150px',
|
|
887
|
+
margin: '0 5px 5px 0' // TRBL
|
|
888
|
+
}
|
|
889
|
+
}]
|
|
890
|
+
}),
|
|
891
|
+
scrollHeight = div.dom.scrollHeight,
|
|
892
|
+
scrollWidth = div.dom.scrollWidth,
|
|
893
|
+
heightFlags = {
|
|
894
|
+
// right answer, nothing missing:
|
|
895
|
+
175: 0,
|
|
896
|
+
// missing parent padding-bottom:
|
|
897
|
+
165: 1,
|
|
898
|
+
// missing child margin-bottom:
|
|
899
|
+
170: 2,
|
|
900
|
+
// missing both
|
|
901
|
+
160: 3
|
|
902
|
+
},
|
|
903
|
+
widthFlags = {
|
|
904
|
+
// right answer, nothing missing:
|
|
905
|
+
175: 0,
|
|
906
|
+
// missing parent padding-right:
|
|
907
|
+
165: 4,
|
|
908
|
+
// missing child margin-right:
|
|
909
|
+
170: 8,
|
|
910
|
+
// missing both
|
|
911
|
+
160: 12
|
|
912
|
+
};
|
|
913
|
+
|
|
914
|
+
flags = (heightFlags[scrollHeight] || 0) | (widthFlags[scrollWidth] || 0);
|
|
915
|
+
//Ext.log('flags=',flags.toString(2));
|
|
916
|
+
div.remove();
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
return flags;
|
|
920
|
+
};
|
|
921
|
+
}()),
|
|
922
|
+
|
|
923
|
+
/**
|
|
924
|
+
* Returns the owner component's resize element.
|
|
925
|
+
* @return {Ext.Element}
|
|
926
|
+
*/
|
|
927
|
+
getTarget: function() {
|
|
928
|
+
return this.owner.getTargetEl();
|
|
929
|
+
},
|
|
930
|
+
|
|
931
|
+
/**
|
|
932
|
+
* @protected
|
|
933
|
+
* Returns all items that are both rendered and visible
|
|
934
|
+
* @return {Array} All matching items
|
|
935
|
+
*/
|
|
936
|
+
getVisibleItems: function() {
|
|
937
|
+
var target = this.getRenderTarget(),
|
|
938
|
+
items = this.getLayoutItems(),
|
|
939
|
+
ln = items.length,
|
|
940
|
+
visibleItems = [],
|
|
941
|
+
i, item;
|
|
942
|
+
|
|
943
|
+
for (i = 0; i < ln; i++) {
|
|
944
|
+
item = items[i];
|
|
945
|
+
if (item.rendered && this.isValidParent(item, target, i) && item.hidden !== true) {
|
|
946
|
+
visibleItems.push(item);
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
return visibleItems;
|
|
951
|
+
},
|
|
952
|
+
|
|
953
|
+
setupRenderTpl: function (renderTpl) {
|
|
954
|
+
var me = this;
|
|
955
|
+
|
|
956
|
+
renderTpl.renderBody = me.doRenderBody;
|
|
957
|
+
renderTpl.renderContainer = me.doRenderContainer;
|
|
958
|
+
renderTpl.renderItems = me.doRenderItems;
|
|
959
|
+
renderTpl.renderPadder = me.doRenderPadder;
|
|
960
|
+
}
|
|
961
|
+
});
|