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,393 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Aaron Conran
|
|
3
|
+
* @docauthor Ed Spencer
|
|
4
|
+
*
|
|
5
|
+
* Grids are an excellent way of showing large amounts of tabular data on the client side. Essentially a supercharged
|
|
6
|
+
* `<table>`, GridPanel makes it easy to fetch, sort and filter large amounts of data.
|
|
7
|
+
*
|
|
8
|
+
* Grids are composed of two main pieces - a {@link Ext.data.Store Store} full of data and a set of columns to render.
|
|
9
|
+
*
|
|
10
|
+
* ## Basic GridPanel
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* Ext.create('Ext.data.Store', {
|
|
14
|
+
* storeId:'simpsonsStore',
|
|
15
|
+
* fields:['name', 'email', 'phone'],
|
|
16
|
+
* data:{'items':[
|
|
17
|
+
* { 'name': 'Lisa', "email":"lisa@simpsons.com", "phone":"555-111-1224" },
|
|
18
|
+
* { 'name': 'Bart', "email":"bart@simpsons.com", "phone":"555-222-1234" },
|
|
19
|
+
* { 'name': 'Homer', "email":"home@simpsons.com", "phone":"555-222-1244" },
|
|
20
|
+
* { 'name': 'Marge', "email":"marge@simpsons.com", "phone":"555-222-1254" }
|
|
21
|
+
* ]},
|
|
22
|
+
* proxy: {
|
|
23
|
+
* type: 'memory',
|
|
24
|
+
* reader: {
|
|
25
|
+
* type: 'json',
|
|
26
|
+
* root: 'items'
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
* });
|
|
30
|
+
*
|
|
31
|
+
* Ext.create('Ext.grid.Panel', {
|
|
32
|
+
* title: 'Simpsons',
|
|
33
|
+
* store: Ext.data.StoreManager.lookup('simpsonsStore'),
|
|
34
|
+
* columns: [
|
|
35
|
+
* { header: 'Name', dataIndex: 'name' },
|
|
36
|
+
* { header: 'Email', dataIndex: 'email', flex: 1 },
|
|
37
|
+
* { header: 'Phone', dataIndex: 'phone' }
|
|
38
|
+
* ],
|
|
39
|
+
* height: 200,
|
|
40
|
+
* width: 400,
|
|
41
|
+
* renderTo: Ext.getBody()
|
|
42
|
+
* });
|
|
43
|
+
*
|
|
44
|
+
* The code above produces a simple grid with three columns. We specified a Store which will load JSON data inline.
|
|
45
|
+
* In most apps we would be placing the grid inside another container and wouldn't need to use the
|
|
46
|
+
* {@link #height}, {@link #width} and {@link #renderTo} configurations but they are included here to make it easy to get
|
|
47
|
+
* up and running.
|
|
48
|
+
*
|
|
49
|
+
* The grid we created above will contain a header bar with a title ('Simpsons'), a row of column headers directly underneath
|
|
50
|
+
* and finally the grid rows under the headers.
|
|
51
|
+
*
|
|
52
|
+
* ## Configuring columns
|
|
53
|
+
*
|
|
54
|
+
* By default, each column is sortable and will toggle between ASC and DESC sorting when you click on its header. Each
|
|
55
|
+
* column header is also reorderable by default, and each gains a drop-down menu with options to hide and show columns.
|
|
56
|
+
* It's easy to configure each column - here we use the same example as above and just modify the columns config:
|
|
57
|
+
*
|
|
58
|
+
* columns: [
|
|
59
|
+
* {
|
|
60
|
+
* header: 'Name',
|
|
61
|
+
* dataIndex: 'name',
|
|
62
|
+
* sortable: false,
|
|
63
|
+
* hideable: false,
|
|
64
|
+
* flex: 1
|
|
65
|
+
* },
|
|
66
|
+
* {
|
|
67
|
+
* header: 'Email',
|
|
68
|
+
* dataIndex: 'email',
|
|
69
|
+
* hidden: true
|
|
70
|
+
* },
|
|
71
|
+
* {
|
|
72
|
+
* header: 'Phone',
|
|
73
|
+
* dataIndex: 'phone',
|
|
74
|
+
* width: 100
|
|
75
|
+
* }
|
|
76
|
+
* ]
|
|
77
|
+
*
|
|
78
|
+
* We turned off sorting and hiding on the 'Name' column so clicking its header now has no effect. We also made the Email
|
|
79
|
+
* column hidden by default (it can be shown again by using the menu on any other column). We also set the Phone column to
|
|
80
|
+
* a fixed with of 100px and flexed the Name column, which means it takes up all remaining width after the other columns
|
|
81
|
+
* have been accounted for. See the {@link Ext.grid.column.Column column docs} for more details.
|
|
82
|
+
*
|
|
83
|
+
* ## Renderers
|
|
84
|
+
*
|
|
85
|
+
* As well as customizing columns, it's easy to alter the rendering of individual cells using renderers. A renderer is
|
|
86
|
+
* tied to a particular column and is passed the value that would be rendered into each cell in that column. For example,
|
|
87
|
+
* we could define a renderer function for the email column to turn each email address into a mailto link:
|
|
88
|
+
*
|
|
89
|
+
* columns: [
|
|
90
|
+
* {
|
|
91
|
+
* header: 'Email',
|
|
92
|
+
* dataIndex: 'email',
|
|
93
|
+
* renderer: function(value) {
|
|
94
|
+
* return Ext.String.format('<a href="mailto:{0}">{1}</a>', value, value);
|
|
95
|
+
* }
|
|
96
|
+
* }
|
|
97
|
+
* ]
|
|
98
|
+
*
|
|
99
|
+
* See the {@link Ext.grid.column.Column column docs} for more information on renderers.
|
|
100
|
+
*
|
|
101
|
+
* ## Selection Models
|
|
102
|
+
*
|
|
103
|
+
* Sometimes all you want is to render data onto the screen for viewing, but usually it's necessary to interact with or
|
|
104
|
+
* update that data. Grids use a concept called a Selection Model, which is simply a mechanism for selecting some part of
|
|
105
|
+
* the data in the grid. The two main types of Selection Model are RowSelectionModel, where entire rows are selected, and
|
|
106
|
+
* CellSelectionModel, where individual cells are selected.
|
|
107
|
+
*
|
|
108
|
+
* Grids use a Row Selection Model by default, but this is easy to customise like so:
|
|
109
|
+
*
|
|
110
|
+
* Ext.create('Ext.grid.Panel', {
|
|
111
|
+
* selType: 'cellmodel',
|
|
112
|
+
* store: ...
|
|
113
|
+
* });
|
|
114
|
+
*
|
|
115
|
+
* Specifying the `cellmodel` changes a couple of things. Firstly, clicking on a cell now
|
|
116
|
+
* selects just that cell (using a {@link Ext.selection.RowModel rowmodel} will select the entire row), and secondly the
|
|
117
|
+
* keyboard navigation will walk from cell to cell instead of row to row. Cell-based selection models are usually used in
|
|
118
|
+
* conjunction with editing.
|
|
119
|
+
*
|
|
120
|
+
* ## Editing
|
|
121
|
+
*
|
|
122
|
+
* Grid has built-in support for in-line editing. There are two chief editing modes - cell editing and row editing. Cell
|
|
123
|
+
* editing is easy to add to your existing column setup - here we'll just modify the example above to include an editor
|
|
124
|
+
* on both the name and the email columns:
|
|
125
|
+
*
|
|
126
|
+
* Ext.create('Ext.grid.Panel', {
|
|
127
|
+
* title: 'Simpsons',
|
|
128
|
+
* store: Ext.data.StoreManager.lookup('simpsonsStore'),
|
|
129
|
+
* columns: [
|
|
130
|
+
* { header: 'Name', dataIndex: 'name', field: 'textfield' },
|
|
131
|
+
* { header: 'Email', dataIndex: 'email', flex: 1,
|
|
132
|
+
* field: {
|
|
133
|
+
* xtype: 'textfield',
|
|
134
|
+
* allowBlank: false
|
|
135
|
+
* }
|
|
136
|
+
* },
|
|
137
|
+
* { header: 'Phone', dataIndex: 'phone' }
|
|
138
|
+
* ],
|
|
139
|
+
* selType: 'cellmodel',
|
|
140
|
+
* plugins: [
|
|
141
|
+
* Ext.create('Ext.grid.plugin.CellEditing', {
|
|
142
|
+
* clicksToEdit: 1
|
|
143
|
+
* })
|
|
144
|
+
* ],
|
|
145
|
+
* height: 200,
|
|
146
|
+
* width: 400,
|
|
147
|
+
* renderTo: Ext.getBody()
|
|
148
|
+
* });
|
|
149
|
+
*
|
|
150
|
+
* This requires a little explanation. We're passing in {@link #store store} and {@link #columns columns} as normal, but
|
|
151
|
+
* this time we've also specified a {@link Ext.grid.column.Column#field field} on two of our columns. For the Name column
|
|
152
|
+
* we just want a default textfield to edit the value, so we specify 'textfield'. For the Email column we customized the
|
|
153
|
+
* editor slightly by passing allowBlank: false, which will provide inline validation.
|
|
154
|
+
*
|
|
155
|
+
* To support cell editing, we also specified that the grid should use the 'cellmodel' {@link #selType}, and created an
|
|
156
|
+
* instance of the {@link Ext.grid.plugin.CellEditing CellEditing plugin}, which we configured to activate each editor after a
|
|
157
|
+
* single click.
|
|
158
|
+
*
|
|
159
|
+
* ## Row Editing
|
|
160
|
+
*
|
|
161
|
+
* The other type of editing is row-based editing, using the RowEditor component. This enables you to edit an entire row
|
|
162
|
+
* at a time, rather than editing cell by cell. Row Editing works in exactly the same way as cell editing, all we need to
|
|
163
|
+
* do is change the plugin type to {@link Ext.grid.plugin.RowEditing}, and set the selType to 'rowmodel':
|
|
164
|
+
*
|
|
165
|
+
* Ext.create('Ext.grid.Panel', {
|
|
166
|
+
* title: 'Simpsons',
|
|
167
|
+
* store: Ext.data.StoreManager.lookup('simpsonsStore'),
|
|
168
|
+
* columns: [
|
|
169
|
+
* { header: 'Name', dataIndex: 'name', field: 'textfield' },
|
|
170
|
+
* { header: 'Email', dataIndex: 'email', flex:1,
|
|
171
|
+
* field: {
|
|
172
|
+
* xtype: 'textfield',
|
|
173
|
+
* allowBlank: false
|
|
174
|
+
* }
|
|
175
|
+
* },
|
|
176
|
+
* { header: 'Phone', dataIndex: 'phone' }
|
|
177
|
+
* ],
|
|
178
|
+
* selType: 'rowmodel',
|
|
179
|
+
* plugins: [
|
|
180
|
+
* Ext.create('Ext.grid.plugin.RowEditing', {
|
|
181
|
+
* clicksToEdit: 1
|
|
182
|
+
* })
|
|
183
|
+
* ],
|
|
184
|
+
* height: 200,
|
|
185
|
+
* width: 400,
|
|
186
|
+
* renderTo: Ext.getBody()
|
|
187
|
+
* });
|
|
188
|
+
*
|
|
189
|
+
* Again we passed some configuration to our {@link Ext.grid.plugin.RowEditing} plugin, and now when we click each row a row
|
|
190
|
+
* editor will appear and enable us to edit each of the columns we have specified an editor for.
|
|
191
|
+
*
|
|
192
|
+
* ## Sorting & Filtering
|
|
193
|
+
*
|
|
194
|
+
* Every grid is attached to a {@link Ext.data.Store Store}, which provides multi-sort and filtering capabilities. It's
|
|
195
|
+
* easy to set up a grid to be sorted from the start:
|
|
196
|
+
*
|
|
197
|
+
* var myGrid = Ext.create('Ext.grid.Panel', {
|
|
198
|
+
* store: {
|
|
199
|
+
* fields: ['name', 'email', 'phone'],
|
|
200
|
+
* sorters: ['name', 'phone']
|
|
201
|
+
* },
|
|
202
|
+
* columns: [
|
|
203
|
+
* { text: 'Name', dataIndex: 'name' },
|
|
204
|
+
* { text: 'Email', dataIndex: 'email' }
|
|
205
|
+
* ]
|
|
206
|
+
* });
|
|
207
|
+
*
|
|
208
|
+
* Sorting at run time is easily accomplished by simply clicking each column header. If you need to perform sorting on
|
|
209
|
+
* more than one field at run time it's easy to do so by adding new sorters to the store:
|
|
210
|
+
*
|
|
211
|
+
* myGrid.store.sort([
|
|
212
|
+
* { property: 'name', direction: 'ASC' },
|
|
213
|
+
* { property: 'email', direction: 'DESC' }
|
|
214
|
+
* ]);
|
|
215
|
+
*
|
|
216
|
+
* See {@link Ext.data.Store} for examples of filtering.
|
|
217
|
+
*
|
|
218
|
+
* ## Grouping
|
|
219
|
+
*
|
|
220
|
+
* Grid supports the grouping of rows by any field. For example if we had a set of employee records, we might want to
|
|
221
|
+
* group by the department that each employee works in. Here's how we might set that up:
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* var store = Ext.create('Ext.data.Store', {
|
|
225
|
+
* storeId:'employeeStore',
|
|
226
|
+
* fields:['name', 'seniority', 'department'],
|
|
227
|
+
* groupField: 'department',
|
|
228
|
+
* data: {'employees':[
|
|
229
|
+
* { "name": "Michael Scott", "seniority": 7, "department": "Management" },
|
|
230
|
+
* { "name": "Dwight Schrute", "seniority": 2, "department": "Sales" },
|
|
231
|
+
* { "name": "Jim Halpert", "seniority": 3, "department": "Sales" },
|
|
232
|
+
* { "name": "Kevin Malone", "seniority": 4, "department": "Accounting" },
|
|
233
|
+
* { "name": "Angela Martin", "seniority": 5, "department": "Accounting" }
|
|
234
|
+
* ]},
|
|
235
|
+
* proxy: {
|
|
236
|
+
* type: 'memory',
|
|
237
|
+
* reader: {
|
|
238
|
+
* type: 'json',
|
|
239
|
+
* root: 'employees'
|
|
240
|
+
* }
|
|
241
|
+
* }
|
|
242
|
+
* });
|
|
243
|
+
*
|
|
244
|
+
* Ext.create('Ext.grid.Panel', {
|
|
245
|
+
* title: 'Employees',
|
|
246
|
+
* store: Ext.data.StoreManager.lookup('employeeStore'),
|
|
247
|
+
* columns: [
|
|
248
|
+
* { header: 'Name', dataIndex: 'name' },
|
|
249
|
+
* { header: 'Seniority', dataIndex: 'seniority' }
|
|
250
|
+
* ],
|
|
251
|
+
* features: [{ftype:'grouping'}],
|
|
252
|
+
* width: 200,
|
|
253
|
+
* height: 275,
|
|
254
|
+
* renderTo: Ext.getBody()
|
|
255
|
+
* });
|
|
256
|
+
*
|
|
257
|
+
* ## Infinite Scrolling
|
|
258
|
+
*
|
|
259
|
+
* Grid supports infinite scrolling as an alternative to using a paging toolbar. Your users can scroll through thousands
|
|
260
|
+
* of records without the performance penalties of renderering all the records on screen at once. The grid should be bound
|
|
261
|
+
* to a *buffered* store with a pageSize specified.
|
|
262
|
+
*
|
|
263
|
+
* The number of rows rendered outside the visible area, and the buffering of pages of data from the remote server for
|
|
264
|
+
* immediate rendering upon scroll can be controlled by configuring the {@link Ext.grid.PagingScroller #verticalScroller}.
|
|
265
|
+
*
|
|
266
|
+
* You can tell it to create a larger table to provide more scrolling before a refresh is needed, and also to keep more pages
|
|
267
|
+
* of records in memory for faster refreshing when scrolling.
|
|
268
|
+
*
|
|
269
|
+
* var myStore = Ext.create('Ext.data.Store', {
|
|
270
|
+
* // ...
|
|
271
|
+
* buffered: true,
|
|
272
|
+
* pageSize: 100,
|
|
273
|
+
* // ...
|
|
274
|
+
* });
|
|
275
|
+
*
|
|
276
|
+
* var grid = Ext.create('Ext.grid.Panel', {
|
|
277
|
+
* // ...
|
|
278
|
+
* autoLoad: true,
|
|
279
|
+
* verticalScroller: {
|
|
280
|
+
* trailingBufferZone: 200, // Keep 200 records buffered in memory behind scroll
|
|
281
|
+
* leadingBufferZone: 5000 // Keep 5000 records buffered in memory ahead of scroll
|
|
282
|
+
* },
|
|
283
|
+
* // ...
|
|
284
|
+
* });
|
|
285
|
+
*
|
|
286
|
+
* ## Paging
|
|
287
|
+
*
|
|
288
|
+
* Grid supports paging through large sets of data via a PagingToolbar or PagingGridScroller (see the Infinite Scrolling section above).
|
|
289
|
+
* To leverage paging via a toolbar or scroller, you need to set a pageSize configuration on the Store.
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* var itemsPerPage = 2; // set the number of items you want per page
|
|
293
|
+
*
|
|
294
|
+
* var store = Ext.create('Ext.data.Store', {
|
|
295
|
+
* id:'simpsonsStore',
|
|
296
|
+
* autoLoad: false,
|
|
297
|
+
* fields:['name', 'email', 'phone'],
|
|
298
|
+
* pageSize: itemsPerPage, // items per page
|
|
299
|
+
* proxy: {
|
|
300
|
+
* type: 'ajax',
|
|
301
|
+
* url: 'pagingstore.js', // url that will load data with respect to start and limit params
|
|
302
|
+
* reader: {
|
|
303
|
+
* type: 'json',
|
|
304
|
+
* root: 'items',
|
|
305
|
+
* totalProperty: 'total'
|
|
306
|
+
* }
|
|
307
|
+
* }
|
|
308
|
+
* });
|
|
309
|
+
*
|
|
310
|
+
* // specify the page you want to load
|
|
311
|
+
* store.loadPage(1);
|
|
312
|
+
*
|
|
313
|
+
* Ext.create('Ext.grid.Panel', {
|
|
314
|
+
* title: 'Simpsons',
|
|
315
|
+
* store: store,
|
|
316
|
+
* columns: [
|
|
317
|
+
* {header: 'Name', dataIndex: 'name'},
|
|
318
|
+
* {header: 'Email', dataIndex: 'email', flex:1},
|
|
319
|
+
* {header: 'Phone', dataIndex: 'phone'}
|
|
320
|
+
* ],
|
|
321
|
+
* width: 400,
|
|
322
|
+
* height: 125,
|
|
323
|
+
* dockedItems: [{
|
|
324
|
+
* xtype: 'pagingtoolbar',
|
|
325
|
+
* store: store, // same store GridPanel is using
|
|
326
|
+
* dock: 'bottom',
|
|
327
|
+
* displayInfo: true
|
|
328
|
+
* }],
|
|
329
|
+
* renderTo: Ext.getBody()
|
|
330
|
+
* });
|
|
331
|
+
*
|
|
332
|
+
* ## State saving
|
|
333
|
+
*
|
|
334
|
+
* When configured {@link #stateful}, grids save their column state (order and width) encapsulated within the default
|
|
335
|
+
* Panel state of changed width and height and collapsed/expanded state.
|
|
336
|
+
*
|
|
337
|
+
* Each {@link @columns column} of the grid may be configured with a {@link Ext.grid.column.Column#stateId stateId} which
|
|
338
|
+
* identifies that column locally within the grid.
|
|
339
|
+
*/
|
|
340
|
+
Ext.define('Ext.grid.Panel', {
|
|
341
|
+
extend: 'Ext.panel.Table',
|
|
342
|
+
requires: ['Ext.grid.View'],
|
|
343
|
+
alias: ['widget.gridpanel', 'widget.grid'],
|
|
344
|
+
alternateClassName: ['Ext.list.ListView', 'Ext.ListView', 'Ext.grid.GridPanel'],
|
|
345
|
+
viewType: 'gridview',
|
|
346
|
+
|
|
347
|
+
lockable: false,
|
|
348
|
+
|
|
349
|
+
// Required for the Lockable Mixin. These are the configurations which will be copied to the
|
|
350
|
+
// normal and locked sub tablepanels
|
|
351
|
+
bothCfgCopy: [
|
|
352
|
+
'invalidateScrollerOnRefresh',
|
|
353
|
+
'hideHeaders',
|
|
354
|
+
'enableColumnHide',
|
|
355
|
+
'enableColumnMove',
|
|
356
|
+
'enableColumnResize',
|
|
357
|
+
'sortableColumns'
|
|
358
|
+
],
|
|
359
|
+
normalCfgCopy: [
|
|
360
|
+
'verticalScroller',
|
|
361
|
+
'verticalScrollDock',
|
|
362
|
+
'verticalScrollerType',
|
|
363
|
+
'scroll'
|
|
364
|
+
],
|
|
365
|
+
lockedCfgCopy: [],
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* @cfg {Boolean} rowLines False to remove row line styling
|
|
369
|
+
*/
|
|
370
|
+
rowLines: true
|
|
371
|
+
|
|
372
|
+
// Columns config is required in Grid
|
|
373
|
+
/**
|
|
374
|
+
* @cfg {Ext.grid.column.Column[]/Object} columns (required)
|
|
375
|
+
* @inheritdoc
|
|
376
|
+
*/
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* @event reconfigure
|
|
380
|
+
* Fires after a reconfigure.
|
|
381
|
+
* @param {Ext.grid.Panel} this
|
|
382
|
+
* @param {Ext.data.Store} store The store that was passed to the {@link #method-reconfigure} method
|
|
383
|
+
* @param {Object[]} columns The column configs that were passed to the {@link #method-reconfigure} method
|
|
384
|
+
*/
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* @method reconfigure
|
|
388
|
+
* Reconfigures the grid with a new store/columns. Either the store or the columns can be omitted if you don't wish
|
|
389
|
+
* to change them.
|
|
390
|
+
* @param {Ext.data.Store} store (Optional) The new store.
|
|
391
|
+
* @param {Object[]} columns (Optional) An array of column configs
|
|
392
|
+
*/
|
|
393
|
+
});
|
|
@@ -0,0 +1,731 @@
|
|
|
1
|
+
// Currently has the following issues:
|
|
2
|
+
// - Does not handle postEditValue
|
|
3
|
+
// - Fields without editors need to sync with their values in Store
|
|
4
|
+
// - starting to edit another record while already editing and dirty should probably prevent it
|
|
5
|
+
// - aggregating validation messages
|
|
6
|
+
// - tabIndex is not managed bc we leave elements in dom, and simply move via positioning
|
|
7
|
+
// - layout issues when changing sizes/width while hidden (layout bug)
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal utility class used to provide row editing functionality. For developers, they should use
|
|
11
|
+
* the RowEditing plugin to use this functionality with a grid.
|
|
12
|
+
*
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
Ext.define('Ext.grid.RowEditor', {
|
|
16
|
+
extend: 'Ext.form.Panel',
|
|
17
|
+
requires: [
|
|
18
|
+
'Ext.tip.ToolTip',
|
|
19
|
+
'Ext.util.HashMap',
|
|
20
|
+
'Ext.util.KeyNav'
|
|
21
|
+
],
|
|
22
|
+
|
|
23
|
+
//<locale>
|
|
24
|
+
saveBtnText : 'Update',
|
|
25
|
+
//</locale>
|
|
26
|
+
//<locale>
|
|
27
|
+
cancelBtnText: 'Cancel',
|
|
28
|
+
//</locale>
|
|
29
|
+
//<locale>
|
|
30
|
+
errorsText: 'Errors',
|
|
31
|
+
//</locale>
|
|
32
|
+
//<locale>
|
|
33
|
+
dirtyText: 'You need to commit or cancel your changes',
|
|
34
|
+
//</locale>
|
|
35
|
+
|
|
36
|
+
lastScrollLeft: 0,
|
|
37
|
+
lastScrollTop: 0,
|
|
38
|
+
|
|
39
|
+
border: false,
|
|
40
|
+
|
|
41
|
+
// Change the hideMode to offsets so that we get accurate measurements when
|
|
42
|
+
// the roweditor is hidden for laying out things like a TriggerField.
|
|
43
|
+
hideMode: 'offsets',
|
|
44
|
+
|
|
45
|
+
initComponent: function() {
|
|
46
|
+
var me = this,
|
|
47
|
+
form;
|
|
48
|
+
|
|
49
|
+
me.cls = Ext.baseCSSPrefix + 'grid-row-editor';
|
|
50
|
+
|
|
51
|
+
me.layout = {
|
|
52
|
+
type: 'hbox',
|
|
53
|
+
align: 'middle'
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Maintain field-to-column mapping
|
|
57
|
+
// It's easy to get a field from a column, but not vice versa
|
|
58
|
+
me.columns = new Ext.util.HashMap();
|
|
59
|
+
me.columns.getKey = function(columnHeader) {
|
|
60
|
+
var f;
|
|
61
|
+
if (columnHeader.getEditor) {
|
|
62
|
+
f = columnHeader.getEditor();
|
|
63
|
+
if (f) {
|
|
64
|
+
return f.id;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return columnHeader.id;
|
|
68
|
+
};
|
|
69
|
+
me.mon(me.columns, {
|
|
70
|
+
add: me.onFieldAdd,
|
|
71
|
+
remove: me.onFieldRemove,
|
|
72
|
+
replace: me.onFieldReplace,
|
|
73
|
+
scope: me
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
me.callParent(arguments);
|
|
77
|
+
|
|
78
|
+
if (me.fields) {
|
|
79
|
+
me.setField(me.fields);
|
|
80
|
+
delete me.fields;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
form = me.getForm();
|
|
84
|
+
form.trackResetOnLoad = true;
|
|
85
|
+
},
|
|
86
|
+
|
|
87
|
+
onFieldChange: function() {
|
|
88
|
+
var me = this,
|
|
89
|
+
form = me.getForm(),
|
|
90
|
+
valid = form.isValid();
|
|
91
|
+
if (me.errorSummary && me.isVisible()) {
|
|
92
|
+
me[valid ? 'hideToolTip' : 'showToolTip']();
|
|
93
|
+
}
|
|
94
|
+
if (me.floatingButtons) {
|
|
95
|
+
me.floatingButtons.child('#update').setDisabled(!valid);
|
|
96
|
+
}
|
|
97
|
+
me.isValid = valid;
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
afterRender: function() {
|
|
101
|
+
var me = this,
|
|
102
|
+
plugin = me.editingPlugin;
|
|
103
|
+
|
|
104
|
+
me.callParent(arguments);
|
|
105
|
+
me.mon(me.renderTo, 'scroll', me.onCtScroll, me, { buffer: 100 });
|
|
106
|
+
|
|
107
|
+
// Prevent from bubbling click events to the grid view
|
|
108
|
+
me.mon(me.el, {
|
|
109
|
+
click: Ext.emptyFn,
|
|
110
|
+
stopPropagation: true
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
me.el.swallowEvent([
|
|
114
|
+
'keypress',
|
|
115
|
+
'keydown'
|
|
116
|
+
]);
|
|
117
|
+
|
|
118
|
+
me.keyNav = new Ext.util.KeyNav(me.el, {
|
|
119
|
+
enter: plugin.completeEdit,
|
|
120
|
+
esc: plugin.onEscKey,
|
|
121
|
+
scope: plugin
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
me.mon(plugin.view, {
|
|
125
|
+
beforerefresh: me.onBeforeViewRefresh,
|
|
126
|
+
refresh: me.onViewRefresh,
|
|
127
|
+
scope: me
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
onBeforeViewRefresh: function(view) {
|
|
132
|
+
var me = this,
|
|
133
|
+
viewDom = view.el.dom;
|
|
134
|
+
|
|
135
|
+
if (me.el.dom.parentNode === viewDom) {
|
|
136
|
+
viewDom.removeChild(me.el.dom);
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
onViewRefresh: function(view) {
|
|
141
|
+
var me = this,
|
|
142
|
+
viewDom = view.el.dom,
|
|
143
|
+
context = me.context,
|
|
144
|
+
idx;
|
|
145
|
+
|
|
146
|
+
viewDom.appendChild(me.el.dom);
|
|
147
|
+
|
|
148
|
+
// Recover our row node after a view refresh
|
|
149
|
+
if (context && (idx = context.store.indexOf(context.record)) >= 0) {
|
|
150
|
+
context.row = view.getNode(idx);
|
|
151
|
+
me.reposition();
|
|
152
|
+
if (me.tooltip && me.tooltip.isVisible()) {
|
|
153
|
+
me.tooltip.setTarget(context.row);
|
|
154
|
+
}
|
|
155
|
+
} else {
|
|
156
|
+
me.editingPlugin.cancelEdit();
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
onCtScroll: function(e, target) {
|
|
161
|
+
var me = this,
|
|
162
|
+
scrollTop = target.scrollTop,
|
|
163
|
+
scrollLeft = target.scrollLeft;
|
|
164
|
+
|
|
165
|
+
if (scrollTop !== me.lastScrollTop) {
|
|
166
|
+
me.lastScrollTop = scrollTop;
|
|
167
|
+
if ((me.tooltip && me.tooltip.isVisible()) || me.hiddenTip) {
|
|
168
|
+
me.repositionTip();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (scrollLeft !== me.lastScrollLeft) {
|
|
172
|
+
me.lastScrollLeft = scrollLeft;
|
|
173
|
+
me.reposition();
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
|
|
177
|
+
onColumnAdd: function(column) {
|
|
178
|
+
if (!column.isGroupHeader) {
|
|
179
|
+
this.setField(column);
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
onColumnRemove: function(column) {
|
|
184
|
+
this.columns.remove(column);
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
onColumnResize: function(column, width) {
|
|
188
|
+
if (!column.isGroupHeader) {
|
|
189
|
+
column.getEditor().setWidth(width - 2);
|
|
190
|
+
if (this.isVisible()) {
|
|
191
|
+
this.reposition();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
onColumnHide: function(column) {
|
|
197
|
+
if (!column.isGroupHeader) {
|
|
198
|
+
column.getEditor().hide();
|
|
199
|
+
if (this.isVisible()) {
|
|
200
|
+
this.reposition();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
onColumnShow: function(column) {
|
|
206
|
+
var field = column.getEditor();
|
|
207
|
+
field.setWidth(column.getWidth() - 2).show();
|
|
208
|
+
if (this.isVisible()) {
|
|
209
|
+
this.reposition();
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
|
|
213
|
+
onColumnMove: function(column, fromIdx, toIdx) {
|
|
214
|
+
if (!column.isGroupHeader) {
|
|
215
|
+
var field = column.getEditor();
|
|
216
|
+
if (this.items.indexOf(field) != toIdx) {
|
|
217
|
+
this.move(fromIdx, toIdx);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
onFieldAdd: function(map, fieldId, column) {
|
|
223
|
+
var me = this,
|
|
224
|
+
colIdx,
|
|
225
|
+
field;
|
|
226
|
+
|
|
227
|
+
if (!column.isGroupHeader) {
|
|
228
|
+
colIdx = me.editingPlugin.grid.headerCt.getHeaderIndex(column);
|
|
229
|
+
field = column.getEditor({ xtype: 'displayfield' });
|
|
230
|
+
me.insert(colIdx, field);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
onFieldRemove: function(map, fieldId, column) {
|
|
235
|
+
var me = this,
|
|
236
|
+
field,
|
|
237
|
+
fieldEl;
|
|
238
|
+
|
|
239
|
+
if (!column.isGroupHeader) {
|
|
240
|
+
field = column.getEditor();
|
|
241
|
+
fieldEl = field.el;
|
|
242
|
+
me.remove(field, false);
|
|
243
|
+
if (fieldEl) {
|
|
244
|
+
fieldEl.remove();
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
|
|
249
|
+
onFieldReplace: function(map, fieldId, column, oldColumn) {
|
|
250
|
+
this.onFieldRemove(map, fieldId, oldColumn);
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
clearFields: function() {
|
|
254
|
+
var map = this.columns,
|
|
255
|
+
key;
|
|
256
|
+
|
|
257
|
+
for (key in map) {
|
|
258
|
+
if (map.hasOwnProperty(key)) {
|
|
259
|
+
map.removeAtKey(key);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
},
|
|
263
|
+
|
|
264
|
+
getFloatingButtons: function() {
|
|
265
|
+
var me = this,
|
|
266
|
+
cssPrefix = Ext.baseCSSPrefix,
|
|
267
|
+
btnsCss = cssPrefix + 'grid-row-editor-buttons',
|
|
268
|
+
plugin = me.editingPlugin,
|
|
269
|
+
btns;
|
|
270
|
+
|
|
271
|
+
if (!me.floatingButtons) {
|
|
272
|
+
btns = me.floatingButtons = new Ext.Container({
|
|
273
|
+
renderTpl: [
|
|
274
|
+
'<div class="{baseCls}-ml"></div>',
|
|
275
|
+
'<div class="{baseCls}-mr"></div>',
|
|
276
|
+
'<div class="{baseCls}-bl"></div>',
|
|
277
|
+
'<div class="{baseCls}-br"></div>',
|
|
278
|
+
'<div class="{baseCls}-bc"></div>',
|
|
279
|
+
'{%this.renderContainer(out,values)%}'
|
|
280
|
+
],
|
|
281
|
+
width: 200,
|
|
282
|
+
renderTo: me.el,
|
|
283
|
+
baseCls: btnsCss,
|
|
284
|
+
layout: {
|
|
285
|
+
type: 'hbox',
|
|
286
|
+
align: 'middle'
|
|
287
|
+
},
|
|
288
|
+
defaults: {
|
|
289
|
+
flex: 1,
|
|
290
|
+
margins: '0 1 0 1'
|
|
291
|
+
},
|
|
292
|
+
items: [{
|
|
293
|
+
itemId: 'update',
|
|
294
|
+
xtype: 'button',
|
|
295
|
+
handler: plugin.completeEdit,
|
|
296
|
+
scope: plugin,
|
|
297
|
+
text: me.saveBtnText,
|
|
298
|
+
disabled: !me.isValid,
|
|
299
|
+
minWidth: Ext.panel.Panel.prototype.minButtonWidth
|
|
300
|
+
}, {
|
|
301
|
+
xtype: 'button',
|
|
302
|
+
handler: plugin.cancelEdit,
|
|
303
|
+
scope: plugin,
|
|
304
|
+
text: me.cancelBtnText,
|
|
305
|
+
minWidth: Ext.panel.Panel.prototype.minButtonWidth
|
|
306
|
+
}]
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
// Prevent from bubbling click events to the grid view
|
|
310
|
+
me.mon(btns.el, {
|
|
311
|
+
// BrowserBug: Opera 11.01
|
|
312
|
+
// causes the view to scroll when a button is focused from mousedown
|
|
313
|
+
mousedown: Ext.emptyFn,
|
|
314
|
+
click: Ext.emptyFn,
|
|
315
|
+
stopEvent: true
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
return me.floatingButtons;
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
reposition: function(animateConfig) {
|
|
322
|
+
var me = this,
|
|
323
|
+
context = me.context,
|
|
324
|
+
row = context && Ext.get(context.row),
|
|
325
|
+
btns = me.getFloatingButtons(),
|
|
326
|
+
btnEl = btns.el,
|
|
327
|
+
grid = me.editingPlugin.grid,
|
|
328
|
+
viewEl = grid.view.el,
|
|
329
|
+
|
|
330
|
+
// always get data from ColumnModel as its what drives
|
|
331
|
+
// the GridView's sizing
|
|
332
|
+
mainBodyWidth = grid.headerCt.getFullWidth(),
|
|
333
|
+
scrollerWidth = grid.getWidth(),
|
|
334
|
+
|
|
335
|
+
// use the minimum as the columns may not fill up the entire grid
|
|
336
|
+
// width
|
|
337
|
+
width = Math.min(mainBodyWidth, scrollerWidth),
|
|
338
|
+
scrollLeft = grid.view.el.dom.scrollLeft,
|
|
339
|
+
btnWidth = btns.getWidth(),
|
|
340
|
+
left = (width - btnWidth) / 2 + scrollLeft,
|
|
341
|
+
y, rowH, newHeight,
|
|
342
|
+
|
|
343
|
+
invalidateScroller = function() {
|
|
344
|
+
btnEl.scrollIntoView(viewEl, false);
|
|
345
|
+
if (animateConfig && animateConfig.callback) {
|
|
346
|
+
animateConfig.callback.call(animateConfig.scope || me);
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
|
|
350
|
+
animObj;
|
|
351
|
+
|
|
352
|
+
// need to set both top/left
|
|
353
|
+
if (row && Ext.isElement(row.dom)) {
|
|
354
|
+
// Bring our row into view if necessary, so a row editor that's already
|
|
355
|
+
// visible and animated to the row will appear smooth
|
|
356
|
+
row.scrollIntoView(viewEl, false);
|
|
357
|
+
|
|
358
|
+
// Get the y position of the row relative to its top-most static parent.
|
|
359
|
+
// offsetTop will be relative to the table, and is incorrect
|
|
360
|
+
// when mixed with certain grid features (e.g., grouping).
|
|
361
|
+
y = row.getXY()[1] - 5;
|
|
362
|
+
rowH = row.getHeight();
|
|
363
|
+
newHeight = rowH + (me.editingPlugin.grid.rowLines ? 9 : 10);
|
|
364
|
+
|
|
365
|
+
// Set editor height to match the row height
|
|
366
|
+
if (me.getHeight() != newHeight) {
|
|
367
|
+
me.setHeight(newHeight);
|
|
368
|
+
me.el.setLeft(0);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
if (animateConfig) {
|
|
372
|
+
animObj = {
|
|
373
|
+
to: {
|
|
374
|
+
y: y
|
|
375
|
+
},
|
|
376
|
+
duration: animateConfig.duration || 125,
|
|
377
|
+
listeners: {
|
|
378
|
+
afteranimate: function() {
|
|
379
|
+
invalidateScroller();
|
|
380
|
+
y = row.getXY()[1] - 5;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
};
|
|
384
|
+
me.el.animate(animObj);
|
|
385
|
+
} else {
|
|
386
|
+
me.el.setY(y);
|
|
387
|
+
invalidateScroller();
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (me.getWidth() != mainBodyWidth) {
|
|
391
|
+
me.setWidth(mainBodyWidth);
|
|
392
|
+
}
|
|
393
|
+
btnEl.setLeft(left);
|
|
394
|
+
},
|
|
395
|
+
|
|
396
|
+
getEditor: function(fieldInfo) {
|
|
397
|
+
var me = this;
|
|
398
|
+
|
|
399
|
+
if (Ext.isNumber(fieldInfo)) {
|
|
400
|
+
// Query only form fields. This just future-proofs us in case we add
|
|
401
|
+
// other components to RowEditor later on. Don't want to mess with
|
|
402
|
+
// indices.
|
|
403
|
+
return me.query('>[isFormField]')[fieldInfo];
|
|
404
|
+
} else if (fieldInfo.isHeader && !fieldInfo.isGroupHeader) {
|
|
405
|
+
return fieldInfo.getEditor();
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
|
|
409
|
+
removeField: function(field) {
|
|
410
|
+
var me = this;
|
|
411
|
+
|
|
412
|
+
// Incase we pass a column instead, which is fine
|
|
413
|
+
field = me.getEditor(field);
|
|
414
|
+
me.mun(field, 'validitychange', me.onValidityChange, me);
|
|
415
|
+
|
|
416
|
+
// Remove field/column from our mapping, which will fire the event to
|
|
417
|
+
// remove the field from our container
|
|
418
|
+
me.columns.removeAtKey(field.id);
|
|
419
|
+
Ext.destroy(field);
|
|
420
|
+
},
|
|
421
|
+
|
|
422
|
+
setField: function(column) {
|
|
423
|
+
var me = this,
|
|
424
|
+
i,
|
|
425
|
+
length, field;
|
|
426
|
+
|
|
427
|
+
if (Ext.isArray(column)) {
|
|
428
|
+
length = column.length;
|
|
429
|
+
|
|
430
|
+
for (i = 0; i < length; i++) {
|
|
431
|
+
me.setField(column[i]);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Get a default display field if necessary
|
|
438
|
+
field = column.getEditor(null, {
|
|
439
|
+
xtype: 'displayfield',
|
|
440
|
+
// Override Field's implementation so that the default display fields will not return values. This is done because
|
|
441
|
+
// the display field will pick up column renderers from the grid.
|
|
442
|
+
getModelData: function() {
|
|
443
|
+
return null;
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
field.margins = '0 0 0 2';
|
|
447
|
+
me.mon(field, 'change', me.onFieldChange, me);
|
|
448
|
+
|
|
449
|
+
if (me.isVisible() && me.context) {
|
|
450
|
+
if (field.is('displayfield')) {
|
|
451
|
+
me.renderColumnData(field, me.context.record, column);
|
|
452
|
+
} else {
|
|
453
|
+
field.suspendEvents();
|
|
454
|
+
field.setValue(me.context.record.get(column.dataIndex));
|
|
455
|
+
field.resumeEvents();
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// Maintain mapping of fields-to-columns
|
|
460
|
+
// This will fire events that maintain our container items
|
|
461
|
+
|
|
462
|
+
me.columns.add(field.id, column);
|
|
463
|
+
if (column.hidden) {
|
|
464
|
+
me.onColumnHide(column);
|
|
465
|
+
} else if (column.rendered) {
|
|
466
|
+
// Setting after initial render
|
|
467
|
+
me.onColumnShow(column);
|
|
468
|
+
}
|
|
469
|
+
},
|
|
470
|
+
|
|
471
|
+
loadRecord: function(record) {
|
|
472
|
+
var me = this,
|
|
473
|
+
form = me.getForm(),
|
|
474
|
+
fields = form.getFields(),
|
|
475
|
+
items = fields.items,
|
|
476
|
+
length = items.length,
|
|
477
|
+
i, displayFields;
|
|
478
|
+
|
|
479
|
+
// temporarily suspend events on form fields before loading record to prevent the fields' change events from firing
|
|
480
|
+
for (i = 0; i < length; i++) {
|
|
481
|
+
items[i].suspendEvents();
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
form.loadRecord(record);
|
|
485
|
+
|
|
486
|
+
for (i = 0; i < length; i++) {
|
|
487
|
+
items[i].resumeEvents();
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
if (me.errorSummary) {
|
|
491
|
+
if (form.isValid()) {
|
|
492
|
+
me.hideToolTip();
|
|
493
|
+
} else {
|
|
494
|
+
me.showToolTip();
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// render display fields so they honor the column renderer/template
|
|
499
|
+
displayFields = me.query('>displayfield');
|
|
500
|
+
length = displayFields.length;
|
|
501
|
+
|
|
502
|
+
for (i = 0; i < length; i++) {
|
|
503
|
+
me.renderColumnData(displayFields[i], record);
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
|
|
507
|
+
renderColumnData: function(field, record, activeColumn) {
|
|
508
|
+
var me = this,
|
|
509
|
+
grid = me.editingPlugin.grid,
|
|
510
|
+
headerCt = grid.headerCt,
|
|
511
|
+
view = grid.view,
|
|
512
|
+
store = view.store,
|
|
513
|
+
column = activeColumn || me.columns.get(field.id),
|
|
514
|
+
value = record.get(column.dataIndex),
|
|
515
|
+
renderer = column.editRenderer || column.renderer,
|
|
516
|
+
metaData,
|
|
517
|
+
rowIdx,
|
|
518
|
+
colIdx;
|
|
519
|
+
|
|
520
|
+
// honor our column's renderer (TemplateHeader sets renderer for us!)
|
|
521
|
+
if (renderer) {
|
|
522
|
+
metaData = { tdCls: '', style: '' };
|
|
523
|
+
rowIdx = store.indexOf(record);
|
|
524
|
+
colIdx = headerCt.getHeaderIndex(column);
|
|
525
|
+
|
|
526
|
+
value = renderer.call(
|
|
527
|
+
column.scope || headerCt.ownerCt,
|
|
528
|
+
value,
|
|
529
|
+
metaData,
|
|
530
|
+
record,
|
|
531
|
+
rowIdx,
|
|
532
|
+
colIdx,
|
|
533
|
+
store,
|
|
534
|
+
view
|
|
535
|
+
);
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
field.setRawValue(value);
|
|
539
|
+
field.resetOriginalValue();
|
|
540
|
+
},
|
|
541
|
+
|
|
542
|
+
beforeEdit: function() {
|
|
543
|
+
var me = this;
|
|
544
|
+
|
|
545
|
+
if (me.isVisible() && me.errorSummary && !me.autoCancel && me.isDirty()) {
|
|
546
|
+
me.showToolTip();
|
|
547
|
+
return false;
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Start editing the specified grid at the specified position.
|
|
553
|
+
* @param {Ext.data.Model} record The Store data record which backs the row to be edited.
|
|
554
|
+
* @param {Ext.data.Model} columnHeader The Column object defining the column to be edited.
|
|
555
|
+
*/
|
|
556
|
+
startEdit: function(record, columnHeader) {
|
|
557
|
+
var me = this,
|
|
558
|
+
grid = me.editingPlugin.grid,
|
|
559
|
+
store = grid.store,
|
|
560
|
+
context = me.context = Ext.apply(me.editingPlugin.context, {
|
|
561
|
+
view: grid.getView(),
|
|
562
|
+
store: store
|
|
563
|
+
});
|
|
564
|
+
|
|
565
|
+
// make sure our row is selected before editing
|
|
566
|
+
context.grid.getSelectionModel().select(record);
|
|
567
|
+
|
|
568
|
+
// Reload the record data
|
|
569
|
+
me.loadRecord(record);
|
|
570
|
+
|
|
571
|
+
if (!me.isVisible()) {
|
|
572
|
+
me.show();
|
|
573
|
+
me.focusContextCell();
|
|
574
|
+
} else {
|
|
575
|
+
me.reposition({
|
|
576
|
+
callback: this.focusContextCell
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
},
|
|
580
|
+
|
|
581
|
+
// Focus the cell on start edit based upon the current context
|
|
582
|
+
focusContextCell: function() {
|
|
583
|
+
var field = this.getEditor(this.context.colIdx);
|
|
584
|
+
if (field && field.focus) {
|
|
585
|
+
field.focus();
|
|
586
|
+
}
|
|
587
|
+
},
|
|
588
|
+
|
|
589
|
+
cancelEdit: function() {
|
|
590
|
+
var me = this,
|
|
591
|
+
form = me.getForm(),
|
|
592
|
+
fields = form.getFields(),
|
|
593
|
+
items = fields.items,
|
|
594
|
+
length = items.length,
|
|
595
|
+
i;
|
|
596
|
+
|
|
597
|
+
me.hide();
|
|
598
|
+
form.clearInvalid();
|
|
599
|
+
|
|
600
|
+
// temporarily suspend events on form fields before reseting the form to prevent the fields' change events from firing
|
|
601
|
+
for (i = 0; i < length; i++) {
|
|
602
|
+
items[i].suspendEvents();
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
form.reset();
|
|
606
|
+
|
|
607
|
+
for (i = 0; i < length; i++) {
|
|
608
|
+
items[i].resumeEvents();
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
|
|
612
|
+
completeEdit: function() {
|
|
613
|
+
var me = this,
|
|
614
|
+
form = me.getForm();
|
|
615
|
+
|
|
616
|
+
if (!form.isValid()) {
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
form.updateRecord(me.context.record);
|
|
621
|
+
me.hide();
|
|
622
|
+
return true;
|
|
623
|
+
},
|
|
624
|
+
|
|
625
|
+
onShow: function() {
|
|
626
|
+
this.callParent(arguments);
|
|
627
|
+
this.reposition();
|
|
628
|
+
},
|
|
629
|
+
|
|
630
|
+
onHide: function() {
|
|
631
|
+
var me = this;
|
|
632
|
+
me.callParent(arguments);
|
|
633
|
+
if (me.tooltip) {
|
|
634
|
+
me.hideToolTip();
|
|
635
|
+
}
|
|
636
|
+
if (me.context) {
|
|
637
|
+
me.context.view.focus();
|
|
638
|
+
me.context = null;
|
|
639
|
+
}
|
|
640
|
+
},
|
|
641
|
+
|
|
642
|
+
isDirty: function() {
|
|
643
|
+
var me = this,
|
|
644
|
+
form = me.getForm();
|
|
645
|
+
return form.isDirty();
|
|
646
|
+
},
|
|
647
|
+
|
|
648
|
+
getToolTip: function() {
|
|
649
|
+
return this.tooltip || (this.tooltip = new Ext.tip.ToolTip({
|
|
650
|
+
cls: Ext.baseCSSPrefix + 'grid-row-editor-errors',
|
|
651
|
+
title: this.errorsText,
|
|
652
|
+
autoHide: false,
|
|
653
|
+
closable: true,
|
|
654
|
+
closeAction: 'disable',
|
|
655
|
+
anchor: 'left'
|
|
656
|
+
}));
|
|
657
|
+
},
|
|
658
|
+
|
|
659
|
+
hideToolTip: function() {
|
|
660
|
+
var me = this,
|
|
661
|
+
tip = me.getToolTip();
|
|
662
|
+
if (tip.rendered) {
|
|
663
|
+
tip.disable();
|
|
664
|
+
}
|
|
665
|
+
me.hiddenTip = false;
|
|
666
|
+
},
|
|
667
|
+
|
|
668
|
+
showToolTip: function() {
|
|
669
|
+
var me = this,
|
|
670
|
+
tip = me.getToolTip(),
|
|
671
|
+
context = me.context,
|
|
672
|
+
row = Ext.get(context.row),
|
|
673
|
+
viewEl = context.grid.view.el;
|
|
674
|
+
|
|
675
|
+
tip.setTarget(row);
|
|
676
|
+
tip.showAt([-10000, -10000]);
|
|
677
|
+
tip.update(me.getErrors());
|
|
678
|
+
tip.mouseOffset = [viewEl.getWidth() - row.getWidth() + me.lastScrollLeft + 15, 0];
|
|
679
|
+
me.repositionTip();
|
|
680
|
+
tip.doLayout();
|
|
681
|
+
tip.enable();
|
|
682
|
+
},
|
|
683
|
+
|
|
684
|
+
repositionTip: function() {
|
|
685
|
+
var me = this,
|
|
686
|
+
tip = me.getToolTip(),
|
|
687
|
+
context = me.context,
|
|
688
|
+
row = Ext.get(context.row),
|
|
689
|
+
viewEl = context.grid.view.el,
|
|
690
|
+
viewHeight = viewEl.getHeight(),
|
|
691
|
+
viewTop = me.lastScrollTop,
|
|
692
|
+
viewBottom = viewTop + viewHeight,
|
|
693
|
+
rowHeight = row.getHeight(),
|
|
694
|
+
rowTop = row.dom.offsetTop,
|
|
695
|
+
rowBottom = rowTop + rowHeight;
|
|
696
|
+
|
|
697
|
+
if (rowBottom > viewTop && rowTop < viewBottom) {
|
|
698
|
+
tip.show();
|
|
699
|
+
me.hiddenTip = false;
|
|
700
|
+
} else {
|
|
701
|
+
tip.hide();
|
|
702
|
+
me.hiddenTip = true;
|
|
703
|
+
}
|
|
704
|
+
},
|
|
705
|
+
|
|
706
|
+
getErrors: function() {
|
|
707
|
+
var me = this,
|
|
708
|
+
dirtyText = !me.autoCancel && me.isDirty() ? me.dirtyText + '<br />' : '',
|
|
709
|
+
errors = [],
|
|
710
|
+
fields = me.query('>[isFormField]'),
|
|
711
|
+
length = fields.length,
|
|
712
|
+
i;
|
|
713
|
+
|
|
714
|
+
function createListItem(e) {
|
|
715
|
+
return '<li>' + e + '</li>';
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
for (i = 0; i < length; i++) {
|
|
719
|
+
errors = errors.concat(
|
|
720
|
+
Ext.Array.map(fields[i].getErrors(), createListItem)
|
|
721
|
+
);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
return dirtyText + '<ul>' + errors.join('') + '</ul>';
|
|
725
|
+
},
|
|
726
|
+
|
|
727
|
+
beforeDestroy: function(){
|
|
728
|
+
Ext.destroy(this.floatingButtons, this.tooltip);
|
|
729
|
+
this.callParent();
|
|
730
|
+
}
|
|
731
|
+
});
|