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,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @class Ext.fx.target.Target
|
|
3
|
+
|
|
4
|
+
This class specifies a generic target for an animation. It provides a wrapper around a
|
|
5
|
+
series of different types of objects to allow for a generic animation API.
|
|
6
|
+
A target can be a single object or a Composite object containing other objects that are
|
|
7
|
+
to be animated. This class and it's subclasses are generally not created directly, the
|
|
8
|
+
underlying animation will create the appropriate Ext.fx.target.Target object by passing
|
|
9
|
+
the instance to be animated.
|
|
10
|
+
|
|
11
|
+
The following types of objects can be animated:
|
|
12
|
+
|
|
13
|
+
- {@link Ext.fx.target.Component Components}
|
|
14
|
+
- {@link Ext.fx.target.Element Elements}
|
|
15
|
+
- {@link Ext.fx.target.Sprite Sprites}
|
|
16
|
+
|
|
17
|
+
* @markdown
|
|
18
|
+
* @abstract
|
|
19
|
+
*/
|
|
20
|
+
Ext.define('Ext.fx.target.Target', {
|
|
21
|
+
|
|
22
|
+
isAnimTarget: true,
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Creates new Target.
|
|
26
|
+
* @param {Ext.Component/Ext.Element/Ext.draw.Sprite} target The object to be animated
|
|
27
|
+
*/
|
|
28
|
+
constructor: function(target) {
|
|
29
|
+
this.target = target;
|
|
30
|
+
this.id = this.getId();
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
getId: function() {
|
|
34
|
+
return this.target.id;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal utility class that provides default configuration for cell editing.
|
|
3
|
+
* @private
|
|
4
|
+
*/
|
|
5
|
+
Ext.define('Ext.grid.CellEditor', {
|
|
6
|
+
extend: 'Ext.Editor',
|
|
7
|
+
constructor: function(config) {
|
|
8
|
+
config = Ext.apply({}, config);
|
|
9
|
+
|
|
10
|
+
if (config.field) {
|
|
11
|
+
config.field.monitorTab = false;
|
|
12
|
+
}
|
|
13
|
+
this.callParent([config]);
|
|
14
|
+
},
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @private
|
|
18
|
+
* Hide the grid cell text when editor is shown.
|
|
19
|
+
*
|
|
20
|
+
* There are 2 reasons this needs to happen:
|
|
21
|
+
*
|
|
22
|
+
* 1. checkbox editor does not take up enough space to hide the underlying text.
|
|
23
|
+
*
|
|
24
|
+
* 2. When columnLines are turned off in browsers that don't support text-overflow:
|
|
25
|
+
* ellipsis (firefox 6 and below and IE quirks), the text extends to the last pixel
|
|
26
|
+
* in the cell, however the right border of the cell editor is always positioned 1px
|
|
27
|
+
* offset from the edge of the cell (to give it the appearance of being "inside" the
|
|
28
|
+
* cell. This results in 1px of the underlying cell text being visible to the right
|
|
29
|
+
* of the cell editor if the text is not hidden.
|
|
30
|
+
*
|
|
31
|
+
* We can't just hide the entire cell, because then treecolumn's icons would be hidden
|
|
32
|
+
* as well. We also can't just set "color: transparent" to hide the text because it is
|
|
33
|
+
* not supported by IE8 and below. The only remaining solution is to remove the text
|
|
34
|
+
* from the text node and then add it back when the editor is hidden.
|
|
35
|
+
*/
|
|
36
|
+
onShow: function() {
|
|
37
|
+
var me = this,
|
|
38
|
+
innerCell = me.boundEl.first(),
|
|
39
|
+
lastChild,
|
|
40
|
+
textNode;
|
|
41
|
+
|
|
42
|
+
if (innerCell) {
|
|
43
|
+
lastChild = innerCell.dom.lastChild;
|
|
44
|
+
if(lastChild && lastChild.nodeType === 3) {
|
|
45
|
+
// if the cell has a text node, save a reference to it
|
|
46
|
+
textNode = me.cellTextNode = innerCell.dom.lastChild;
|
|
47
|
+
// save the cell text so we can add it back when we're done editing
|
|
48
|
+
me.cellTextValue = textNode.nodeValue;
|
|
49
|
+
// The text node has to have at least one character in it, or the cell borders
|
|
50
|
+
// in IE quirks mode will not show correctly, so let's use a non-breaking space.
|
|
51
|
+
textNode.nodeValue = '\u00a0';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
me.callParent(arguments);
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @private
|
|
59
|
+
* Show the grid cell text when the editor is hidden by adding the text back to the text node
|
|
60
|
+
*/
|
|
61
|
+
onHide: function() {
|
|
62
|
+
var me = this,
|
|
63
|
+
innerCell = me.boundEl.first();
|
|
64
|
+
|
|
65
|
+
if (innerCell && me.cellTextNode) {
|
|
66
|
+
me.cellTextNode.nodeValue = me.cellTextValue;
|
|
67
|
+
delete me.cellTextNode;
|
|
68
|
+
delete me.cellTextValue;
|
|
69
|
+
}
|
|
70
|
+
me.callParent(arguments);
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @private
|
|
75
|
+
* Fix checkbox blur when it is clicked.
|
|
76
|
+
*/
|
|
77
|
+
afterRender: function() {
|
|
78
|
+
var me = this,
|
|
79
|
+
field = me.field;
|
|
80
|
+
|
|
81
|
+
me.callParent(arguments);
|
|
82
|
+
if (field.isXType('checkboxfield')) {
|
|
83
|
+
field.mon(field.inputEl, {
|
|
84
|
+
mousedown: me.onCheckBoxMouseDown,
|
|
85
|
+
click: me.onCheckBoxClick,
|
|
86
|
+
scope: me
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @private
|
|
93
|
+
* Because when checkbox is clicked it loses focus completeEdit is bypassed.
|
|
94
|
+
*/
|
|
95
|
+
onCheckBoxMouseDown: function() {
|
|
96
|
+
this.completeEdit = Ext.emptyFn;
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @private
|
|
101
|
+
* Restore checkbox focus and completeEdit method.
|
|
102
|
+
*/
|
|
103
|
+
onCheckBoxClick: function() {
|
|
104
|
+
delete this.completeEdit;
|
|
105
|
+
this.field.focus(false, 10);
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @private
|
|
110
|
+
* Realigns the Editor to the grid cell, or to the text node in the grid inner cell
|
|
111
|
+
* if the inner cell contains multiple child nodes.
|
|
112
|
+
*/
|
|
113
|
+
realign: function(autoSize) {
|
|
114
|
+
var me = this,
|
|
115
|
+
boundEl = me.boundEl,
|
|
116
|
+
innerCell = boundEl.first(),
|
|
117
|
+
children = innerCell.dom.childNodes,
|
|
118
|
+
childCount = children.length,
|
|
119
|
+
offsets = Ext.Array.clone(me.offsets),
|
|
120
|
+
inputEl = me.field.inputEl,
|
|
121
|
+
lastChild, leftBound, rightBound, width;
|
|
122
|
+
|
|
123
|
+
// If the inner cell has more than one child, or the first child node is not a text node,
|
|
124
|
+
// let's assume this cell contains additional elements before the text node.
|
|
125
|
+
// This is the case for tree cells, but could also be used to accomodate grid cells that
|
|
126
|
+
// have a custom renderer that render, say, an icon followed by some text for example
|
|
127
|
+
// For now however, this support will only be used for trees.
|
|
128
|
+
if(me.isForTree && (childCount > 1 || (childCount === 1 && children[0].nodeType !== 3))) {
|
|
129
|
+
// get the inner cell's last child
|
|
130
|
+
lastChild = innerCell.last();
|
|
131
|
+
// calculate the left bound of the text node
|
|
132
|
+
leftBound = lastChild.getOffsetsTo(innerCell)[0] + lastChild.getWidth();
|
|
133
|
+
// calculate the right bound of the text node (this is assumed to be the right edge of
|
|
134
|
+
// the inner cell, since we are assuming the text node is always the last node in the
|
|
135
|
+
// inner cell)
|
|
136
|
+
rightBound = innerCell.getWidth();
|
|
137
|
+
// difference between right and left bound is the text node's allowed "width",
|
|
138
|
+
// this will be used as the width for the editor.
|
|
139
|
+
width = rightBound - leftBound;
|
|
140
|
+
// adjust width for column lines - this ensures the editor will be the same width
|
|
141
|
+
// regardless of columLines config
|
|
142
|
+
if(!me.editingPlugin.grid.columnLines) {
|
|
143
|
+
width --;
|
|
144
|
+
}
|
|
145
|
+
// set the editor's x offset to the left bound position
|
|
146
|
+
offsets[0] += leftBound;
|
|
147
|
+
|
|
148
|
+
me.addCls(Ext.baseCSSPrefix + 'grid-editor-on-text-node');
|
|
149
|
+
} else {
|
|
150
|
+
width = boundEl.getWidth() - 1;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (autoSize === true) {
|
|
154
|
+
me.field.setWidth(width);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
me.alignTo(boundEl, me.alignment, offsets);
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
onEditorTab: function(e){
|
|
161
|
+
var field = this.field;
|
|
162
|
+
if (field.onEditorTab) {
|
|
163
|
+
field.onEditorTab(e);
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
alignment: "tl-tl",
|
|
168
|
+
hideEl : false,
|
|
169
|
+
cls: Ext.baseCSSPrefix + "small-editor " + Ext.baseCSSPrefix + "grid-editor",
|
|
170
|
+
shim: false,
|
|
171
|
+
shadow: false
|
|
172
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Component layout for grid column headers which have a title element at the top followed by content.
|
|
3
|
+
* @private
|
|
4
|
+
*/
|
|
5
|
+
Ext.define('Ext.grid.ColumnComponentLayout', {
|
|
6
|
+
extend: 'Ext.layout.component.Auto',
|
|
7
|
+
alias: 'layout.columncomponent',
|
|
8
|
+
|
|
9
|
+
type: 'columncomponent',
|
|
10
|
+
|
|
11
|
+
setWidthInDom: true,
|
|
12
|
+
|
|
13
|
+
getContentHeight : function(ownerContext) {
|
|
14
|
+
// If we are a group header return container layout's contentHeight, else default to AutoComponent's answer
|
|
15
|
+
return this.owner.isGroupHeader ? ownerContext.getProp('contentHeight') : this.callParent(arguments);
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
calculateOwnerHeightFromContentHeight: function (ownerContext, contentHeight) {
|
|
19
|
+
var result = this.callParent(arguments);
|
|
20
|
+
if (this.owner.isGroupHeader) {
|
|
21
|
+
result += this.owner.titleEl.dom.offsetHeight;
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
getContentWidth : function(ownerContext) {
|
|
27
|
+
// If we are a group header return container layout's contentHeight, else default to AutoComponent's answer
|
|
28
|
+
return this.owner.isGroupHeader ? ownerContext.getProp('contentWidth') : this.callParent(arguments);
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
calculateOwnerWidthFromContentWidth: function (ownerContext, contentWidth) {
|
|
32
|
+
return contentWidth + ownerContext.getPaddingInfo().width;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @private
|
|
3
|
+
*
|
|
4
|
+
* This class is used only by the grid's HeaderContainer docked child.
|
|
5
|
+
*
|
|
6
|
+
* It adds the ability to shrink the vertical size of the inner container element back if a grouped
|
|
7
|
+
* column header has all its child columns dragged out, and the whole HeaderContainer needs to shrink back down.
|
|
8
|
+
*
|
|
9
|
+
* Also, after every layout, after all headers have attained their 'stretchmax' height, it goes through and calls
|
|
10
|
+
* `setPadding` on the columns so that they lay out correctly.
|
|
11
|
+
*/
|
|
12
|
+
Ext.define('Ext.grid.ColumnLayout', {
|
|
13
|
+
extend: 'Ext.layout.container.HBox',
|
|
14
|
+
alias: 'layout.gridcolumn',
|
|
15
|
+
type : 'gridcolumn',
|
|
16
|
+
|
|
17
|
+
reserveOffset: false,
|
|
18
|
+
|
|
19
|
+
firstHeaderCls: Ext.baseCSSPrefix + 'column-header-first',
|
|
20
|
+
lastHeaderCls: Ext.baseCSSPrefix + 'column-header-last',
|
|
21
|
+
|
|
22
|
+
// Collect the height of the table of data upon layout begin
|
|
23
|
+
beginLayout: function (ownerContext) {
|
|
24
|
+
var me = this,
|
|
25
|
+
owner = me.owner,
|
|
26
|
+
grid = owner.up('[scrollerOwner]'),
|
|
27
|
+
view = grid.view,
|
|
28
|
+
i = 0,
|
|
29
|
+
items = me.getVisibleItems(),
|
|
30
|
+
len = items.length,
|
|
31
|
+
item;
|
|
32
|
+
|
|
33
|
+
// If we are one side of a locking grid, then if we are on the "normal" side, we have to grab the normal view
|
|
34
|
+
// for use in determining whether to subtract scrollbar width from available width.
|
|
35
|
+
// The locked side does not have scrollbars, so it should not look at the view.
|
|
36
|
+
if (grid.lockable) {
|
|
37
|
+
if (me.owner.up('tablepanel') === view.normalGrid) {
|
|
38
|
+
view = view.normalGrid.getView();
|
|
39
|
+
} else {
|
|
40
|
+
view = null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
me.callParent(arguments);
|
|
45
|
+
|
|
46
|
+
// Unstretch child items before the layout which stretches them.
|
|
47
|
+
for (; i < len; i++) {
|
|
48
|
+
item = items[i];
|
|
49
|
+
item.removeCls([me.firstHeaderCls, me.lastHeaderCls]);
|
|
50
|
+
item.el.setStyle({
|
|
51
|
+
height: 'auto'
|
|
52
|
+
});
|
|
53
|
+
item.titleEl.setStyle({
|
|
54
|
+
height: 'auto',
|
|
55
|
+
paddingTop: '' // reset back to default padding of the style
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Add special first/last classes
|
|
60
|
+
if (len > 0) {
|
|
61
|
+
items[0].addCls(me.firstHeaderCls);
|
|
62
|
+
items[len - 1].addCls(me.lastHeaderCls);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// If the owner is the grid's HeaderContainer, and the UI displays old fashioned scrollbars and there is a rendered View with data in it,
|
|
66
|
+
// collect the View context to interrogate it for overflow, and possibly invalidate it if there is overflow
|
|
67
|
+
if (!me.owner.isHeader && Ext.getScrollbarSize().width && !grid.collapsed && view &&
|
|
68
|
+
view.rendered && (ownerContext.viewTable = view.el.child('table', true))) {
|
|
69
|
+
ownerContext.viewContext = ownerContext.context.getCmp(view);
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
roundFlex: function(width) {
|
|
74
|
+
return Math.floor(width);
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* @private
|
|
79
|
+
* Local getContainerSize implementation accounts for vertical scrollbar in the view.
|
|
80
|
+
*/
|
|
81
|
+
getContainerSize: function(ownerContext) {
|
|
82
|
+
var me = this,
|
|
83
|
+
result = me.callParent(arguments),
|
|
84
|
+
viewContext = ownerContext.viewContext,
|
|
85
|
+
viewHeight;
|
|
86
|
+
|
|
87
|
+
// If we've collected a viewContext, we will also have the table height
|
|
88
|
+
// If there's overflow, the View must be narrower to accomodate the scrollbar
|
|
89
|
+
if (viewContext && !viewContext.heightModel.shrinkWrap &&
|
|
90
|
+
viewContext.target.componentLayout.ownerContext) { // if (its layout is running)
|
|
91
|
+
viewHeight = viewContext.getProp('height');
|
|
92
|
+
if (isNaN(viewHeight)) {
|
|
93
|
+
me.done = false;
|
|
94
|
+
} else if (ownerContext.state.tableHeight > viewHeight) {
|
|
95
|
+
result.width -= Ext.getScrollbarSize().width;
|
|
96
|
+
ownerContext.state.parallelDone = false;
|
|
97
|
+
viewContext.invalidate();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// TODO - flip the initial assumption to "we have a vscroll" to avoid the invalidate in most
|
|
102
|
+
// cases (and the expensive ones to boot)
|
|
103
|
+
|
|
104
|
+
return result;
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
calculate: function(ownerContext) {
|
|
108
|
+
var me = this,
|
|
109
|
+
viewContext = ownerContext.viewContext;
|
|
110
|
+
|
|
111
|
+
// Collect the height of the data table if we need it to determine overflow
|
|
112
|
+
if (viewContext && !ownerContext.state.tableHeight) {
|
|
113
|
+
ownerContext.state.tableHeight = ownerContext.viewTable.offsetHeight;
|
|
114
|
+
}
|
|
115
|
+
me.callParent(arguments);
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
completeLayout: function(ownerContext) {
|
|
119
|
+
var me = this,
|
|
120
|
+
owner = me.owner,
|
|
121
|
+
state = ownerContext.state,
|
|
122
|
+
needsInvalidate = false,
|
|
123
|
+
calculated = me.sizeModels.calculated,
|
|
124
|
+
childItems, len, i, childContext, item;
|
|
125
|
+
|
|
126
|
+
me.callParent(arguments);
|
|
127
|
+
|
|
128
|
+
// If we have not been through this already, and the owning Container is configured
|
|
129
|
+
// forceFit, is not a group column and and there is a valid width, then convert
|
|
130
|
+
// widths to flexes, and loop back.
|
|
131
|
+
if (!state.flexesCalculated && owner.forceFit && !owner.isHeader) {
|
|
132
|
+
childItems = ownerContext.childItems;
|
|
133
|
+
len = childItems.length;
|
|
134
|
+
|
|
135
|
+
for (i = 0; i < len; i++) {
|
|
136
|
+
childContext = childItems[i];
|
|
137
|
+
item = childContext.target;
|
|
138
|
+
|
|
139
|
+
// For forceFit, just use allocated width as the flex value, and the proportions
|
|
140
|
+
// will end up the same whatever HeaderContainer width they are being forced into.
|
|
141
|
+
if (item.width) {
|
|
142
|
+
item.flex = ownerContext.childItems[i].flex = item.width;
|
|
143
|
+
delete item.width;
|
|
144
|
+
childContext.widthModel = calculated;
|
|
145
|
+
needsInvalidate = true;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Recalculate based upon all columns now being flexed instead of sized.
|
|
150
|
+
// Set flag, so that we do not do this infinitely
|
|
151
|
+
if (needsInvalidate) {
|
|
152
|
+
me.cacheFlexes(ownerContext);
|
|
153
|
+
ownerContext.invalidate({
|
|
154
|
+
state: {
|
|
155
|
+
flexesCalculated: true
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
finalizeLayout: function() {
|
|
163
|
+
var me = this,
|
|
164
|
+
i = 0,
|
|
165
|
+
items,
|
|
166
|
+
len,
|
|
167
|
+
itemsHeight,
|
|
168
|
+
owner = me.owner,
|
|
169
|
+
titleEl = owner.titleEl;
|
|
170
|
+
|
|
171
|
+
// Set up padding in items
|
|
172
|
+
items = me.getVisibleItems();
|
|
173
|
+
len = items.length;
|
|
174
|
+
// header container's items take up the whole height
|
|
175
|
+
itemsHeight = owner.el.getViewSize().height;
|
|
176
|
+
if (titleEl) {
|
|
177
|
+
// if owner is a grouped column with children, we need to subtract the titleEl's height
|
|
178
|
+
// to determine the remaining available height for the child items
|
|
179
|
+
itemsHeight -= titleEl.getHeight();
|
|
180
|
+
}
|
|
181
|
+
for (; i < len; i++) {
|
|
182
|
+
items[i].setPadding(itemsHeight);
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
// FIX: when flexing we actually don't have enough space as we would
|
|
187
|
+
// typically because of the scrollOffset on the GridView, must reserve this
|
|
188
|
+
publishInnerCtSize: function(ownerContext) {
|
|
189
|
+
var me = this,
|
|
190
|
+
plan = ownerContext.state.boxPlan,
|
|
191
|
+
size = plan.targetSize,
|
|
192
|
+
cw = ownerContext.peek('contentWidth');
|
|
193
|
+
|
|
194
|
+
// InnerCt MUST stretch to accommodate all columns so that left/right scrolling is enabled in the header container.
|
|
195
|
+
if ((cw != null) && !me.owner.isHeader) {
|
|
196
|
+
size.width = cw + Ext.getScrollbarSize().width;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return me.callParent(arguments);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
@@ -0,0 +1,863 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @private
|
|
3
|
+
*
|
|
4
|
+
* Lockable is a private mixin which injects lockable behavior into any
|
|
5
|
+
* TablePanel subclass such as GridPanel or TreePanel. TablePanel will
|
|
6
|
+
* automatically inject the Ext.grid.Lockable mixin in when one of the
|
|
7
|
+
* these conditions are met:
|
|
8
|
+
*
|
|
9
|
+
* - The TablePanel has the lockable configuration set to true
|
|
10
|
+
* - One of the columns in the TablePanel has locked set to true/false
|
|
11
|
+
*
|
|
12
|
+
* Each TablePanel subclass must register an alias. It should have an array
|
|
13
|
+
* of configurations to copy to the 2 separate tablepanel's that will be generated
|
|
14
|
+
* to note what configurations should be copied. These are named normalCfgCopy and
|
|
15
|
+
* lockedCfgCopy respectively.
|
|
16
|
+
*
|
|
17
|
+
* Columns which are locked must specify a fixed width. They do NOT support a
|
|
18
|
+
* flex width.
|
|
19
|
+
*
|
|
20
|
+
* Configurations which are specified in this class will be available on any grid or
|
|
21
|
+
* tree which is using the lockable functionality.
|
|
22
|
+
*/
|
|
23
|
+
Ext.define('Ext.grid.Lockable', {
|
|
24
|
+
|
|
25
|
+
requires: [
|
|
26
|
+
'Ext.grid.LockingView',
|
|
27
|
+
'Ext.view.Table'
|
|
28
|
+
],
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @cfg {Boolean} syncRowHeight Synchronize rowHeight between the normal and
|
|
32
|
+
* locked grid view. This is turned on by default. If your grid is guaranteed
|
|
33
|
+
* to have rows of all the same height, you should set this to false to
|
|
34
|
+
* optimize performance.
|
|
35
|
+
*/
|
|
36
|
+
syncRowHeight: true,
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @cfg {String} subGridXType The xtype of the subgrid to specify. If this is
|
|
40
|
+
* not specified lockable will determine the subgrid xtype to create by the
|
|
41
|
+
* following rule. Use the superclasses xtype if the superclass is NOT
|
|
42
|
+
* tablepanel, otherwise use the xtype itself.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @cfg {Object} lockedViewConfig A view configuration to be applied to the
|
|
47
|
+
* locked side of the grid. Any conflicting configurations between lockedViewConfig
|
|
48
|
+
* and viewConfig will be overwritten by the lockedViewConfig.
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @cfg {Object} normalViewConfig A view configuration to be applied to the
|
|
53
|
+
* normal/unlocked side of the grid. Any conflicting configurations between normalViewConfig
|
|
54
|
+
* and viewConfig will be overwritten by the normalViewConfig.
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
headerCounter: 0,
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @cfg {Number} scrollDelta
|
|
61
|
+
* Number of pixels to scroll when scrolling the locked section with mousewheel.
|
|
62
|
+
*/
|
|
63
|
+
scrollDelta: 40,
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @cfg {Object} lockedGridConfig
|
|
67
|
+
* Any special configuration options for the locked part of the grid
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @cfg {Object} normalGridConfig
|
|
72
|
+
* Any special configuration options for the normal part of the grid
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
// i8n text
|
|
76
|
+
//<locale>
|
|
77
|
+
unlockText: 'Unlock',
|
|
78
|
+
//</locale>
|
|
79
|
+
//<locale>
|
|
80
|
+
lockText: 'Lock',
|
|
81
|
+
//</locale>
|
|
82
|
+
|
|
83
|
+
determineXTypeToCreate: function() {
|
|
84
|
+
var me = this,
|
|
85
|
+
typeToCreate,
|
|
86
|
+
xtypes, xtypesLn, xtype, superxtype;
|
|
87
|
+
|
|
88
|
+
if (me.subGridXType) {
|
|
89
|
+
typeToCreate = me.subGridXType;
|
|
90
|
+
} else {
|
|
91
|
+
xtypes = this.getXTypes().split('/');
|
|
92
|
+
xtypesLn = xtypes.length;
|
|
93
|
+
xtype = xtypes[xtypesLn - 1];
|
|
94
|
+
superxtype = xtypes[xtypesLn - 2];
|
|
95
|
+
|
|
96
|
+
if (superxtype !== 'tablepanel') {
|
|
97
|
+
typeToCreate = superxtype;
|
|
98
|
+
} else {
|
|
99
|
+
typeToCreate = xtype;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return typeToCreate;
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
// injectLockable will be invoked before initComponent's parent class implementation
|
|
107
|
+
// is called, so throughout this method this. are configurations
|
|
108
|
+
injectLockable: function() {
|
|
109
|
+
// ensure lockable is set to true in the TablePanel
|
|
110
|
+
this.lockable = true;
|
|
111
|
+
// Instruct the TablePanel it already has a view and not to create one.
|
|
112
|
+
// We are going to aggregate 2 copies of whatever TablePanel we are using
|
|
113
|
+
this.hasView = true;
|
|
114
|
+
|
|
115
|
+
var me = this,
|
|
116
|
+
// If the OS does not show a space-taking scrollbar, the locked view can be overflow:auto
|
|
117
|
+
scrollLocked = Ext.getScrollbarSize().width === 0,
|
|
118
|
+
store = me.store = Ext.StoreManager.lookup(me.store),
|
|
119
|
+
// xtype of this class, 'treepanel' or 'gridpanel'
|
|
120
|
+
// (Note: this makes it a requirement that any subclass that wants to use lockable functionality needs to register an
|
|
121
|
+
// alias.)
|
|
122
|
+
xtype = me.determineXTypeToCreate(),
|
|
123
|
+
// share the selection model
|
|
124
|
+
selModel = me.getSelectionModel(),
|
|
125
|
+
lockedFeatures = me.prepareFeatures(),
|
|
126
|
+
normalFeatures = me.prepareFeatures(),
|
|
127
|
+
lockedGrid,
|
|
128
|
+
normalGrid,
|
|
129
|
+
i = 0, len,
|
|
130
|
+
columns,
|
|
131
|
+
lockedHeaderCt,
|
|
132
|
+
normalHeaderCt,
|
|
133
|
+
lockedView,
|
|
134
|
+
normalView,
|
|
135
|
+
listeners;
|
|
136
|
+
|
|
137
|
+
// Each Feature must have a reference to its counterpart on the opposite side of the locking view
|
|
138
|
+
for (i = 0, len = (lockedFeatures ? lockedFeatures.length : 0); i < len; i++) {
|
|
139
|
+
lockedFeatures[i].lockingPartner = normalFeatures[i];
|
|
140
|
+
normalFeatures[i].lockingPartner = lockedFeatures[i];
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
lockedGrid = Ext.apply({
|
|
144
|
+
xtype: xtype,
|
|
145
|
+
store: store,
|
|
146
|
+
scrollerOwner: false,
|
|
147
|
+
// Lockable does NOT support animations for Tree
|
|
148
|
+
enableAnimations: false,
|
|
149
|
+
scroll: scrollLocked ? 'vertical' : false,
|
|
150
|
+
selModel: selModel,
|
|
151
|
+
border: false,
|
|
152
|
+
cls: Ext.baseCSSPrefix + 'grid-inner-locked',
|
|
153
|
+
isLayoutRoot: function() {
|
|
154
|
+
return false;
|
|
155
|
+
},
|
|
156
|
+
features: lockedFeatures
|
|
157
|
+
}, me.lockedGridConfig);
|
|
158
|
+
|
|
159
|
+
normalGrid = Ext.apply({
|
|
160
|
+
xtype: xtype,
|
|
161
|
+
store: store,
|
|
162
|
+
scrollerOwner: false,
|
|
163
|
+
enableAnimations: false,
|
|
164
|
+
selModel: selModel,
|
|
165
|
+
border: false,
|
|
166
|
+
isLayoutRoot: function() {
|
|
167
|
+
return false;
|
|
168
|
+
},
|
|
169
|
+
features: normalFeatures
|
|
170
|
+
}, me.normalGridConfig);
|
|
171
|
+
|
|
172
|
+
me.addCls(Ext.baseCSSPrefix + 'grid-locked');
|
|
173
|
+
|
|
174
|
+
// copy appropriate configurations to the respective
|
|
175
|
+
// aggregated tablepanel instances and then delete them
|
|
176
|
+
// from the master tablepanel.
|
|
177
|
+
Ext.copyTo(normalGrid, me, me.bothCfgCopy);
|
|
178
|
+
Ext.copyTo(lockedGrid, me, me.bothCfgCopy);
|
|
179
|
+
Ext.copyTo(normalGrid, me, me.normalCfgCopy);
|
|
180
|
+
Ext.copyTo(lockedGrid, me, me.lockedCfgCopy);
|
|
181
|
+
for (i = 0; i < me.normalCfgCopy.length; i++) {
|
|
182
|
+
delete me[me.normalCfgCopy[i]];
|
|
183
|
+
}
|
|
184
|
+
for (i = 0; i < me.lockedCfgCopy.length; i++) {
|
|
185
|
+
delete me[me.lockedCfgCopy[i]];
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
me.addEvents(
|
|
189
|
+
/**
|
|
190
|
+
* @event lockcolumn
|
|
191
|
+
* Fires when a column is locked.
|
|
192
|
+
* @param {Ext.grid.Panel} this The gridpanel.
|
|
193
|
+
* @param {Ext.grid.column.Column} column The column being locked.
|
|
194
|
+
*/
|
|
195
|
+
'lockcolumn',
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @event unlockcolumn
|
|
199
|
+
* Fires when a column is unlocked.
|
|
200
|
+
* @param {Ext.grid.Panel} this The gridpanel.
|
|
201
|
+
* @param {Ext.grid.column.Column} column The column being unlocked.
|
|
202
|
+
*/
|
|
203
|
+
'unlockcolumn'
|
|
204
|
+
);
|
|
205
|
+
|
|
206
|
+
me.addStateEvents(['lockcolumn', 'unlockcolumn']);
|
|
207
|
+
|
|
208
|
+
me.lockedHeights = [];
|
|
209
|
+
me.normalHeights = [];
|
|
210
|
+
|
|
211
|
+
columns = me.processColumns(me.columns);
|
|
212
|
+
|
|
213
|
+
lockedGrid.width = columns.lockedWidth + Ext.num(selModel.headerWidth, 0);
|
|
214
|
+
lockedGrid.columns = columns.locked;
|
|
215
|
+
normalGrid.columns = columns.normal;
|
|
216
|
+
|
|
217
|
+
// normal grid should flex the rest of the width
|
|
218
|
+
normalGrid.flex = 1;
|
|
219
|
+
lockedGrid.viewConfig = me.lockedViewConfig || {};
|
|
220
|
+
lockedGrid.viewConfig.loadingUseMsg = false;
|
|
221
|
+
normalGrid.viewConfig = me.normalViewConfig || {};
|
|
222
|
+
|
|
223
|
+
Ext.applyIf(lockedGrid.viewConfig, me.viewConfig);
|
|
224
|
+
Ext.applyIf(normalGrid.viewConfig, me.viewConfig);
|
|
225
|
+
|
|
226
|
+
me.normalGrid = Ext.ComponentManager.create(normalGrid);
|
|
227
|
+
me.lockedGrid = Ext.ComponentManager.create(lockedGrid);
|
|
228
|
+
|
|
229
|
+
me.view = new Ext.grid.LockingView({
|
|
230
|
+
locked: me.lockedGrid,
|
|
231
|
+
normal: me.normalGrid,
|
|
232
|
+
panel: me
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
lockedView = me.lockedGrid.getView();
|
|
236
|
+
normalView = me.normalGrid.getView();
|
|
237
|
+
|
|
238
|
+
// Set up listeners for the locked view
|
|
239
|
+
// If the OS does not show a space-taking scrollbar, the locked view can be overflow:auto
|
|
240
|
+
// And therefore we can listen for the DOM scroll event on its element
|
|
241
|
+
if (scrollLocked) {
|
|
242
|
+
listeners = {
|
|
243
|
+
scroll: {
|
|
244
|
+
fn: me.onLockedViewScroll,
|
|
245
|
+
element: 'el',
|
|
246
|
+
scope: me
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// If there are scrollbars, we have to monitor the mousewheel and fake a scroll
|
|
251
|
+
else {
|
|
252
|
+
listeners = {
|
|
253
|
+
mousewheel: {
|
|
254
|
+
fn: me.onLockedViewMouseWheel,
|
|
255
|
+
element: 'el',
|
|
256
|
+
scope: me
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
if (me.syncRowHeight) {
|
|
261
|
+
listeners.refresh = me.onLockedViewRefresh;
|
|
262
|
+
listeners.itemupdate = me.onLockedViewItemUpdate;
|
|
263
|
+
listeners.scope = me;
|
|
264
|
+
}
|
|
265
|
+
lockedView.on(listeners);
|
|
266
|
+
|
|
267
|
+
// Set up listeners for the normal view
|
|
268
|
+
listeners = {
|
|
269
|
+
scroll: {
|
|
270
|
+
fn: me.onNormalViewScroll,
|
|
271
|
+
element: 'el',
|
|
272
|
+
scope: me
|
|
273
|
+
},
|
|
274
|
+
refresh: me.syncRowHeight ? me.onNormalViewRefresh : me.updateSpacer,
|
|
275
|
+
scope: me
|
|
276
|
+
};
|
|
277
|
+
normalView.on(listeners);
|
|
278
|
+
|
|
279
|
+
lockedHeaderCt = me.lockedGrid.headerCt;
|
|
280
|
+
normalHeaderCt = me.normalGrid.headerCt;
|
|
281
|
+
|
|
282
|
+
lockedHeaderCt.lockedCt = true;
|
|
283
|
+
lockedHeaderCt.lockableInjected = true;
|
|
284
|
+
normalHeaderCt.lockableInjected = true;
|
|
285
|
+
|
|
286
|
+
lockedHeaderCt.on({
|
|
287
|
+
columnshow: me.onLockedHeaderShow,
|
|
288
|
+
columnhide: me.onLockedHeaderHide,
|
|
289
|
+
columnmove: me.onLockedHeaderMove,
|
|
290
|
+
sortchange: me.onLockedHeaderSortChange,
|
|
291
|
+
columnresize: me.onLockedHeaderResize,
|
|
292
|
+
scope: me
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
normalHeaderCt.on({
|
|
296
|
+
columnmove: me.onNormalHeaderMove,
|
|
297
|
+
sortchange: me.onNormalHeaderSortChange,
|
|
298
|
+
scope: me
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
me.modifyHeaderCt();
|
|
302
|
+
me.items = [me.lockedGrid, me.normalGrid];
|
|
303
|
+
|
|
304
|
+
me.relayHeaderCtEvents(lockedHeaderCt);
|
|
305
|
+
me.relayHeaderCtEvents(normalHeaderCt);
|
|
306
|
+
|
|
307
|
+
me.layout = {
|
|
308
|
+
type: 'hbox',
|
|
309
|
+
align: 'stretch'
|
|
310
|
+
};
|
|
311
|
+
},
|
|
312
|
+
|
|
313
|
+
processColumns: function(columns){
|
|
314
|
+
// split apart normal and lockedWidths
|
|
315
|
+
var i = 0,
|
|
316
|
+
len = columns.length,
|
|
317
|
+
lockedWidth = 0,
|
|
318
|
+
lockedHeaders = [],
|
|
319
|
+
normalHeaders = [],
|
|
320
|
+
column;
|
|
321
|
+
|
|
322
|
+
for (; i < len; ++i) {
|
|
323
|
+
column = columns[i];
|
|
324
|
+
// MUST clone the column config because we mutate it, and we must not mutate passed in config objects in case they are re-used
|
|
325
|
+
// eg, in an extend-to-configure scenario.
|
|
326
|
+
if (!column.isComponent) {
|
|
327
|
+
column = Ext.apply({}, columns[i]);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// mark the column as processed so that the locked attribute does not
|
|
331
|
+
// trigger trying to aggregate the columns again.
|
|
332
|
+
column.processed = true;
|
|
333
|
+
if (column.locked) {
|
|
334
|
+
// <debug>
|
|
335
|
+
if (column.flex) {
|
|
336
|
+
Ext.Error.raise("Columns which are locked do NOT support a flex width. You must set a width on the " + columns[i].text + "column.");
|
|
337
|
+
}
|
|
338
|
+
// </debug>
|
|
339
|
+
if (!column.hidden) {
|
|
340
|
+
lockedWidth += column.width || Ext.grid.header.Container.prototype.defaultWidth;
|
|
341
|
+
}
|
|
342
|
+
lockedHeaders.push(column);
|
|
343
|
+
} else {
|
|
344
|
+
normalHeaders.push(column);
|
|
345
|
+
}
|
|
346
|
+
if (!column.headerId) {
|
|
347
|
+
column.headerId = (column.initialConfig || column).id || ('L' + (++this.headerCounter));
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return {
|
|
351
|
+
lockedWidth: lockedWidth,
|
|
352
|
+
locked: {
|
|
353
|
+
items: lockedHeaders,
|
|
354
|
+
itemId: 'lockedHeaderCt',
|
|
355
|
+
stretchMaxPartner: '^^>>#normalHeaderCt'
|
|
356
|
+
},
|
|
357
|
+
normal: {
|
|
358
|
+
items: normalHeaders,
|
|
359
|
+
itemId: 'normalHeaderCt',
|
|
360
|
+
stretchMaxPartner: '^^>>#lockedHeaderCt'
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
},
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* @private
|
|
367
|
+
* Listen for mousewheel events on the locked section which does not scroll.
|
|
368
|
+
* Scroll it in response, and the other section will automatically sync.
|
|
369
|
+
*/
|
|
370
|
+
onLockedViewMouseWheel: function(e) {
|
|
371
|
+
var me = this,
|
|
372
|
+
scrollDelta = -me.scrollDelta,
|
|
373
|
+
deltaY = scrollDelta * e.getWheelDeltas().y,
|
|
374
|
+
vertScrollerEl = me.lockedGrid.getView().el.dom,
|
|
375
|
+
verticalCanScrollDown, verticalCanScrollUp;
|
|
376
|
+
|
|
377
|
+
if (vertScrollerEl) {
|
|
378
|
+
verticalCanScrollDown = vertScrollerEl.scrollTop !== vertScrollerEl.scrollHeight - vertScrollerEl.clientHeight;
|
|
379
|
+
verticalCanScrollUp = vertScrollerEl.scrollTop !== 0;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
if ((deltaY < 0 && verticalCanScrollUp) || (deltaY > 0 && verticalCanScrollDown)) {
|
|
383
|
+
e.stopEvent();
|
|
384
|
+
|
|
385
|
+
// Inhibit processing of any scroll events we *may* cause here.
|
|
386
|
+
// Some OSs do not fire a scroll event when we set the scrollTop of an overflow:hidden element,
|
|
387
|
+
// so we invoke the scroll handler programatically below.
|
|
388
|
+
me.scrolling = true;
|
|
389
|
+
vertScrollerEl.scrollTop += deltaY;
|
|
390
|
+
me.normalGrid.getView().el.dom.scrollTop = vertScrollerEl.scrollTop;
|
|
391
|
+
me.scrolling = false;
|
|
392
|
+
|
|
393
|
+
// Invoke the scroll event handler programatically to sync everything.
|
|
394
|
+
me.onNormalViewScroll();
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
|
|
398
|
+
onLockedViewScroll: function() {
|
|
399
|
+
var me = this,
|
|
400
|
+
lockedView = me.lockedGrid.getView(),
|
|
401
|
+
normalView = me.normalGrid.getView(),
|
|
402
|
+
normalTable,
|
|
403
|
+
lockedTable;
|
|
404
|
+
|
|
405
|
+
// Set a flag so that the scroll even doesn't bounce back when we set the normal view's scroll position
|
|
406
|
+
if (!me.scrolling) {
|
|
407
|
+
me.scrolling = true;
|
|
408
|
+
normalView.el.dom.scrollTop = lockedView.el.dom.scrollTop;
|
|
409
|
+
|
|
410
|
+
// For buffered views, the absolute position is important as well as scrollTop
|
|
411
|
+
if (me.store.buffered) {
|
|
412
|
+
lockedTable = lockedView.el.child('table', true);
|
|
413
|
+
normalTable = normalView.el.child('table', true);
|
|
414
|
+
lockedTable.style.position = 'absolute';
|
|
415
|
+
}
|
|
416
|
+
me.scrolling = false;
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
|
|
420
|
+
onNormalViewScroll: function() {
|
|
421
|
+
var me = this,
|
|
422
|
+
lockedView = me.lockedGrid.getView(),
|
|
423
|
+
normalView = me.normalGrid.getView(),
|
|
424
|
+
normalTable,
|
|
425
|
+
lockedTable;
|
|
426
|
+
|
|
427
|
+
// Set a flag so that the scroll even doesn't bounce back when we set the locked view's scroll position
|
|
428
|
+
if (!me.scrolling) {
|
|
429
|
+
me.scrolling = true;
|
|
430
|
+
lockedView.el.dom.scrollTop = normalView.el.dom.scrollTop;
|
|
431
|
+
|
|
432
|
+
// For buffered views, the absolute position is important as well as scrollTop
|
|
433
|
+
if (me.store.buffered) {
|
|
434
|
+
lockedTable = lockedView.el.child('table', true);
|
|
435
|
+
normalTable = normalView.el.child('table', true);
|
|
436
|
+
lockedTable.style.position = 'absolute';
|
|
437
|
+
lockedTable.style.top = normalTable.style.top;
|
|
438
|
+
}
|
|
439
|
+
me.scrolling = false;
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
|
|
443
|
+
// trigger a pseudo refresh on the normal side
|
|
444
|
+
onLockedHeaderMove: function() {
|
|
445
|
+
if (this.syncRowHeight) {
|
|
446
|
+
this.onNormalViewRefresh();
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
|
|
450
|
+
// trigger a pseudo refresh on the locked side
|
|
451
|
+
onNormalHeaderMove: function() {
|
|
452
|
+
if (this.syncRowHeight) {
|
|
453
|
+
this.onLockedViewRefresh();
|
|
454
|
+
}
|
|
455
|
+
},
|
|
456
|
+
|
|
457
|
+
// Create a spacer in lockedsection and store a reference.
|
|
458
|
+
// This is to allow the locked section to scroll past the bottom to
|
|
459
|
+
// take the mormal section's horizontal scrollbar into account
|
|
460
|
+
// TODO: Should destroy before refreshing content
|
|
461
|
+
updateSpacer: function() {
|
|
462
|
+
var me = this,
|
|
463
|
+
// This affects scrolling all the way to the bottom of a locked grid
|
|
464
|
+
// additional test, sort a column and make sure it synchronizes
|
|
465
|
+
lockedViewEl = me.lockedGrid.getView().el,
|
|
466
|
+
normalViewEl = me.normalGrid.getView().el.dom,
|
|
467
|
+
spacerId = lockedViewEl.dom.id + '-spacer',
|
|
468
|
+
spacerHeight = (normalViewEl.offsetHeight - normalViewEl.clientHeight) + 'px';
|
|
469
|
+
|
|
470
|
+
me.spacerEl = Ext.getDom(spacerId);
|
|
471
|
+
if (me.spacerEl) {
|
|
472
|
+
me.spacerEl.style.height = spacerHeight;
|
|
473
|
+
} else {
|
|
474
|
+
Ext.core.DomHelper.append(lockedViewEl, {
|
|
475
|
+
id: spacerId,
|
|
476
|
+
style: 'height: ' + spacerHeight
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
|
|
481
|
+
// cache the heights of all locked rows and sync rowheights
|
|
482
|
+
onLockedViewRefresh: function() {
|
|
483
|
+
|
|
484
|
+
// Only bother if there are some columns in the normal grid to sync
|
|
485
|
+
if (this.normalGrid.headerCt.getGridColumns().length) {
|
|
486
|
+
var me = this,
|
|
487
|
+
view = me.lockedGrid.getView(),
|
|
488
|
+
el = view.el,
|
|
489
|
+
rowEls = el.query(view.getItemSelector()),
|
|
490
|
+
ln = rowEls.length,
|
|
491
|
+
i = 0;
|
|
492
|
+
|
|
493
|
+
// reset heights each time.
|
|
494
|
+
me.lockedHeights = [];
|
|
495
|
+
|
|
496
|
+
for (; i < ln; i++) {
|
|
497
|
+
me.lockedHeights[i] = rowEls[i].clientHeight;
|
|
498
|
+
}
|
|
499
|
+
me.syncRowHeights();
|
|
500
|
+
}
|
|
501
|
+
},
|
|
502
|
+
|
|
503
|
+
// cache the heights of all normal rows and sync rowheights
|
|
504
|
+
onNormalViewRefresh: function() {
|
|
505
|
+
|
|
506
|
+
// Only bother if there are some columns in the locked grid to sync
|
|
507
|
+
if (this.lockedGrid.headerCt.getGridColumns().length) {
|
|
508
|
+
var me = this,
|
|
509
|
+
view = me.normalGrid.getView(),
|
|
510
|
+
el = view.el,
|
|
511
|
+
rowEls = el.query(view.getItemSelector()),
|
|
512
|
+
ln = rowEls.length,
|
|
513
|
+
i = 0;
|
|
514
|
+
|
|
515
|
+
// reset heights each time.
|
|
516
|
+
me.normalHeights = [];
|
|
517
|
+
|
|
518
|
+
for (; i < ln; i++) {
|
|
519
|
+
me.normalHeights[i] = rowEls[i].clientHeight;
|
|
520
|
+
}
|
|
521
|
+
me.syncRowHeights();
|
|
522
|
+
me.updateSpacer();
|
|
523
|
+
}
|
|
524
|
+
},
|
|
525
|
+
|
|
526
|
+
// rows can get bigger/smaller
|
|
527
|
+
onLockedViewItemUpdate: function(record, index, node) {
|
|
528
|
+
|
|
529
|
+
// Only bother if there are some columns in the normal grid to sync
|
|
530
|
+
if (this.normalGrid.headerCt.getGridColumns().length) {
|
|
531
|
+
this.lockedHeights[index] = node.clientHeight;
|
|
532
|
+
this.syncRowHeights();
|
|
533
|
+
}
|
|
534
|
+
},
|
|
535
|
+
|
|
536
|
+
// rows can get bigger/smaller
|
|
537
|
+
onNormalViewItemUpdate: function(record, index, node) {
|
|
538
|
+
|
|
539
|
+
// Only bother if there are some columns in the locked grid to sync
|
|
540
|
+
if (this.lockedGrid.headerCt.getGridColumns().length) {
|
|
541
|
+
this.normalHeights[index] = node.clientHeight;
|
|
542
|
+
this.syncRowHeights();
|
|
543
|
+
}
|
|
544
|
+
},
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Synchronizes the row heights between the locked and non locked portion of the grid for each
|
|
548
|
+
* row. If one row is smaller than the other, the height will be increased to match the larger one.
|
|
549
|
+
*/
|
|
550
|
+
syncRowHeights: function() {
|
|
551
|
+
var me = this,
|
|
552
|
+
lockedHeights = me.lockedHeights,
|
|
553
|
+
normalHeights = me.normalHeights,
|
|
554
|
+
calcHeights = [],
|
|
555
|
+
ln = lockedHeights.length,
|
|
556
|
+
i = 0,
|
|
557
|
+
lockedView, normalView,
|
|
558
|
+
lockedRowEls, normalRowEls,
|
|
559
|
+
scrollTop;
|
|
560
|
+
|
|
561
|
+
// ensure there are an equal num of locked and normal
|
|
562
|
+
// rows before synchronization
|
|
563
|
+
if (lockedHeights.length && normalHeights.length) {
|
|
564
|
+
lockedView = me.lockedGrid.getView();
|
|
565
|
+
normalView = me.normalGrid.getView();
|
|
566
|
+
lockedRowEls = lockedView.el.query(lockedView.getItemSelector());
|
|
567
|
+
normalRowEls = normalView.el.query(normalView.getItemSelector());
|
|
568
|
+
|
|
569
|
+
// loop thru all of the heights and sync to the other side
|
|
570
|
+
for (; i < ln; i++) {
|
|
571
|
+
// ensure both are numbers
|
|
572
|
+
if (!isNaN(lockedHeights[i]) && !isNaN(normalHeights[i])) {
|
|
573
|
+
if (lockedHeights[i] > normalHeights[i]) {
|
|
574
|
+
Ext.fly(normalRowEls[i]).setHeight(lockedHeights[i]);
|
|
575
|
+
} else if (lockedHeights[i] < normalHeights[i]) {
|
|
576
|
+
Ext.fly(lockedRowEls[i]).setHeight(normalHeights[i]);
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
// Synchronize the scrollTop positions of the two views
|
|
582
|
+
// We don't use setScrollTop here because if the scrollTop is
|
|
583
|
+
// set to the exact same value some browsers won't fire the scroll
|
|
584
|
+
// event. Instead, we directly set the scrollTop.
|
|
585
|
+
scrollTop = normalView.el.dom.scrollTop;
|
|
586
|
+
normalView.el.dom.scrollTop = scrollTop;
|
|
587
|
+
lockedView.el.dom.scrollTop = scrollTop;
|
|
588
|
+
|
|
589
|
+
// reset the heights
|
|
590
|
+
me.lockedHeights = [];
|
|
591
|
+
me.normalHeights = [];
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
|
|
595
|
+
// inject Lock and Unlock text
|
|
596
|
+
modifyHeaderCt: function() {
|
|
597
|
+
var me = this;
|
|
598
|
+
me.lockedGrid.headerCt.getMenuItems = me.getMenuItems(true);
|
|
599
|
+
me.normalGrid.headerCt.getMenuItems = me.getMenuItems(false);
|
|
600
|
+
},
|
|
601
|
+
|
|
602
|
+
onUnlockMenuClick: function() {
|
|
603
|
+
this.unlock();
|
|
604
|
+
},
|
|
605
|
+
|
|
606
|
+
onLockMenuClick: function() {
|
|
607
|
+
this.lock();
|
|
608
|
+
},
|
|
609
|
+
|
|
610
|
+
getMenuItems: function(locked) {
|
|
611
|
+
var me = this,
|
|
612
|
+
unlockText = me.unlockText,
|
|
613
|
+
lockText = me.lockText,
|
|
614
|
+
unlockCls = Ext.baseCSSPrefix + 'hmenu-unlock',
|
|
615
|
+
lockCls = Ext.baseCSSPrefix + 'hmenu-lock',
|
|
616
|
+
unlockHandler = Ext.Function.bind(me.onUnlockMenuClick, me),
|
|
617
|
+
lockHandler = Ext.Function.bind(me.onLockMenuClick, me);
|
|
618
|
+
|
|
619
|
+
// runs in the scope of headerCt
|
|
620
|
+
return function() {
|
|
621
|
+
var o = Ext.grid.header.Container.prototype.getMenuItems.call(this);
|
|
622
|
+
o.push('-',{
|
|
623
|
+
cls: unlockCls,
|
|
624
|
+
text: unlockText,
|
|
625
|
+
handler: unlockHandler,
|
|
626
|
+
disabled: !locked
|
|
627
|
+
});
|
|
628
|
+
o.push({
|
|
629
|
+
cls: lockCls,
|
|
630
|
+
text: lockText,
|
|
631
|
+
handler: lockHandler,
|
|
632
|
+
disabled: locked
|
|
633
|
+
});
|
|
634
|
+
return o;
|
|
635
|
+
};
|
|
636
|
+
},
|
|
637
|
+
|
|
638
|
+
// going from unlocked section to locked
|
|
639
|
+
/**
|
|
640
|
+
* Locks the activeHeader as determined by which menu is open OR a header
|
|
641
|
+
* as specified.
|
|
642
|
+
* @param {Ext.grid.column.Column} [header] Header to unlock from the locked section.
|
|
643
|
+
* Defaults to the header which has the menu open currently.
|
|
644
|
+
* @param {Number} [toIdx] The index to move the unlocked header to.
|
|
645
|
+
* Defaults to appending as the last item.
|
|
646
|
+
* @private
|
|
647
|
+
*/
|
|
648
|
+
lock: function(activeHd, toIdx) {
|
|
649
|
+
var me = this,
|
|
650
|
+
normalGrid = me.normalGrid,
|
|
651
|
+
lockedGrid = me.lockedGrid,
|
|
652
|
+
normalHCt = normalGrid.headerCt,
|
|
653
|
+
lockedHCt = lockedGrid.headerCt;
|
|
654
|
+
|
|
655
|
+
activeHd = activeHd || normalHCt.getMenu().activeHeader;
|
|
656
|
+
|
|
657
|
+
// if column was previously flexed, get/set current width
|
|
658
|
+
// and remove the flex
|
|
659
|
+
if (activeHd.flex) {
|
|
660
|
+
activeHd.width = activeHd.getWidth();
|
|
661
|
+
delete activeHd.flex;
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
Ext.suspendLayouts();
|
|
665
|
+
normalHCt.remove(activeHd, false);
|
|
666
|
+
activeHd.locked = true;
|
|
667
|
+
if (Ext.isDefined(toIdx)) {
|
|
668
|
+
lockedHCt.insert(toIdx, activeHd);
|
|
669
|
+
} else {
|
|
670
|
+
lockedHCt.add(activeHd);
|
|
671
|
+
}
|
|
672
|
+
me.syncLockedSection();
|
|
673
|
+
Ext.resumeLayouts(true);
|
|
674
|
+
me.updateSpacer();
|
|
675
|
+
|
|
676
|
+
me.fireEvent('lockcolumn', me, activeHd);
|
|
677
|
+
},
|
|
678
|
+
|
|
679
|
+
syncLockedSection: function() {
|
|
680
|
+
var me = this;
|
|
681
|
+
me.syncLockedWidth();
|
|
682
|
+
me.lockedGrid.getView().refresh();
|
|
683
|
+
me.normalGrid.getView().refresh();
|
|
684
|
+
},
|
|
685
|
+
|
|
686
|
+
// adjust the locked section to the width of its respective
|
|
687
|
+
// headerCt
|
|
688
|
+
syncLockedWidth: function() {
|
|
689
|
+
var me = this,
|
|
690
|
+
locked = me.lockedGrid,
|
|
691
|
+
width = locked.headerCt.getFullWidth(true);
|
|
692
|
+
|
|
693
|
+
Ext.suspendLayouts();
|
|
694
|
+
if (width > 0) {
|
|
695
|
+
locked.setWidth(width);
|
|
696
|
+
locked.show();
|
|
697
|
+
} else {
|
|
698
|
+
locked.hide();
|
|
699
|
+
}
|
|
700
|
+
Ext.resumeLayouts(true);
|
|
701
|
+
|
|
702
|
+
return width > 0;
|
|
703
|
+
},
|
|
704
|
+
|
|
705
|
+
onLockedHeaderResize: function() {
|
|
706
|
+
this.syncLockedWidth();
|
|
707
|
+
},
|
|
708
|
+
|
|
709
|
+
onLockedHeaderHide: function() {
|
|
710
|
+
this.syncLockedWidth();
|
|
711
|
+
},
|
|
712
|
+
|
|
713
|
+
onLockedHeaderShow: function() {
|
|
714
|
+
this.syncLockedWidth();
|
|
715
|
+
},
|
|
716
|
+
|
|
717
|
+
onLockedHeaderSortChange: function(headerCt, header, sortState) {
|
|
718
|
+
if (sortState) {
|
|
719
|
+
// no real header, and silence the event so we dont get into an
|
|
720
|
+
// infinite loop
|
|
721
|
+
this.normalGrid.headerCt.clearOtherSortStates(null, true);
|
|
722
|
+
}
|
|
723
|
+
},
|
|
724
|
+
|
|
725
|
+
onNormalHeaderSortChange: function(headerCt, header, sortState) {
|
|
726
|
+
if (sortState) {
|
|
727
|
+
// no real header, and silence the event so we dont get into an
|
|
728
|
+
// infinite loop
|
|
729
|
+
this.lockedGrid.headerCt.clearOtherSortStates(null, true);
|
|
730
|
+
}
|
|
731
|
+
},
|
|
732
|
+
|
|
733
|
+
// going from locked section to unlocked
|
|
734
|
+
/**
|
|
735
|
+
* Unlocks the activeHeader as determined by which menu is open OR a header
|
|
736
|
+
* as specified.
|
|
737
|
+
* @param {Ext.grid.column.Column} [header] Header to unlock from the locked section.
|
|
738
|
+
* Defaults to the header which has the menu open currently.
|
|
739
|
+
* @param {Number} [toIdx=0] The index to move the unlocked header to.
|
|
740
|
+
* @private
|
|
741
|
+
*/
|
|
742
|
+
unlock: function(activeHd, toIdx) {
|
|
743
|
+
var me = this,
|
|
744
|
+
normalGrid = me.normalGrid,
|
|
745
|
+
lockedGrid = me.lockedGrid,
|
|
746
|
+
normalHCt = normalGrid.headerCt,
|
|
747
|
+
lockedHCt = lockedGrid.headerCt,
|
|
748
|
+
refreshLocked = false;
|
|
749
|
+
|
|
750
|
+
if (!Ext.isDefined(toIdx)) {
|
|
751
|
+
toIdx = 0;
|
|
752
|
+
}
|
|
753
|
+
activeHd = activeHd || lockedHCt.getMenu().activeHeader;
|
|
754
|
+
|
|
755
|
+
Ext.suspendLayouts();
|
|
756
|
+
lockedHCt.remove(activeHd, false);
|
|
757
|
+
if (me.syncLockedWidth()) {
|
|
758
|
+
refreshLocked = true;
|
|
759
|
+
}
|
|
760
|
+
activeHd.locked = false;
|
|
761
|
+
|
|
762
|
+
// Refresh the locked section first in case it was empty
|
|
763
|
+
normalHCt.insert(toIdx, activeHd);
|
|
764
|
+
me.normalGrid.getView().refresh();
|
|
765
|
+
|
|
766
|
+
if (refreshLocked) {
|
|
767
|
+
me.lockedGrid.getView().refresh();
|
|
768
|
+
}
|
|
769
|
+
Ext.resumeLayouts(true);
|
|
770
|
+
|
|
771
|
+
me.fireEvent('unlockcolumn', me, activeHd);
|
|
772
|
+
},
|
|
773
|
+
|
|
774
|
+
applyColumnsState: function (columns) {
|
|
775
|
+
var me = this,
|
|
776
|
+
lockedGrid = me.lockedGrid,
|
|
777
|
+
lockedHeaderCt = lockedGrid.headerCt,
|
|
778
|
+
normalHeaderCt = me.normalGrid.headerCt,
|
|
779
|
+
lockedCols = Ext.Array.toMap(lockedHeaderCt.items, 'headerId'),
|
|
780
|
+
normalCols = Ext.Array.toMap(normalHeaderCt.items, 'headerId'),
|
|
781
|
+
locked = [],
|
|
782
|
+
normal = [],
|
|
783
|
+
lockedWidth = 1,
|
|
784
|
+
length = columns.length,
|
|
785
|
+
i, existing,
|
|
786
|
+
lockedDefault,
|
|
787
|
+
col;
|
|
788
|
+
|
|
789
|
+
for (i = 0; i < length; i++) {
|
|
790
|
+
col = columns[i];
|
|
791
|
+
|
|
792
|
+
lockedDefault = lockedCols[col.id];
|
|
793
|
+
existing = lockedDefault || normalCols[col.id];
|
|
794
|
+
|
|
795
|
+
if (existing) {
|
|
796
|
+
if (existing.applyColumnState) {
|
|
797
|
+
existing.applyColumnState(col);
|
|
798
|
+
}
|
|
799
|
+
if (existing.locked === undefined) {
|
|
800
|
+
existing.locked = !!lockedDefault;
|
|
801
|
+
}
|
|
802
|
+
if (existing.locked) {
|
|
803
|
+
locked.push(existing);
|
|
804
|
+
if (!existing.hidden && typeof existing.width == 'number') {
|
|
805
|
+
lockedWidth += existing.width;
|
|
806
|
+
}
|
|
807
|
+
} else {
|
|
808
|
+
normal.push(existing);
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
// state and config must have the same columns (compare counts for now):
|
|
814
|
+
if (locked.length + normal.length == lockedHeaderCt.items.getCount() + normalHeaderCt.items.getCount()) {
|
|
815
|
+
lockedHeaderCt.removeAll(false);
|
|
816
|
+
normalHeaderCt.removeAll(false);
|
|
817
|
+
|
|
818
|
+
lockedHeaderCt.add(locked);
|
|
819
|
+
normalHeaderCt.add(normal);
|
|
820
|
+
|
|
821
|
+
lockedGrid.setWidth(lockedWidth);
|
|
822
|
+
}
|
|
823
|
+
},
|
|
824
|
+
|
|
825
|
+
getColumnsState: function () {
|
|
826
|
+
var me = this,
|
|
827
|
+
locked = me.lockedGrid.headerCt.getColumnsState(),
|
|
828
|
+
normal = me.normalGrid.headerCt.getColumnsState();
|
|
829
|
+
|
|
830
|
+
return locked.concat(normal);
|
|
831
|
+
},
|
|
832
|
+
|
|
833
|
+
// we want to totally override the reconfigure behaviour here, since we're creating 2 sub-grids
|
|
834
|
+
reconfigureLockable: function(store, columns) {
|
|
835
|
+
var me = this,
|
|
836
|
+
lockedGrid = me.lockedGrid,
|
|
837
|
+
normalGrid = me.normalGrid;
|
|
838
|
+
|
|
839
|
+
if (columns) {
|
|
840
|
+
Ext.suspendLayouts();
|
|
841
|
+
lockedGrid.headerCt.removeAll();
|
|
842
|
+
normalGrid.headerCt.removeAll();
|
|
843
|
+
|
|
844
|
+
columns = me.processColumns(columns);
|
|
845
|
+
lockedGrid.setWidth(columns.lockedWidth);
|
|
846
|
+
lockedGrid.headerCt.add(columns.locked.items);
|
|
847
|
+
normalGrid.headerCt.add(columns.normal.items);
|
|
848
|
+
Ext.resumeLayouts(true);
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
if (store) {
|
|
852
|
+
store = Ext.data.StoreManager.lookup(store);
|
|
853
|
+
me.store = store;
|
|
854
|
+
lockedGrid.bindStore(store);
|
|
855
|
+
normalGrid.bindStore(store);
|
|
856
|
+
} else {
|
|
857
|
+
lockedGrid.getView().refresh();
|
|
858
|
+
normalGrid.getView().refresh();
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
}, function() {
|
|
862
|
+
this.borrow(Ext.view.Table, ['prepareFeatures']);
|
|
863
|
+
});
|