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,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This feature is used to place a summary row at the bottom of the grid. If using a grouping,
|
|
3
|
+
* see {@link Ext.grid.feature.GroupingSummary}. There are 2 aspects to calculating the summaries,
|
|
4
|
+
* calculation and rendering.
|
|
5
|
+
*
|
|
6
|
+
* ## Calculation
|
|
7
|
+
* The summary value needs to be calculated for each column in the grid. This is controlled
|
|
8
|
+
* by the summaryType option specified on the column. There are several built in summary types,
|
|
9
|
+
* which can be specified as a string on the column configuration. These call underlying methods
|
|
10
|
+
* on the store:
|
|
11
|
+
*
|
|
12
|
+
* - {@link Ext.data.Store#count count}
|
|
13
|
+
* - {@link Ext.data.Store#sum sum}
|
|
14
|
+
* - {@link Ext.data.Store#min min}
|
|
15
|
+
* - {@link Ext.data.Store#max max}
|
|
16
|
+
* - {@link Ext.data.Store#average average}
|
|
17
|
+
*
|
|
18
|
+
* Alternatively, the summaryType can be a function definition. If this is the case,
|
|
19
|
+
* the function is called with an array of records to calculate the summary value.
|
|
20
|
+
*
|
|
21
|
+
* ## Rendering
|
|
22
|
+
* Similar to a column, the summary also supports a summaryRenderer function. This
|
|
23
|
+
* summaryRenderer is called before displaying a value. The function is optional, if
|
|
24
|
+
* not specified the default calculated value is shown. The summaryRenderer is called with:
|
|
25
|
+
*
|
|
26
|
+
* - value {Object} - The calculated value.
|
|
27
|
+
* - summaryData {Object} - Contains all raw summary values for the row.
|
|
28
|
+
* - field {String} - The name of the field we are calculating
|
|
29
|
+
*
|
|
30
|
+
* ## Example Usage
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* Ext.define('TestResult', {
|
|
34
|
+
* extend: 'Ext.data.Model',
|
|
35
|
+
* fields: ['student', {
|
|
36
|
+
* name: 'mark',
|
|
37
|
+
* type: 'int'
|
|
38
|
+
* }]
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* Ext.create('Ext.grid.Panel', {
|
|
42
|
+
* width: 200,
|
|
43
|
+
* height: 140,
|
|
44
|
+
* renderTo: document.body,
|
|
45
|
+
* features: [{
|
|
46
|
+
* ftype: 'summary'
|
|
47
|
+
* }],
|
|
48
|
+
* store: {
|
|
49
|
+
* model: 'TestResult',
|
|
50
|
+
* data: [{
|
|
51
|
+
* student: 'Student 1',
|
|
52
|
+
* mark: 84
|
|
53
|
+
* },{
|
|
54
|
+
* student: 'Student 2',
|
|
55
|
+
* mark: 72
|
|
56
|
+
* },{
|
|
57
|
+
* student: 'Student 3',
|
|
58
|
+
* mark: 96
|
|
59
|
+
* },{
|
|
60
|
+
* student: 'Student 4',
|
|
61
|
+
* mark: 68
|
|
62
|
+
* }]
|
|
63
|
+
* },
|
|
64
|
+
* columns: [{
|
|
65
|
+
* dataIndex: 'student',
|
|
66
|
+
* text: 'Name',
|
|
67
|
+
* summaryType: 'count',
|
|
68
|
+
* summaryRenderer: function(value, summaryData, dataIndex) {
|
|
69
|
+
* return Ext.String.format('{0} student{1}', value, value !== 1 ? 's' : '');
|
|
70
|
+
* }
|
|
71
|
+
* }, {
|
|
72
|
+
* dataIndex: 'mark',
|
|
73
|
+
* text: 'Mark',
|
|
74
|
+
* summaryType: 'average'
|
|
75
|
+
* }]
|
|
76
|
+
* });
|
|
77
|
+
*/
|
|
78
|
+
Ext.define('Ext.grid.feature.Summary', {
|
|
79
|
+
|
|
80
|
+
/* Begin Definitions */
|
|
81
|
+
|
|
82
|
+
extend: 'Ext.grid.feature.AbstractSummary',
|
|
83
|
+
|
|
84
|
+
alias: 'feature.summary',
|
|
85
|
+
|
|
86
|
+
/* End Definitions */
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Gets any fragments needed for the template.
|
|
90
|
+
* @private
|
|
91
|
+
* @return {Object} The fragments
|
|
92
|
+
*/
|
|
93
|
+
getFragmentTpl: function() {
|
|
94
|
+
// this gets called before render, so we'll setup the data here.
|
|
95
|
+
this.summaryData = this.generateSummaryData();
|
|
96
|
+
return this.getSummaryFragments();
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Overrides the closeRows method on the template so we can include our own custom
|
|
101
|
+
* footer.
|
|
102
|
+
* @private
|
|
103
|
+
* @return {Object} The custom fragments
|
|
104
|
+
*/
|
|
105
|
+
getTableFragments: function(){
|
|
106
|
+
if (this.showSummaryRow) {
|
|
107
|
+
return {
|
|
108
|
+
closeRows: this.closeRows
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Provide our own custom footer for the grid.
|
|
115
|
+
* @private
|
|
116
|
+
* @return {String} The custom footer
|
|
117
|
+
*/
|
|
118
|
+
closeRows: function() {
|
|
119
|
+
return '</tpl>{[this.printSummaryRow()]}';
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Gets the data for printing a template row
|
|
124
|
+
* @private
|
|
125
|
+
* @param {Number} index The index in the template
|
|
126
|
+
* @return {Array} The template values
|
|
127
|
+
*/
|
|
128
|
+
getPrintData: function(index){
|
|
129
|
+
var me = this,
|
|
130
|
+
columns = me.view.headerCt.getColumnsForTpl(),
|
|
131
|
+
i = 0,
|
|
132
|
+
length = columns.length,
|
|
133
|
+
data = [],
|
|
134
|
+
active = me.summaryData,
|
|
135
|
+
column;
|
|
136
|
+
|
|
137
|
+
for (; i < length; ++i) {
|
|
138
|
+
column = columns[i];
|
|
139
|
+
column.gridSummaryValue = this.getColumnValue(column, active);
|
|
140
|
+
data.push(column);
|
|
141
|
+
}
|
|
142
|
+
return data;
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Generates all of the summary data to be used when processing the template
|
|
147
|
+
* @private
|
|
148
|
+
* @return {Object} The summary data
|
|
149
|
+
*/
|
|
150
|
+
generateSummaryData: function(){
|
|
151
|
+
var me = this,
|
|
152
|
+
data = {},
|
|
153
|
+
store = me.view.store,
|
|
154
|
+
columns = me.view.headerCt.getColumnsForTpl(),
|
|
155
|
+
i = 0,
|
|
156
|
+
length = columns.length,
|
|
157
|
+
fieldData,
|
|
158
|
+
key,
|
|
159
|
+
comp;
|
|
160
|
+
|
|
161
|
+
for (i = 0, length = columns.length; i < length; ++i) {
|
|
162
|
+
comp = Ext.getCmp(columns[i].id);
|
|
163
|
+
data[comp.id] = me.getSummary(store, comp.summaryType, comp.dataIndex, false);
|
|
164
|
+
}
|
|
165
|
+
return data;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
@@ -0,0 +1,965 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container which holds headers and is docked at the top or bottom of a TablePanel.
|
|
3
|
+
* The HeaderContainer drives resizing/moving/hiding of columns within the TableView.
|
|
4
|
+
* As headers are hidden, moved or resized the headercontainer is responsible for
|
|
5
|
+
* triggering changes within the view.
|
|
6
|
+
*/
|
|
7
|
+
Ext.define('Ext.grid.header.Container', {
|
|
8
|
+
extend: 'Ext.container.Container',
|
|
9
|
+
requires: [
|
|
10
|
+
'Ext.grid.ColumnLayout',
|
|
11
|
+
'Ext.grid.plugin.HeaderResizer',
|
|
12
|
+
'Ext.grid.plugin.HeaderReorderer'
|
|
13
|
+
],
|
|
14
|
+
uses: [
|
|
15
|
+
'Ext.grid.column.Column',
|
|
16
|
+
'Ext.menu.Menu',
|
|
17
|
+
'Ext.menu.CheckItem',
|
|
18
|
+
'Ext.menu.Separator'
|
|
19
|
+
],
|
|
20
|
+
border: true,
|
|
21
|
+
|
|
22
|
+
alias: 'widget.headercontainer',
|
|
23
|
+
|
|
24
|
+
baseCls: Ext.baseCSSPrefix + 'grid-header-ct',
|
|
25
|
+
dock: 'top',
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @cfg {Number} weight
|
|
29
|
+
* HeaderContainer overrides the default weight of 0 for all docked items to 100.
|
|
30
|
+
* This is so that it has more priority over things like toolbars.
|
|
31
|
+
*/
|
|
32
|
+
weight: 100,
|
|
33
|
+
|
|
34
|
+
defaultType: 'gridcolumn',
|
|
35
|
+
|
|
36
|
+
detachOnRemove: false,
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @cfg {Number} defaultWidth
|
|
40
|
+
* Width of the header if no width or flex is specified.
|
|
41
|
+
*/
|
|
42
|
+
defaultWidth: 100,
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @cfg {Boolean} [sealed=false]
|
|
46
|
+
* Specify as `true` to constrain column dragging so that a column cannot be dragged into or out of this column.
|
|
47
|
+
*
|
|
48
|
+
* **Note that this config is only valid for column headers which contain child column headers, eg:**
|
|
49
|
+
* {
|
|
50
|
+
* sealed: true
|
|
51
|
+
* text: 'ExtJS',
|
|
52
|
+
* columns: [{
|
|
53
|
+
* text: '3.0.4',
|
|
54
|
+
* dataIndex: 'ext304'
|
|
55
|
+
* }, {
|
|
56
|
+
* text: '4.1.0',
|
|
57
|
+
* dataIndex: 'ext410'
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
60
|
+
*
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
//<locale>
|
|
64
|
+
sortAscText: 'Sort Ascending',
|
|
65
|
+
//</locale>
|
|
66
|
+
//<locale>
|
|
67
|
+
sortDescText: 'Sort Descending',
|
|
68
|
+
//</locale>
|
|
69
|
+
//<locale>
|
|
70
|
+
sortClearText: 'Clear Sort',
|
|
71
|
+
//</locale>
|
|
72
|
+
//<locale>
|
|
73
|
+
columnsText: 'Columns',
|
|
74
|
+
//</locale>
|
|
75
|
+
|
|
76
|
+
headerOpenCls: Ext.baseCSSPrefix + 'column-header-open',
|
|
77
|
+
|
|
78
|
+
// private; will probably be removed by 4.0
|
|
79
|
+
triStateSort: false,
|
|
80
|
+
|
|
81
|
+
ddLock: false,
|
|
82
|
+
|
|
83
|
+
dragging: false,
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @property {Boolean} isGroupHeader
|
|
87
|
+
* True if this HeaderContainer is in fact a group header which contains sub headers.
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* @cfg {Boolean} sortable
|
|
92
|
+
* Provides the default sortable state for all Headers within this HeaderContainer.
|
|
93
|
+
* Also turns on or off the menus in the HeaderContainer. Note that the menu is
|
|
94
|
+
* shared across every header and therefore turning it off will remove the menu
|
|
95
|
+
* items for every header.
|
|
96
|
+
*/
|
|
97
|
+
sortable: true,
|
|
98
|
+
|
|
99
|
+
initComponent: function() {
|
|
100
|
+
var me = this;
|
|
101
|
+
|
|
102
|
+
me.headerCounter = 0;
|
|
103
|
+
me.plugins = me.plugins || [];
|
|
104
|
+
|
|
105
|
+
// TODO: Pass in configurations to turn on/off dynamic
|
|
106
|
+
// resizing and disable resizing all together
|
|
107
|
+
|
|
108
|
+
// Only set up a Resizer and Reorderer for the topmost HeaderContainer.
|
|
109
|
+
// Nested Group Headers are themselves HeaderContainers
|
|
110
|
+
if (!me.isHeader) {
|
|
111
|
+
if (me.enableColumnResize) {
|
|
112
|
+
me.resizer = new Ext.grid.plugin.HeaderResizer();
|
|
113
|
+
me.plugins.push(me.resizer);
|
|
114
|
+
}
|
|
115
|
+
if (me.enableColumnMove) {
|
|
116
|
+
me.reorderer = new Ext.grid.plugin.HeaderReorderer();
|
|
117
|
+
me.plugins.push(me.reorderer);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Base headers do not need a box layout
|
|
122
|
+
if (me.isHeader && !me.items) {
|
|
123
|
+
me.layout = me.layout || 'auto';
|
|
124
|
+
}
|
|
125
|
+
// HeaderContainer and Group header needs a gridcolumn layout.
|
|
126
|
+
else {
|
|
127
|
+
me.layout = Ext.apply({
|
|
128
|
+
type: 'gridcolumn',
|
|
129
|
+
align: 'stretchmax'
|
|
130
|
+
}, me.initialConfig.layout);
|
|
131
|
+
}
|
|
132
|
+
me.defaults = me.defaults || {};
|
|
133
|
+
Ext.applyIf(me.defaults, {
|
|
134
|
+
triStateSort: me.triStateSort,
|
|
135
|
+
sortable: me.sortable
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
me.menuTask = new Ext.util.DelayedTask(me.updateMenuDisabledState, me);
|
|
139
|
+
me.callParent();
|
|
140
|
+
me.addEvents(
|
|
141
|
+
/**
|
|
142
|
+
* @event columnresize
|
|
143
|
+
* @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
|
|
144
|
+
* @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
|
|
145
|
+
* @param {Number} width
|
|
146
|
+
*/
|
|
147
|
+
'columnresize',
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @event headerclick
|
|
151
|
+
* @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
|
|
152
|
+
* @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
|
|
153
|
+
* @param {Ext.EventObject} e
|
|
154
|
+
* @param {HTMLElement} t
|
|
155
|
+
*/
|
|
156
|
+
'headerclick',
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* @event headertriggerclick
|
|
160
|
+
* @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
|
|
161
|
+
* @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
|
|
162
|
+
* @param {Ext.EventObject} e
|
|
163
|
+
* @param {HTMLElement} t
|
|
164
|
+
*/
|
|
165
|
+
'headertriggerclick',
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @event columnmove
|
|
169
|
+
* @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
|
|
170
|
+
* @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
|
|
171
|
+
* @param {Number} fromIdx
|
|
172
|
+
* @param {Number} toIdx
|
|
173
|
+
*/
|
|
174
|
+
'columnmove',
|
|
175
|
+
/**
|
|
176
|
+
* @event columnhide
|
|
177
|
+
* @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
|
|
178
|
+
* @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
|
|
179
|
+
*/
|
|
180
|
+
'columnhide',
|
|
181
|
+
/**
|
|
182
|
+
* @event columnshow
|
|
183
|
+
* @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
|
|
184
|
+
* @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
|
|
185
|
+
*/
|
|
186
|
+
'columnshow',
|
|
187
|
+
/**
|
|
188
|
+
* @event sortchange
|
|
189
|
+
* @param {Ext.grid.header.Container} ct The grid's header Container which encapsulates all column headers.
|
|
190
|
+
* @param {Ext.grid.column.Column} column The Column header Component which provides the column definition
|
|
191
|
+
* @param {String} direction
|
|
192
|
+
*/
|
|
193
|
+
'sortchange',
|
|
194
|
+
/**
|
|
195
|
+
* @event menucreate
|
|
196
|
+
* Fired immediately after the column header menu is created.
|
|
197
|
+
* @param {Ext.grid.header.Container} ct This instance
|
|
198
|
+
* @param {Ext.menu.Menu} menu The Menu that was created
|
|
199
|
+
*/
|
|
200
|
+
'menucreate'
|
|
201
|
+
);
|
|
202
|
+
},
|
|
203
|
+
|
|
204
|
+
onDestroy: function() {
|
|
205
|
+
var me = this;
|
|
206
|
+
|
|
207
|
+
me.menuTask.cancel();
|
|
208
|
+
Ext.destroy(me.resizer, me.reorderer);
|
|
209
|
+
me.callParent();
|
|
210
|
+
},
|
|
211
|
+
|
|
212
|
+
applyColumnsState: function(columns) {
|
|
213
|
+
if (!columns || !columns.length) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
var me = this,
|
|
218
|
+
items = me.items.items,
|
|
219
|
+
count = items.length,
|
|
220
|
+
i = 0,
|
|
221
|
+
length = columns.length,
|
|
222
|
+
c, col, columnState, index;
|
|
223
|
+
|
|
224
|
+
for (c = 0; c < length; c++) {
|
|
225
|
+
columnState = columns[c];
|
|
226
|
+
|
|
227
|
+
for (index = count; index--; ) {
|
|
228
|
+
col = items[index];
|
|
229
|
+
if (col.getStateId && col.getStateId() == columnState.id) {
|
|
230
|
+
// If a column in the new grid matches up with a saved state...
|
|
231
|
+
// Ensure that the column is restored to the state order.
|
|
232
|
+
// i is incremented upon every column match, so all persistent
|
|
233
|
+
// columns are ordered before any new columns.
|
|
234
|
+
if (i !== index) {
|
|
235
|
+
me.moveHeader(index, i);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (col.applyColumnState) {
|
|
239
|
+
col.applyColumnState(columnState);
|
|
240
|
+
}
|
|
241
|
+
++i;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
|
|
248
|
+
getColumnsState: function () {
|
|
249
|
+
var me = this,
|
|
250
|
+
columns = [],
|
|
251
|
+
state;
|
|
252
|
+
|
|
253
|
+
me.items.each(function (col) {
|
|
254
|
+
state = col.getColumnState && col.getColumnState();
|
|
255
|
+
if (state) {
|
|
256
|
+
columns.push(state);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
return columns;
|
|
261
|
+
},
|
|
262
|
+
|
|
263
|
+
// Invalidate column cache on add
|
|
264
|
+
// We cannot refresh the View on every add because this method is called
|
|
265
|
+
// when the HeaderDropZone moves Headers around, that will also refresh the view
|
|
266
|
+
onAdd: function(c) {
|
|
267
|
+
var me = this;
|
|
268
|
+
if (!c.headerId) {
|
|
269
|
+
c.headerId = c.initialConfig.id || Ext.id(null, 'header-');
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (!c.stateId) {
|
|
273
|
+
// This was the headerId generated in 4.0, so to preserve saved state, we now
|
|
274
|
+
// assign a default stateId in that same manner. The stateId's of a column are
|
|
275
|
+
// not global at the stateProvider, but are local to the grid state data. The
|
|
276
|
+
// headerId should still follow our standard naming convention.
|
|
277
|
+
c.stateId = c.initialConfig.id || ('h' + (++me.headerCounter));
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
//<debug warn>
|
|
281
|
+
if (Ext.global.console && Ext.global.console.warn) {
|
|
282
|
+
if (!me._usedIDs) {
|
|
283
|
+
me._usedIDs = {};
|
|
284
|
+
}
|
|
285
|
+
if (me._usedIDs[c.headerId]) {
|
|
286
|
+
Ext.global.console.warn(this.$className, 'attempted to reuse an existing id', c.headerId);
|
|
287
|
+
}
|
|
288
|
+
me._usedIDs[c.headerId] = true;
|
|
289
|
+
}
|
|
290
|
+
//</debug>
|
|
291
|
+
me.callParent(arguments);
|
|
292
|
+
me.purgeCache();
|
|
293
|
+
},
|
|
294
|
+
|
|
295
|
+
// Invalidate column cache on remove
|
|
296
|
+
// We cannot refresh the View on every remove because this method is called
|
|
297
|
+
// when the HeaderDropZone moves Headers around, that will also refresh the view
|
|
298
|
+
onRemove: function(c) {
|
|
299
|
+
var me = this;
|
|
300
|
+
me.callParent(arguments);
|
|
301
|
+
me.purgeCache();
|
|
302
|
+
},
|
|
303
|
+
|
|
304
|
+
// @private
|
|
305
|
+
applyDefaults: function(config) {
|
|
306
|
+
var ret;
|
|
307
|
+
/*
|
|
308
|
+
* Ensure header.Container defaults don't get applied to a RowNumberer
|
|
309
|
+
* if an xtype is supplied. This isn't an ideal solution however it's
|
|
310
|
+
* much more likely that a RowNumberer with no options will be created,
|
|
311
|
+
* wanting to use the defaults specified on the class as opposed to
|
|
312
|
+
* those setup on the Container.
|
|
313
|
+
*/
|
|
314
|
+
if (config && !config.isComponent && config.xtype == 'rownumberer') {
|
|
315
|
+
ret = config;
|
|
316
|
+
} else {
|
|
317
|
+
ret = this.callParent(arguments);
|
|
318
|
+
if (!('width' in ret) && !ret.flex) {
|
|
319
|
+
ret.width = this.defaultWidth;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return ret;
|
|
323
|
+
},
|
|
324
|
+
|
|
325
|
+
afterRender: function() {
|
|
326
|
+
this.callParent();
|
|
327
|
+
this.setSortState();
|
|
328
|
+
|
|
329
|
+
},
|
|
330
|
+
|
|
331
|
+
setSortState: function(){
|
|
332
|
+
var store = this.up('[store]').store,
|
|
333
|
+
sorters = store.sorters,
|
|
334
|
+
first = sorters.first(),
|
|
335
|
+
hd;
|
|
336
|
+
|
|
337
|
+
if (first) {
|
|
338
|
+
hd = this.down('gridcolumn[dataIndex=' + first.property +']');
|
|
339
|
+
if (hd) {
|
|
340
|
+
hd.setSortState(first.direction, false, true);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
},
|
|
344
|
+
|
|
345
|
+
getHeaderMenu: function(){
|
|
346
|
+
var menu = this.getMenu(),
|
|
347
|
+
item;
|
|
348
|
+
|
|
349
|
+
if (menu) {
|
|
350
|
+
item = menu.child('#columnItem');
|
|
351
|
+
if (item) {
|
|
352
|
+
return item.menu;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return null;
|
|
356
|
+
},
|
|
357
|
+
|
|
358
|
+
onHeaderVisibilityChange: function(header, visible){
|
|
359
|
+
var me = this,
|
|
360
|
+
menu = me.getHeaderMenu(),
|
|
361
|
+
item;
|
|
362
|
+
|
|
363
|
+
if (menu) {
|
|
364
|
+
// If the header was hidden programmatically, sync the Menu state
|
|
365
|
+
item = me.getMenuItemForHeader(menu, header);
|
|
366
|
+
if (item) {
|
|
367
|
+
item.setChecked(visible, true);
|
|
368
|
+
}
|
|
369
|
+
// delay this since the headers may fire a number of times if we're hiding/showing groups
|
|
370
|
+
me.menuTask.delay(50);
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* @private
|
|
376
|
+
* Gets all "leaf" menu nodes and returns the checked count for those leaves.
|
|
377
|
+
* Only includes columns that are hideable via the menu
|
|
378
|
+
*/
|
|
379
|
+
getLeafMenuItems: function() {
|
|
380
|
+
var me = this,
|
|
381
|
+
columns = me.getGridColumns(),
|
|
382
|
+
items = [],
|
|
383
|
+
i = 0,
|
|
384
|
+
count = 0,
|
|
385
|
+
len = columns.length,
|
|
386
|
+
menu = me.getMenu(),
|
|
387
|
+
item;
|
|
388
|
+
|
|
389
|
+
for (; i < len; ++i) {
|
|
390
|
+
item = columns[i];
|
|
391
|
+
if (item.hideable) {
|
|
392
|
+
item = me.getMenuItemForHeader(menu, item);
|
|
393
|
+
if (item) {
|
|
394
|
+
items.push(item);
|
|
395
|
+
if (item.checked) {
|
|
396
|
+
++count;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
return {
|
|
403
|
+
items: items,
|
|
404
|
+
checkedCount: count
|
|
405
|
+
};
|
|
406
|
+
},
|
|
407
|
+
|
|
408
|
+
updateMenuDisabledState: function(){
|
|
409
|
+
var me = this,
|
|
410
|
+
result = me.getLeafMenuItems(),
|
|
411
|
+
total = result.checkedCount,
|
|
412
|
+
items = result.items,
|
|
413
|
+
len = items.length,
|
|
414
|
+
i = 0,
|
|
415
|
+
rootItem = me.getMenu().child('#columnItem');
|
|
416
|
+
|
|
417
|
+
if (total <= 1) {
|
|
418
|
+
// only one column visible, prevent hiding of the remaining item
|
|
419
|
+
me.disableMenuItems(rootItem, Ext.ComponentQuery.query('[checked=true]', items)[0]);
|
|
420
|
+
} else {
|
|
421
|
+
// at least 2 visible, set the state appropriately
|
|
422
|
+
for (; i < len; ++i) {
|
|
423
|
+
me.setMenuItemState(total, rootItem, items[i]);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
|
|
428
|
+
disableMenuItems: function(rootItem, item){
|
|
429
|
+
while (item && item != rootItem) {
|
|
430
|
+
item.disableCheckChange();
|
|
431
|
+
item = item.parentMenu.ownerItem;
|
|
432
|
+
}
|
|
433
|
+
},
|
|
434
|
+
|
|
435
|
+
setMenuItemState: function(total, rootItem, item){
|
|
436
|
+
var parentMenu,
|
|
437
|
+
checkedChildren;
|
|
438
|
+
|
|
439
|
+
while (item && item != rootItem) {
|
|
440
|
+
parentMenu = item.parentMenu;
|
|
441
|
+
checkedChildren = item.parentMenu.query('[checked=true]:not([menu])').length;
|
|
442
|
+
item.enableCheckChange();
|
|
443
|
+
item = parentMenu.ownerItem;
|
|
444
|
+
if (checkedChildren === total) {
|
|
445
|
+
// contains all the checked children, jump out the item and all parents
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// while we're not at the top, disable from the current item up
|
|
451
|
+
this.disableMenuItems(rootItem, item);
|
|
452
|
+
},
|
|
453
|
+
|
|
454
|
+
getMenuItemForHeader: function(menu, header){
|
|
455
|
+
return header ? menu.down('menucheckitem[headerId=' + header.id + ']') : null;
|
|
456
|
+
},
|
|
457
|
+
|
|
458
|
+
onHeaderShow: function(header) {
|
|
459
|
+
// Pass up to the GridSection
|
|
460
|
+
var me = this,
|
|
461
|
+
gridSection = me.ownerCt;
|
|
462
|
+
|
|
463
|
+
me.onHeaderVisibilityChange(header, true);
|
|
464
|
+
|
|
465
|
+
// Only update the grid UI when we are notified about base level Header shows;
|
|
466
|
+
// Group header shows just cause a layout of the HeaderContainer
|
|
467
|
+
if (!header.isGroupHeader) {
|
|
468
|
+
if (me.view) {
|
|
469
|
+
me.view.onHeaderShow(me, header, true);
|
|
470
|
+
}
|
|
471
|
+
if (gridSection) {
|
|
472
|
+
gridSection.onHeaderShow(me, header);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
me.fireEvent('columnshow', me, header);
|
|
476
|
+
me.updateLayout();
|
|
477
|
+
},
|
|
478
|
+
|
|
479
|
+
onHeaderHide: function(header) {
|
|
480
|
+
// Pass up to the GridSection
|
|
481
|
+
var me = this,
|
|
482
|
+
gridSection = me.ownerCt;
|
|
483
|
+
|
|
484
|
+
me.onHeaderVisibilityChange(header, false);
|
|
485
|
+
|
|
486
|
+
// Only update the UI when we are notified about base level Header hides;
|
|
487
|
+
if (!header.isGroupHeader) {
|
|
488
|
+
if (me.view) {
|
|
489
|
+
me.view.ignoreTemplate = true;
|
|
490
|
+
me.view.onHeaderHide(me, header, true);
|
|
491
|
+
me.view.ignoreTemplate = false;
|
|
492
|
+
}
|
|
493
|
+
if (gridSection) {
|
|
494
|
+
gridSection.onHeaderHide(me, header);
|
|
495
|
+
}
|
|
496
|
+
me.updateLayout();
|
|
497
|
+
}
|
|
498
|
+
me.fireEvent('columnhide', me, header);
|
|
499
|
+
},
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Temporarily lock the headerCt. This makes it so that clicking on headers
|
|
503
|
+
* don't trigger actions like sorting or opening of the header menu. This is
|
|
504
|
+
* done because extraneous events may be fired on the headers after interacting
|
|
505
|
+
* with a drag drop operation.
|
|
506
|
+
* @private
|
|
507
|
+
*/
|
|
508
|
+
tempLock: function() {
|
|
509
|
+
this.ddLock = true;
|
|
510
|
+
Ext.Function.defer(function() {
|
|
511
|
+
this.ddLock = false;
|
|
512
|
+
}, 200, this);
|
|
513
|
+
},
|
|
514
|
+
|
|
515
|
+
onHeaderResize: function(header, w, suppressFocus) {
|
|
516
|
+
var me = this,
|
|
517
|
+
view = me.view,
|
|
518
|
+
gridSection = me.ownerCt,
|
|
519
|
+
viewEl;
|
|
520
|
+
|
|
521
|
+
// Do not react to header sizing during initial Panel layout when there is no view content to size.
|
|
522
|
+
if (view && (viewEl = view.el) && viewEl.dom.firstChild) {
|
|
523
|
+
me.tempLock();
|
|
524
|
+
view.onHeaderResize(header, w, suppressFocus);
|
|
525
|
+
if (gridSection) {
|
|
526
|
+
gridSection.onHeaderResize(me, header, w);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
me.fireEvent('columnresize', this, header, w);
|
|
530
|
+
},
|
|
531
|
+
|
|
532
|
+
onHeaderClick: function(header, e, t) {
|
|
533
|
+
header.fireEvent('headerclick', this, header, e, t);
|
|
534
|
+
this.fireEvent("headerclick", this, header, e, t);
|
|
535
|
+
},
|
|
536
|
+
|
|
537
|
+
onHeaderTriggerClick: function(header, e, t) {
|
|
538
|
+
// generate and cache menu, provide ability to cancel/etc
|
|
539
|
+
var me = this;
|
|
540
|
+
if (header.fireEvent('headertriggerclick', me, header, e, t) !== false && me.fireEvent("headertriggerclick", me, header, e, t) !== false) {
|
|
541
|
+
me.showMenuBy(t, header);
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
|
|
545
|
+
showMenuBy: function(t, header) {
|
|
546
|
+
var menu = this.getMenu(),
|
|
547
|
+
ascItem = menu.down('#ascItem'),
|
|
548
|
+
descItem = menu.down('#descItem'),
|
|
549
|
+
sortableMth;
|
|
550
|
+
|
|
551
|
+
menu.activeHeader = menu.ownerCt = header;
|
|
552
|
+
menu.setFloatParent(header);
|
|
553
|
+
// TODO: remove coupling to Header's titleContainer el
|
|
554
|
+
header.titleEl.addCls(this.headerOpenCls);
|
|
555
|
+
|
|
556
|
+
// enable or disable asc & desc menu items based on header being sortable
|
|
557
|
+
sortableMth = header.sortable ? 'enable' : 'disable';
|
|
558
|
+
if (ascItem) {
|
|
559
|
+
ascItem[sortableMth]();
|
|
560
|
+
}
|
|
561
|
+
if (descItem) {
|
|
562
|
+
descItem[sortableMth]();
|
|
563
|
+
}
|
|
564
|
+
menu.showBy(t);
|
|
565
|
+
},
|
|
566
|
+
|
|
567
|
+
// remove the trigger open class when the menu is hidden
|
|
568
|
+
onMenuDeactivate: function() {
|
|
569
|
+
var menu = this.getMenu();
|
|
570
|
+
// TODO: remove coupling to Header's titleContainer el
|
|
571
|
+
menu.activeHeader.titleEl.removeCls(this.headerOpenCls);
|
|
572
|
+
},
|
|
573
|
+
|
|
574
|
+
moveHeader: function(fromIdx, toIdx) {
|
|
575
|
+
|
|
576
|
+
// An automatically expiring lock
|
|
577
|
+
this.tempLock();
|
|
578
|
+
this.onHeaderMoved(this.move(fromIdx, toIdx), fromIdx, toIdx);
|
|
579
|
+
},
|
|
580
|
+
|
|
581
|
+
purgeCache: function() {
|
|
582
|
+
var me = this;
|
|
583
|
+
// Delete column cache - column order has changed.
|
|
584
|
+
delete me.gridDataColumns;
|
|
585
|
+
delete me.hideableColumns;
|
|
586
|
+
|
|
587
|
+
// Menu changes when columns are moved. It will be recreated.
|
|
588
|
+
if (me.menu) {
|
|
589
|
+
// Must hide before destroy so that trigger el is deactivated
|
|
590
|
+
me.menu.hide();
|
|
591
|
+
me.menu.destroy();
|
|
592
|
+
delete me.menu;
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
|
|
596
|
+
onHeaderMoved: function(header, colsToMove, fromIdx, toIdx) {
|
|
597
|
+
var me = this,
|
|
598
|
+
gridSection = me.ownerCt;
|
|
599
|
+
|
|
600
|
+
if (gridSection && gridSection.onHeaderMove) {
|
|
601
|
+
gridSection.onHeaderMove(me, header, colsToMove, fromIdx, toIdx);
|
|
602
|
+
}
|
|
603
|
+
me.fireEvent("columnmove", me, header, fromIdx, toIdx);
|
|
604
|
+
},
|
|
605
|
+
|
|
606
|
+
/**
|
|
607
|
+
* Gets the menu (and will create it if it doesn't already exist)
|
|
608
|
+
* @private
|
|
609
|
+
*/
|
|
610
|
+
getMenu: function() {
|
|
611
|
+
var me = this;
|
|
612
|
+
|
|
613
|
+
if (!me.menu) {
|
|
614
|
+
me.menu = new Ext.menu.Menu({
|
|
615
|
+
hideOnParentHide: false, // Persists when owning ColumnHeader is hidden
|
|
616
|
+
items: me.getMenuItems(),
|
|
617
|
+
listeners: {
|
|
618
|
+
deactivate: me.onMenuDeactivate,
|
|
619
|
+
scope: me
|
|
620
|
+
}
|
|
621
|
+
});
|
|
622
|
+
me.updateMenuDisabledState();
|
|
623
|
+
me.fireEvent('menucreate', me, me.menu);
|
|
624
|
+
}
|
|
625
|
+
return me.menu;
|
|
626
|
+
},
|
|
627
|
+
|
|
628
|
+
/**
|
|
629
|
+
* Returns an array of menu items to be placed into the shared menu
|
|
630
|
+
* across all headers in this header container.
|
|
631
|
+
* @returns {Array} menuItems
|
|
632
|
+
*/
|
|
633
|
+
getMenuItems: function() {
|
|
634
|
+
var me = this,
|
|
635
|
+
menuItems = [],
|
|
636
|
+
hideableColumns = me.enableColumnHide ? me.getColumnMenu(me) : null;
|
|
637
|
+
|
|
638
|
+
if (me.sortable) {
|
|
639
|
+
menuItems = [{
|
|
640
|
+
itemId: 'ascItem',
|
|
641
|
+
text: me.sortAscText,
|
|
642
|
+
cls: Ext.baseCSSPrefix + 'hmenu-sort-asc',
|
|
643
|
+
handler: me.onSortAscClick,
|
|
644
|
+
scope: me
|
|
645
|
+
},{
|
|
646
|
+
itemId: 'descItem',
|
|
647
|
+
text: me.sortDescText,
|
|
648
|
+
cls: Ext.baseCSSPrefix + 'hmenu-sort-desc',
|
|
649
|
+
handler: me.onSortDescClick,
|
|
650
|
+
scope: me
|
|
651
|
+
}];
|
|
652
|
+
}
|
|
653
|
+
if (hideableColumns && hideableColumns.length) {
|
|
654
|
+
menuItems.push('-', {
|
|
655
|
+
itemId: 'columnItem',
|
|
656
|
+
text: me.columnsText,
|
|
657
|
+
cls: Ext.baseCSSPrefix + 'cols-icon',
|
|
658
|
+
menu: hideableColumns
|
|
659
|
+
});
|
|
660
|
+
}
|
|
661
|
+
return menuItems;
|
|
662
|
+
},
|
|
663
|
+
|
|
664
|
+
// sort asc when clicking on item in menu
|
|
665
|
+
onSortAscClick: function() {
|
|
666
|
+
var menu = this.getMenu(),
|
|
667
|
+
activeHeader = menu.activeHeader;
|
|
668
|
+
|
|
669
|
+
activeHeader.setSortState('ASC');
|
|
670
|
+
},
|
|
671
|
+
|
|
672
|
+
// sort desc when clicking on item in menu
|
|
673
|
+
onSortDescClick: function() {
|
|
674
|
+
var menu = this.getMenu(),
|
|
675
|
+
activeHeader = menu.activeHeader;
|
|
676
|
+
|
|
677
|
+
activeHeader.setSortState('DESC');
|
|
678
|
+
},
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
* Returns an array of menu CheckItems corresponding to all immediate children
|
|
682
|
+
* of the passed Container which have been configured as hideable.
|
|
683
|
+
*/
|
|
684
|
+
getColumnMenu: function(headerContainer) {
|
|
685
|
+
var menuItems = [],
|
|
686
|
+
i = 0,
|
|
687
|
+
item,
|
|
688
|
+
items = headerContainer.query('>gridcolumn[hideable]'),
|
|
689
|
+
itemsLn = items.length,
|
|
690
|
+
menuItem;
|
|
691
|
+
|
|
692
|
+
for (; i < itemsLn; i++) {
|
|
693
|
+
item = items[i];
|
|
694
|
+
menuItem = new Ext.menu.CheckItem({
|
|
695
|
+
text: item.menuText || item.text,
|
|
696
|
+
checked: !item.hidden,
|
|
697
|
+
hideOnClick: false,
|
|
698
|
+
headerId: item.id,
|
|
699
|
+
menu: item.isGroupHeader ? this.getColumnMenu(item) : undefined,
|
|
700
|
+
checkHandler: this.onColumnCheckChange,
|
|
701
|
+
scope: this
|
|
702
|
+
});
|
|
703
|
+
menuItems.push(menuItem);
|
|
704
|
+
|
|
705
|
+
// If the header is ever destroyed - for instance by dragging out the last remaining sub header,
|
|
706
|
+
// then the associated menu item must also be destroyed.
|
|
707
|
+
item.on({
|
|
708
|
+
destroy: Ext.Function.bind(menuItem.destroy, menuItem)
|
|
709
|
+
});
|
|
710
|
+
}
|
|
711
|
+
return menuItems;
|
|
712
|
+
},
|
|
713
|
+
|
|
714
|
+
onColumnCheckChange: function(checkItem, checked) {
|
|
715
|
+
var header = Ext.getCmp(checkItem.headerId);
|
|
716
|
+
header[checked ? 'show' : 'hide']();
|
|
717
|
+
},
|
|
718
|
+
|
|
719
|
+
/**
|
|
720
|
+
* Get the columns used for generating a template via TableChunker.
|
|
721
|
+
* Returns an array of all columns and their
|
|
722
|
+
*
|
|
723
|
+
* - dataIndex
|
|
724
|
+
* - align
|
|
725
|
+
* - width
|
|
726
|
+
* - id
|
|
727
|
+
* - columnId - used to create an identifying CSS class
|
|
728
|
+
* - cls The tdCls configuration from the Column object
|
|
729
|
+
*
|
|
730
|
+
* @private
|
|
731
|
+
*/
|
|
732
|
+
getColumnsForTpl: function(flushCache) {
|
|
733
|
+
var cols = [],
|
|
734
|
+
headers = this.getGridColumns(flushCache),
|
|
735
|
+
headersLn = headers.length,
|
|
736
|
+
i = 0,
|
|
737
|
+
header,
|
|
738
|
+
width;
|
|
739
|
+
|
|
740
|
+
for (; i < headersLn; i++) {
|
|
741
|
+
header = headers[i];
|
|
742
|
+
|
|
743
|
+
if (header.hidden || header.up('headercontainer[hidden=true]')) {
|
|
744
|
+
width = 0;
|
|
745
|
+
} else {
|
|
746
|
+
width = header.getDesiredWidth();
|
|
747
|
+
}
|
|
748
|
+
cols.push({
|
|
749
|
+
dataIndex: header.dataIndex,
|
|
750
|
+
align: header.align,
|
|
751
|
+
width: width,
|
|
752
|
+
id: header.id,
|
|
753
|
+
cls: header.tdCls,
|
|
754
|
+
columnId: header.getItemId()
|
|
755
|
+
});
|
|
756
|
+
}
|
|
757
|
+
return cols;
|
|
758
|
+
},
|
|
759
|
+
|
|
760
|
+
/**
|
|
761
|
+
* Returns the number of <b>grid columns</b> descended from this HeaderContainer.
|
|
762
|
+
* Group Columns are HeaderContainers. All grid columns are returned, including hidden ones.
|
|
763
|
+
*/
|
|
764
|
+
getColumnCount: function() {
|
|
765
|
+
return this.getGridColumns().length;
|
|
766
|
+
},
|
|
767
|
+
|
|
768
|
+
/**
|
|
769
|
+
* Gets the full width of all columns that are visible.
|
|
770
|
+
*/
|
|
771
|
+
getFullWidth: function(flushCache) {
|
|
772
|
+
var fullWidth = 0,
|
|
773
|
+
headers = this.getVisibleGridColumns(flushCache),
|
|
774
|
+
headersLn = headers.length,
|
|
775
|
+
i = 0,
|
|
776
|
+
header;
|
|
777
|
+
|
|
778
|
+
|
|
779
|
+
for (; i < headersLn; i++) {
|
|
780
|
+
header = headers[i];
|
|
781
|
+
// use headers getDesiredWidth if its there
|
|
782
|
+
if (header.getDesiredWidth) {
|
|
783
|
+
fullWidth += header.getDesiredWidth() || 0;
|
|
784
|
+
// if injected a diff cmp use getWidth
|
|
785
|
+
} else {
|
|
786
|
+
fullWidth += header.getWidth();
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
return fullWidth;
|
|
790
|
+
},
|
|
791
|
+
|
|
792
|
+
// invoked internally by a header when not using triStateSorting
|
|
793
|
+
clearOtherSortStates: function(activeHeader) {
|
|
794
|
+
var headers = this.getGridColumns(),
|
|
795
|
+
headersLn = headers.length,
|
|
796
|
+
i = 0;
|
|
797
|
+
|
|
798
|
+
for (; i < headersLn; i++) {
|
|
799
|
+
if (headers[i] !== activeHeader) {
|
|
800
|
+
// unset the sortstate and dont recurse
|
|
801
|
+
headers[i].setSortState(null, true);
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
},
|
|
805
|
+
|
|
806
|
+
/**
|
|
807
|
+
* Returns an array of the **visible** columns in the grid. This goes down to the lowest column header
|
|
808
|
+
* level, and does not return **grouped** headers which contain sub headers.
|
|
809
|
+
* @param {Boolean} refreshCache If omitted, the cached set of columns will be returned. Pass true to refresh the cache.
|
|
810
|
+
* @returns {Array}
|
|
811
|
+
*/
|
|
812
|
+
getVisibleGridColumns: function(refreshCache) {
|
|
813
|
+
return Ext.ComponentQuery.query(':not([hidden])', this.getGridColumns(refreshCache));
|
|
814
|
+
},
|
|
815
|
+
|
|
816
|
+
/**
|
|
817
|
+
* Returns an array of all columns which map to Store fields. This goes down to the lowest column header
|
|
818
|
+
* level, and does not return **grouped** headers which contain sub headers.
|
|
819
|
+
* @param {Boolean} refreshCache If omitted, the cached set of columns will be returned. Pass true to refresh the cache.
|
|
820
|
+
* @returns {Array}
|
|
821
|
+
*/
|
|
822
|
+
getGridColumns: function(refreshCache) {
|
|
823
|
+
var me = this,
|
|
824
|
+
result = refreshCache ? null : me.gridDataColumns;
|
|
825
|
+
|
|
826
|
+
// Not already got the column cache, so collect the base columns
|
|
827
|
+
if (!result) {
|
|
828
|
+
me.gridDataColumns = result = [];
|
|
829
|
+
me.cascade(function(c) {
|
|
830
|
+
if ((c !== me) && !c.isGroupHeader) {
|
|
831
|
+
result.push(c);
|
|
832
|
+
}
|
|
833
|
+
});
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
return result;
|
|
837
|
+
},
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* @private
|
|
841
|
+
* For use by column headers in determining whether there are any hideable columns when deciding whether or not
|
|
842
|
+
* the header menu should be disabled.
|
|
843
|
+
*/
|
|
844
|
+
getHideableColumns: function(refreshCache) {
|
|
845
|
+
var me = this,
|
|
846
|
+
result = refreshCache ? null : me.hideableColumns;
|
|
847
|
+
|
|
848
|
+
if (!result) {
|
|
849
|
+
result = me.hideableColumns = me.query('[hideable]');
|
|
850
|
+
}
|
|
851
|
+
return result;
|
|
852
|
+
},
|
|
853
|
+
|
|
854
|
+
/**
|
|
855
|
+
* Returns the index of a leaf level header regardless of what the nesting
|
|
856
|
+
* structure is.
|
|
857
|
+
*
|
|
858
|
+
* If a group header is passed, the index of the first leaf level heder within it is returned.
|
|
859
|
+
*
|
|
860
|
+
* @param {Ext.grid.column.Column} header The header to find the index of
|
|
861
|
+
* @return {Number} The index of the specified column header
|
|
862
|
+
*/
|
|
863
|
+
getHeaderIndex: function(header) {
|
|
864
|
+
// If we are being asked the index of a group header, find the first leaf header node, and return the index of that
|
|
865
|
+
if (header.isGroupHeader) {
|
|
866
|
+
header = header.down(':not([isgroupHeader])');
|
|
867
|
+
}
|
|
868
|
+
return Ext.Array.indexOf(this.getGridColumns(), header);
|
|
869
|
+
},
|
|
870
|
+
|
|
871
|
+
/**
|
|
872
|
+
* Get a leaf level header by index regardless of what the nesting
|
|
873
|
+
* structure is.
|
|
874
|
+
* @param {Number} The column index for which to retrieve the column.
|
|
875
|
+
*/
|
|
876
|
+
getHeaderAtIndex: function(index) {
|
|
877
|
+
var columns = this.getGridColumns();
|
|
878
|
+
return columns.length ? columns[index] : null;
|
|
879
|
+
},
|
|
880
|
+
|
|
881
|
+
/**
|
|
882
|
+
* When passed a column index, returns the closet *visible* column to that. If the column at the passed index is visible,
|
|
883
|
+
* that is returned. If it is hidden, either the next visible, or the previous visible column is returned.
|
|
884
|
+
* @param {Number} index Position at which to find the closest visible column.
|
|
885
|
+
*/
|
|
886
|
+
getVisibleHeaderClosestToIndex: function(index) {
|
|
887
|
+
var result = this.getHeaderAtIndex(index);
|
|
888
|
+
if (result && result.hidden) {
|
|
889
|
+
result = result.next(':not([hidden])') || result.next(':not([hidden])');
|
|
890
|
+
}
|
|
891
|
+
return result;
|
|
892
|
+
},
|
|
893
|
+
|
|
894
|
+
/**
|
|
895
|
+
* Maps the record data to base it on the header id's.
|
|
896
|
+
* This correlates to the markup/template generated by
|
|
897
|
+
* TableChunker.
|
|
898
|
+
*/
|
|
899
|
+
prepareData: function(data, rowIdx, record, view, panel) {
|
|
900
|
+
var me = this,
|
|
901
|
+
obj = {},
|
|
902
|
+
headers = me.gridDataColumns || me.getGridColumns(),
|
|
903
|
+
headersLn = headers.length,
|
|
904
|
+
colIdx = 0,
|
|
905
|
+
header,
|
|
906
|
+
headerId,
|
|
907
|
+
renderer,
|
|
908
|
+
value,
|
|
909
|
+
metaData,
|
|
910
|
+
store = panel.store;
|
|
911
|
+
|
|
912
|
+
for (; colIdx < headersLn; colIdx++) {
|
|
913
|
+
metaData = {
|
|
914
|
+
tdCls: '',
|
|
915
|
+
style: ''
|
|
916
|
+
};
|
|
917
|
+
header = headers[colIdx];
|
|
918
|
+
headerId = header.id;
|
|
919
|
+
renderer = header.renderer;
|
|
920
|
+
value = data[header.dataIndex];
|
|
921
|
+
|
|
922
|
+
if (typeof renderer == "function") {
|
|
923
|
+
value = renderer.call(
|
|
924
|
+
header.scope || me.ownerCt,
|
|
925
|
+
value,
|
|
926
|
+
// metadata per cell passing an obj by reference so that
|
|
927
|
+
// it can be manipulated inside the renderer
|
|
928
|
+
metaData,
|
|
929
|
+
record,
|
|
930
|
+
rowIdx,
|
|
931
|
+
colIdx,
|
|
932
|
+
store,
|
|
933
|
+
view
|
|
934
|
+
);
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
// <debug>
|
|
938
|
+
if (metaData.css) {
|
|
939
|
+
// This warning attribute is used by the compat layer
|
|
940
|
+
obj.cssWarning = true;
|
|
941
|
+
metaData.tdCls = metaData.css;
|
|
942
|
+
delete metaData.css;
|
|
943
|
+
}
|
|
944
|
+
// </debug>
|
|
945
|
+
if (me.markDirty) {
|
|
946
|
+
obj[headerId + '-modified'] = record.isModified(header.dataIndex) ? Ext.baseCSSPrefix + 'grid-dirty-cell' : '';
|
|
947
|
+
}
|
|
948
|
+
obj[headerId+'-tdCls'] = metaData.tdCls;
|
|
949
|
+
obj[headerId+'-tdAttr'] = metaData.tdAttr;
|
|
950
|
+
obj[headerId+'-style'] = metaData.style;
|
|
951
|
+
if (typeof value === 'undefined' || value === null || value === '') {
|
|
952
|
+
value = header.emptyCellText;
|
|
953
|
+
}
|
|
954
|
+
obj[headerId] = value;
|
|
955
|
+
}
|
|
956
|
+
return obj;
|
|
957
|
+
},
|
|
958
|
+
|
|
959
|
+
expandToFit: function(header) {
|
|
960
|
+
var view = this.view;
|
|
961
|
+
if (view) {
|
|
962
|
+
view.expandToFit(header);
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
});
|