/* This file is part of Ext JS 7.4.0.42 Copyright (c) 2011-2021 Sencha Inc license: http://www.sencha.com/legal/sencha-software-license-agreement Contact: http://www.sencha.com/contact Commercial Usage Licensees holding valid commercial licenses may use this file in accordance with the Commercial Software License Agreement referenced above or, alternatively, in accordance with the terms contained in a written agreement between you and Sencha. If you are unsure which license is appropriate for your use, please contact the sales department at http://www.sencha.com/contact. Version: 7.4.0.42 Build date: 2021-05-04 14:42:24 (669f575eb1592a96aa3fb58a602faf3b96d819ea) */ var Ext = Ext || {}; (function(manifest){ if(!Ext.manifest) { Ext.manifest = manifest; } else { for(var name in manifest) { Ext.manifest[name] = manifest[name]; } } })({ "paths": { "Ext": "../classic/classic/src", "Ext.AbstractManager": "../packages/core/src/AbstractManager.js", "Ext.Ajax": "../packages/core/src/Ajax.js", "Ext.AnimationQueue": "../packages/core/src/AnimationQueue.js", "Ext.ComponentManager": "../packages/core/src/ComponentManager.js", "Ext.ComponentQuery": "../packages/core/src/ComponentQuery.js", "Ext.Deferred": "../packages/core/src/Deferred.js", "Ext.Evented": "../packages/core/src/Evented.js", "Ext.Factory": "../packages/core/src/mixin/Factoryable.js", "Ext.GlobalEvents": "../packages/core/src/GlobalEvents.js", "Ext.Glyph": "../packages/core/src/Glyph.js", "Ext.JSON": "../packages/core/src/JSON.js", "Ext.Mixin": "../packages/core/src/class/Mixin.js", "Ext.Msg": "../classic/classic/src/window/MessageBox.js", "Ext.Progress": "../packages/core/src/Progress.js", "Ext.ProgressBase": "../packages/core/src/ProgressBase.js", "Ext.Promise": "../packages/core/src/Promise.js", "Ext.String.format": "../packages/core/src/Template.js", "Ext.TaskQueue": "../packages/core/src/TaskQueue.js", "Ext.Template": "../packages/core/src/Template.js", "Ext.Widget": "../packages/core/src/Widget.js", "Ext.XTemplate": "../packages/core/src/XTemplate.js", "Ext.app": "../packages/core/src/app", "Ext.data": "../packages/core/src/data", "Ext.direct": "../packages/core/src/direct", "Ext.dom": "../packages/core/src/dom", "Ext.dom.ButtonElement": "../classic/classic/src/dom/ButtonElement.js", "Ext.dom.Layer": "../classic/classic/src/dom/Layer.js", "Ext.drag": "../packages/core/src/drag", "Ext.event": "../packages/core/src/event", "Ext.event.publisher.MouseEnterLeave": "../classic/classic/src/event/publisher/MouseEnterLeave.js", "Ext.field": "../packages/core/src/field", "Ext.fx.Animation": "../packages/core/src/fx/Animation.js", "Ext.fx.Runner": "../packages/core/src/fx/Runner.js", "Ext.fx.State": "../packages/core/src/fx/State.js", "Ext.fx.animation": "../packages/core/src/fx/animation", "Ext.fx.easing": "../packages/core/src/fx/easing", "Ext.fx.runner": "../packages/core/src/fx/runner", "Ext.grid.AdvancedGroupStore": "../packages/core/src/grid/AdvancedGroupStore.js", "Ext.grid.plugin.BaseFilterBar": "../packages/core/src/grid/plugin/BaseFilterBar.js", "Ext.grid.plugin.BaseGroupingPanel": "../packages/core/src/grid/plugin/BaseGroupingPanel.js", "Ext.grid.plugin.BaseSummaries": "../packages/core/src/grid/plugin/BaseSummaries.js", "Ext.list": "../packages/core/src/list", "Ext.mixin": "../packages/core/src/mixin", "Ext.parse": "../packages/core/src/parse", "Ext.perf": "../packages/core/src/perf", "Ext.plugin.Abstract": "../packages/core/src/plugin/Abstract.js", "Ext.plugin.AbstractClipboard": "../packages/core/src/plugin/AbstractClipboard.js", "Ext.plugin.MouseEnter": "../packages/core/src/plugin/MouseEnter.js", "Ext.promise": "../packages/core/src/promise", "Ext.route": "../packages/core/src/route", "Ext.sparkline": "../packages/core/src/sparkline", "Ext.util": "../packages/core/src/util", "Ext.util.Animate": "../classic/classic/src/util/Animate.js", "Ext.util.ComponentDragger": "../classic/classic/src/util/ComponentDragger.js", "Ext.util.ElementContainer": "../classic/classic/src/util/ElementContainer.js", "Ext.util.Floating": "../classic/classic/src/util/Floating.js", "Ext.util.Format.format": "../packages/core/src/Template.js", "Ext.util.Memento": "../classic/classic/src/util/Memento.js", "Ext.util.ProtoElement": "../classic/classic/src/util/ProtoElement.js", "Ext.util.Queue": "../classic/classic/src/util/Queue.js", "Ext.util.Renderable": "../classic/classic/src/util/Renderable.js", "Ext.util.StoreHolder": "../classic/classic/src/util/StoreHolder.js", "Ext.util.TsvDecoder": "../packages/core/src/util/TSV.js" }, "loadOrder": [ { "path": "../packages/core/src/class/Mixin.js", "requires": [], "uses": [], "idx": 0 }, { "path": "../packages/core/src/util/DelayedTask.js", "requires": [], "uses": [ 77 ], "idx": 1 }, { "path": "../packages/core/src/util/Event.js", "requires": [ 1 ], "uses": [ 24 ], "idx": 2 }, { "path": "../packages/core/src/mixin/Identifiable.js", "requires": [], "uses": [], "idx": 3 }, { "path": "../packages/core/src/mixin/Observable.js", "requires": [ 0, 2, 3 ], "uses": [ 52 ], "idx": 4 }, { "path": "../packages/core/src/util/HashMap.js", "requires": [ 4 ], "uses": [], "idx": 5 }, { "path": "../packages/core/src/AbstractManager.js", "requires": [ 5 ], "uses": [], "idx": 6 }, { "path": "../packages/core/src/promise/Consequence.js", "requires": [], "uses": [ 8 ], "idx": 7 }, { "path": "../packages/core/src/promise/Deferred.js", "requires": [ 7 ], "uses": [ 9 ], "idx": 8 }, { "path": "../packages/core/src/promise/Promise.js", "requires": [ 8 ], "uses": [], "idx": 9 }, { "path": "../packages/core/src/Promise.js", "requires": [ 9 ], "uses": [ 8 ], "idx": 10 }, { "path": "../packages/core/src/Deferred.js", "requires": [ 8, 10 ], "uses": [ 9 ], "idx": 11 }, { "path": "../packages/core/src/mixin/Factoryable.js", "requires": [], "uses": [], "idx": 12 }, { "path": "../packages/core/src/data/request/Base.js", "requires": [ 11, 12 ], "uses": [ 17 ], "idx": 13 }, { "path": "../packages/core/src/data/flash/BinaryXhr.js", "requires": [], "uses": [ 77 ], "idx": 14 }, { "path": "../packages/core/src/data/request/Ajax.js", "requires": [ 13, 14 ], "uses": [], "idx": 15 }, { "path": "../packages/core/src/data/request/Form.js", "requires": [ 13 ], "uses": [], "idx": 16 }, { "path": "../packages/core/src/data/Connection.js", "requires": [ 4, 11, 14, 15, 16 ], "uses": [ 12, 49 ], "idx": 17 }, { "path": "../packages/core/src/Ajax.js", "requires": [ 17 ], "uses": [], "idx": 18 }, { "path": "../packages/core/src/AnimationQueue.js", "requires": [], "uses": [], "idx": 19 }, { "path": "../packages/core/src/mixin/Bufferable.js", "requires": [ 0 ], "uses": [], "idx": 20 }, { "path": "../packages/core/src/ComponentManager.js", "requires": [ 20 ], "uses": [ 24, 36, 49, 89 ], "idx": 21 }, { "path": "../packages/core/src/util/Operators.js", "requires": [], "uses": [], "idx": 22 }, { "path": "../packages/core/src/util/LruCache.js", "requires": [ 5 ], "uses": [], "idx": 23 }, { "path": "../packages/core/src/ComponentQuery.js", "requires": [ 21, 22, 23 ], "uses": [ 95 ], "idx": 24 }, { "path": "../packages/core/src/Evented.js", "requires": [ 4 ], "uses": [], "idx": 25 }, { "path": "../packages/core/src/util/Positionable.js", "requires": [], "uses": [ 34, 49 ], "idx": 26 }, { "path": "../packages/core/src/dom/UnderlayPool.js", "requires": [], "uses": [ 49 ], "idx": 27 }, { "path": "../packages/core/src/dom/Underlay.js", "requires": [ 27 ], "uses": [], "idx": 28 }, { "path": "../packages/core/src/dom/Shadow.js", "requires": [ 28 ], "uses": [], "idx": 29 }, { "path": "../packages/core/src/dom/Shim.js", "requires": [ 28 ], "uses": [], "idx": 30 }, { "path": "../packages/core/src/dom/ElementEvent.js", "requires": [ 2 ], "uses": [ 37 ], "idx": 31 }, { "path": "../packages/core/src/event/publisher/Publisher.js", "requires": [], "uses": [], "idx": 32 }, { "path": "../packages/core/src/util/Offset.js", "requires": [], "uses": [], "idx": 33 }, { "path": "../packages/core/src/util/Region.js", "requires": [ 33 ], "uses": [ 49 ], "idx": 34 }, { "path": "../packages/core/src/util/Point.js", "requires": [ 34 ], "uses": [], "idx": 35 }, { "path": "../packages/core/src/event/Event.js", "requires": [ 35 ], "uses": [ 37, 77 ], "idx": 36 }, { "path": "../packages/core/src/event/publisher/Dom.js", "requires": [ 32, 36 ], "uses": [ 77 ], "idx": 37 }, { "path": "../packages/core/src/event/publisher/Gesture.js", "requires": [ 19, 35, 37 ], "uses": [ 36, 49, 313, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334 ], "idx": 38 }, { "path": "../packages/core/src/mixin/Templatable.js", "requires": [ 0 ], "uses": [ 49 ], "idx": 39 }, { "path": "../packages/core/src/TaskQueue.js", "requires": [ 19 ], "uses": [], "idx": 40 }, { "path": "../packages/core/src/util/sizemonitor/Abstract.js", "requires": [ 39, 40 ], "uses": [], "idx": 41 }, { "path": "../packages/core/src/util/sizemonitor/Scroll.js", "requires": [ 41 ], "uses": [ 40 ], "idx": 42 }, { "path": "../packages/core/src/util/SizeMonitor.js", "requires": [ 42 ], "uses": [], "idx": 43 }, { "path": "../packages/core/src/event/publisher/ElementSize.js", "requires": [ 32, 43 ], "uses": [ 40 ], "idx": 44 }, { "path": "../packages/core/src/util/paintmonitor/Abstract.js", "requires": [], "uses": [ 49 ], "idx": 45 }, { "path": "../packages/core/src/util/paintmonitor/CssAnimation.js", "requires": [ 45 ], "uses": [], "idx": 46 }, { "path": "../packages/core/src/util/PaintMonitor.js", "requires": [ 46 ], "uses": [], "idx": 47 }, { "path": "../packages/core/src/event/publisher/ElementPaint.js", "requires": [ 32, 40, 47 ], "uses": [], "idx": 48 }, { "path": "../packages/core/src/dom/Element.js", "requires": [ 4, 26, 29, 30, 31, 37, 38, 44, 48 ], "uses": [ 32, 34, 36, 75, 76, 95, 102, 253, 314, 335, 346, 348 ], "idx": 49 }, { "path": "../packages/core/src/util/BasicFilter.js", "requires": [], "uses": [], "idx": 50 }, { "path": "../packages/core/src/util/Filter.js", "requires": [ 50 ], "uses": [], "idx": 51 }, { "path": "../packages/core/src/util/Observable.js", "requires": [ 4 ], "uses": [], "idx": 52 }, { "path": "../packages/core/src/util/AbstractMixedCollection.js", "requires": [ 51, 52 ], "uses": [], "idx": 53 }, { "path": "../packages/core/src/util/Sorter.js", "requires": [], "uses": [], "idx": 54 }, { "path": "../packages/core/src/util/Sortable.js", "requires": [ 54 ], "uses": [ 56 ], "idx": 55 }, { "path": "../packages/core/src/util/MixedCollection.js", "requires": [ 53, 55 ], "uses": [], "idx": 56 }, { "path": "../packages/core/src/util/TaskRunner.js", "requires": [], "uses": [], "idx": 57 }, { "path": "../classic/classic/src/fx/target/Target.js", "requires": [], "uses": [], "idx": 58 }, { "path": "../classic/classic/src/fx/target/Element.js", "requires": [ 58 ], "uses": [], "idx": 59 }, { "path": "../classic/classic/src/fx/target/ElementCSS.js", "requires": [ 59 ], "uses": [], "idx": 60 }, { "path": "../classic/classic/src/fx/target/CompositeElement.js", "requires": [ 59 ], "uses": [], "idx": 61 }, { "path": "../classic/classic/src/fx/target/CompositeElementCSS.js", "requires": [ 60, 61 ], "uses": [], "idx": 62 }, { "path": "../classic/classic/src/fx/target/Sprite.js", "requires": [ 58 ], "uses": [], "idx": 63 }, { "path": "../classic/classic/src/fx/target/CompositeSprite.js", "requires": [ 63 ], "uses": [], "idx": 64 }, { "path": "../classic/classic/src/fx/target/Component.js", "requires": [ 58 ], "uses": [ 77 ], "idx": 65 }, { "path": "../classic/classic/src/fx/Queue.js", "requires": [ 5 ], "uses": [], "idx": 66 }, { "path": "../classic/classic/src/fx/Manager.js", "requires": [ 56, 57, 59, 60, 61, 62, 63, 64, 65, 66 ], "uses": [], "idx": 67 }, { "path": "../classic/classic/src/fx/Animator.js", "requires": [ 52, 67 ], "uses": [ 73 ], "idx": 68 }, { "path": "../classic/classic/src/fx/CubicBezier.js", "requires": [], "uses": [], "idx": 69 }, { "path": "../classic/classic/src/fx/Easing.js", "requires": [ 69 ], "uses": [], "idx": 70 }, { "path": "../classic/classic/src/fx/DrawPath.js", "requires": [], "uses": [], "idx": 71 }, { "path": "../classic/classic/src/fx/PropertyHandler.js", "requires": [ 71 ], "uses": [], "idx": 72 }, { "path": "../classic/classic/src/fx/Anim.js", "requires": [ 52, 67, 68, 69, 70, 72 ], "uses": [], "idx": 73 }, { "path": "../classic/classic/src/util/Animate.js", "requires": [ 67, 73 ], "uses": [], "idx": 74 }, { "path": "../packages/core/src/dom/Fly.js", "requires": [ 49 ], "uses": [], "idx": 75 }, { "path": "../packages/core/src/dom/CompositeElementLite.js", "requires": [ 75 ], "uses": [ 49 ], "idx": 76 }, { "path": "../packages/core/src/GlobalEvents.js", "requires": [ 4, 49 ], "uses": [ 21 ], "idx": 77 }, { "path": "../packages/core/src/Glyph.js", "requires": [], "uses": [], "idx": 78 }, { "path": "../packages/core/src/JSON.js", "requires": [], "uses": [], "idx": 79 }, { "path": "../packages/core/src/Manifest.js", "requires": [], "uses": [], "idx": 80 }, { "path": "../packages/core/src/mixin/Inheritable.js", "requires": [ 0 ], "uses": [ 21 ], "idx": 81 }, { "path": "../packages/core/src/mixin/Bindable.js", "requires": [], "uses": [ 12 ], "idx": 82 }, { "path": "../packages/core/src/mixin/ComponentDelegation.js", "requires": [ 0, 4 ], "uses": [ 2 ], "idx": 83 }, { "path": "../packages/core/src/plugin/Abstract.js", "requires": [ 3 ], "uses": [], "idx": 84 }, { "path": "../packages/core/src/mixin/Pluggable.js", "requires": [ 84 ], "uses": [], "idx": 85 }, { "path": "../packages/core/src/mixin/Keyboard.js", "requires": [ 0 ], "uses": [ 36 ], "idx": 86 }, { "path": "../packages/core/src/mixin/Focusable.js", "requires": [], "uses": [ 21, 24, 36, 49 ], "idx": 87 }, { "path": "../packages/core/src/mixin/Accessible.js", "requires": [ 0 ], "uses": [], "idx": 88 }, { "path": "../packages/core/src/Widget.js", "requires": [ 12, 25, 49, 81, 82, 83, 85, 86, 87, 88 ], "uses": [ 21, 24, 98 ], "idx": 89 }, { "path": "../packages/core/src/mixin/Responsive.js", "requires": [ 0 ], "uses": [ 49 ], "idx": 90 }, { "path": "../classic/classic/src/ResponsiveWidget.js", "requires": [ 90 ], "uses": [], "idx": 91 }, { "path": "../packages/core/src/ProgressBase.js", "requires": [], "uses": [ 98 ], "idx": 92 }, { "path": "../packages/core/src/Progress.js", "requires": [ 89, 92 ], "uses": [], "idx": 93 }, { "path": "../packages/core/src/util/Format.js", "requires": [], "uses": [ 95, 253 ], "idx": 94 }, { "path": "../packages/core/src/Template.js", "requires": [ 94 ], "uses": [ 253 ], "idx": 95 }, { "path": "../packages/core/src/util/XTemplateParser.js", "requires": [], "uses": [], "idx": 96 }, { "path": "../packages/core/src/util/XTemplateCompiler.js", "requires": [ 96 ], "uses": [], "idx": 97 }, { "path": "../packages/core/src/XTemplate.js", "requires": [ 95, 97 ], "uses": [], "idx": 98 }, { "path": "../packages/core/src/app/EventDomain.js", "requires": [ 2 ], "uses": [], "idx": 99 }, { "path": "../packages/core/src/app/domain/Component.js", "requires": [ 89, 99 ], "uses": [], "idx": 100 }, { "path": "../classic/classic/src/util/ProtoElement.js", "requires": [], "uses": [ 49, 253 ], "idx": 101 }, { "path": "../packages/core/src/dom/CompositeElement.js", "requires": [ 76 ], "uses": [], "idx": 102 }, { "path": "../classic/classic/src/plugin/Manager.js", "requires": [], "uses": [], "idx": 103 }, { "path": "../packages/core/src/util/CSS.js", "requires": [], "uses": [ 49 ], "idx": 104 }, { "path": "../packages/core/src/fx/easing/Abstract.js", "requires": [], "uses": [], "idx": 105 }, { "path": "../packages/core/src/fx/easing/Linear.js", "requires": [ 105 ], "uses": [], "idx": 106 }, { "path": "../packages/core/src/util/translatable/Abstract.js", "requires": [ 12, 25, 106 ], "uses": [ 19 ], "idx": 107 }, { "path": "../packages/core/src/util/translatable/Dom.js", "requires": [ 107 ], "uses": [], "idx": 108 }, { "path": "../packages/core/src/util/translatable/ScrollPosition.js", "requires": [ 108 ], "uses": [], "idx": 109 }, { "path": "../classic/classic/src/scroll/Scroller.js", "requires": [ 11, 12, 20, 25, 104, 109 ], "uses": [ 77, 471 ], "idx": 110 }, { "path": "../classic/classic/src/util/Floating.js", "requires": [], "uses": [ 21, 49, 75, 423 ], "idx": 111 }, { "path": "../classic/classic/src/util/ElementContainer.js", "requires": [], "uses": [], "idx": 112 }, { "path": "../classic/classic/src/util/Renderable.js", "requires": [ 49 ], "uses": [ 98, 117, 253 ], "idx": 113 }, { "path": "../classic/classic/src/state/Provider.js", "requires": [ 52 ], "uses": [], "idx": 114 }, { "path": "../classic/classic/src/state/Manager.js", "requires": [ 114 ], "uses": [], "idx": 115 }, { "path": "../classic/classic/src/state/Stateful.js", "requires": [ 57, 115 ], "uses": [], "idx": 116 }, { "path": "../classic/classic/src/Component.js", "requires": [ 21, 24, 26, 52, 74, 77, 81, 82, 83, 84, 86, 87, 88, 101, 102, 103, 110, 111, 112, 113, 116 ], "uses": [ 1, 49, 67, 98, 253, 418, 419, 420, 423, 431, 433, 498, 666, 686 ], "idx": 117 }, { "path": "../classic/classic/src/Responsive.js", "requires": [ 90, 91 ], "uses": [], "idx": 118 }, { "path": "../classic/classic/src/layout/container/border/Region.js", "requires": [], "uses": [], "idx": 119 }, { "path": "../packages/core/src/app/EventBus.js", "requires": [ 100 ], "uses": [ 99 ], "idx": 120 }, { "path": "../packages/core/src/app/domain/Global.js", "requires": [ 77, 99 ], "uses": [], "idx": 121 }, { "path": "../packages/core/src/route/Handler.js", "requires": [], "uses": [], "idx": 122 }, { "path": "../packages/core/src/route/Action.js", "requires": [], "uses": [ 11 ], "idx": 123 }, { "path": "../packages/core/src/route/Route.js", "requires": [ 122, 123 ], "uses": [ 10, 126 ], "idx": 124 }, { "path": "../packages/core/src/util/History.js", "requires": [ 52 ], "uses": [], "idx": 125 }, { "path": "../packages/core/src/route/Router.js", "requires": [ 123, 124, 125 ], "uses": [ 122 ], "idx": 126 }, { "path": "../packages/core/src/route/Mixin.js", "requires": [ 0, 122, 126 ], "uses": [ 125 ], "idx": 127 }, { "path": "../packages/core/src/app/BaseController.js", "requires": [ 4, 120, 121, 127 ], "uses": [ 226 ], "idx": 128 }, { "path": "../packages/core/src/app/Util.js", "requires": [], "uses": [], "idx": 129 }, { "path": "../packages/core/src/util/CollectionKey.js", "requires": [ 3 ], "uses": [], "idx": 130 }, { "path": "../packages/core/src/util/Grouper.js", "requires": [ 54 ], "uses": [ 221 ], "idx": 131 }, { "path": "../packages/core/src/util/Collection.js", "requires": [ 4, 51, 54, 130, 131 ], "uses": [ 178, 179, 180, 181 ], "idx": 132 }, { "path": "../packages/core/src/data/Range.js", "requires": [ 1, 11 ], "uses": [], "idx": 133 }, { "path": "../packages/core/src/util/ObjectTemplate.js", "requires": [ 98 ], "uses": [], "idx": 134 }, { "path": "../packages/core/src/data/schema/Role.js", "requires": [], "uses": [ 12 ], "idx": 135 }, { "path": "../packages/core/src/data/schema/Association.js", "requires": [ 135 ], "uses": [], "idx": 136 }, { "path": "../packages/core/src/data/schema/OneToOne.js", "requires": [ 136 ], "uses": [], "idx": 137 }, { "path": "../packages/core/src/data/schema/ManyToOne.js", "requires": [ 136 ], "uses": [], "idx": 138 }, { "path": "../packages/core/src/data/schema/ManyToMany.js", "requires": [ 136 ], "uses": [], "idx": 139 }, { "path": "../packages/core/src/util/Inflector.js", "requires": [], "uses": [], "idx": 140 }, { "path": "../packages/core/src/data/schema/Namer.js", "requires": [ 12, 140 ], "uses": [], "idx": 141 }, { "path": "../packages/core/src/data/schema/Schema.js", "requires": [ 12, 134, 137, 138, 139, 141 ], "uses": [], "idx": 142 }, { "path": "../packages/core/src/data/AbstractStore.js", "requires": [ 4, 12, 51, 132, 133, 142 ], "uses": [ 185 ], "idx": 143 }, { "path": "../packages/core/src/data/Error.js", "requires": [], "uses": [], "idx": 144 }, { "path": "../packages/core/src/data/ErrorCollection.js", "requires": [ 56, 144 ], "uses": [ 154 ], "idx": 145 }, { "path": "../packages/core/src/data/operation/Operation.js", "requires": [], "uses": [], "idx": 146 }, { "path": "../packages/core/src/data/operation/Create.js", "requires": [ 146 ], "uses": [], "idx": 147 }, { "path": "../packages/core/src/data/operation/Destroy.js", "requires": [ 146 ], "uses": [], "idx": 148 }, { "path": "../packages/core/src/data/operation/Read.js", "requires": [ 146 ], "uses": [], "idx": 149 }, { "path": "../packages/core/src/data/operation/Update.js", "requires": [ 146 ], "uses": [], "idx": 150 }, { "path": "../packages/core/src/data/SortTypes.js", "requires": [], "uses": [], "idx": 151 }, { "path": "../packages/core/src/data/validator/Validator.js", "requires": [ 12 ], "uses": [], "idx": 152 }, { "path": "../packages/core/src/data/summary/Base.js", "requires": [ 12 ], "uses": [], "idx": 153 }, { "path": "../packages/core/src/data/field/Field.js", "requires": [ 12, 151, 152, 153 ], "uses": [], "idx": 154 }, { "path": "../packages/core/src/data/field/Array.js", "requires": [ 154 ], "uses": [], "idx": 155 }, { "path": "../packages/core/src/data/field/Boolean.js", "requires": [ 154 ], "uses": [], "idx": 156 }, { "path": "../packages/core/src/data/field/Date.js", "requires": [ 154 ], "uses": [], "idx": 157 }, { "path": "../packages/core/src/data/field/Integer.js", "requires": [ 154 ], "uses": [], "idx": 158 }, { "path": "../packages/core/src/data/field/Number.js", "requires": [ 158 ], "uses": [], "idx": 159 }, { "path": "../packages/core/src/data/field/String.js", "requires": [ 154 ], "uses": [], "idx": 160 }, { "path": "../packages/core/src/data/identifier/Generator.js", "requires": [ 12 ], "uses": [], "idx": 161 }, { "path": "../packages/core/src/data/identifier/Sequential.js", "requires": [ 161 ], "uses": [], "idx": 162 }, { "path": "../packages/core/src/data/Model.js", "requires": [ 142, 145, 146, 147, 148, 149, 150, 152, 154, 155, 156, 157, 158, 159, 160, 161, 162 ], "uses": [ 12, 165, 252 ], "idx": 163 }, { "path": "../packages/core/src/data/ResultSet.js", "requires": [], "uses": [], "idx": 164 }, { "path": "../packages/core/src/data/reader/Reader.js", "requires": [ 4, 12, 23, 98, 164 ], "uses": [ 142 ], "idx": 165 }, { "path": "../packages/core/src/data/writer/Writer.js", "requires": [ 12 ], "uses": [], "idx": 166 }, { "path": "../packages/core/src/data/proxy/Proxy.js", "requires": [ 4, 12, 142, 165, 166 ], "uses": [ 146, 147, 148, 149, 150, 163, 194 ], "idx": 167 }, { "path": "../packages/core/src/data/proxy/Client.js", "requires": [ 167 ], "uses": [], "idx": 168 }, { "path": "../packages/core/src/data/proxy/Memory.js", "requires": [ 168 ], "uses": [ 51, 55 ], "idx": 169 }, { "path": "../packages/core/src/data/ProxyStore.js", "requires": [ 143, 146, 147, 148, 149, 150, 163, 167, 169 ], "uses": [ 142 ], "idx": 170 }, { "path": "../packages/core/src/util/Group.js", "requires": [ 132 ], "uses": [], "idx": 171 }, { "path": "../packages/core/src/data/Group.js", "requires": [ 171 ], "uses": [], "idx": 172 }, { "path": "../packages/core/src/data/LocalStore.js", "requires": [ 0, 172 ], "uses": [ 132 ], "idx": 173 }, { "path": "../packages/core/src/data/proxy/Server.js", "requires": [ 167 ], "uses": [ 95, 249 ], "idx": 174 }, { "path": "../packages/core/src/data/proxy/Ajax.js", "requires": [ 18, 174 ], "uses": [], "idx": 175 }, { "path": "../packages/core/src/data/reader/Json.js", "requires": [ 79, 165 ], "uses": [], "idx": 176 }, { "path": "../packages/core/src/data/writer/Json.js", "requires": [ 166 ], "uses": [], "idx": 177 }, { "path": "../packages/core/src/util/SorterCollection.js", "requires": [ 54, 132 ], "uses": [], "idx": 178 }, { "path": "../packages/core/src/util/FilterCollection.js", "requires": [ 51, 132 ], "uses": [], "idx": 179 }, { "path": "../packages/core/src/util/GrouperCollection.js", "requires": [ 131, 178 ], "uses": [], "idx": 180 }, { "path": "../packages/core/src/util/GroupCollection.js", "requires": [ 132, 171, 178, 179, 180 ], "uses": [], "idx": 181 }, { "path": "../packages/core/src/data/Store.js", "requires": [ 1, 163, 170, 173, 175, 176, 177, 181 ], "uses": [ 131, 185 ], "idx": 182 }, { "path": "../packages/core/src/data/reader/Array.js", "requires": [ 176 ], "uses": [], "idx": 183 }, { "path": "../packages/core/src/data/ArrayStore.js", "requires": [ 169, 182, 183 ], "uses": [], "idx": 184 }, { "path": "../packages/core/src/data/StoreManager.js", "requires": [ 56, 184 ], "uses": [ 12, 169, 177, 182, 183 ], "idx": 185 }, { "path": "../packages/core/src/app/domain/Store.js", "requires": [ 99, 143 ], "uses": [], "idx": 186 }, { "path": "../packages/core/src/app/Controller.js", "requires": [ 21, 100, 128, 129, 185, 186 ], "uses": [ 24, 142 ], "idx": 187 }, { "path": "../packages/core/src/app/Application.js", "requires": [ 56, 125, 187 ], "uses": [ 126 ], "idx": 188 }, { "path": "../packages/core/src/app/Profile.js", "requires": [ 4, 187 ], "uses": [], "idx": 189 }, { "path": "../packages/core/src/app/domain/View.js", "requires": [ 89, 99 ], "uses": [], "idx": 190 }, { "path": "../packages/core/src/app/ViewController.js", "requires": [ 12, 128, 190 ], "uses": [], "idx": 191 }, { "path": "../packages/core/src/util/Bag.js", "requires": [], "uses": [], "idx": 192 }, { "path": "../packages/core/src/util/Scheduler.js", "requires": [ 4, 192 ], "uses": [ 77 ], "idx": 193 }, { "path": "../packages/core/src/data/Batch.js", "requires": [ 4 ], "uses": [], "idx": 194 }, { "path": "../packages/core/src/data/matrix/Slice.js", "requires": [], "uses": [], "idx": 195 }, { "path": "../packages/core/src/data/matrix/Side.js", "requires": [ 195 ], "uses": [], "idx": 196 }, { "path": "../packages/core/src/data/matrix/Matrix.js", "requires": [ 196 ], "uses": [], "idx": 197 }, { "path": "../packages/core/src/data/session/ChangesVisitor.js", "requires": [], "uses": [], "idx": 198 }, { "path": "../packages/core/src/data/session/ChildChangesVisitor.js", "requires": [ 198 ], "uses": [], "idx": 199 }, { "path": "../packages/core/src/data/session/BatchVisitor.js", "requires": [], "uses": [ 194 ], "idx": 200 }, { "path": "../packages/core/src/mixin/Dirty.js", "requires": [], "uses": [], "idx": 201 }, { "path": "../packages/core/src/data/Session.js", "requires": [ 4, 142, 194, 197, 198, 199, 200, 201 ], "uses": [], "idx": 202 }, { "path": "../packages/core/src/util/Schedulable.js", "requires": [], "uses": [], "idx": 203 }, { "path": "../packages/core/src/app/bind/BaseBinding.js", "requires": [ 203 ], "uses": [], "idx": 204 }, { "path": "../packages/core/src/app/bind/Binding.js", "requires": [ 204 ], "uses": [], "idx": 205 }, { "path": "../packages/core/src/app/bind/AbstractStub.js", "requires": [ 203, 205 ], "uses": [], "idx": 206 }, { "path": "../packages/core/src/app/bind/Stub.js", "requires": [ 205, 206 ], "uses": [ 211 ], "idx": 207 }, { "path": "../packages/core/src/app/bind/LinkStub.js", "requires": [ 207 ], "uses": [], "idx": 208 }, { "path": "../packages/core/src/app/bind/RootStub.js", "requires": [ 206, 207, 208 ], "uses": [], "idx": 209 }, { "path": "../packages/core/src/app/bind/Multi.js", "requires": [ 204 ], "uses": [], "idx": 210 }, { "path": "../packages/core/src/app/bind/Formula.js", "requires": [ 23, 203 ], "uses": [], "idx": 211 }, { "path": "../packages/core/src/util/Fly.js", "requires": [], "uses": [], "idx": 212 }, { "path": "../packages/core/src/parse/Tokenizer.js", "requires": [ 212 ], "uses": [], "idx": 213 }, { "path": "../packages/core/src/parse/Symbol.js", "requires": [], "uses": [], "idx": 214 }, { "path": "../packages/core/src/parse/symbol/Constant.js", "requires": [ 214 ], "uses": [], "idx": 215 }, { "path": "../packages/core/src/parse/symbol/Infix.js", "requires": [ 214 ], "uses": [], "idx": 216 }, { "path": "../packages/core/src/parse/symbol/InfixRight.js", "requires": [ 216 ], "uses": [], "idx": 217 }, { "path": "../packages/core/src/parse/symbol/Paren.js", "requires": [ 214 ], "uses": [], "idx": 218 }, { "path": "../packages/core/src/parse/symbol/Prefix.js", "requires": [ 214 ], "uses": [], "idx": 219 }, { "path": "../packages/core/src/parse/Parser.js", "requires": [ 212, 213, 215, 217, 218, 219 ], "uses": [ 214, 216 ], "idx": 220 }, { "path": "../packages/core/src/app/bind/Parser.js", "requires": [ 94, 220 ], "uses": [], "idx": 221 }, { "path": "../packages/core/src/app/bind/Template.js", "requires": [ 94, 221 ], "uses": [], "idx": 222 }, { "path": "../packages/core/src/app/bind/TemplateBinding.js", "requires": [ 204, 210, 222 ], "uses": [], "idx": 223 }, { "path": "../packages/core/src/data/ChainedStore.js", "requires": [ 143, 173 ], "uses": [ 95, 185 ], "idx": 224 }, { "path": "../packages/core/src/app/ViewModel.js", "requires": [ 3, 12, 193, 202, 208, 209, 210, 211, 223, 224 ], "uses": [ 1, 142 ], "idx": 225 }, { "path": "../packages/core/src/app/domain/Controller.js", "requires": [ 99, 187 ], "uses": [ 128 ], "idx": 226 }, { "path": "../packages/core/src/direct/Manager.js", "requires": [ 4, 56 ], "uses": [ 95 ], "idx": 227 }, { "path": "../packages/core/src/direct/Provider.js", "requires": [ 4, 227 ], "uses": [ 18 ], "idx": 228 }, { "path": "../packages/core/src/app/domain/Direct.js", "requires": [ 99, 228 ], "uses": [], "idx": 229 }, { "path": "../packages/core/src/data/PageMap.js", "requires": [ 23 ], "uses": [], "idx": 230 }, { "path": "../packages/core/src/data/BufferedStore.js", "requires": [ 51, 54, 131, 170, 230 ], "uses": [ 178, 179, 181 ], "idx": 231 }, { "path": "../packages/core/src/data/ClientStore.js", "requires": [ 169, 182 ], "uses": [], "idx": 232 }, { "path": "../packages/core/src/data/proxy/Direct.js", "requires": [ 174, 227 ], "uses": [], "idx": 233 }, { "path": "../packages/core/src/data/DirectStore.js", "requires": [ 182, 233 ], "uses": [], "idx": 234 }, { "path": "../packages/core/src/data/JsonP.js", "requires": [], "uses": [], "idx": 235 }, { "path": "../packages/core/src/data/proxy/JsonP.js", "requires": [ 174, 235 ], "uses": [], "idx": 236 }, { "path": "../packages/core/src/data/JsonPStore.js", "requires": [ 176, 182, 236 ], "uses": [], "idx": 237 }, { "path": "../packages/core/src/data/JsonStore.js", "requires": [ 175, 176, 177, 182 ], "uses": [], "idx": 238 }, { "path": "../packages/core/src/data/ModelManager.js", "requires": [ 142 ], "uses": [ 163 ], "idx": 239 }, { "path": "../packages/core/src/data/NodeInterface.js", "requires": [ 4, 156, 158, 160, 177 ], "uses": [ 142 ], "idx": 240 }, { "path": "../packages/core/src/mixin/Queryable.js", "requires": [], "uses": [ 24 ], "idx": 241 }, { "path": "../packages/core/src/data/TreeModel.js", "requires": [ 163, 240, 241 ], "uses": [], "idx": 242 }, { "path": "../packages/core/src/data/NodeStore.js", "requires": [ 182, 240, 242 ], "uses": [ 163 ], "idx": 243 }, { "path": "../packages/core/src/data/query/Compiler.js", "requires": [], "uses": [ 79 ], "idx": 244 }, { "path": "../packages/core/src/data/query/Converter.js", "requires": [], "uses": [], "idx": 245 }, { "path": "../packages/core/src/data/query/Stringifier.js", "requires": [], "uses": [ 79 ], "idx": 246 }, { "path": "../packages/core/src/data/query/Parser.js", "requires": [ 220 ], "uses": [], "idx": 247 }, { "path": "../packages/core/src/data/Query.js", "requires": [ 3, 12, 50, 244, 245, 246, 247 ], "uses": [], "idx": 248 }, { "path": "../packages/core/src/data/Request.js", "requires": [], "uses": [], "idx": 249 }, { "path": "../packages/core/src/data/TreeStore.js", "requires": [ 54, 182, 240, 242 ], "uses": [ 163 ], "idx": 250 }, { "path": "../packages/core/src/data/Types.js", "requires": [ 151 ], "uses": [], "idx": 251 }, { "path": "../packages/core/src/data/Validation.js", "requires": [ 163 ], "uses": [], "idx": 252 }, { "path": "../packages/core/src/dom/Helper.js", "requires": [], "uses": [ 95 ], "idx": 253 }, { "path": "../packages/core/src/dom/Query.js", "requires": [ 22, 253 ], "uses": [ 23 ], "idx": 254 }, { "path": "../packages/core/src/data/reader/Xml.js", "requires": [ 165, 254 ], "uses": [], "idx": 255 }, { "path": "../packages/core/src/data/writer/Xml.js", "requires": [ 166 ], "uses": [], "idx": 256 }, { "path": "../packages/core/src/data/XmlStore.js", "requires": [ 175, 182, 255, 256 ], "uses": [], "idx": 257 }, { "path": "../packages/core/src/data/identifier/Negative.js", "requires": [ 162 ], "uses": [], "idx": 258 }, { "path": "../packages/core/src/data/identifier/Uuid.js", "requires": [ 161 ], "uses": [], "idx": 259 }, { "path": "../packages/core/src/data/proxy/WebStorage.js", "requires": [ 162, 168 ], "uses": [ 54, 95, 164 ], "idx": 260 }, { "path": "../packages/core/src/data/proxy/LocalStorage.js", "requires": [ 260 ], "uses": [], "idx": 261 }, { "path": "../packages/core/src/data/proxy/Rest.js", "requires": [ 175 ], "uses": [], "idx": 262 }, { "path": "../packages/core/src/data/proxy/SessionStorage.js", "requires": [ 260 ], "uses": [], "idx": 263 }, { "path": "../packages/core/src/data/schema/BelongsTo.js", "requires": [], "uses": [], "idx": 264 }, { "path": "../packages/core/src/data/schema/HasMany.js", "requires": [], "uses": [], "idx": 265 }, { "path": "../packages/core/src/data/schema/HasOne.js", "requires": [], "uses": [], "idx": 266 }, { "path": "../packages/core/src/data/schema/Reference.js", "requires": [], "uses": [], "idx": 267 }, { "path": "../packages/core/src/data/summary/Sum.js", "requires": [ 153 ], "uses": [], "idx": 268 }, { "path": "../packages/core/src/data/summary/Average.js", "requires": [ 268 ], "uses": [], "idx": 269 }, { "path": "../packages/core/src/data/summary/Count.js", "requires": [ 153 ], "uses": [], "idx": 270 }, { "path": "../packages/core/src/data/summary/Max.js", "requires": [ 153 ], "uses": [], "idx": 271 }, { "path": "../packages/core/src/data/summary/Min.js", "requires": [ 153 ], "uses": [], "idx": 272 }, { "path": "../packages/core/src/data/summary/None.js", "requires": [ 153 ], "uses": [], "idx": 273 }, { "path": "../packages/core/src/data/summary/Variance.js", "requires": [ 153, 269 ], "uses": [ 12 ], "idx": 274 }, { "path": "../packages/core/src/data/summary/StdDev.js", "requires": [ 274 ], "uses": [], "idx": 275 }, { "path": "../packages/core/src/data/summary/VarianceP.js", "requires": [ 274 ], "uses": [], "idx": 276 }, { "path": "../packages/core/src/data/summary/StdDevP.js", "requires": [ 276 ], "uses": [], "idx": 277 }, { "path": "../packages/core/src/data/validator/AbstractDate.js", "requires": [ 152 ], "uses": [], "idx": 278 }, { "path": "../packages/core/src/data/validator/Bound.js", "requires": [ 152 ], "uses": [ 95 ], "idx": 279 }, { "path": "../packages/core/src/data/validator/Format.js", "requires": [ 152 ], "uses": [], "idx": 280 }, { "path": "../packages/core/src/data/validator/CIDRv4.js", "requires": [ 280 ], "uses": [], "idx": 281 }, { "path": "../packages/core/src/data/validator/CIDRv6.js", "requires": [ 280 ], "uses": [], "idx": 282 }, { "path": "../packages/core/src/data/validator/Number.js", "requires": [ 152 ], "uses": [ 94 ], "idx": 283 }, { "path": "../packages/core/src/data/validator/Currency.js", "requires": [ 283 ], "uses": [ 94 ], "idx": 284 }, { "path": "../packages/core/src/data/validator/CurrencyUS.js", "requires": [ 284 ], "uses": [], "idx": 285 }, { "path": "../packages/core/src/data/validator/Date.js", "requires": [ 278 ], "uses": [], "idx": 286 }, { "path": "../packages/core/src/data/validator/DateTime.js", "requires": [ 278 ], "uses": [], "idx": 287 }, { "path": "../packages/core/src/data/validator/Email.js", "requires": [ 280 ], "uses": [], "idx": 288 }, { "path": "../packages/core/src/data/validator/List.js", "requires": [ 152 ], "uses": [], "idx": 289 }, { "path": "../packages/core/src/data/validator/Exclusion.js", "requires": [ 289 ], "uses": [], "idx": 290 }, { "path": "../packages/core/src/data/validator/IPAddress.js", "requires": [ 280 ], "uses": [], "idx": 291 }, { "path": "../packages/core/src/data/validator/Inclusion.js", "requires": [ 289 ], "uses": [], "idx": 292 }, { "path": "../packages/core/src/data/validator/Length.js", "requires": [ 279 ], "uses": [], "idx": 293 }, { "path": "../packages/core/src/data/validator/Presence.js", "requires": [ 152 ], "uses": [], "idx": 294 }, { "path": "../packages/core/src/data/validator/NotNull.js", "requires": [ 294 ], "uses": [], "idx": 295 }, { "path": "../packages/core/src/data/validator/Phone.js", "requires": [ 280 ], "uses": [], "idx": 296 }, { "path": "../packages/core/src/data/validator/Range.js", "requires": [ 279 ], "uses": [], "idx": 297 }, { "path": "../packages/core/src/data/validator/Time.js", "requires": [ 278 ], "uses": [], "idx": 298 }, { "path": "../packages/core/src/data/validator/Url.js", "requires": [ 280 ], "uses": [], "idx": 299 }, { "path": "../packages/core/src/data/virtual/Group.js", "requires": [], "uses": [], "idx": 300 }, { "path": "../packages/core/src/data/virtual/Page.js", "requires": [], "uses": [], "idx": 301 }, { "path": "../packages/core/src/data/virtual/PageMap.js", "requires": [ 301 ], "uses": [], "idx": 302 }, { "path": "../packages/core/src/data/virtual/Range.js", "requires": [ 133 ], "uses": [], "idx": 303 }, { "path": "../packages/core/src/data/virtual/Store.js", "requires": [ 170, 178, 179, 302, 303 ], "uses": [ 131, 132, 163, 300 ], "idx": 304 }, { "path": "../packages/core/src/direct/Event.js", "requires": [], "uses": [], "idx": 305 }, { "path": "../packages/core/src/direct/RemotingEvent.js", "requires": [ 305 ], "uses": [ 227 ], "idx": 306 }, { "path": "../packages/core/src/direct/ExceptionEvent.js", "requires": [ 306 ], "uses": [], "idx": 307 }, { "path": "../packages/core/src/direct/JsonProvider.js", "requires": [ 228 ], "uses": [ 227, 307 ], "idx": 308 }, { "path": "../packages/core/src/direct/PollingProvider.js", "requires": [ 18, 57, 307, 308 ], "uses": [ 227, 409 ], "idx": 309 }, { "path": "../packages/core/src/direct/RemotingMethod.js", "requires": [], "uses": [], "idx": 310 }, { "path": "../packages/core/src/direct/Transaction.js", "requires": [], "uses": [], "idx": 311 }, { "path": "../packages/core/src/direct/RemotingProvider.js", "requires": [ 1, 56, 227, 308, 310, 311 ], "uses": [ 79, 307 ], "idx": 312 }, { "path": "../packages/core/src/dom/GarbageCollector.js", "requires": [], "uses": [ 49 ], "idx": 313 }, { "path": "../packages/core/src/dom/TouchAction.js", "requires": [ 35, 49 ], "uses": [], "idx": 314 }, { "path": "../packages/core/src/drag/Constraint.js", "requires": [ 12 ], "uses": [ 34 ], "idx": 315 }, { "path": "../packages/core/src/drag/Info.js", "requires": [ 10 ], "uses": [], "idx": 316 }, { "path": "../packages/core/src/drag/Item.js", "requires": [ 3, 4 ], "uses": [], "idx": 317 }, { "path": "../packages/core/src/drag/Manager.js", "requires": [], "uses": [ 49, 81, 316 ], "idx": 318 }, { "path": "../packages/core/src/drag/Source.js", "requires": [ 77, 315, 317 ], "uses": [ 12, 316 ], "idx": 319 }, { "path": "../packages/core/src/drag/Target.js", "requires": [ 317, 318 ], "uses": [], "idx": 320 }, { "path": "../packages/core/src/drag/proxy/None.js", "requires": [ 12 ], "uses": [], "idx": 321 }, { "path": "../packages/core/src/drag/proxy/Original.js", "requires": [ 321 ], "uses": [], "idx": 322 }, { "path": "../packages/core/src/drag/proxy/Placeholder.js", "requires": [ 321 ], "uses": [], "idx": 323 }, { "path": "../packages/core/src/event/gesture/Recognizer.js", "requires": [ 3, 38 ], "uses": [], "idx": 324 }, { "path": "../packages/core/src/event/gesture/SingleTouch.js", "requires": [ 324 ], "uses": [], "idx": 325 }, { "path": "../packages/core/src/event/gesture/DoubleTap.js", "requires": [ 325 ], "uses": [ 49 ], "idx": 326 }, { "path": "../packages/core/src/event/gesture/Drag.js", "requires": [ 325 ], "uses": [ 49 ], "idx": 327 }, { "path": "../packages/core/src/event/gesture/Swipe.js", "requires": [ 325 ], "uses": [], "idx": 328 }, { "path": "../packages/core/src/event/gesture/EdgeSwipe.js", "requires": [ 328 ], "uses": [ 49 ], "idx": 329 }, { "path": "../packages/core/src/event/gesture/LongPress.js", "requires": [ 325 ], "uses": [ 38, 49, 327 ], "idx": 330 }, { "path": "../packages/core/src/event/gesture/MultiTouch.js", "requires": [ 324 ], "uses": [], "idx": 331 }, { "path": "../packages/core/src/event/gesture/Pinch.js", "requires": [ 331 ], "uses": [], "idx": 332 }, { "path": "../packages/core/src/event/gesture/Rotate.js", "requires": [ 331 ], "uses": [], "idx": 333 }, { "path": "../packages/core/src/event/gesture/Tap.js", "requires": [ 325 ], "uses": [ 49 ], "idx": 334 }, { "path": "../packages/core/src/event/publisher/Focus.js", "requires": [ 37, 49, 75, 77 ], "uses": [ 36 ], "idx": 335 }, { "path": "../packages/core/src/field/InputMask.js", "requires": [], "uses": [], "idx": 336 }, { "path": "../packages/core/src/fx/State.js", "requires": [], "uses": [], "idx": 337 }, { "path": "../packages/core/src/fx/animation/Abstract.js", "requires": [ 12, 25, 337 ], "uses": [], "idx": 338 }, { "path": "../packages/core/src/fx/animation/Slide.js", "requires": [ 338 ], "uses": [], "idx": 339 }, { "path": "../packages/core/src/fx/animation/SlideOut.js", "requires": [ 339 ], "uses": [], "idx": 340 }, { "path": "../packages/core/src/fx/animation/Fade.js", "requires": [ 338 ], "uses": [], "idx": 341 }, { "path": "../packages/core/src/fx/animation/FadeOut.js", "requires": [ 341 ], "uses": [], "idx": 342 }, { "path": "../packages/core/src/fx/animation/Flip.js", "requires": [ 338 ], "uses": [], "idx": 343 }, { "path": "../packages/core/src/fx/animation/Pop.js", "requires": [ 338 ], "uses": [], "idx": 344 }, { "path": "../packages/core/src/fx/animation/PopOut.js", "requires": [ 344 ], "uses": [], "idx": 345 }, { "path": "../packages/core/src/fx/Animation.js", "requires": [ 339, 340, 341, 342, 343, 344, 345 ], "uses": [ 338 ], "idx": 346 }, { "path": "../packages/core/src/fx/runner/Css.js", "requires": [ 25, 346 ], "uses": [ 49 ], "idx": 347 }, { "path": "../packages/core/src/fx/runner/CssTransition.js", "requires": [ 19, 347 ], "uses": [ 346 ], "idx": 348 }, { "path": "../packages/core/src/fx/Runner.js", "requires": [ 348 ], "uses": [], "idx": 349 }, { "path": "../packages/core/src/fx/animation/Cube.js", "requires": [ 338 ], "uses": [], "idx": 350 }, { "path": "../packages/core/src/fx/animation/Wipe.js", "requires": [ 346 ], "uses": [], "idx": 351 }, { "path": "../packages/core/src/fx/animation/WipeOut.js", "requires": [ 351 ], "uses": [], "idx": 352 }, { "path": "../packages/core/src/fx/easing/Bounce.js", "requires": [ 105 ], "uses": [], "idx": 353 }, { "path": "../packages/core/src/fx/easing/Momentum.js", "requires": [ 105 ], "uses": [], "idx": 354 }, { "path": "../packages/core/src/fx/easing/BoundMomentum.js", "requires": [ 105, 353, 354 ], "uses": [], "idx": 355 }, { "path": "../packages/core/src/fx/easing/EaseIn.js", "requires": [ 106 ], "uses": [], "idx": 356 }, { "path": "../packages/core/src/fx/easing/EaseOut.js", "requires": [ 106 ], "uses": [], "idx": 357 }, { "path": "../packages/core/src/fx/easing/Easing.js", "requires": [ 106 ], "uses": [], "idx": 358 }, { "path": "../packages/core/src/fx/runner/CssAnimation.js", "requires": [ 347 ], "uses": [ 346 ], "idx": 359 }, { "path": "../packages/core/src/grid/AdvancedGroupStore.js", "requires": [ 20, 52 ], "uses": [ 132 ], "idx": 360 }, { "path": "../packages/core/src/grid/plugin/BaseFilterBar.js", "requires": [ 84 ], "uses": [ 12 ], "idx": 361 }, { "path": "../packages/core/src/grid/plugin/BaseGroupingPanel.js", "requires": [ 84 ], "uses": [], "idx": 362 }, { "path": "../packages/core/src/grid/plugin/BaseSummaries.js", "requires": [ 84, 153, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277 ], "uses": [ 12 ], "idx": 363 }, { "path": "../packages/core/src/list/AbstractTreeItem.js", "requires": [ 89 ], "uses": [], "idx": 364 }, { "path": "../packages/core/src/list/RootTreeItem.js", "requires": [ 364 ], "uses": [], "idx": 365 }, { "path": "../packages/core/src/mixin/ItemRippler.js", "requires": [], "uses": [], "idx": 366 }, { "path": "../packages/core/src/list/TreeItem.js", "requires": [ 89, 364 ], "uses": [], "idx": 367 }, { "path": "../packages/core/src/list/Tree.js", "requires": [ 89, 365, 366, 367 ], "uses": [ 163, 185 ], "idx": 368 }, { "path": "../packages/core/src/mixin/ConfigProxy.js", "requires": [ 0 ], "uses": [], "idx": 369 }, { "path": "../packages/core/src/mixin/ConfigState.js", "requires": [ 0 ], "uses": [], "idx": 370 }, { "path": "../packages/core/src/mixin/Container.js", "requires": [ 0 ], "uses": [ 21 ], "idx": 371 }, { "path": "../packages/core/src/util/KeyMap.js", "requires": [], "uses": [], "idx": 372 }, { "path": "../packages/core/src/util/KeyNav.js", "requires": [ 372 ], "uses": [ 36 ], "idx": 373 }, { "path": "../packages/core/src/mixin/FocusableContainer.js", "requires": [ 0, 373 ], "uses": [ 21 ], "idx": 374 }, { "path": "../packages/core/src/mixin/Hookable.js", "requires": [ 0 ], "uses": [], "idx": 375 }, { "path": "../packages/core/src/mixin/Mashup.js", "requires": [ 0 ], "uses": [ 95 ], "idx": 376 }, { "path": "../packages/core/src/mixin/Selectable.js", "requires": [ 0 ], "uses": [ 132 ], "idx": 377 }, { "path": "../packages/core/src/mixin/StoreWatcher.js", "requires": [], "uses": [], "idx": 378 }, { "path": "../packages/core/src/mixin/StyleCacher.js", "requires": [ 0 ], "uses": [], "idx": 379 }, { "path": "../packages/core/src/mixin/Traversable.js", "requires": [ 0 ], "uses": [], "idx": 380 }, { "path": "../packages/core/src/perf/Accumulator.js", "requires": [ 98 ], "uses": [], "idx": 381 }, { "path": "../packages/core/src/perf/Monitor.js", "requires": [ 381 ], "uses": [], "idx": 382 }, { "path": "../packages/core/src/plugin/AbstractClipboard.js", "requires": [ 84, 372 ], "uses": [ 49 ], "idx": 383 }, { "path": "../packages/core/src/plugin/MouseEnter.js", "requires": [ 84 ], "uses": [], "idx": 384 }, { "path": "../packages/core/src/sparkline/Shape.js", "requires": [], "uses": [], "idx": 385 }, { "path": "../packages/core/src/sparkline/CanvasBase.js", "requires": [ 385 ], "uses": [], "idx": 386 }, { "path": "../packages/core/src/sparkline/CanvasCanvas.js", "requires": [ 386 ], "uses": [], "idx": 387 }, { "path": "../packages/core/src/sparkline/VmlCanvas.js", "requires": [ 386 ], "uses": [], "idx": 388 }, { "path": "../packages/core/src/util/Color.js", "requires": [], "uses": [], "idx": 389 }, { "path": "../packages/core/src/sparkline/Base.js", "requires": [ 89, 98, 387, 388, 389 ], "uses": [], "idx": 390 }, { "path": "../packages/core/src/sparkline/BarBase.js", "requires": [ 390 ], "uses": [], "idx": 391 }, { "path": "../packages/core/src/sparkline/RangeMap.js", "requires": [], "uses": [], "idx": 392 }, { "path": "../packages/core/src/sparkline/Bar.js", "requires": [ 391, 392 ], "uses": [], "idx": 393 }, { "path": "../packages/core/src/sparkline/Box.js", "requires": [ 390 ], "uses": [], "idx": 394 }, { "path": "../packages/core/src/sparkline/Bullet.js", "requires": [ 390 ], "uses": [], "idx": 395 }, { "path": "../packages/core/src/sparkline/Discrete.js", "requires": [ 391 ], "uses": [], "idx": 396 }, { "path": "../packages/core/src/sparkline/Line.js", "requires": [ 390, 392 ], "uses": [], "idx": 397 }, { "path": "../packages/core/src/sparkline/Pie.js", "requires": [ 390 ], "uses": [], "idx": 398 }, { "path": "../packages/core/src/sparkline/TriState.js", "requires": [ 391, 392 ], "uses": [], "idx": 399 }, { "path": "../packages/core/src/util/Base64.js", "requires": [], "uses": [], "idx": 400 }, { "path": "../packages/core/src/util/DelimitedValue.js", "requires": [], "uses": [], "idx": 401 }, { "path": "../packages/core/src/util/CSV.js", "requires": [ 401 ], "uses": [], "idx": 402 }, { "path": "../packages/core/src/util/ClickRepeater.js", "requires": [ 4 ], "uses": [], "idx": 403 }, { "path": "../packages/core/src/util/Cookies.js", "requires": [], "uses": [], "idx": 404 }, { "path": "../packages/core/src/util/ItemCollection.js", "requires": [ 56 ], "uses": [], "idx": 405 }, { "path": "../packages/core/src/util/LocalStorage.js", "requires": [], "uses": [], "idx": 406 }, { "path": "../packages/core/src/util/Spans.js", "requires": [], "uses": [], "idx": 407 }, { "path": "../packages/core/src/util/TSV.js", "requires": [ 401 ], "uses": [], "idx": 408 }, { "path": "../packages/core/src/util/TaskManager.js", "requires": [ 57 ], "uses": [], "idx": 409 }, { "path": "../packages/core/src/util/TextMetrics.js", "requires": [ 49 ], "uses": [ 75 ], "idx": 410 }, { "path": "../packages/core/src/util/paintmonitor/OverflowChange.js", "requires": [ 45 ], "uses": [], "idx": 411 }, { "path": "../packages/core/src/util/sizemonitor/OverflowChange.js", "requires": [ 41 ], "uses": [ 40 ], "idx": 412 }, { "path": "../packages/core/src/util/translatable/CssPosition.js", "requires": [ 108 ], "uses": [], "idx": 413 }, { "path": "../packages/core/src/util/translatable/CssTransform.js", "requires": [ 108 ], "uses": [], "idx": 414 }, { "path": "../packages/core/src/util/translatable/ScrollParent.js", "requires": [ 108 ], "uses": [], "idx": 415 }, { "path": "../classic/classic/src/Action.js", "requires": [], "uses": [], "idx": 416 }, { "path": "../classic/classic/src/ElementLoader.js", "requires": [ 52 ], "uses": [ 17, 18 ], "idx": 417 }, { "path": "../classic/classic/src/ComponentLoader.js", "requires": [ 417 ], "uses": [], "idx": 418 }, { "path": "../classic/classic/src/layout/SizeModel.js", "requires": [], "uses": [], "idx": 419 }, { "path": "../classic/classic/src/layout/Layout.js", "requires": [ 12, 98, 419 ], "uses": [ 666 ], "idx": 420 }, { "path": "../classic/classic/src/layout/container/Container.js", "requires": [ 98, 112, 420 ], "uses": [ 253 ], "idx": 421 }, { "path": "../classic/classic/src/layout/container/Auto.js", "requires": [ 421 ], "uses": [ 98 ], "idx": 422 }, { "path": "../classic/classic/src/ZIndexManager.js", "requires": [ 77, 178, 179 ], "uses": [ 49, 132 ], "idx": 423 }, { "path": "../classic/classic/src/container/Container.js", "requires": [ 56, 117, 241, 371, 374, 405, 416, 422, 423 ], "uses": [ 12, 21, 24, 49 ], "idx": 424 }, { "path": "../classic/classic/src/layout/container/Editor.js", "requires": [ 421 ], "uses": [], "idx": 425 }, { "path": "../classic/classic/src/Editor.js", "requires": [ 424, 425 ], "uses": [ 1, 21 ], "idx": 426 }, { "path": "../classic/classic/src/EventManager.js", "requires": [], "uses": [ 77 ], "idx": 427 }, { "path": "../classic/classic/src/Gadget.js", "requires": [], "uses": [], "idx": 428 }, { "path": "../classic/classic/src/Img.js", "requires": [ 78, 117 ], "uses": [], "idx": 429 }, { "path": "../classic/classic/src/util/StoreHolder.js", "requires": [ 185 ], "uses": [], "idx": 430 }, { "path": "../classic/classic/src/LoadMask.js", "requires": [ 117, 430 ], "uses": [ 49, 77, 185 ], "idx": 431 }, { "path": "../classic/classic/src/layout/component/Component.js", "requires": [ 420 ], "uses": [], "idx": 432 }, { "path": "../classic/classic/src/layout/component/Auto.js", "requires": [ 432 ], "uses": [], "idx": 433 }, { "path": "../classic/classic/src/layout/component/ProgressBar.js", "requires": [ 433 ], "uses": [], "idx": 434 }, { "path": "../classic/classic/src/ProgressBar.js", "requires": [ 92, 95, 102, 117, 409, 434 ], "uses": [ 73 ], "idx": 435 }, { "path": "../classic/classic/src/dom/ButtonElement.js", "requires": [ 49 ], "uses": [], "idx": 436 }, { "path": "../classic/classic/src/button/Manager.js", "requires": [], "uses": [], "idx": 437 }, { "path": "../classic/classic/src/menu/Manager.js", "requires": [], "uses": [ 21, 110, 117, 613 ], "idx": 438 }, { "path": "../classic/classic/src/button/Button.js", "requires": [ 78, 117, 241, 403, 410, 436, 437, 438 ], "uses": [ 49, 553 ], "idx": 439 }, { "path": "../classic/classic/src/button/Split.js", "requires": [ 439 ], "uses": [ 49, 437 ], "idx": 440 }, { "path": "../classic/classic/src/button/Cycle.js", "requires": [ 440 ], "uses": [], "idx": 441 }, { "path": "../classic/classic/src/layout/container/SegmentedButton.js", "requires": [ 421 ], "uses": [], "idx": 442 }, { "path": "../classic/classic/src/button/Segmented.js", "requires": [ 424, 439, 442 ], "uses": [], "idx": 443 }, { "path": "../classic/classic/src/panel/Bar.js", "requires": [ 424 ], "uses": [], "idx": 444 }, { "path": "../classic/classic/src/panel/Title.js", "requires": [ 78, 117 ], "uses": [], "idx": 445 }, { "path": "../classic/classic/src/panel/Tool.js", "requires": [ 78, 117 ], "uses": [ 553 ], "idx": 446 }, { "path": "../classic/classic/src/panel/Header.js", "requires": [ 433, 444, 445, 446 ], "uses": [ 21 ], "idx": 447 }, { "path": "../classic/classic/src/layout/container/boxOverflow/None.js", "requires": [ 12 ], "uses": [], "idx": 448 }, { "path": "../classic/classic/src/layout/container/boxOverflow/Scroller.js", "requires": [ 4, 49, 403, 448 ], "uses": [ 117 ], "idx": 449 }, { "path": "../classic/classic/src/dd/DragDropManager.js", "requires": [ 34, 35 ], "uses": [ 49, 481, 553 ], "idx": 450 }, { "path": "../classic/classic/src/resizer/Splitter.js", "requires": [ 98, 117 ], "uses": [ 477 ], "idx": 451 }, { "path": "../classic/classic/src/layout/container/Box.js", "requires": [ 94, 421, 448, 449, 450, 451 ], "uses": [ 12, 419, 433 ], "idx": 452 }, { "path": "../classic/classic/src/layout/container/HBox.js", "requires": [ 452 ], "uses": [], "idx": 453 }, { "path": "../classic/classic/src/layout/container/VBox.js", "requires": [ 452 ], "uses": [], "idx": 454 }, { "path": "../classic/classic/src/toolbar/Toolbar.js", "requires": [ 424, 433, 453, 454 ], "uses": [ 117, 384, 535, 556, 702, 703 ], "idx": 455 }, { "path": "../classic/classic/src/dd/DragDrop.js", "requires": [ 450 ], "uses": [ 49 ], "idx": 456 }, { "path": "../classic/classic/src/dd/DD.js", "requires": [ 450, 456 ], "uses": [ 49 ], "idx": 457 }, { "path": "../classic/classic/src/dd/DDProxy.js", "requires": [ 457 ], "uses": [ 450 ], "idx": 458 }, { "path": "../classic/classic/src/dd/StatusProxy.js", "requires": [ 117 ], "uses": [], "idx": 459 }, { "path": "../classic/classic/src/dd/DragSource.js", "requires": [ 450, 458, 459 ], "uses": [ 433 ], "idx": 460 }, { "path": "../classic/classic/src/panel/Proxy.js", "requires": [], "uses": [ 49 ], "idx": 461 }, { "path": "../classic/classic/src/panel/DD.js", "requires": [ 460, 461 ], "uses": [], "idx": 462 }, { "path": "../classic/classic/src/layout/component/Dock.js", "requires": [ 432 ], "uses": [ 24, 49, 419 ], "idx": 463 }, { "path": "../classic/classic/src/util/Memento.js", "requires": [], "uses": [], "idx": 464 }, { "path": "../classic/classic/src/container/DockingContainer.js", "requires": [ 49, 56 ], "uses": [ 24, 253, 405 ], "idx": 465 }, { "path": "../classic/classic/src/panel/Panel.js", "requires": [ 49, 56, 73, 98, 424, 447, 455, 462, 463, 464, 465 ], "uses": [ 1, 21, 34, 94, 101, 102, 117, 253, 373, 422, 433, 446, 498 ], "idx": 466 }, { "path": "../classic/classic/src/layout/container/Table.js", "requires": [ 421 ], "uses": [], "idx": 467 }, { "path": "../classic/classic/src/container/ButtonGroup.js", "requires": [ 466, 467 ], "uses": [], "idx": 468 }, { "path": "../classic/classic/src/container/Monitor.js", "requires": [], "uses": [ 24, 56 ], "idx": 469 }, { "path": "../classic/classic/src/plugin/Viewport.js", "requires": [ 84, 118 ], "uses": [ 49, 90, 419 ], "idx": 470 }, { "path": "../classic/classic/src/container/Viewport.js", "requires": [ 118, 424, 470 ], "uses": [], "idx": 471 }, { "path": "../classic/classic/src/layout/container/Anchor.js", "requires": [ 422 ], "uses": [], "idx": 472 }, { "path": "../classic/classic/src/dashboard/Panel.js", "requires": [ 466 ], "uses": [ 21 ], "idx": 473 }, { "path": "../classic/classic/src/dashboard/Column.js", "requires": [ 424, 472, 473 ], "uses": [], "idx": 474 }, { "path": "../classic/classic/src/layout/container/Column.js", "requires": [ 422 ], "uses": [], "idx": 475 }, { "path": "../classic/classic/src/dd/DragTracker.js", "requires": [ 52 ], "uses": [ 34, 117, 373 ], "idx": 476 }, { "path": "../classic/classic/src/resizer/SplitterTracker.js", "requires": [ 34, 476 ], "uses": [ 49, 106 ], "idx": 477 }, { "path": "../classic/classic/src/layout/container/ColumnSplitterTracker.js", "requires": [ 477 ], "uses": [], "idx": 478 }, { "path": "../classic/classic/src/layout/container/ColumnSplitter.js", "requires": [ 451, 478 ], "uses": [], "idx": 479 }, { "path": "../classic/classic/src/layout/container/Dashboard.js", "requires": [ 475, 479 ], "uses": [ 433 ], "idx": 480 }, { "path": "../classic/classic/src/dd/DDTarget.js", "requires": [ 456 ], "uses": [], "idx": 481 }, { "path": "../classic/classic/src/dd/ScrollManager.js", "requires": [ 450 ], "uses": [], "idx": 482 }, { "path": "../classic/classic/src/dd/DropTarget.js", "requires": [ 481, 482 ], "uses": [], "idx": 483 }, { "path": "../classic/classic/src/dashboard/DropZone.js", "requires": [ 483 ], "uses": [], "idx": 484 }, { "path": "../classic/classic/src/dashboard/Part.js", "requires": [ 3, 12, 134 ], "uses": [], "idx": 485 }, { "path": "../classic/classic/src/dashboard/Dashboard.js", "requires": [ 466, 474, 480, 484, 485 ], "uses": [ 12, 115, 132 ], "idx": 486 }, { "path": "../classic/classic/src/dd/DragZone.js", "requires": [ 460 ], "uses": [ 482, 488 ], "idx": 487 }, { "path": "../classic/classic/src/dd/Registry.js", "requires": [], "uses": [], "idx": 488 }, { "path": "../classic/classic/src/dd/DropZone.js", "requires": [ 483, 488 ], "uses": [ 450 ], "idx": 489 }, { "path": "../classic/classic/src/dom/Layer.js", "requires": [ 49 ], "uses": [ 253 ], "idx": 490 }, { "path": "../classic/classic/src/enums.js", "requires": [], "uses": [], "idx": 491 }, { "path": "../classic/classic/src/event/publisher/MouseEnterLeave.js", "requires": [ 37 ], "uses": [], "idx": 492 }, { "path": "../classic/classic/src/flash/Component.js", "requires": [ 117 ], "uses": [], "idx": 493 }, { "path": "../classic/classic/src/form/action/Action.js", "requires": [], "uses": [], "idx": 494 }, { "path": "../classic/classic/src/form/action/Load.js", "requires": [ 17, 494 ], "uses": [ 18 ], "idx": 495 }, { "path": "../classic/classic/src/form/action/Submit.js", "requires": [ 494 ], "uses": [ 18, 253 ], "idx": 496 }, { "path": "../classic/classic/src/form/action/StandardSubmit.js", "requires": [ 496 ], "uses": [], "idx": 497 }, { "path": "../classic/classic/src/util/ComponentDragger.js", "requires": [ 476 ], "uses": [ 34, 49 ], "idx": 498 }, { "path": "../classic/classic/src/window/Window.js", "requires": [ 34, 466, 498 ], "uses": [], "idx": 499 }, { "path": "../classic/classic/src/form/Labelable.js", "requires": [ 0, 98 ], "uses": [ 49, 552 ], "idx": 500 }, { "path": "../classic/classic/src/form/field/Field.js", "requires": [], "uses": [], "idx": 501 }, { "path": "../classic/classic/src/form/field/Base.js", "requires": [ 1, 98, 117, 500, 501 ], "uses": [ 95, 253 ], "idx": 502 }, { "path": "../classic/classic/src/layout/component/field/Text.js", "requires": [ 433 ], "uses": [], "idx": 503 }, { "path": "../classic/classic/src/form/field/VTypes.js", "requires": [], "uses": [], "idx": 504 }, { "path": "../classic/classic/src/form/trigger/Trigger.js", "requires": [ 12, 403 ], "uses": [ 49, 98 ], "idx": 505 }, { "path": "../classic/classic/src/form/field/Text.js", "requires": [ 410, 419, 502, 503, 504, 505 ], "uses": [ 94, 95, 102 ], "idx": 506 }, { "path": "../classic/classic/src/form/field/TextArea.js", "requires": [ 1, 98, 506 ], "uses": [ 94, 410 ], "idx": 507 }, { "path": "../classic/classic/src/window/MessageBox.js", "requires": [ 435, 439, 453, 455, 472, 499, 506, 507 ], "uses": [ 117, 424, 433, 434 ], "idx": 508 }, { "path": "../classic/classic/src/form/Basic.js", "requires": [ 1, 52, 56, 145, 495, 496, 497, 508 ], "uses": [ 469 ], "idx": 509 }, { "path": "../classic/classic/src/layout/component/field/FieldContainer.js", "requires": [ 433 ], "uses": [], "idx": 510 }, { "path": "../classic/classic/src/form/FieldAncestor.js", "requires": [ 0, 469 ], "uses": [], "idx": 511 }, { "path": "../classic/classic/src/form/FieldContainer.js", "requires": [ 424, 500, 510, 511 ], "uses": [], "idx": 512 }, { "path": "../classic/classic/src/layout/container/CheckboxGroup.js", "requires": [ 421 ], "uses": [ 253 ], "idx": 513 }, { "path": "../classic/classic/src/form/CheckboxManager.js", "requires": [ 56 ], "uses": [], "idx": 514 }, { "path": "../classic/classic/src/form/field/Checkbox.js", "requires": [ 98, 502, 514 ], "uses": [], "idx": 515 }, { "path": "../classic/classic/src/form/CheckboxGroup.js", "requires": [ 501, 502, 512, 513, 515 ], "uses": [], "idx": 516 }, { "path": "../classic/classic/src/form/FieldSet.js", "requires": [ 424, 511 ], "uses": [ 49, 101, 117, 253, 433, 446, 472, 515, 669 ], "idx": 517 }, { "path": "../classic/classic/src/form/Label.js", "requires": [ 94, 117 ], "uses": [], "idx": 518 }, { "path": "../classic/classic/src/form/Panel.js", "requires": [ 57, 466, 509, 511 ], "uses": [ 409 ], "idx": 519 }, { "path": "../classic/classic/src/form/RadioManager.js", "requires": [ 56 ], "uses": [], "idx": 520 }, { "path": "../classic/classic/src/form/field/Radio.js", "requires": [ 515, 520 ], "uses": [], "idx": 521 }, { "path": "../classic/classic/src/form/RadioGroup.js", "requires": [ 516, 521 ], "uses": [ 520 ], "idx": 522 }, { "path": "../classic/classic/src/form/action/DirectAction.js", "requires": [ 0 ], "uses": [ 227 ], "idx": 523 }, { "path": "../classic/classic/src/form/action/DirectLoad.js", "requires": [ 227, 495, 523 ], "uses": [], "idx": 524 }, { "path": "../classic/classic/src/form/action/DirectSubmit.js", "requires": [ 227, 496, 523 ], "uses": [], "idx": 525 }, { "path": "../classic/classic/src/form/field/Picker.js", "requires": [ 373, 506 ], "uses": [], "idx": 526 }, { "path": "../classic/classic/src/selection/Model.js", "requires": [ 4, 12, 192, 430 ], "uses": [], "idx": 527 }, { "path": "../classic/classic/src/selection/DataViewModel.js", "requires": [ 373, 527 ], "uses": [], "idx": 528 }, { "path": "../classic/classic/src/view/NavigationModel.js", "requires": [ 12, 52, 430 ], "uses": [ 373 ], "idx": 529 }, { "path": "../classic/classic/src/view/AbstractView.js", "requires": [ 75, 76, 104, 117, 430, 431, 528, 529 ], "uses": [ 1, 12, 49, 95, 98, 185, 253 ], "idx": 530 }, { "path": "../classic/classic/src/view/View.js", "requires": [ 530 ], "uses": [], "idx": 531 }, { "path": "../classic/classic/src/view/BoundListKeyNav.js", "requires": [ 529 ], "uses": [ 36, 373 ], "idx": 532 }, { "path": "../classic/classic/src/layout/component/BoundList.js", "requires": [ 433 ], "uses": [], "idx": 533 }, { "path": "../classic/classic/src/toolbar/Item.js", "requires": [ 117, 455 ], "uses": [], "idx": 534 }, { "path": "../classic/classic/src/toolbar/TextItem.js", "requires": [ 98, 455, 534 ], "uses": [], "idx": 535 }, { "path": "../classic/classic/src/form/trigger/Spinner.js", "requires": [ 505 ], "uses": [], "idx": 536 }, { "path": "../classic/classic/src/form/field/Spinner.js", "requires": [ 373, 506, 536 ], "uses": [], "idx": 537 }, { "path": "../classic/classic/src/form/field/Number.js", "requires": [ 537 ], "uses": [ 94, 95 ], "idx": 538 }, { "path": "../classic/classic/src/toolbar/Paging.js", "requires": [ 430, 455, 535, 538 ], "uses": [ 95, 433, 503, 536 ], "idx": 539 }, { "path": "../classic/classic/src/view/BoundList.js", "requires": [ 49, 241, 531, 532, 533, 539 ], "uses": [ 98, 433 ], "idx": 540 }, { "path": "../classic/classic/src/form/field/ComboBox.js", "requires": [ 1, 185, 430, 526, 540 ], "uses": [ 49, 51, 98, 132, 163, 179, 253, 373, 528, 532, 533 ], "idx": 541 }, { "path": "../classic/classic/src/picker/Month.js", "requires": [ 98, 117, 403, 439 ], "uses": [ 433 ], "idx": 542 }, { "path": "../classic/classic/src/picker/Date.js", "requires": [ 67, 98, 117, 373, 403, 439, 440, 542 ], "uses": [ 95, 253, 433 ], "idx": 543 }, { "path": "../classic/classic/src/form/field/Date.js", "requires": [ 526, 543 ], "uses": [ 95, 433 ], "idx": 544 }, { "path": "../classic/classic/src/form/field/Display.js", "requires": [ 94, 98, 502 ], "uses": [], "idx": 545 }, { "path": "../classic/classic/src/form/field/FileButton.js", "requires": [ 439 ], "uses": [], "idx": 546 }, { "path": "../classic/classic/src/form/trigger/Component.js", "requires": [ 505 ], "uses": [], "idx": 547 }, { "path": "../classic/classic/src/form/field/File.js", "requires": [ 506, 546, 547 ], "uses": [ 433 ], "idx": 548 }, { "path": "../classic/classic/src/form/field/Hidden.js", "requires": [ 502 ], "uses": [], "idx": 549 }, { "path": "../classic/classic/src/tip/Tip.js", "requires": [ 466 ], "uses": [ 35, 117 ], "idx": 550 }, { "path": "../classic/classic/src/tip/ToolTip.js", "requires": [ 33, 550 ], "uses": [ 35, 75 ], "idx": 551 }, { "path": "../classic/classic/src/tip/QuickTip.js", "requires": [ 551 ], "uses": [], "idx": 552 }, { "path": "../classic/classic/src/tip/QuickTipManager.js", "requires": [ 552 ], "uses": [], "idx": 553 }, { "path": "../classic/classic/src/picker/Color.js", "requires": [ 98, 117 ], "uses": [], "idx": 554 }, { "path": "../classic/classic/src/layout/component/field/HtmlEditor.js", "requires": [ 510 ], "uses": [], "idx": 555 }, { "path": "../classic/classic/src/toolbar/Separator.js", "requires": [ 455, 534 ], "uses": [], "idx": 556 }, { "path": "../classic/classic/src/layout/container/boxOverflow/Menu.js", "requires": [ 439, 448, 556 ], "uses": [ 433, 449, 454, 463, 515, 611, 613, 702 ], "idx": 557 }, { "path": "../classic/classic/src/form/field/HtmlEditor.js", "requires": [ 94, 409, 454, 455, 501, 512, 534, 553, 554, 555, 557 ], "uses": [ 1, 95, 117, 253, 433, 449, 463, 613 ], "idx": 558 }, { "path": "../classic/classic/src/view/TagKeyNav.js", "requires": [ 532 ], "uses": [], "idx": 559 }, { "path": "../classic/classic/src/form/field/Tag.js", "requires": [ 182, 224, 527, 541, 559 ], "uses": [ 51, 95, 98, 169, 176, 177, 410 ], "idx": 560 }, { "path": "../classic/classic/src/picker/Time.js", "requires": [ 182, 540 ], "uses": [ 51 ], "idx": 561 }, { "path": "../classic/classic/src/form/field/Time.js", "requires": [ 532, 541, 544, 561 ], "uses": [ 95, 98, 528, 533 ], "idx": 562 }, { "path": "../classic/classic/src/form/field/Trigger.js", "requires": [ 253, 403, 506 ], "uses": [], "idx": 563 }, { "path": "../classic/classic/src/grid/CellContext.js", "requires": [], "uses": [], "idx": 564 }, { "path": "../classic/classic/src/grid/CellEditor.js", "requires": [ 426 ], "uses": [ 49, 424 ], "idx": 565 }, { "path": "../classic/classic/src/grid/ColumnComponentLayout.js", "requires": [ 433 ], "uses": [], "idx": 566 }, { "path": "../classic/classic/src/layout/container/Fit.js", "requires": [ 421 ], "uses": [], "idx": 567 }, { "path": "../classic/classic/src/panel/Table.js", "requires": [ 466, 567 ], "uses": [ 1, 77, 115, 185, 225, 253, 564, 571, 578, 588, 626, 627, 687, 688, 689 ], "idx": 568 }, { "path": "../classic/classic/src/grid/ColumnLayout.js", "requires": [ 453, 568 ], "uses": [], "idx": 569 }, { "path": "../classic/classic/src/grid/ColumnManager.js", "requires": [], "uses": [], "idx": 570 }, { "path": "../classic/classic/src/grid/NavigationModel.js", "requires": [ 529 ], "uses": [ 21, 36, 49, 75, 117, 373, 564 ], "idx": 571 }, { "path": "../classic/classic/src/view/TableLayout.js", "requires": [ 433 ], "uses": [], "idx": 572 }, { "path": "../classic/classic/src/grid/locking/RowSynchronizer.js", "requires": [], "uses": [], "idx": 573 }, { "path": "../classic/classic/src/view/NodeCache.js", "requires": [ 76 ], "uses": [ 49, 75 ], "idx": 574 }, { "path": "../classic/classic/src/scroll/TableScroller.js", "requires": [ 110 ], "uses": [ 10 ], "idx": 575 }, { "path": "../classic/classic/src/view/Table.js", "requires": [ 1, 56, 75, 241, 531, 564, 572, 573, 574, 575 ], "uses": [ 12, 49, 98, 117, 163, 588 ], "idx": 576 }, { "path": "../classic/classic/src/grid/Panel.js", "requires": [ 568, 576 ], "uses": [], "idx": 577 }, { "path": "../classic/classic/src/grid/RowContext.js", "requires": [], "uses": [ 12 ], "idx": 578 }, { "path": "../classic/classic/src/grid/RowEditorButtons.js", "requires": [ 424 ], "uses": [ 433, 439, 466 ], "idx": 579 }, { "path": "../classic/classic/src/grid/RowEditor.js", "requires": [ 373, 519, 551, 579 ], "uses": [ 49, 67, 77, 422, 424, 433, 463, 545, 564 ], "idx": 580 }, { "path": "../classic/classic/src/grid/Scroller.js", "requires": [], "uses": [], "idx": 581 }, { "path": "../classic/classic/src/view/DropZone.js", "requires": [ 489 ], "uses": [ 117, 433 ], "idx": 582 }, { "path": "../classic/classic/src/grid/ViewDropZone.js", "requires": [ 582 ], "uses": [], "idx": 583 }, { "path": "../classic/classic/src/grid/plugin/HeaderResizer.js", "requires": [ 34, 84, 476 ], "uses": [ 589 ], "idx": 584 }, { "path": "../classic/classic/src/grid/header/DragZone.js", "requires": [ 487 ], "uses": [], "idx": 585 }, { "path": "../classic/classic/src/grid/header/DropZone.js", "requires": [ 489 ], "uses": [ 450 ], "idx": 586 }, { "path": "../classic/classic/src/grid/plugin/HeaderReorderer.js", "requires": [ 84, 585, 586 ], "uses": [], "idx": 587 }, { "path": "../classic/classic/src/grid/header/Container.js", "requires": [ 373, 424, 569, 584, 587 ], "uses": [ 1, 117, 433, 449, 454, 463, 570, 589, 611, 612, 613 ], "idx": 588 }, { "path": "../classic/classic/src/grid/column/Column.js", "requires": [ 221, 566, 569, 588 ], "uses": [ 54, 94, 117, 131, 584 ], "idx": 589 }, { "path": "../classic/classic/src/grid/column/ActionProxy.js", "requires": [], "uses": [], "idx": 590 }, { "path": "../classic/classic/src/grid/column/Action.js", "requires": [ 78, 94, 589, 590 ], "uses": [ 49 ], "idx": 591 }, { "path": "../classic/classic/src/grid/column/Boolean.js", "requires": [ 589 ], "uses": [], "idx": 592 }, { "path": "../classic/classic/src/grid/column/Check.js", "requires": [ 589 ], "uses": [ 564 ], "idx": 593 }, { "path": "../classic/classic/src/grid/column/Date.js", "requires": [ 589 ], "uses": [ 94 ], "idx": 594 }, { "path": "../classic/classic/src/grid/column/Groups.js", "requires": [ 589 ], "uses": [], "idx": 595 }, { "path": "../classic/classic/src/grid/column/Number.js", "requires": [ 94, 589 ], "uses": [], "idx": 596 }, { "path": "../classic/classic/src/grid/column/RowNumberer.js", "requires": [ 589 ], "uses": [ 564 ], "idx": 597 }, { "path": "../classic/classic/src/grid/column/Template.js", "requires": [ 98, 589 ], "uses": [ 593 ], "idx": 598 }, { "path": "../classic/classic/src/grid/column/Widget.js", "requires": [ 379, 589 ], "uses": [], "idx": 599 }, { "path": "../classic/classic/src/grid/feature/Feature.js", "requires": [ 52 ], "uses": [], "idx": 600 }, { "path": "../classic/classic/src/grid/feature/AbstractSummary.js", "requires": [ 600 ], "uses": [ 12 ], "idx": 601 }, { "path": "../classic/classic/src/grid/feature/AdvancedGroupStore.js", "requires": [ 360 ], "uses": [], "idx": 602 }, { "path": "../classic/classic/src/grid/feature/AdvancedGrouping.js", "requires": [ 595, 600, 602 ], "uses": [ 98, 422, 566 ], "idx": 603 }, { "path": "../classic/classic/src/grid/feature/AdvancedGroupingSummary.js", "requires": [ 603 ], "uses": [ 1, 117, 433 ], "idx": 604 }, { "path": "../classic/classic/src/grid/feature/GroupStore.js", "requires": [ 52 ], "uses": [ 132 ], "idx": 605 }, { "path": "../classic/classic/src/grid/feature/Grouping.js", "requires": [ 600, 601, 605 ], "uses": [ 98, 163 ], "idx": 606 }, { "path": "../classic/classic/src/grid/feature/GroupingSummary.js", "requires": [ 606 ], "uses": [], "idx": 607 }, { "path": "../classic/classic/src/grid/feature/RowBody.js", "requires": [ 600 ], "uses": [ 98 ], "idx": 608 }, { "path": "../classic/classic/src/grid/feature/Summary.js", "requires": [ 601 ], "uses": [ 117, 163, 433 ], "idx": 609 }, { "path": "../classic/classic/src/menu/Item.js", "requires": [ 78, 117, 241 ], "uses": [ 438, 553 ], "idx": 610 }, { "path": "../classic/classic/src/menu/CheckItem.js", "requires": [ 610 ], "uses": [ 438 ], "idx": 611 }, { "path": "../classic/classic/src/menu/Separator.js", "requires": [ 610 ], "uses": [], "idx": 612 }, { "path": "../classic/classic/src/menu/Menu.js", "requires": [ 438, 454, 466, 610, 611, 612 ], "uses": [ 1, 21, 36, 49, 373, 433 ], "idx": 613 }, { "path": "../classic/classic/src/grid/filters/filter/Base.js", "requires": [ 12, 449, 454, 463, 613 ], "uses": [ 1, 51 ], "idx": 614 }, { "path": "../classic/classic/src/grid/filters/filter/SingleFilter.js", "requires": [ 614 ], "uses": [], "idx": 615 }, { "path": "../classic/classic/src/grid/filters/filter/Boolean.js", "requires": [ 615 ], "uses": [], "idx": 616 }, { "path": "../classic/classic/src/grid/filters/filter/TriFilter.js", "requires": [ 614 ], "uses": [], "idx": 617 }, { "path": "../classic/classic/src/grid/filters/filter/Date.js", "requires": [ 433, 611, 617 ], "uses": [ 449, 454, 463, 543, 679 ], "idx": 618 }, { "path": "../classic/classic/src/grid/filters/filter/List.js", "requires": [ 615 ], "uses": [ 182, 185 ], "idx": 619 }, { "path": "../classic/classic/src/grid/filters/filter/Number.js", "requires": [ 503, 536, 617 ], "uses": [ 538 ], "idx": 620 }, { "path": "../classic/classic/src/grid/filters/filter/String.js", "requires": [ 503, 506, 615 ], "uses": [ 51 ], "idx": 621 }, { "path": "../classic/classic/src/grid/filters/Filters.js", "requires": [ 84, 430, 614, 615, 616, 617, 618, 619, 620, 621 ], "uses": [ 12 ], "idx": 622 }, { "path": "../classic/classic/src/grid/locking/HeaderContainer.js", "requires": [ 570, 588 ], "uses": [], "idx": 623 }, { "path": "../classic/classic/src/grid/locking/View.js", "requires": [ 52, 87, 117, 430, 530, 576 ], "uses": [ 110, 431, 564 ], "idx": 624 }, { "path": "../classic/classic/src/scroll/LockingScroller.js", "requires": [ 110 ], "uses": [ 10 ], "idx": 625 }, { "path": "../classic/classic/src/grid/locking/Lockable.js", "requires": [ 117, 576, 588, 623, 624, 625 ], "uses": [ 1, 34, 110, 185, 422, 433, 451, 452, 466, 568 ], "idx": 626 }, { "path": "../classic/classic/src/grid/plugin/BufferedRenderer.js", "requires": [ 84, 573 ], "uses": [ 1, 49, 117 ], "idx": 627 }, { "path": "../classic/classic/src/grid/plugin/Editing.js", "requires": [ 4, 84, 373, 502, 576, 589 ], "uses": [ 21, 117, 433, 564 ], "idx": 628 }, { "path": "../classic/classic/src/grid/plugin/CellEditing.js", "requires": [ 1, 565, 628 ], "uses": [ 56, 425, 433, 564 ], "idx": 629 }, { "path": "../classic/classic/src/grid/plugin/Clipboard.js", "requires": [ 94, 383, 408 ], "uses": [ 564 ], "idx": 630 }, { "path": "../classic/classic/src/grid/plugin/DragDrop.js", "requires": [ 84 ], "uses": [ 583, 708 ], "idx": 631 }, { "path": "../classic/classic/src/grid/plugin/grouping/Column.js", "requires": [ 117, 610, 611, 612, 613 ], "uses": [], "idx": 632 }, { "path": "../classic/classic/src/grid/plugin/grouping/DragZone.js", "requires": [ 487 ], "uses": [], "idx": 633 }, { "path": "../classic/classic/src/grid/plugin/grouping/DropZone.js", "requires": [ 489 ], "uses": [ 131, 450 ], "idx": 634 }, { "path": "../classic/classic/src/grid/plugin/grouping/Panel.js", "requires": [ 374, 433, 466, 475, 632, 633, 634 ], "uses": [ 438, 612 ], "idx": 635 }, { "path": "../classic/classic/src/grid/plugin/GroupingPanel.js", "requires": [ 362, 635 ], "uses": [], "idx": 636 }, { "path": "../classic/classic/src/grid/plugin/RowEditing.js", "requires": [ 580, 628 ], "uses": [], "idx": 637 }, { "path": "../classic/classic/src/grid/plugin/RowExpander.js", "requires": [ 84, 608 ], "uses": [ 98, 589 ], "idx": 638 }, { "path": "../classic/classic/src/grid/plugin/RowWidget.js", "requires": [ 3, 379, 638 ], "uses": [ 84, 608 ], "idx": 639 }, { "path": "../classic/classic/src/grid/plugin/Summaries.js", "requires": [ 363 ], "uses": [], "idx": 640 }, { "path": "../classic/classic/src/grid/plugin/filterbar/Operator.js", "requires": [ 84 ], "uses": [ 449, 454, 463, 613 ], "idx": 641 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/Base.js", "requires": [ 12, 503, 506, 641 ], "uses": [ 1, 51 ], "idx": 642 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/SingleFilter.js", "requires": [ 642 ], "uses": [], "idx": 643 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/String.js", "requires": [ 503, 506, 643 ], "uses": [], "idx": 644 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/Date.js", "requires": [ 503, 544, 643 ], "uses": [], "idx": 645 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/Number.js", "requires": [ 503, 536, 538, 643 ], "uses": [], "idx": 646 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/Boolean.js", "requires": [ 503, 541, 643 ], "uses": [], "idx": 647 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/None.js", "requires": [ 117, 433, 642 ], "uses": [], "idx": 648 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/List.js", "requires": [ 503, 541, 643 ], "uses": [], "idx": 649 }, { "path": "../classic/classic/src/grid/plugin/filterbar/filters/InList.js", "requires": [ 649 ], "uses": [], "idx": 650 }, { "path": "../classic/classic/src/grid/plugin/filterbar/FilterBar.js", "requires": [ 361, 644, 645, 646, 647, 648, 649, 650 ], "uses": [ 424, 433, 453 ], "idx": 651 }, { "path": "../classic/classic/src/grid/property/Grid.js", "requires": [ 577 ], "uses": [ 21, 98, 163, 425, 433, 502, 503, 506, 536, 538, 541, 544, 564, 565, 576, 629, 653, 656 ], "idx": 652 }, { "path": "../classic/classic/src/grid/property/HeaderContainer.js", "requires": [ 94, 588 ], "uses": [], "idx": 653 }, { "path": "../classic/classic/src/grid/property/Property.js", "requires": [ 163 ], "uses": [], "idx": 654 }, { "path": "../classic/classic/src/grid/property/Reader.js", "requires": [ 165 ], "uses": [ 164 ], "idx": 655 }, { "path": "../classic/classic/src/grid/property/Store.js", "requires": [ 169, 182, 654, 655 ], "uses": [ 177 ], "idx": 656 }, { "path": "../classic/classic/src/grid/selection/Selection.js", "requires": [], "uses": [], "idx": 657 }, { "path": "../classic/classic/src/grid/selection/Cells.js", "requires": [ 657 ], "uses": [ 564 ], "idx": 658 }, { "path": "../classic/classic/src/grid/selection/Columns.js", "requires": [ 657 ], "uses": [ 564 ], "idx": 659 }, { "path": "../classic/classic/src/grid/selection/Replicator.js", "requires": [ 84 ], "uses": [], "idx": 660 }, { "path": "../classic/classic/src/grid/selection/Rows.js", "requires": [ 132, 657 ], "uses": [ 564 ], "idx": 661 }, { "path": "../classic/classic/src/grid/selection/SelectionExtender.js", "requires": [ 476 ], "uses": [ 49, 409 ], "idx": 662 }, { "path": "../classic/classic/src/grid/selection/SpreadsheetModel.js", "requires": [ 527, 597, 657, 658, 659, 661, 662 ], "uses": [ 409, 422, 482, 564, 566, 593 ], "idx": 663 }, { "path": "../classic/classic/src/util/Queue.js", "requires": [], "uses": [], "idx": 664 }, { "path": "../classic/classic/src/layout/ContextItem.js", "requires": [], "uses": [ 56, 67, 73, 419 ], "idx": 665 }, { "path": "../classic/classic/src/layout/Context.js", "requires": [ 67, 73, 382, 420, 664, 665 ], "uses": [], "idx": 666 }, { "path": "../classic/classic/src/layout/SizePolicy.js", "requires": [], "uses": [], "idx": 667 }, { "path": "../classic/classic/src/layout/component/Body.js", "requires": [ 433 ], "uses": [], "idx": 668 }, { "path": "../classic/classic/src/layout/component/FieldSet.js", "requires": [ 668 ], "uses": [], "idx": 669 }, { "path": "../classic/classic/src/layout/container/Absolute.js", "requires": [ 472 ], "uses": [], "idx": 670 }, { "path": "../classic/classic/src/layout/container/Accordion.js", "requires": [ 454 ], "uses": [], "idx": 671 }, { "path": "../classic/classic/src/resizer/BorderSplitter.js", "requires": [ 451 ], "uses": [ 683 ], "idx": 672 }, { "path": "../classic/classic/src/layout/container/Border.js", "requires": [ 73, 119, 421, 672 ], "uses": [ 94, 433 ], "idx": 673 }, { "path": "../classic/classic/src/layout/container/Card.js", "requires": [ 567 ], "uses": [ 49 ], "idx": 674 }, { "path": "../classic/classic/src/layout/container/Center.js", "requires": [ 567 ], "uses": [], "idx": 675 }, { "path": "../classic/classic/src/layout/container/Form.js", "requires": [ 422 ], "uses": [], "idx": 676 }, { "path": "../classic/classic/src/menu/Bar.js", "requires": [ 613 ], "uses": [], "idx": 677 }, { "path": "../classic/classic/src/menu/ColorPicker.js", "requires": [ 554, 613 ], "uses": [ 433, 438 ], "idx": 678 }, { "path": "../classic/classic/src/menu/DatePicker.js", "requires": [ 543, 613 ], "uses": [ 433, 438 ], "idx": 679 }, { "path": "../classic/classic/src/panel/Pinnable.js", "requires": [ 0 ], "uses": [ 433, 446 ], "idx": 680 }, { "path": "../classic/classic/src/plugin/LazyItems.js", "requires": [ 84 ], "uses": [], "idx": 681 }, { "path": "../classic/classic/src/plugin/Responsive.js", "requires": [ 84, 118 ], "uses": [], "idx": 682 }, { "path": "../classic/classic/src/resizer/BorderSplitterTracker.js", "requires": [ 34, 477 ], "uses": [], "idx": 683 }, { "path": "../classic/classic/src/resizer/Handle.js", "requires": [ 117 ], "uses": [], "idx": 684 }, { "path": "../classic/classic/src/resizer/ResizeTracker.js", "requires": [ 476 ], "uses": [ 49 ], "idx": 685 }, { "path": "../classic/classic/src/resizer/Resizer.js", "requires": [ 52 ], "uses": [ 49, 95, 117, 685 ], "idx": 686 }, { "path": "../classic/classic/src/selection/CellModel.js", "requires": [ 528, 564 ], "uses": [], "idx": 687 }, { "path": "../classic/classic/src/selection/RowModel.js", "requires": [ 528, 564 ], "uses": [], "idx": 688 }, { "path": "../classic/classic/src/selection/CheckboxModel.js", "requires": [ 593, 688 ], "uses": [ 422, 564, 566 ], "idx": 689 }, { "path": "../classic/classic/src/selection/TreeModel.js", "requires": [ 688 ], "uses": [], "idx": 690 }, { "path": "../classic/classic/src/slider/Thumb.js", "requires": [ 94, 476 ], "uses": [ 73 ], "idx": 691 }, { "path": "../classic/classic/src/slider/Tip.js", "requires": [ 550 ], "uses": [], "idx": 692 }, { "path": "../classic/classic/src/slider/Multi.js", "requires": [ 94, 95, 502, 691, 692 ], "uses": [ 253 ], "idx": 693 }, { "path": "../classic/classic/src/slider/Single.js", "requires": [ 693 ], "uses": [], "idx": 694 }, { "path": "../classic/classic/src/slider/Widget.js", "requires": [ 89, 693 ], "uses": [ 73, 94 ], "idx": 695 }, { "path": "../classic/classic/src/state/CookieProvider.js", "requires": [ 114 ], "uses": [], "idx": 696 }, { "path": "../classic/classic/src/state/LocalStorageProvider.js", "requires": [ 114, 406 ], "uses": [], "idx": 697 }, { "path": "../classic/classic/src/tab/Tab.js", "requires": [ 439 ], "uses": [], "idx": 698 }, { "path": "../classic/classic/src/tab/Bar.js", "requires": [ 35, 444, 668, 698 ], "uses": [ 34 ], "idx": 699 }, { "path": "../classic/classic/src/tab/Panel.js", "requires": [ 466, 674, 699 ], "uses": [ 433, 698 ], "idx": 700 }, { "path": "../classic/classic/src/toolbar/Breadcrumb.js", "requires": [ 250, 424, 440 ], "uses": [ 24, 185 ], "idx": 701 }, { "path": "../classic/classic/src/toolbar/Fill.js", "requires": [ 117, 455 ], "uses": [], "idx": 702 }, { "path": "../classic/classic/src/toolbar/Spacer.js", "requires": [ 117, 455 ], "uses": [], "idx": 703 }, { "path": "../classic/classic/src/tree/Column.js", "requires": [ 589 ], "uses": [ 78 ], "idx": 704 }, { "path": "../classic/classic/src/tree/NavigationModel.js", "requires": [ 571 ], "uses": [ 36 ], "idx": 705 }, { "path": "../classic/classic/src/tree/View.js", "requires": [ 576 ], "uses": [ 49 ], "idx": 706 }, { "path": "../classic/classic/src/tree/Panel.js", "requires": [ 250, 568, 690, 704, 705, 706 ], "uses": [ 185, 422, 566 ], "idx": 707 }, { "path": "../classic/classic/src/view/DragZone.js", "requires": [ 487 ], "uses": [ 49, 95 ], "idx": 708 }, { "path": "../classic/classic/src/tree/ViewDragZone.js", "requires": [ 708 ], "uses": [ 95 ], "idx": 709 }, { "path": "../classic/classic/src/tree/ViewDropZone.js", "requires": [ 582 ], "uses": [], "idx": 710 }, { "path": "../classic/classic/src/tree/plugin/TreeViewDragDrop.js", "requires": [ 84 ], "uses": [ 709, 710 ], "idx": 711 }, { "path": "../classic/classic/src/view/MultiSelectorSearch.js", "requires": [ 466 ], "uses": [ 51, 185, 463, 503, 506, 567, 577 ], "idx": 712 }, { "path": "../classic/classic/src/view/MultiSelector.js", "requires": [ 463, 567, 577, 712 ], "uses": [], "idx": 713 }, { "path": "../classic/classic/src/window/Toast.js", "requires": [ 499 ], "uses": [ 1 ], "idx": 714 } ], "classes": { "Ext.AbstractManager": { "idx": 6, "alias": [], "alternates": [] }, "Ext.Action": { "idx": 416, "alias": [], "alternates": [] }, "Ext.Ajax": { "idx": 18, "alias": [], "alternates": [] }, "Ext.AnimationQueue": { "idx": 19, "alias": [], "alternates": [] }, "Ext.Component": { "idx": 117, "alias": [ "widget.box", "widget.component" ], "alternates": [ "Ext.AbstractComponent" ] }, "Ext.ComponentLoader": { "idx": 418, "alias": [], "alternates": [] }, "Ext.ComponentManager": { "idx": 21, "alias": [], "alternates": [ "Ext.ComponentMgr" ] }, "Ext.ComponentQuery": { "idx": 24, "alias": [], "alternates": [] }, "Ext.Deferred": { "idx": 11, "alias": [], "alternates": [] }, "Ext.Editor": { "idx": 426, "alias": [ "widget.editor" ], "alternates": [] }, "Ext.ElementLoader": { "idx": 417, "alias": [], "alternates": [] }, "Ext.EventManager": { "idx": 427, "alias": [], "alternates": [] }, "Ext.Evented": { "idx": 25, "alias": [], "alternates": [ "Ext.EventedBase" ] }, "Ext.GlobalEvents": { "idx": 77, "alias": [], "alternates": [ "Ext.globalEvents" ] }, "Ext.Glyph": { "idx": 78, "alias": [], "alternates": [] }, "Ext.Img": { "idx": 429, "alias": [ "widget.image", "widget.imagecomponent" ], "alternates": [] }, "Ext.LoadMask": { "idx": 431, "alias": [ "widget.loadmask" ], "alternates": [] }, "Ext.Mixin": { "idx": 0, "alias": [], "alternates": [] }, "Ext.Progress": { "idx": 93, "alias": [ "widget.progress", "widget.progressbarwidget" ], "alternates": [ "Ext.ProgressBarWidget" ] }, "Ext.ProgressBar": { "idx": 435, "alias": [ "widget.progressbar" ], "alternates": [] }, "Ext.ProgressBase": { "idx": 92, "alias": [], "alternates": [] }, "Ext.Promise": { "idx": 10, "alias": [], "alternates": [] }, "Ext.Responsive": { "idx": 118, "alias": [], "alternates": [] }, "Ext.ResponsiveWidget": { "idx": 91, "alias": [], "alternates": [] }, "Ext.TaskQueue": { "idx": 40, "alias": [], "alternates": [] }, "Ext.Template": { "idx": 95, "alias": [], "alternates": [] }, "Ext.Widget": { "idx": 89, "alias": [ "widget.widget" ], "alternates": [ "Ext.Gadget" ] }, "Ext.XTemplate": { "idx": 98, "alias": [], "alternates": [] }, "Ext.ZIndexManager": { "idx": 423, "alias": [], "alternates": [ "Ext.WindowGroup" ] }, "Ext.app.Application": { "idx": 188, "alias": [], "alternates": [] }, "Ext.app.BaseController": { "idx": 128, "alias": [], "alternates": [] }, "Ext.app.Controller": { "idx": 187, "alias": [], "alternates": [] }, "Ext.app.EventBus": { "idx": 120, "alias": [], "alternates": [] }, "Ext.app.EventDomain": { "idx": 99, "alias": [], "alternates": [] }, "Ext.app.Profile": { "idx": 189, "alias": [], "alternates": [] }, "Ext.app.Util": { "idx": 129, "alias": [], "alternates": [] }, "Ext.app.ViewController": { "idx": 191, "alias": [ "controller.controller" ], "alternates": [] }, "Ext.app.ViewModel": { "idx": 225, "alias": [ "viewmodel.default" ], "alternates": [] }, "Ext.app.bind.AbstractStub": { "idx": 206, "alias": [], "alternates": [] }, "Ext.app.bind.BaseBinding": { "idx": 204, "alias": [], "alternates": [] }, "Ext.app.bind.Binding": { "idx": 205, "alias": [], "alternates": [] }, "Ext.app.bind.Formula": { "idx": 211, "alias": [], "alternates": [] }, "Ext.app.bind.LinkStub": { "idx": 208, "alias": [], "alternates": [] }, "Ext.app.bind.Multi": { "idx": 210, "alias": [], "alternates": [] }, "Ext.app.bind.Parser": { "idx": 221, "alias": [], "alternates": [] }, "Ext.app.bind.RootStub": { "idx": 209, "alias": [], "alternates": [] }, "Ext.app.bind.Stub": { "idx": 207, "alias": [], "alternates": [] }, "Ext.app.bind.Template": { "idx": 222, "alias": [], "alternates": [] }, "Ext.app.bind.TemplateBinding": { "idx": 223, "alias": [], "alternates": [] }, "Ext.app.domain.Component": { "idx": 100, "alias": [], "alternates": [] }, "Ext.app.domain.Controller": { "idx": 226, "alias": [], "alternates": [] }, "Ext.app.domain.Direct": { "idx": 229, "alias": [], "alternates": [] }, "Ext.app.domain.Global": { "idx": 121, "alias": [], "alternates": [] }, "Ext.app.domain.Store": { "idx": 186, "alias": [], "alternates": [] }, "Ext.app.domain.View": { "idx": 190, "alias": [], "alternates": [] }, "Ext.button.Button": { "idx": 439, "alias": [ "widget.button" ], "alternates": [ "Ext.Button" ] }, "Ext.button.Cycle": { "idx": 441, "alias": [ "widget.cycle" ], "alternates": [ "Ext.CycleButton" ] }, "Ext.button.Manager": { "idx": 437, "alias": [], "alternates": [ "Ext.ButtonToggleManager" ] }, "Ext.button.Segmented": { "idx": 443, "alias": [ "widget.segmentedbutton" ], "alternates": [] }, "Ext.button.Split": { "idx": 440, "alias": [ "widget.splitbutton" ], "alternates": [ "Ext.SplitButton" ] }, "Ext.container.ButtonGroup": { "idx": 468, "alias": [ "widget.buttongroup" ], "alternates": [ "Ext.ButtonGroup" ] }, "Ext.container.Container": { "idx": 424, "alias": [ "widget.container" ], "alternates": [ "Ext.Container", "Ext.AbstractContainer" ] }, "Ext.container.DockingContainer": { "idx": 465, "alias": [], "alternates": [] }, "Ext.container.Monitor": { "idx": 469, "alias": [], "alternates": [] }, "Ext.container.Viewport": { "idx": 471, "alias": [ "widget.viewport" ], "alternates": [ "Ext.Viewport" ] }, "Ext.dashboard.Column": { "idx": 474, "alias": [ "widget.dashboard-column" ], "alternates": [] }, "Ext.dashboard.Dashboard": { "idx": 486, "alias": [ "widget.dashboard" ], "alternates": [] }, "Ext.dashboard.DropZone": { "idx": 484, "alias": [], "alternates": [] }, "Ext.dashboard.Panel": { "idx": 473, "alias": [ "widget.dashboard-panel" ], "alternates": [] }, "Ext.dashboard.Part": { "idx": 485, "alias": [ "part.part" ], "alternates": [] }, "Ext.data.AbstractStore": { "idx": 143, "alias": [], "alternates": [] }, "Ext.data.ArrayStore": { "idx": 184, "alias": [ "store.array" ], "alternates": [ "Ext.data.SimpleStore" ] }, "Ext.data.Batch": { "idx": 194, "alias": [], "alternates": [] }, "Ext.data.BufferedStore": { "idx": 231, "alias": [ "store.buffered" ], "alternates": [] }, "Ext.data.ChainedStore": { "idx": 224, "alias": [ "store.chained" ], "alternates": [] }, "Ext.data.ClientStore": { "idx": 232, "alias": [ "store.clientstorage" ], "alternates": [] }, "Ext.data.Connection": { "idx": 17, "alias": [], "alternates": [] }, "Ext.data.DirectStore": { "idx": 234, "alias": [ "store.direct" ], "alternates": [] }, "Ext.data.Error": { "idx": 144, "alias": [], "alternates": [] }, "Ext.data.ErrorCollection": { "idx": 145, "alias": [], "alternates": [ "Ext.data.Errors" ] }, "Ext.data.Group": { "idx": 172, "alias": [], "alternates": [] }, "Ext.data.JsonP": { "idx": 235, "alias": [], "alternates": [] }, "Ext.data.JsonPStore": { "idx": 237, "alias": [ "store.jsonp" ], "alternates": [] }, "Ext.data.JsonStore": { "idx": 238, "alias": [ "store.json" ], "alternates": [] }, "Ext.data.LocalStore": { "idx": 173, "alias": [], "alternates": [] }, "Ext.data.Model": { "idx": 163, "alias": [], "alternates": [ "Ext.data.Record" ] }, "Ext.data.ModelManager": { "idx": 239, "alias": [], "alternates": [ "Ext.ModelMgr" ] }, "Ext.data.NodeInterface": { "idx": 240, "alias": [], "alternates": [] }, "Ext.data.NodeStore": { "idx": 243, "alias": [ "store.node" ], "alternates": [] }, "Ext.data.PageMap": { "idx": 230, "alias": [], "alternates": [] }, "Ext.data.ProxyStore": { "idx": 170, "alias": [], "alternates": [] }, "Ext.data.Query": { "idx": 248, "alias": [ "query.default" ], "alternates": [] }, "Ext.data.Range": { "idx": 133, "alias": [], "alternates": [] }, "Ext.data.Request": { "idx": 249, "alias": [], "alternates": [] }, "Ext.data.ResultSet": { "idx": 164, "alias": [], "alternates": [] }, "Ext.data.Session": { "idx": 202, "alias": [], "alternates": [] }, "Ext.data.SortTypes": { "idx": 151, "alias": [], "alternates": [] }, "Ext.data.Store": { "idx": 182, "alias": [ "store.store" ], "alternates": [] }, "Ext.data.StoreManager": { "idx": 185, "alias": [], "alternates": [ "Ext.StoreMgr", "Ext.data.StoreMgr", "Ext.StoreManager" ] }, "Ext.data.TreeModel": { "idx": 242, "alias": [], "alternates": [] }, "Ext.data.TreeStore": { "idx": 250, "alias": [ "store.tree" ], "alternates": [] }, "Ext.data.Types": { "idx": 251, "alias": [], "alternates": [] }, "Ext.data.Validation": { "idx": 252, "alias": [], "alternates": [] }, "Ext.data.XmlStore": { "idx": 257, "alias": [ "store.xml" ], "alternates": [] }, "Ext.data.field.Array": { "idx": 155, "alias": [ "data.field.array" ], "alternates": [] }, "Ext.data.field.Boolean": { "idx": 156, "alias": [ "data.field.bool", "data.field.boolean" ], "alternates": [] }, "Ext.data.field.Date": { "idx": 157, "alias": [ "data.field.date" ], "alternates": [] }, "Ext.data.field.Field": { "idx": 154, "alias": [ "data.field.auto" ], "alternates": [ "Ext.data.Field" ] }, "Ext.data.field.Integer": { "idx": 158, "alias": [ "data.field.int", "data.field.integer" ], "alternates": [] }, "Ext.data.field.Number": { "idx": 159, "alias": [ "data.field.float", "data.field.number" ], "alternates": [] }, "Ext.data.field.String": { "idx": 160, "alias": [ "data.field.string" ], "alternates": [] }, "Ext.data.flash.BinaryXhr": { "idx": 14, "alias": [], "alternates": [] }, "Ext.data.identifier.Generator": { "idx": 161, "alias": [ "data.identifier.default" ], "alternates": [] }, "Ext.data.identifier.Negative": { "idx": 258, "alias": [ "data.identifier.negative" ], "alternates": [] }, "Ext.data.identifier.Sequential": { "idx": 162, "alias": [ "data.identifier.sequential" ], "alternates": [] }, "Ext.data.identifier.Uuid": { "idx": 259, "alias": [ "data.identifier.uuid" ], "alternates": [] }, "Ext.data.matrix.Matrix": { "idx": 197, "alias": [], "alternates": [] }, "Ext.data.matrix.Side": { "idx": 196, "alias": [], "alternates": [] }, "Ext.data.matrix.Slice": { "idx": 195, "alias": [], "alternates": [] }, "Ext.data.operation.Create": { "idx": 147, "alias": [ "data.operation.create" ], "alternates": [] }, "Ext.data.operation.Destroy": { "idx": 148, "alias": [ "data.operation.destroy" ], "alternates": [] }, "Ext.data.operation.Operation": { "idx": 146, "alias": [], "alternates": [ "Ext.data.Operation" ] }, "Ext.data.operation.Read": { "idx": 149, "alias": [ "data.operation.read" ], "alternates": [] }, "Ext.data.operation.Update": { "idx": 150, "alias": [ "data.operation.update" ], "alternates": [] }, "Ext.data.proxy.Ajax": { "idx": 175, "alias": [ "proxy.ajax" ], "alternates": [ "Ext.data.HttpProxy", "Ext.data.AjaxProxy" ] }, "Ext.data.proxy.Client": { "idx": 168, "alias": [], "alternates": [ "Ext.data.ClientProxy" ] }, "Ext.data.proxy.Direct": { "idx": 233, "alias": [ "proxy.direct" ], "alternates": [ "Ext.data.DirectProxy" ] }, "Ext.data.proxy.JsonP": { "idx": 236, "alias": [ "proxy.jsonp", "proxy.scripttag" ], "alternates": [ "Ext.data.ScriptTagProxy" ] }, "Ext.data.proxy.LocalStorage": { "idx": 261, "alias": [ "proxy.localstorage" ], "alternates": [ "Ext.data.LocalStorageProxy" ] }, "Ext.data.proxy.Memory": { "idx": 169, "alias": [ "proxy.memory" ], "alternates": [ "Ext.data.MemoryProxy" ] }, "Ext.data.proxy.Proxy": { "idx": 167, "alias": [ "proxy.proxy" ], "alternates": [ "Ext.data.DataProxy", "Ext.data.Proxy" ] }, "Ext.data.proxy.Rest": { "idx": 262, "alias": [ "proxy.rest" ], "alternates": [ "Ext.data.RestProxy" ] }, "Ext.data.proxy.Server": { "idx": 174, "alias": [ "proxy.server" ], "alternates": [ "Ext.data.ServerProxy" ] }, "Ext.data.proxy.SessionStorage": { "idx": 263, "alias": [ "proxy.sessionstorage" ], "alternates": [ "Ext.data.SessionStorageProxy" ] }, "Ext.data.proxy.WebStorage": { "idx": 260, "alias": [], "alternates": [ "Ext.data.WebStorageProxy" ] }, "Ext.data.query.Compiler": { "idx": 244, "alias": [], "alternates": [] }, "Ext.data.query.Converter": { "idx": 245, "alias": [], "alternates": [] }, "Ext.data.query.Parser": { "idx": 247, "alias": [], "alternates": [] }, "Ext.data.query.Stringifier": { "idx": 246, "alias": [], "alternates": [] }, "Ext.data.reader.Array": { "idx": 183, "alias": [ "reader.array" ], "alternates": [ "Ext.data.ArrayReader" ] }, "Ext.data.reader.Json": { "idx": 176, "alias": [ "reader.json" ], "alternates": [ "Ext.data.JsonReader" ] }, "Ext.data.reader.Reader": { "idx": 165, "alias": [ "reader.base" ], "alternates": [ "Ext.data.Reader", "Ext.data.DataReader" ] }, "Ext.data.reader.Xml": { "idx": 255, "alias": [ "reader.xml" ], "alternates": [ "Ext.data.XmlReader" ] }, "Ext.data.request.Ajax": { "idx": 15, "alias": [ "request.ajax" ], "alternates": [] }, "Ext.data.request.Base": { "idx": 13, "alias": [], "alternates": [] }, "Ext.data.request.Form": { "idx": 16, "alias": [ "request.form" ], "alternates": [] }, "Ext.data.schema.Association": { "idx": 136, "alias": [], "alternates": [] }, "Ext.data.schema.ManyToMany": { "idx": 139, "alias": [], "alternates": [] }, "Ext.data.schema.ManyToOne": { "idx": 138, "alias": [], "alternates": [] }, "Ext.data.schema.Namer": { "idx": 141, "alias": [ "namer.default" ], "alternates": [] }, "Ext.data.schema.OneToOne": { "idx": 137, "alias": [], "alternates": [] }, "Ext.data.schema.Role": { "idx": 135, "alias": [], "alternates": [] }, "Ext.data.schema.Schema": { "idx": 142, "alias": [ "schema.default" ], "alternates": [] }, "Ext.data.session.BatchVisitor": { "idx": 200, "alias": [], "alternates": [] }, "Ext.data.session.ChangesVisitor": { "idx": 198, "alias": [], "alternates": [] }, "Ext.data.session.ChildChangesVisitor": { "idx": 199, "alias": [], "alternates": [] }, "Ext.data.summary.Average": { "idx": 269, "alias": [ "data.summary.average" ], "alternates": [] }, "Ext.data.summary.Base": { "idx": 153, "alias": [ "data.summary.base" ], "alternates": [] }, "Ext.data.summary.Count": { "idx": 270, "alias": [ "data.summary.count" ], "alternates": [] }, "Ext.data.summary.Max": { "idx": 271, "alias": [ "data.summary.max" ], "alternates": [] }, "Ext.data.summary.Min": { "idx": 272, "alias": [ "data.summary.min" ], "alternates": [] }, "Ext.data.summary.None": { "idx": 273, "alias": [ "data.summary.none" ], "alternates": [] }, "Ext.data.summary.StdDev": { "idx": 275, "alias": [ "data.summary.stddev" ], "alternates": [] }, "Ext.data.summary.StdDevP": { "idx": 277, "alias": [ "data.summary.stddevp" ], "alternates": [] }, "Ext.data.summary.Sum": { "idx": 268, "alias": [ "data.summary.sum" ], "alternates": [] }, "Ext.data.summary.Variance": { "idx": 274, "alias": [ "data.summary.variance" ], "alternates": [] }, "Ext.data.summary.VarianceP": { "idx": 276, "alias": [ "data.summary.variancep" ], "alternates": [] }, "Ext.data.validator.AbstractDate": { "idx": 278, "alias": [], "alternates": [] }, "Ext.data.validator.Bound": { "idx": 279, "alias": [ "data.validator.bound" ], "alternates": [] }, "Ext.data.validator.CIDRv4": { "idx": 281, "alias": [ "data.validator.cidrv4" ], "alternates": [] }, "Ext.data.validator.CIDRv6": { "idx": 282, "alias": [ "data.validator.cidrv6" ], "alternates": [] }, "Ext.data.validator.Currency": { "idx": 284, "alias": [ "data.validator.currency" ], "alternates": [] }, "Ext.data.validator.CurrencyUS": { "idx": 285, "alias": [ "data.validator.currency-us" ], "alternates": [] }, "Ext.data.validator.Date": { "idx": 286, "alias": [ "data.validator.date" ], "alternates": [] }, "Ext.data.validator.DateTime": { "idx": 287, "alias": [ "data.validator.datetime" ], "alternates": [] }, "Ext.data.validator.Email": { "idx": 288, "alias": [ "data.validator.email" ], "alternates": [] }, "Ext.data.validator.Exclusion": { "idx": 290, "alias": [ "data.validator.exclusion" ], "alternates": [] }, "Ext.data.validator.Format": { "idx": 280, "alias": [ "data.validator.format" ], "alternates": [] }, "Ext.data.validator.IPAddress": { "idx": 291, "alias": [ "data.validator.ipaddress" ], "alternates": [] }, "Ext.data.validator.Inclusion": { "idx": 292, "alias": [ "data.validator.inclusion" ], "alternates": [] }, "Ext.data.validator.Length": { "idx": 293, "alias": [ "data.validator.length" ], "alternates": [] }, "Ext.data.validator.List": { "idx": 289, "alias": [ "data.validator.list" ], "alternates": [] }, "Ext.data.validator.NotNull": { "idx": 295, "alias": [ "data.validator.notnull" ], "alternates": [] }, "Ext.data.validator.Number": { "idx": 283, "alias": [ "data.validator.number" ], "alternates": [] }, "Ext.data.validator.Phone": { "idx": 296, "alias": [ "data.validator.phone" ], "alternates": [] }, "Ext.data.validator.Presence": { "idx": 294, "alias": [ "data.validator.presence" ], "alternates": [] }, "Ext.data.validator.Range": { "idx": 297, "alias": [ "data.validator.range" ], "alternates": [] }, "Ext.data.validator.Time": { "idx": 298, "alias": [ "data.validator.time" ], "alternates": [] }, "Ext.data.validator.Url": { "idx": 299, "alias": [ "data.validator.url" ], "alternates": [] }, "Ext.data.validator.Validator": { "idx": 152, "alias": [ "data.validator.base" ], "alternates": [] }, "Ext.data.virtual.Group": { "idx": 300, "alias": [], "alternates": [] }, "Ext.data.virtual.Page": { "idx": 301, "alias": [], "alternates": [] }, "Ext.data.virtual.PageMap": { "idx": 302, "alias": [], "alternates": [] }, "Ext.data.virtual.Range": { "idx": 303, "alias": [], "alternates": [] }, "Ext.data.virtual.Store": { "idx": 304, "alias": [ "store.virtual" ], "alternates": [] }, "Ext.data.writer.Json": { "idx": 177, "alias": [ "writer.json" ], "alternates": [ "Ext.data.JsonWriter" ] }, "Ext.data.writer.Writer": { "idx": 166, "alias": [ "writer.base" ], "alternates": [ "Ext.data.DataWriter", "Ext.data.Writer" ] }, "Ext.data.writer.Xml": { "idx": 256, "alias": [ "writer.xml" ], "alternates": [ "Ext.data.XmlWriter" ] }, "Ext.dd.DD": { "idx": 457, "alias": [], "alternates": [] }, "Ext.dd.DDProxy": { "idx": 458, "alias": [], "alternates": [] }, "Ext.dd.DDTarget": { "idx": 481, "alias": [], "alternates": [] }, "Ext.dd.DragDrop": { "idx": 456, "alias": [], "alternates": [] }, "Ext.dd.DragDropManager": { "idx": 450, "alias": [], "alternates": [ "Ext.dd.DragDropMgr", "Ext.dd.DDM" ] }, "Ext.dd.DragSource": { "idx": 460, "alias": [], "alternates": [] }, "Ext.dd.DragTracker": { "idx": 476, "alias": [], "alternates": [] }, "Ext.dd.DragZone": { "idx": 487, "alias": [], "alternates": [] }, "Ext.dd.DropTarget": { "idx": 483, "alias": [], "alternates": [] }, "Ext.dd.DropZone": { "idx": 489, "alias": [], "alternates": [] }, "Ext.dd.Registry": { "idx": 488, "alias": [], "alternates": [] }, "Ext.dd.ScrollManager": { "idx": 482, "alias": [], "alternates": [] }, "Ext.dd.StatusProxy": { "idx": 459, "alias": [], "alternates": [] }, "Ext.direct.Event": { "idx": 305, "alias": [ "direct.event" ], "alternates": [] }, "Ext.direct.ExceptionEvent": { "idx": 307, "alias": [ "direct.exception" ], "alternates": [] }, "Ext.direct.JsonProvider": { "idx": 308, "alias": [ "direct.jsonprovider" ], "alternates": [] }, "Ext.direct.Manager": { "idx": 227, "alias": [], "alternates": [] }, "Ext.direct.PollingProvider": { "idx": 309, "alias": [ "direct.pollingprovider" ], "alternates": [] }, "Ext.direct.Provider": { "idx": 228, "alias": [ "direct.provider" ], "alternates": [] }, "Ext.direct.RemotingEvent": { "idx": 306, "alias": [ "direct.rpc" ], "alternates": [] }, "Ext.direct.RemotingMethod": { "idx": 310, "alias": [], "alternates": [] }, "Ext.direct.RemotingProvider": { "idx": 312, "alias": [ "direct.remotingprovider" ], "alternates": [] }, "Ext.direct.Transaction": { "idx": 311, "alias": [ "direct.transaction" ], "alternates": [] }, "Ext.dom.ButtonElement": { "idx": 436, "alias": [], "alternates": [] }, "Ext.dom.CompositeElement": { "idx": 102, "alias": [], "alternates": [ "Ext.CompositeElement" ] }, "Ext.dom.CompositeElementLite": { "idx": 76, "alias": [], "alternates": [ "Ext.CompositeElementLite" ] }, "Ext.dom.Element": { "idx": 49, "alias": [], "alternates": [ "Ext.Element" ] }, "Ext.dom.ElementEvent": { "idx": 31, "alias": [], "alternates": [] }, "Ext.dom.Fly": { "idx": 75, "alias": [], "alternates": [ "Ext.dom.Element.Fly" ] }, "Ext.dom.GarbageCollector": { "idx": 313, "alias": [], "alternates": [] }, "Ext.dom.Helper": { "idx": 253, "alias": [], "alternates": [ "Ext.DomHelper", "Ext.core.DomHelper" ] }, "Ext.dom.Layer": { "idx": 490, "alias": [], "alternates": [ "Ext.Layer" ] }, "Ext.dom.Query": { "idx": 254, "alias": [], "alternates": [ "Ext.core.DomQuery", "Ext.DomQuery" ] }, "Ext.dom.Shadow": { "idx": 29, "alias": [], "alternates": [ "Ext.Shadow" ] }, "Ext.dom.Shim": { "idx": 30, "alias": [], "alternates": [] }, "Ext.dom.TouchAction": { "idx": 314, "alias": [], "alternates": [] }, "Ext.dom.Underlay": { "idx": 28, "alias": [], "alternates": [] }, "Ext.dom.UnderlayPool": { "idx": 27, "alias": [], "alternates": [] }, "Ext.drag.Constraint": { "idx": 315, "alias": [ "drag.constraint.base" ], "alternates": [] }, "Ext.drag.Info": { "idx": 316, "alias": [], "alternates": [] }, "Ext.drag.Item": { "idx": 317, "alias": [], "alternates": [] }, "Ext.drag.Manager": { "idx": 318, "alias": [], "alternates": [] }, "Ext.drag.Source": { "idx": 319, "alias": [], "alternates": [] }, "Ext.drag.Target": { "idx": 320, "alias": [], "alternates": [] }, "Ext.drag.proxy.None": { "idx": 321, "alias": [ "drag.proxy.none" ], "alternates": [] }, "Ext.drag.proxy.Original": { "idx": 322, "alias": [ "drag.proxy.original" ], "alternates": [] }, "Ext.drag.proxy.Placeholder": { "idx": 323, "alias": [ "drag.proxy.placeholder" ], "alternates": [] }, "Ext.event.Event": { "idx": 36, "alias": [], "alternates": [ "Ext.EventObjectImpl" ] }, "Ext.event.gesture.DoubleTap": { "idx": 326, "alias": [], "alternates": [] }, "Ext.event.gesture.Drag": { "idx": 327, "alias": [], "alternates": [] }, "Ext.event.gesture.EdgeSwipe": { "idx": 329, "alias": [], "alternates": [] }, "Ext.event.gesture.LongPress": { "idx": 330, "alias": [], "alternates": [] }, "Ext.event.gesture.MultiTouch": { "idx": 331, "alias": [], "alternates": [] }, "Ext.event.gesture.Pinch": { "idx": 332, "alias": [], "alternates": [] }, "Ext.event.gesture.Recognizer": { "idx": 324, "alias": [], "alternates": [] }, "Ext.event.gesture.Rotate": { "idx": 333, "alias": [], "alternates": [] }, "Ext.event.gesture.SingleTouch": { "idx": 325, "alias": [], "alternates": [] }, "Ext.event.gesture.Swipe": { "idx": 328, "alias": [], "alternates": [] }, "Ext.event.gesture.Tap": { "idx": 334, "alias": [], "alternates": [] }, "Ext.event.publisher.Dom": { "idx": 37, "alias": [], "alternates": [] }, "Ext.event.publisher.ElementPaint": { "idx": 48, "alias": [], "alternates": [] }, "Ext.event.publisher.ElementSize": { "idx": 44, "alias": [], "alternates": [] }, "Ext.event.publisher.Focus": { "idx": 335, "alias": [], "alternates": [] }, "Ext.event.publisher.Gesture": { "idx": 38, "alias": [], "alternates": [] }, "Ext.event.publisher.MouseEnterLeave": { "idx": 492, "alias": [], "alternates": [] }, "Ext.event.publisher.Publisher": { "idx": 32, "alias": [], "alternates": [] }, "Ext.field.InputMask": { "idx": 336, "alias": [], "alternates": [] }, "Ext.flash.Component": { "idx": 493, "alias": [ "widget.flash" ], "alternates": [ "Ext.FlashComponent" ] }, "Ext.form.Basic": { "idx": 509, "alias": [], "alternates": [ "Ext.form.BasicForm" ] }, "Ext.form.CheckboxGroup": { "idx": 516, "alias": [ "widget.checkboxgroup" ], "alternates": [] }, "Ext.form.CheckboxManager": { "idx": 514, "alias": [], "alternates": [] }, "Ext.form.FieldAncestor": { "idx": 511, "alias": [], "alternates": [] }, "Ext.form.FieldContainer": { "idx": 512, "alias": [ "widget.fieldcontainer" ], "alternates": [] }, "Ext.form.FieldSet": { "idx": 517, "alias": [ "widget.fieldset" ], "alternates": [] }, "Ext.form.Label": { "idx": 518, "alias": [ "widget.label" ], "alternates": [] }, "Ext.form.Labelable": { "idx": 500, "alias": [], "alternates": [] }, "Ext.form.Panel": { "idx": 519, "alias": [ "widget.form" ], "alternates": [ "Ext.FormPanel", "Ext.form.FormPanel" ] }, "Ext.form.RadioGroup": { "idx": 522, "alias": [ "widget.radiogroup" ], "alternates": [] }, "Ext.form.RadioManager": { "idx": 520, "alias": [], "alternates": [] }, "Ext.form.action.Action": { "idx": 494, "alias": [], "alternates": [ "Ext.form.Action" ] }, "Ext.form.action.DirectAction": { "idx": 523, "alias": [], "alternates": [] }, "Ext.form.action.DirectLoad": { "idx": 524, "alias": [ "formaction.directload" ], "alternates": [ "Ext.form.Action.DirectLoad" ] }, "Ext.form.action.DirectSubmit": { "idx": 525, "alias": [ "formaction.directsubmit" ], "alternates": [ "Ext.form.Action.DirectSubmit" ] }, "Ext.form.action.Load": { "idx": 495, "alias": [ "formaction.load" ], "alternates": [ "Ext.form.Action.Load" ] }, "Ext.form.action.StandardSubmit": { "idx": 497, "alias": [ "formaction.standardsubmit" ], "alternates": [] }, "Ext.form.action.Submit": { "idx": 496, "alias": [ "formaction.submit" ], "alternates": [ "Ext.form.Action.Submit" ] }, "Ext.form.field.Base": { "idx": 502, "alias": [ "widget.field" ], "alternates": [ "Ext.form.Field", "Ext.form.BaseField" ] }, "Ext.form.field.Checkbox": { "idx": 515, "alias": [ "widget.checkbox", "widget.checkboxfield" ], "alternates": [ "Ext.form.Checkbox" ] }, "Ext.form.field.ComboBox": { "idx": 541, "alias": [ "widget.combo", "widget.combobox" ], "alternates": [ "Ext.form.ComboBox" ] }, "Ext.form.field.Date": { "idx": 544, "alias": [ "widget.datefield" ], "alternates": [ "Ext.form.DateField", "Ext.form.Date" ] }, "Ext.form.field.Display": { "idx": 545, "alias": [ "widget.displayfield" ], "alternates": [ "Ext.form.DisplayField", "Ext.form.Display" ] }, "Ext.form.field.Field": { "idx": 501, "alias": [], "alternates": [] }, "Ext.form.field.File": { "idx": 548, "alias": [ "widget.filefield", "widget.fileuploadfield" ], "alternates": [ "Ext.form.FileUploadField", "Ext.ux.form.FileUploadField", "Ext.form.File" ] }, "Ext.form.field.FileButton": { "idx": 546, "alias": [ "widget.filebutton" ], "alternates": [] }, "Ext.form.field.Hidden": { "idx": 549, "alias": [ "widget.hidden", "widget.hiddenfield" ], "alternates": [ "Ext.form.Hidden" ] }, "Ext.form.field.HtmlEditor": { "idx": 558, "alias": [ "widget.htmleditor" ], "alternates": [ "Ext.form.HtmlEditor" ] }, "Ext.form.field.Number": { "idx": 538, "alias": [ "widget.numberfield" ], "alternates": [ "Ext.form.NumberField", "Ext.form.Number" ] }, "Ext.form.field.Picker": { "idx": 526, "alias": [ "widget.pickerfield" ], "alternates": [ "Ext.form.Picker" ] }, "Ext.form.field.Radio": { "idx": 521, "alias": [ "widget.radio", "widget.radiofield" ], "alternates": [ "Ext.form.Radio" ] }, "Ext.form.field.Spinner": { "idx": 537, "alias": [ "widget.spinnerfield" ], "alternates": [ "Ext.form.Spinner" ] }, "Ext.form.field.Tag": { "idx": 560, "alias": [ "widget.tagfield" ], "alternates": [] }, "Ext.form.field.Text": { "idx": 506, "alias": [ "widget.textfield" ], "alternates": [ "Ext.form.TextField", "Ext.form.Text" ] }, "Ext.form.field.TextArea": { "idx": 507, "alias": [ "widget.textarea", "widget.textareafield" ], "alternates": [ "Ext.form.TextArea" ] }, "Ext.form.field.Time": { "idx": 562, "alias": [ "widget.timefield" ], "alternates": [ "Ext.form.TimeField", "Ext.form.Time" ] }, "Ext.form.field.Trigger": { "idx": 563, "alias": [ "widget.trigger", "widget.triggerfield" ], "alternates": [ "Ext.form.TriggerField", "Ext.form.TwinTriggerField", "Ext.form.Trigger" ] }, "Ext.form.field.VTypes": { "idx": 504, "alias": [], "alternates": [ "Ext.form.VTypes" ] }, "Ext.form.trigger.Component": { "idx": 547, "alias": [ "trigger.component" ], "alternates": [] }, "Ext.form.trigger.Spinner": { "idx": 536, "alias": [ "trigger.spinner" ], "alternates": [] }, "Ext.form.trigger.Trigger": { "idx": 505, "alias": [ "trigger.trigger" ], "alternates": [] }, "Ext.fx.Anim": { "idx": 73, "alias": [], "alternates": [] }, "Ext.fx.Animation": { "idx": 346, "alias": [], "alternates": [] }, "Ext.fx.Animator": { "idx": 68, "alias": [], "alternates": [] }, "Ext.fx.CubicBezier": { "idx": 69, "alias": [], "alternates": [] }, "Ext.fx.DrawPath": { "idx": 71, "alias": [], "alternates": [] }, "Ext.fx.Easing": { "idx": 70, "alias": [], "alternates": [] }, "Ext.fx.Manager": { "idx": 67, "alias": [], "alternates": [] }, "Ext.fx.PropertyHandler": { "idx": 72, "alias": [], "alternates": [] }, "Ext.fx.Queue": { "idx": 66, "alias": [], "alternates": [] }, "Ext.fx.Runner": { "idx": 349, "alias": [], "alternates": [] }, "Ext.fx.State": { "idx": 337, "alias": [], "alternates": [] }, "Ext.fx.animation.Abstract": { "idx": 338, "alias": [], "alternates": [] }, "Ext.fx.animation.Cube": { "idx": 350, "alias": [ "animation.cube" ], "alternates": [] }, "Ext.fx.animation.Fade": { "idx": 341, "alias": [ "animation.fade", "animation.fadeIn" ], "alternates": [ "Ext.fx.animation.FadeIn" ] }, "Ext.fx.animation.FadeOut": { "idx": 342, "alias": [ "animation.fadeOut" ], "alternates": [] }, "Ext.fx.animation.Flip": { "idx": 343, "alias": [ "animation.flip" ], "alternates": [] }, "Ext.fx.animation.Pop": { "idx": 344, "alias": [ "animation.pop", "animation.popIn" ], "alternates": [ "Ext.fx.animation.PopIn" ] }, "Ext.fx.animation.PopOut": { "idx": 345, "alias": [ "animation.popOut" ], "alternates": [] }, "Ext.fx.animation.Slide": { "idx": 339, "alias": [ "animation.slide", "animation.slideIn" ], "alternates": [ "Ext.fx.animation.SlideIn" ] }, "Ext.fx.animation.SlideOut": { "idx": 340, "alias": [ "animation.slideOut" ], "alternates": [] }, "Ext.fx.animation.Wipe": { "idx": 351, "alias": [], "alternates": [ "Ext.fx.animation.WipeIn" ] }, "Ext.fx.animation.WipeOut": { "idx": 352, "alias": [], "alternates": [] }, "Ext.fx.easing.Abstract": { "idx": 105, "alias": [], "alternates": [] }, "Ext.fx.easing.Bounce": { "idx": 353, "alias": [], "alternates": [] }, "Ext.fx.easing.BoundMomentum": { "idx": 355, "alias": [], "alternates": [] }, "Ext.fx.easing.EaseIn": { "idx": 356, "alias": [ "easing.ease-in" ], "alternates": [] }, "Ext.fx.easing.EaseOut": { "idx": 357, "alias": [ "easing.ease-out" ], "alternates": [] }, "Ext.fx.easing.Easing": { "idx": 358, "alias": [], "alternates": [] }, "Ext.fx.easing.Linear": { "idx": 106, "alias": [ "easing.linear" ], "alternates": [] }, "Ext.fx.easing.Momentum": { "idx": 354, "alias": [], "alternates": [] }, "Ext.fx.runner.Css": { "idx": 347, "alias": [], "alternates": [] }, "Ext.fx.runner.CssAnimation": { "idx": 359, "alias": [], "alternates": [] }, "Ext.fx.runner.CssTransition": { "idx": 348, "alias": [], "alternates": [ "Ext.Animator" ] }, "Ext.fx.target.Component": { "idx": 65, "alias": [], "alternates": [] }, "Ext.fx.target.CompositeElement": { "idx": 61, "alias": [], "alternates": [] }, "Ext.fx.target.CompositeElementCSS": { "idx": 62, "alias": [], "alternates": [] }, "Ext.fx.target.CompositeSprite": { "idx": 64, "alias": [], "alternates": [] }, "Ext.fx.target.Element": { "idx": 59, "alias": [], "alternates": [] }, "Ext.fx.target.ElementCSS": { "idx": 60, "alias": [], "alternates": [] }, "Ext.fx.target.Sprite": { "idx": 63, "alias": [], "alternates": [] }, "Ext.fx.target.Target": { "idx": 58, "alias": [], "alternates": [] }, "Ext.grid.AdvancedGroupStore": { "idx": 360, "alias": [], "alternates": [] }, "Ext.grid.CellContext": { "idx": 564, "alias": [], "alternates": [] }, "Ext.grid.CellEditor": { "idx": 565, "alias": [ "widget.celleditor" ], "alternates": [] }, "Ext.grid.ColumnComponentLayout": { "idx": 566, "alias": [ "layout.columncomponent" ], "alternates": [] }, "Ext.grid.ColumnLayout": { "idx": 569, "alias": [ "layout.gridcolumn" ], "alternates": [] }, "Ext.grid.ColumnManager": { "idx": 570, "alias": [], "alternates": [ "Ext.grid.ColumnModel" ] }, "Ext.grid.NavigationModel": { "idx": 571, "alias": [ "view.navigation.grid" ], "alternates": [] }, "Ext.grid.Panel": { "idx": 577, "alias": [ "widget.grid", "widget.gridpanel" ], "alternates": [ "Ext.list.ListView", "Ext.ListView", "Ext.grid.GridPanel" ] }, "Ext.grid.RowContext": { "idx": 578, "alias": [], "alternates": [] }, "Ext.grid.RowEditor": { "idx": 580, "alias": [ "widget.roweditor" ], "alternates": [] }, "Ext.grid.RowEditorButtons": { "idx": 579, "alias": [ "widget.roweditorbuttons" ], "alternates": [] }, "Ext.grid.Scroller": { "idx": 581, "alias": [], "alternates": [] }, "Ext.grid.ViewDropZone": { "idx": 583, "alias": [], "alternates": [] }, "Ext.grid.column.Action": { "idx": 591, "alias": [ "widget.actioncolumn" ], "alternates": [ "Ext.grid.ActionColumn" ] }, "Ext.grid.column.ActionProxy": { "idx": 590, "alias": [], "alternates": [] }, "Ext.grid.column.Boolean": { "idx": 592, "alias": [ "widget.booleancolumn" ], "alternates": [ "Ext.grid.BooleanColumn" ] }, "Ext.grid.column.Check": { "idx": 593, "alias": [ "widget.checkcolumn" ], "alternates": [ "Ext.ux.CheckColumn", "Ext.grid.column.CheckColumn" ] }, "Ext.grid.column.Column": { "idx": 589, "alias": [ "widget.gridcolumn" ], "alternates": [ "Ext.grid.Column" ] }, "Ext.grid.column.Date": { "idx": 594, "alias": [ "widget.datecolumn" ], "alternates": [ "Ext.grid.DateColumn" ] }, "Ext.grid.column.Groups": { "idx": 595, "alias": [ "widget.groupscolumn" ], "alternates": [] }, "Ext.grid.column.Number": { "idx": 596, "alias": [ "widget.numbercolumn" ], "alternates": [ "Ext.grid.NumberColumn" ] }, "Ext.grid.column.RowNumberer": { "idx": 597, "alias": [ "widget.rownumberer" ], "alternates": [ "Ext.grid.RowNumberer" ] }, "Ext.grid.column.Template": { "idx": 598, "alias": [ "widget.templatecolumn" ], "alternates": [ "Ext.grid.TemplateColumn" ] }, "Ext.grid.column.Widget": { "idx": 599, "alias": [ "widget.widgetcolumn" ], "alternates": [] }, "Ext.grid.feature.AbstractSummary": { "idx": 601, "alias": [ "feature.abstractsummary" ], "alternates": [] }, "Ext.grid.feature.AdvancedGroupStore": { "idx": 602, "alias": [], "alternates": [] }, "Ext.grid.feature.AdvancedGrouping": { "idx": 603, "alias": [ "feature.advancedgrouping" ], "alternates": [] }, "Ext.grid.feature.AdvancedGroupingSummary": { "idx": 604, "alias": [ "feature.advancedgroupingsummary" ], "alternates": [] }, "Ext.grid.feature.Feature": { "idx": 600, "alias": [ "feature.feature" ], "alternates": [] }, "Ext.grid.feature.GroupStore": { "idx": 605, "alias": [], "alternates": [] }, "Ext.grid.feature.Grouping": { "idx": 606, "alias": [ "feature.grouping" ], "alternates": [] }, "Ext.grid.feature.GroupingSummary": { "idx": 607, "alias": [ "feature.groupingsummary" ], "alternates": [] }, "Ext.grid.feature.RowBody": { "idx": 608, "alias": [ "feature.rowbody" ], "alternates": [] }, "Ext.grid.feature.Summary": { "idx": 609, "alias": [ "feature.summary" ], "alternates": [] }, "Ext.grid.filters.Filters": { "idx": 622, "alias": [ "plugin.gridfilters" ], "alternates": [] }, "Ext.grid.filters.filter.Base": { "idx": 614, "alias": [], "alternates": [] }, "Ext.grid.filters.filter.Boolean": { "idx": 616, "alias": [ "grid.filter.boolean" ], "alternates": [] }, "Ext.grid.filters.filter.Date": { "idx": 618, "alias": [ "grid.filter.date" ], "alternates": [] }, "Ext.grid.filters.filter.List": { "idx": 619, "alias": [ "grid.filter.list" ], "alternates": [] }, "Ext.grid.filters.filter.Number": { "idx": 620, "alias": [ "grid.filter.number", "grid.filter.numeric" ], "alternates": [] }, "Ext.grid.filters.filter.SingleFilter": { "idx": 615, "alias": [], "alternates": [] }, "Ext.grid.filters.filter.String": { "idx": 621, "alias": [ "grid.filter.string" ], "alternates": [] }, "Ext.grid.filters.filter.TriFilter": { "idx": 617, "alias": [], "alternates": [] }, "Ext.grid.header.Container": { "idx": 588, "alias": [ "widget.headercontainer" ], "alternates": [] }, "Ext.grid.header.DragZone": { "idx": 585, "alias": [], "alternates": [] }, "Ext.grid.header.DropZone": { "idx": 586, "alias": [], "alternates": [] }, "Ext.grid.locking.HeaderContainer": { "idx": 623, "alias": [], "alternates": [] }, "Ext.grid.locking.Lockable": { "idx": 626, "alias": [], "alternates": [ "Ext.grid.Lockable" ] }, "Ext.grid.locking.RowSynchronizer": { "idx": 573, "alias": [], "alternates": [] }, "Ext.grid.locking.View": { "idx": 624, "alias": [], "alternates": [ "Ext.grid.LockingView" ] }, "Ext.grid.plugin.BaseFilterBar": { "idx": 361, "alias": [], "alternates": [] }, "Ext.grid.plugin.BaseGroupingPanel": { "idx": 362, "alias": [], "alternates": [] }, "Ext.grid.plugin.BaseSummaries": { "idx": 363, "alias": [], "alternates": [] }, "Ext.grid.plugin.BufferedRenderer": { "idx": 627, "alias": [ "plugin.bufferedrenderer" ], "alternates": [] }, "Ext.grid.plugin.CellEditing": { "idx": 629, "alias": [ "plugin.cellediting" ], "alternates": [] }, "Ext.grid.plugin.Clipboard": { "idx": 630, "alias": [ "plugin.clipboard" ], "alternates": [] }, "Ext.grid.plugin.DragDrop": { "idx": 631, "alias": [ "plugin.gridviewdragdrop" ], "alternates": [] }, "Ext.grid.plugin.Editing": { "idx": 628, "alias": [ "editing.editing" ], "alternates": [] }, "Ext.grid.plugin.GroupingPanel": { "idx": 636, "alias": [ "plugin.groupingpanel" ], "alternates": [] }, "Ext.grid.plugin.HeaderReorderer": { "idx": 587, "alias": [ "plugin.gridheaderreorderer" ], "alternates": [] }, "Ext.grid.plugin.HeaderResizer": { "idx": 584, "alias": [ "plugin.gridheaderresizer" ], "alternates": [] }, "Ext.grid.plugin.RowEditing": { "idx": 637, "alias": [ "plugin.rowediting" ], "alternates": [] }, "Ext.grid.plugin.RowExpander": { "idx": 638, "alias": [ "plugin.rowexpander" ], "alternates": [] }, "Ext.grid.plugin.RowWidget": { "idx": 639, "alias": [ "plugin.rowwidget" ], "alternates": [] }, "Ext.grid.plugin.Summaries": { "idx": 640, "alias": [ "plugin.gridsummaries" ], "alternates": [] }, "Ext.grid.plugin.filterbar.FilterBar": { "idx": 651, "alias": [ "plugin.gridfilterbar" ], "alternates": [] }, "Ext.grid.plugin.filterbar.Operator": { "idx": 641, "alias": [ "plugin.operator" ], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.Base": { "idx": 642, "alias": [], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.Boolean": { "idx": 647, "alias": [ "grid.filterbar.boolean" ], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.Date": { "idx": 645, "alias": [ "grid.filterbar.date" ], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.InList": { "idx": 650, "alias": [ "grid.filterbar.inlist" ], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.List": { "idx": 649, "alias": [ "grid.filterbar.list" ], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.None": { "idx": 648, "alias": [ "grid.filterbar.none" ], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.Number": { "idx": 646, "alias": [ "grid.filterbar.number" ], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.SingleFilter": { "idx": 643, "alias": [], "alternates": [] }, "Ext.grid.plugin.filterbar.filters.String": { "idx": 644, "alias": [ "grid.filterbar.string" ], "alternates": [] }, "Ext.grid.plugin.grouping.Column": { "idx": 632, "alias": [ "widget.groupingpanelcolumn" ], "alternates": [] }, "Ext.grid.plugin.grouping.DragZone": { "idx": 633, "alias": [], "alternates": [] }, "Ext.grid.plugin.grouping.DropZone": { "idx": 634, "alias": [], "alternates": [] }, "Ext.grid.plugin.grouping.Panel": { "idx": 635, "alias": [ "widget.groupingpanel" ], "alternates": [] }, "Ext.grid.property.Grid": { "idx": 652, "alias": [ "widget.propertygrid" ], "alternates": [ "Ext.grid.PropertyGrid" ] }, "Ext.grid.property.HeaderContainer": { "idx": 653, "alias": [], "alternates": [ "Ext.grid.PropertyColumnModel" ] }, "Ext.grid.property.Property": { "idx": 654, "alias": [], "alternates": [ "Ext.PropGridProperty" ] }, "Ext.grid.property.Reader": { "idx": 655, "alias": [], "alternates": [] }, "Ext.grid.property.Store": { "idx": 656, "alias": [], "alternates": [ "Ext.grid.PropertyStore" ] }, "Ext.grid.selection.Cells": { "idx": 658, "alias": [], "alternates": [] }, "Ext.grid.selection.Columns": { "idx": 659, "alias": [], "alternates": [] }, "Ext.grid.selection.Replicator": { "idx": 660, "alias": [ "plugin.selectionreplicator" ], "alternates": [] }, "Ext.grid.selection.Rows": { "idx": 661, "alias": [], "alternates": [] }, "Ext.grid.selection.Selection": { "idx": 657, "alias": [], "alternates": [] }, "Ext.grid.selection.SelectionExtender": { "idx": 662, "alias": [], "alternates": [] }, "Ext.grid.selection.SpreadsheetModel": { "idx": 663, "alias": [ "selection.spreadsheet" ], "alternates": [] }, "Ext.layout.Context": { "idx": 666, "alias": [], "alternates": [] }, "Ext.layout.ContextItem": { "idx": 665, "alias": [], "alternates": [] }, "Ext.layout.Layout": { "idx": 420, "alias": [], "alternates": [] }, "Ext.layout.SizeModel": { "idx": 419, "alias": [], "alternates": [] }, "Ext.layout.component.Auto": { "idx": 433, "alias": [ "layout.autocomponent" ], "alternates": [] }, "Ext.layout.component.Body": { "idx": 668, "alias": [ "layout.body" ], "alternates": [] }, "Ext.layout.component.BoundList": { "idx": 533, "alias": [ "layout.boundlist" ], "alternates": [] }, "Ext.layout.component.Component": { "idx": 432, "alias": [], "alternates": [] }, "Ext.layout.component.Dock": { "idx": 463, "alias": [ "layout.dock" ], "alternates": [ "Ext.layout.component.AbstractDock" ] }, "Ext.layout.component.FieldSet": { "idx": 669, "alias": [ "layout.fieldset" ], "alternates": [] }, "Ext.layout.component.ProgressBar": { "idx": 434, "alias": [ "layout.progressbar" ], "alternates": [] }, "Ext.layout.component.field.FieldContainer": { "idx": 510, "alias": [ "layout.fieldcontainer" ], "alternates": [] }, "Ext.layout.component.field.HtmlEditor": { "idx": 555, "alias": [ "layout.htmleditor" ], "alternates": [] }, "Ext.layout.component.field.Text": { "idx": 503, "alias": [ "layout.textfield" ], "alternates": [] }, "Ext.layout.container.Absolute": { "idx": 670, "alias": [ "layout.absolute" ], "alternates": [ "Ext.layout.AbsoluteLayout" ] }, "Ext.layout.container.Accordion": { "idx": 671, "alias": [ "layout.accordion" ], "alternates": [ "Ext.layout.AccordionLayout" ] }, "Ext.layout.container.Anchor": { "idx": 472, "alias": [ "layout.anchor" ], "alternates": [ "Ext.layout.AnchorLayout" ] }, "Ext.layout.container.Auto": { "idx": 422, "alias": [ "layout.auto", "layout.autocontainer" ], "alternates": [] }, "Ext.layout.container.Border": { "idx": 673, "alias": [ "layout.border" ], "alternates": [ "Ext.layout.BorderLayout" ] }, "Ext.layout.container.Box": { "idx": 452, "alias": [ "layout.box" ], "alternates": [ "Ext.layout.BoxLayout" ] }, "Ext.layout.container.Card": { "idx": 674, "alias": [ "layout.card" ], "alternates": [ "Ext.layout.CardLayout" ] }, "Ext.layout.container.Center": { "idx": 675, "alias": [ "layout.center", "layout.ux.center" ], "alternates": [ "Ext.ux.layout.Center" ] }, "Ext.layout.container.CheckboxGroup": { "idx": 513, "alias": [ "layout.checkboxgroup" ], "alternates": [] }, "Ext.layout.container.Column": { "idx": 475, "alias": [ "layout.column" ], "alternates": [ "Ext.layout.ColumnLayout" ] }, "Ext.layout.container.ColumnSplitter": { "idx": 479, "alias": [ "widget.columnsplitter" ], "alternates": [] }, "Ext.layout.container.ColumnSplitterTracker": { "idx": 478, "alias": [], "alternates": [] }, "Ext.layout.container.Container": { "idx": 421, "alias": [ "layout.container" ], "alternates": [ "Ext.layout.ContainerLayout" ] }, "Ext.layout.container.Dashboard": { "idx": 480, "alias": [ "layout.dashboard" ], "alternates": [] }, "Ext.layout.container.Editor": { "idx": 425, "alias": [ "layout.editor" ], "alternates": [] }, "Ext.layout.container.Fit": { "idx": 567, "alias": [ "layout.fit" ], "alternates": [ "Ext.layout.FitLayout", "Ext.layout.Fit" ] }, "Ext.layout.container.Form": { "idx": 676, "alias": [ "layout.form" ], "alternates": [ "Ext.layout.FormLayout" ] }, "Ext.layout.container.HBox": { "idx": 453, "alias": [ "layout.hbox" ], "alternates": [ "Ext.layout.HBoxLayout" ] }, "Ext.layout.container.SegmentedButton": { "idx": 442, "alias": [ "layout.segmentedbutton" ], "alternates": [] }, "Ext.layout.container.Table": { "idx": 467, "alias": [ "layout.table" ], "alternates": [ "Ext.layout.TableLayout" ] }, "Ext.layout.container.VBox": { "idx": 454, "alias": [ "layout.vbox" ], "alternates": [ "Ext.layout.VBoxLayout" ] }, "Ext.layout.container.border.Region": { "idx": 119, "alias": [], "alternates": [] }, "Ext.layout.container.boxOverflow.Menu": { "idx": 557, "alias": [ "box.overflow.Menu", "box.overflow.menu" ], "alternates": [ "Ext.layout.boxOverflow.Menu" ] }, "Ext.layout.container.boxOverflow.None": { "idx": 448, "alias": [ "box.overflow.None", "box.overflow.none" ], "alternates": [ "Ext.layout.boxOverflow.None" ] }, "Ext.layout.container.boxOverflow.Scroller": { "idx": 449, "alias": [ "box.overflow.Scroller", "box.overflow.scroller" ], "alternates": [ "Ext.layout.boxOverflow.Scroller" ] }, "Ext.list.AbstractTreeItem": { "idx": 364, "alias": [], "alternates": [] }, "Ext.list.RootTreeItem": { "idx": 365, "alias": [], "alternates": [] }, "Ext.list.Tree": { "idx": 368, "alias": [ "widget.treelist" ], "alternates": [] }, "Ext.list.TreeItem": { "idx": 367, "alias": [ "widget.treelistitem" ], "alternates": [] }, "Ext.menu.Bar": { "idx": 677, "alias": [ "widget.menubar" ], "alternates": [] }, "Ext.menu.CheckItem": { "idx": 611, "alias": [ "widget.menucheckitem" ], "alternates": [] }, "Ext.menu.ColorPicker": { "idx": 678, "alias": [ "widget.colormenu" ], "alternates": [] }, "Ext.menu.DatePicker": { "idx": 679, "alias": [ "widget.datemenu" ], "alternates": [] }, "Ext.menu.Item": { "idx": 610, "alias": [ "widget.menuitem" ], "alternates": [ "Ext.menu.TextItem" ] }, "Ext.menu.Manager": { "idx": 438, "alias": [], "alternates": [ "Ext.menu.MenuMgr" ] }, "Ext.menu.Menu": { "idx": 613, "alias": [ "widget.menu" ], "alternates": [] }, "Ext.menu.Separator": { "idx": 612, "alias": [ "widget.menuseparator" ], "alternates": [] }, "Ext.mixin.Accessible": { "idx": 88, "alias": [], "alternates": [] }, "Ext.mixin.Bindable": { "idx": 82, "alias": [], "alternates": [] }, "Ext.mixin.Bufferable": { "idx": 20, "alias": [], "alternates": [] }, "Ext.mixin.ComponentDelegation": { "idx": 83, "alias": [], "alternates": [] }, "Ext.mixin.ConfigProxy": { "idx": 369, "alias": [], "alternates": [] }, "Ext.mixin.ConfigState": { "idx": 370, "alias": [], "alternates": [] }, "Ext.mixin.Container": { "idx": 371, "alias": [], "alternates": [] }, "Ext.mixin.Dirty": { "idx": 201, "alias": [], "alternates": [] }, "Ext.mixin.Factoryable": { "idx": 12, "alias": [], "alternates": [] }, "Ext.mixin.Focusable": { "idx": 87, "alias": [], "alternates": [] }, "Ext.mixin.FocusableContainer": { "idx": 374, "alias": [], "alternates": [] }, "Ext.mixin.Hookable": { "idx": 375, "alias": [], "alternates": [] }, "Ext.mixin.Identifiable": { "idx": 3, "alias": [], "alternates": [] }, "Ext.mixin.Inheritable": { "idx": 81, "alias": [], "alternates": [] }, "Ext.mixin.ItemRippler": { "idx": 366, "alias": [], "alternates": [] }, "Ext.mixin.Keyboard": { "idx": 86, "alias": [], "alternates": [] }, "Ext.mixin.Mashup": { "idx": 376, "alias": [], "alternates": [] }, "Ext.mixin.Observable": { "idx": 4, "alias": [], "alternates": [] }, "Ext.mixin.Pluggable": { "idx": 85, "alias": [], "alternates": [] }, "Ext.mixin.Queryable": { "idx": 241, "alias": [], "alternates": [] }, "Ext.mixin.Responsive": { "idx": 90, "alias": [], "alternates": [] }, "Ext.mixin.Selectable": { "idx": 377, "alias": [], "alternates": [] }, "Ext.mixin.StoreWatcher": { "idx": 378, "alias": [], "alternates": [] }, "Ext.mixin.StyleCacher": { "idx": 379, "alias": [], "alternates": [] }, "Ext.mixin.Templatable": { "idx": 39, "alias": [], "alternates": [] }, "Ext.mixin.Traversable": { "idx": 380, "alias": [], "alternates": [] }, "Ext.panel.Bar": { "idx": 444, "alias": [], "alternates": [] }, "Ext.panel.DD": { "idx": 462, "alias": [], "alternates": [] }, "Ext.panel.Header": { "idx": 447, "alias": [ "widget.header" ], "alternates": [] }, "Ext.panel.Panel": { "idx": 466, "alias": [ "widget.panel" ], "alternates": [ "Ext.Panel" ] }, "Ext.panel.Pinnable": { "idx": 680, "alias": [], "alternates": [] }, "Ext.panel.Proxy": { "idx": 461, "alias": [], "alternates": [ "Ext.dd.PanelProxy" ] }, "Ext.panel.Table": { "idx": 568, "alias": [ "widget.tablepanel" ], "alternates": [] }, "Ext.panel.Title": { "idx": 445, "alias": [ "widget.title" ], "alternates": [] }, "Ext.panel.Tool": { "idx": 446, "alias": [ "widget.tool" ], "alternates": [] }, "Ext.parse.Parser": { "idx": 220, "alias": [], "alternates": [] }, "Ext.parse.Symbol": { "idx": 214, "alias": [], "alternates": [] }, "Ext.parse.Tokenizer": { "idx": 213, "alias": [], "alternates": [] }, "Ext.parse.symbol.Constant": { "idx": 215, "alias": [], "alternates": [] }, "Ext.parse.symbol.Infix": { "idx": 216, "alias": [], "alternates": [] }, "Ext.parse.symbol.InfixRight": { "idx": 217, "alias": [], "alternates": [] }, "Ext.parse.symbol.Paren": { "idx": 218, "alias": [], "alternates": [] }, "Ext.parse.symbol.Prefix": { "idx": 219, "alias": [], "alternates": [] }, "Ext.perf.Accumulator": { "idx": 381, "alias": [], "alternates": [] }, "Ext.perf.Monitor": { "idx": 382, "alias": [], "alternates": [ "Ext.Perf" ] }, "Ext.picker.Color": { "idx": 554, "alias": [ "widget.colorpicker" ], "alternates": [ "Ext.ColorPalette" ] }, "Ext.picker.Date": { "idx": 543, "alias": [ "widget.datepicker" ], "alternates": [ "Ext.DatePicker" ] }, "Ext.picker.Month": { "idx": 542, "alias": [ "widget.monthpicker" ], "alternates": [ "Ext.MonthPicker" ] }, "Ext.picker.Time": { "idx": 561, "alias": [ "widget.timepicker" ], "alternates": [] }, "Ext.plugin.Abstract": { "idx": 84, "alias": [], "alternates": [ "Ext.AbstractPlugin" ] }, "Ext.plugin.AbstractClipboard": { "idx": 383, "alias": [], "alternates": [] }, "Ext.plugin.LazyItems": { "idx": 681, "alias": [ "plugin.lazyitems" ], "alternates": [] }, "Ext.plugin.Manager": { "idx": 103, "alias": [], "alternates": [ "Ext.PluginManager", "Ext.PluginMgr" ] }, "Ext.plugin.MouseEnter": { "idx": 384, "alias": [ "plugin.mouseenter" ], "alternates": [] }, "Ext.plugin.Responsive": { "idx": 682, "alias": [ "plugin.responsive" ], "alternates": [] }, "Ext.plugin.Viewport": { "idx": 470, "alias": [ "plugin.viewport" ], "alternates": [] }, "Ext.promise.Consequence": { "idx": 7, "alias": [], "alternates": [] }, "Ext.promise.Deferred": { "idx": 8, "alias": [], "alternates": [] }, "Ext.promise.Promise": { "idx": 9, "alias": [], "alternates": [] }, "Ext.resizer.BorderSplitter": { "idx": 672, "alias": [ "widget.bordersplitter" ], "alternates": [] }, "Ext.resizer.BorderSplitterTracker": { "idx": 683, "alias": [], "alternates": [] }, "Ext.resizer.Handle": { "idx": 684, "alias": [], "alternates": [] }, "Ext.resizer.ResizeTracker": { "idx": 685, "alias": [], "alternates": [] }, "Ext.resizer.Resizer": { "idx": 686, "alias": [], "alternates": [ "Ext.Resizable" ] }, "Ext.resizer.Splitter": { "idx": 451, "alias": [ "widget.splitter" ], "alternates": [] }, "Ext.resizer.SplitterTracker": { "idx": 477, "alias": [], "alternates": [] }, "Ext.route.Action": { "idx": 123, "alias": [], "alternates": [] }, "Ext.route.Handler": { "idx": 122, "alias": [], "alternates": [] }, "Ext.route.Mixin": { "idx": 127, "alias": [], "alternates": [] }, "Ext.route.Route": { "idx": 124, "alias": [], "alternates": [] }, "Ext.route.Router": { "idx": 126, "alias": [], "alternates": [] }, "Ext.scroll.LockingScroller": { "idx": 625, "alias": [ "scroller.locking" ], "alternates": [] }, "Ext.scroll.Scroller": { "idx": 110, "alias": [ "scroller.scroller" ], "alternates": [ "Ext.scroll.NativeScroller" ] }, "Ext.scroll.TableScroller": { "idx": 575, "alias": [ "scroller.table" ], "alternates": [] }, "Ext.selection.CellModel": { "idx": 687, "alias": [ "selection.cellmodel" ], "alternates": [] }, "Ext.selection.CheckboxModel": { "idx": 689, "alias": [ "selection.checkboxmodel" ], "alternates": [] }, "Ext.selection.DataViewModel": { "idx": 528, "alias": [ "selection.dataviewmodel" ], "alternates": [] }, "Ext.selection.Model": { "idx": 527, "alias": [ "selection.abstract" ], "alternates": [ "Ext.AbstractSelectionModel" ] }, "Ext.selection.RowModel": { "idx": 688, "alias": [ "selection.rowmodel" ], "alternates": [] }, "Ext.selection.TreeModel": { "idx": 690, "alias": [ "selection.treemodel" ], "alternates": [] }, "Ext.slider.Multi": { "idx": 693, "alias": [ "widget.multislider" ], "alternates": [ "Ext.slider.MultiSlider" ] }, "Ext.slider.Single": { "idx": 694, "alias": [ "widget.slider", "widget.sliderfield" ], "alternates": [ "Ext.Slider", "Ext.form.SliderField", "Ext.slider.SingleSlider", "Ext.slider.Slider" ] }, "Ext.slider.Thumb": { "idx": 691, "alias": [], "alternates": [] }, "Ext.slider.Tip": { "idx": 692, "alias": [ "widget.slidertip" ], "alternates": [] }, "Ext.slider.Widget": { "idx": 695, "alias": [ "widget.sliderwidget" ], "alternates": [] }, "Ext.sparkline.Bar": { "idx": 393, "alias": [ "widget.sparklinebar" ], "alternates": [] }, "Ext.sparkline.BarBase": { "idx": 391, "alias": [], "alternates": [] }, "Ext.sparkline.Base": { "idx": 390, "alias": [ "widget.sparkline" ], "alternates": [] }, "Ext.sparkline.Box": { "idx": 394, "alias": [ "widget.sparklinebox" ], "alternates": [] }, "Ext.sparkline.Bullet": { "idx": 395, "alias": [ "widget.sparklinebullet" ], "alternates": [] }, "Ext.sparkline.CanvasBase": { "idx": 386, "alias": [], "alternates": [] }, "Ext.sparkline.CanvasCanvas": { "idx": 387, "alias": [], "alternates": [] }, "Ext.sparkline.Discrete": { "idx": 396, "alias": [ "widget.sparklinediscrete" ], "alternates": [] }, "Ext.sparkline.Line": { "idx": 397, "alias": [ "widget.sparklineline" ], "alternates": [] }, "Ext.sparkline.Pie": { "idx": 398, "alias": [ "widget.sparklinepie" ], "alternates": [] }, "Ext.sparkline.RangeMap": { "idx": 392, "alias": [], "alternates": [] }, "Ext.sparkline.Shape": { "idx": 385, "alias": [], "alternates": [] }, "Ext.sparkline.TriState": { "idx": 399, "alias": [ "widget.sparklinetristate" ], "alternates": [] }, "Ext.sparkline.VmlCanvas": { "idx": 388, "alias": [], "alternates": [] }, "Ext.state.CookieProvider": { "idx": 696, "alias": [], "alternates": [] }, "Ext.state.LocalStorageProvider": { "idx": 697, "alias": [ "state.localstorage" ], "alternates": [] }, "Ext.state.Manager": { "idx": 115, "alias": [], "alternates": [] }, "Ext.state.Provider": { "idx": 114, "alias": [], "alternates": [] }, "Ext.state.Stateful": { "idx": 116, "alias": [], "alternates": [] }, "Ext.tab.Bar": { "idx": 699, "alias": [ "widget.tabbar" ], "alternates": [] }, "Ext.tab.Panel": { "idx": 700, "alias": [ "widget.tabpanel" ], "alternates": [ "Ext.TabPanel" ] }, "Ext.tab.Tab": { "idx": 698, "alias": [ "widget.tab" ], "alternates": [] }, "Ext.tip.QuickTip": { "idx": 552, "alias": [ "widget.quicktip" ], "alternates": [ "Ext.QuickTip" ] }, "Ext.tip.QuickTipManager": { "idx": 553, "alias": [], "alternates": [ "Ext.QuickTips" ] }, "Ext.tip.Tip": { "idx": 550, "alias": [ "widget.tip" ], "alternates": [ "Ext.Tip" ] }, "Ext.tip.ToolTip": { "idx": 551, "alias": [ "widget.tooltip" ], "alternates": [ "Ext.ToolTip" ] }, "Ext.toolbar.Breadcrumb": { "idx": 701, "alias": [ "widget.breadcrumb" ], "alternates": [] }, "Ext.toolbar.Fill": { "idx": 702, "alias": [ "widget.tbfill" ], "alternates": [ "Ext.Toolbar.Fill" ] }, "Ext.toolbar.Item": { "idx": 534, "alias": [ "widget.tbitem" ], "alternates": [ "Ext.Toolbar.Item" ] }, "Ext.toolbar.Paging": { "idx": 539, "alias": [ "widget.pagingtoolbar" ], "alternates": [ "Ext.PagingToolbar" ] }, "Ext.toolbar.Separator": { "idx": 556, "alias": [ "widget.tbseparator" ], "alternates": [ "Ext.Toolbar.Separator" ] }, "Ext.toolbar.Spacer": { "idx": 703, "alias": [ "widget.tbspacer" ], "alternates": [ "Ext.Toolbar.Spacer" ] }, "Ext.toolbar.TextItem": { "idx": 535, "alias": [ "widget.tbtext" ], "alternates": [ "Ext.Toolbar.TextItem" ] }, "Ext.toolbar.Toolbar": { "idx": 455, "alias": [ "widget.toolbar" ], "alternates": [ "Ext.Toolbar" ] }, "Ext.tree.Column": { "idx": 704, "alias": [ "widget.treecolumn" ], "alternates": [] }, "Ext.tree.NavigationModel": { "idx": 705, "alias": [ "view.navigation.tree" ], "alternates": [] }, "Ext.tree.Panel": { "idx": 707, "alias": [ "widget.treepanel" ], "alternates": [ "Ext.tree.TreePanel", "Ext.TreePanel" ] }, "Ext.tree.View": { "idx": 706, "alias": [ "widget.treeview" ], "alternates": [] }, "Ext.tree.ViewDragZone": { "idx": 709, "alias": [], "alternates": [] }, "Ext.tree.ViewDropZone": { "idx": 710, "alias": [], "alternates": [] }, "Ext.tree.plugin.TreeViewDragDrop": { "idx": 711, "alias": [ "plugin.treeviewdragdrop" ], "alternates": [] }, "Ext.util.AbstractMixedCollection": { "idx": 53, "alias": [], "alternates": [] }, "Ext.util.Animate": { "idx": 74, "alias": [], "alternates": [] }, "Ext.util.Bag": { "idx": 192, "alias": [], "alternates": [] }, "Ext.util.Base64": { "idx": 400, "alias": [], "alternates": [] }, "Ext.util.BasicFilter": { "idx": 50, "alias": [], "alternates": [] }, "Ext.util.CSS": { "idx": 104, "alias": [], "alternates": [] }, "Ext.util.CSV": { "idx": 402, "alias": [], "alternates": [] }, "Ext.util.ClickRepeater": { "idx": 403, "alias": [], "alternates": [ "Ext.util.TapRepeater" ] }, "Ext.util.Collection": { "idx": 132, "alias": [], "alternates": [] }, "Ext.util.CollectionKey": { "idx": 130, "alias": [], "alternates": [] }, "Ext.util.Color": { "idx": 389, "alias": [], "alternates": [ "Ext.draw.Color" ] }, "Ext.util.ComponentDragger": { "idx": 498, "alias": [], "alternates": [] }, "Ext.util.Cookies": { "idx": 404, "alias": [], "alternates": [] }, "Ext.util.DelimitedValue": { "idx": 401, "alias": [], "alternates": [] }, "Ext.util.ElementContainer": { "idx": 112, "alias": [], "alternates": [] }, "Ext.util.Event": { "idx": 2, "alias": [], "alternates": [] }, "Ext.util.Filter": { "idx": 51, "alias": [], "alternates": [] }, "Ext.util.FilterCollection": { "idx": 179, "alias": [], "alternates": [] }, "Ext.util.Floating": { "idx": 111, "alias": [], "alternates": [] }, "Ext.util.Fly": { "idx": 212, "alias": [], "alternates": [] }, "Ext.util.Format": { "idx": 94, "alias": [], "alternates": [] }, "Ext.util.Group": { "idx": 171, "alias": [], "alternates": [] }, "Ext.util.GroupCollection": { "idx": 181, "alias": [], "alternates": [] }, "Ext.util.Grouper": { "idx": 131, "alias": [], "alternates": [] }, "Ext.util.GrouperCollection": { "idx": 180, "alias": [], "alternates": [] }, "Ext.util.HashMap": { "idx": 5, "alias": [], "alternates": [] }, "Ext.util.History": { "idx": 125, "alias": [], "alternates": [ "Ext.History" ] }, "Ext.util.Inflector": { "idx": 140, "alias": [], "alternates": [] }, "Ext.util.ItemCollection": { "idx": 405, "alias": [], "alternates": [ "Ext.ItemCollection" ] }, "Ext.util.KeyMap": { "idx": 372, "alias": [], "alternates": [ "Ext.KeyMap" ] }, "Ext.util.KeyNav": { "idx": 373, "alias": [], "alternates": [ "Ext.KeyNav" ] }, "Ext.util.LocalStorage": { "idx": 406, "alias": [], "alternates": [] }, "Ext.util.LruCache": { "idx": 23, "alias": [], "alternates": [] }, "Ext.util.Memento": { "idx": 464, "alias": [], "alternates": [] }, "Ext.util.MixedCollection": { "idx": 56, "alias": [], "alternates": [] }, "Ext.util.ObjectTemplate": { "idx": 134, "alias": [], "alternates": [] }, "Ext.util.Observable": { "idx": 52, "alias": [], "alternates": [] }, "Ext.util.Offset": { "idx": 33, "alias": [], "alternates": [] }, "Ext.util.PaintMonitor": { "idx": 47, "alias": [], "alternates": [] }, "Ext.util.Point": { "idx": 35, "alias": [], "alternates": [] }, "Ext.util.Positionable": { "idx": 26, "alias": [], "alternates": [] }, "Ext.util.ProtoElement": { "idx": 101, "alias": [], "alternates": [] }, "Ext.util.Queue": { "idx": 664, "alias": [], "alternates": [] }, "Ext.util.Region": { "idx": 34, "alias": [], "alternates": [] }, "Ext.util.Renderable": { "idx": 113, "alias": [], "alternates": [] }, "Ext.util.Schedulable": { "idx": 203, "alias": [], "alternates": [] }, "Ext.util.Scheduler": { "idx": 193, "alias": [], "alternates": [] }, "Ext.util.SizeMonitor": { "idx": 43, "alias": [], "alternates": [] }, "Ext.util.Sortable": { "idx": 55, "alias": [], "alternates": [] }, "Ext.util.Sorter": { "idx": 54, "alias": [], "alternates": [] }, "Ext.util.SorterCollection": { "idx": 178, "alias": [], "alternates": [] }, "Ext.util.Spans": { "idx": 407, "alias": [], "alternates": [] }, "Ext.util.StoreHolder": { "idx": 430, "alias": [], "alternates": [] }, "Ext.util.TaskManager": { "idx": 409, "alias": [], "alternates": [ "Ext.TaskManager" ] }, "Ext.util.TaskRunner": { "idx": 57, "alias": [], "alternates": [] }, "Ext.util.TextMetrics": { "idx": 410, "alias": [], "alternates": [] }, "Ext.util.TsvDecoder": { "idx": 408, "alias": [], "alternates": [ "Ext.util.TSV" ] }, "Ext.util.XTemplateCompiler": { "idx": 97, "alias": [], "alternates": [] }, "Ext.util.XTemplateParser": { "idx": 96, "alias": [], "alternates": [] }, "Ext.util.paintmonitor.Abstract": { "idx": 45, "alias": [], "alternates": [] }, "Ext.util.paintmonitor.CssAnimation": { "idx": 46, "alias": [], "alternates": [] }, "Ext.util.paintmonitor.OverflowChange": { "idx": 411, "alias": [], "alternates": [] }, "Ext.util.sizemonitor.Abstract": { "idx": 41, "alias": [], "alternates": [] }, "Ext.util.sizemonitor.OverflowChange": { "idx": 412, "alias": [], "alternates": [] }, "Ext.util.sizemonitor.Scroll": { "idx": 42, "alias": [], "alternates": [] }, "Ext.util.translatable.Abstract": { "idx": 107, "alias": [], "alternates": [] }, "Ext.util.translatable.CssPosition": { "idx": 413, "alias": [ "translatable.cssposition" ], "alternates": [] }, "Ext.util.translatable.CssTransform": { "idx": 414, "alias": [ "translatable.csstransform" ], "alternates": [] }, "Ext.util.translatable.Dom": { "idx": 108, "alias": [ "translatable.dom" ], "alternates": [] }, "Ext.util.translatable.ScrollParent": { "idx": 415, "alias": [ "translatable.scrollparent" ], "alternates": [] }, "Ext.util.translatable.ScrollPosition": { "idx": 109, "alias": [ "translatable.scrollposition" ], "alternates": [] }, "Ext.view.AbstractView": { "idx": 530, "alias": [], "alternates": [] }, "Ext.view.BoundList": { "idx": 540, "alias": [ "widget.boundlist" ], "alternates": [ "Ext.BoundList" ] }, "Ext.view.BoundListKeyNav": { "idx": 532, "alias": [ "view.navigation.boundlist" ], "alternates": [] }, "Ext.view.DragZone": { "idx": 708, "alias": [], "alternates": [] }, "Ext.view.DropZone": { "idx": 582, "alias": [], "alternates": [] }, "Ext.view.MultiSelector": { "idx": 713, "alias": [ "widget.multiselector" ], "alternates": [] }, "Ext.view.MultiSelectorSearch": { "idx": 712, "alias": [ "widget.multiselector-search" ], "alternates": [] }, "Ext.view.NavigationModel": { "idx": 529, "alias": [ "view.navigation.default" ], "alternates": [] }, "Ext.view.NodeCache": { "idx": 574, "alias": [], "alternates": [] }, "Ext.view.Table": { "idx": 576, "alias": [ "widget.gridview", "widget.tableview" ], "alternates": [ "Ext.grid.View" ] }, "Ext.view.TableLayout": { "idx": 572, "alias": [ "layout.tableview" ], "alternates": [] }, "Ext.view.TagKeyNav": { "idx": 559, "alias": [ "view.navigation.tagfield" ], "alternates": [] }, "Ext.view.View": { "idx": 531, "alias": [ "widget.dataview" ], "alternates": [ "Ext.DataView" ] }, "Ext.window.MessageBox": { "idx": 508, "alias": [ "widget.messagebox" ], "alternates": [] }, "Ext.window.Toast": { "idx": 714, "alias": [ "widget.toast" ], "alternates": [] }, "Ext.window.Window": { "idx": 499, "alias": [ "widget.window" ], "alternates": [ "Ext.Window" ] } }, "packages": { "classic": { "css": true, "included": true, "language": { "js": { "input": { "version": "ES5" } } }, "namespace": "Ext", "properties": { "skip.sass": 1, "skip.pkg": 1, "skip.slice": 1 }, "required": true, "requires": [ "ext", "core", "classic" ], "version": "7.4.0.42" }, "cmd": { "version": "7.4.0.39" }, "core": { "css": true, "included": true, "properties": { "skip.slice": 1, "skip.style": 1, "skip.pkg": 1, "package.tags.classdefs": "class" }, "required": true, "requires": [ "ext" ], "version": "7.4.0.42" }, "ext": { "css": true, "included": true, "language": { "js": { "input": { "version": "ES5" } } }, "license": "commercial", "namespace": "Ext", "properties": { "skip.sass": 1, "skip.slice": 1 }, "required": true, "requires": [], "version": "7.4.0.42" } }, "bootRelative": true }); // @tag core // @define Ext.Boot var Ext = Ext || {}; // /** * @class Ext.Boot * @singleton * @private */ Ext.Boot = Ext.Boot || (function(emptyFn) { var doc = document, _emptyArray = [], _config = { /** * @cfg {Boolean} [disableCaching=true] * If `true` current timestamp is added to script URL's to prevent caching. * In debug builds, adding a "cache" or "disableCacheBuster" query parameter * to the page's URL will set this to `false`. */ disableCaching: (/[?&](?:cache|disableCacheBuster)\b/i.test(location.search) || !(/http[s]?\:/i.test(location.href)) || /(^|[ ;])ext-cache=1/.test(doc.cookie)) ? false : true, /** * @cfg {String} [disableCachingParam="_dc"] * The query parameter name for the cache buster's timestamp. */ disableCachingParam: '_dc', /** * @cfg {Boolean} loadDelay * Millisecond delay between asynchronous script injection (prevents stack * overflow on some user agents) 'false' disables delay but potentially * increases stack load. */ loadDelay: false, /** * @cfg {Boolean} preserveScripts * `false` to remove asynchronously loaded scripts, `true` to retain script * element for browser debugger compatibility and improved load performance. */ preserveScripts: true, /** * @cfg {String} [charset=UTF-8] * Optional charset to specify encoding of dynamic content. */ charset: 'UTF-8' }, _assetConfig = {}, cssRe = /\.css(?:\?|$)/i, resolverEl = doc.createElement('a'), isBrowser = typeof window !== 'undefined', _environment = { browser: isBrowser, node: !isBrowser && (typeof require === 'function'), phantom: (window && (window._phantom || window.callPhantom)) || /PhantomJS/.test(window.navigator.userAgent) }, _tags = (Ext.platformTags = {}), // All calls to _debug are commented out to speed up old browsers a bit; // yes that makes a difference because the cost of concatenating strings // and passing them into _debug() adds up pretty quickly. _debug = function(message) {}, //console.log(message); _apply = function(object, config, defaults) { if (defaults) { _apply(object, defaults); } if (object && config && typeof config === 'object') { for (var i in config) { object[i] = config[i]; } } return object; }, _merge = function() { var lowerCase = false, obj = Array.prototype.shift.call(arguments), index, i, len, value; if (typeof arguments[arguments.length - 1] === 'boolean') { lowerCase = Array.prototype.pop.call(arguments); } len = arguments.length; for (index = 0; index < len; index++) { value = arguments[index]; if (typeof value === 'object') { for (i in value) { obj[lowerCase ? i.toLowerCase() : i] = value[i]; } } } return obj; }, _getKeys = (typeof Object.keys == 'function') ? function(object) { if (!object) { return []; } return Object.keys(object); } : function(object) { var keys = [], property; for (property in object) { if (object.hasOwnProperty(property)) { keys.push(property); } } return keys; }, /* * The Boot loader class manages Request objects that contain one or * more individual urls that need to be loaded. Requests can be performed * synchronously or asynchronously, but will always evaluate urls in the * order specified on the request object. */ Boot = { loading: 0, loaded: 0, apply: _apply, env: _environment, config: _config, /** * @cfg {Object} assetConfig * A map (url->assetConfig) that contains information about assets loaded by the Microlaoder. */ assetConfig: _assetConfig, // Keyed by absolute URL this object holds "true" if that URL is already loaded // or an array of callbacks to call once it loads. scripts: {}, /* Entry objects 'http://foo.com/bar/baz/Thing.js': { done: true, el: scriptEl || linkEl, preserve: true, requests: [ request1, ... ] } */ /** * contains the current script name being loaded * (loadSync or sequential load only) */ currentFile: null, suspendedQueue: [], currentRequest: null, // when loadSync is called, need to cause subsequent load requests to also be loadSync, // eg, when Ext.require(...) is called syncMode: false, /* * simple helper method for debugging */ debug: _debug, /** * enables / disables loading scripts via script / link elements rather * than using ajax / eval */ useElements: true, listeners: [], Request: Request, Entry: Entry, allowMultipleBrowsers: false, browserNames: { ie: 'IE', firefox: 'Firefox', safari: 'Safari', chrome: 'Chrome', opera: 'Opera', dolfin: 'Dolfin', edge: 'Edge', webosbrowser: 'webOSBrowser', chromeMobile: 'ChromeMobile', chromeiOS: 'ChromeiOS', silk: 'Silk', other: 'Other' }, osNames: { ios: 'iOS', android: 'Android', windowsPhone: 'WindowsPhone', webos: 'webOS', blackberry: 'BlackBerry', rimTablet: 'RIMTablet', mac: 'MacOS', win: 'Windows', tizen: 'Tizen', linux: 'Linux', bada: 'Bada', chromeOS: 'ChromeOS', other: 'Other' }, browserPrefixes: { ie: 'MSIE ', edge: 'Edge/', firefox: 'Firefox/', chrome: 'Chrome/', safari: 'Version/', opera: 'OPR/', dolfin: 'Dolfin/', webosbrowser: 'wOSBrowser/', chromeMobile: 'CrMo/', chromeiOS: 'CriOS/', silk: 'Silk/' }, // When a UA reports multiple browsers this list is used to prioritize the 'real' browser // lower index number will win browserPriority: [ 'edge', 'opera', 'dolfin', 'webosbrowser', 'silk', 'chromeiOS', 'chromeMobile', 'ie', 'firefox', 'safari', 'chrome' ], osPrefixes: { tizen: '(Tizen )', ios: 'i(?:Pad|Phone|Pod)(?:.*)CPU(?: iPhone)? OS ', android: '(Android |HTC_|Silk/)', // Some HTC devices ship with an OSX userAgent by default, // so we need to add a direct check for HTC_ windowsPhone: 'Windows Phone ', blackberry: '(?:BlackBerry|BB)(?:.*)Version/', rimTablet: 'RIM Tablet OS ', webos: '(?:webOS|hpwOS)/', bada: 'Bada/', chromeOS: 'CrOS ' }, fallbackOSPrefixes: { windows: 'win', mac: 'mac', linux: 'linux' }, devicePrefixes: { iPhone: 'iPhone', iPod: 'iPod', iPad: 'iPad' }, maxIEVersion: 12, /** * The default function that detects various platforms and sets tags * in the platform map accordingly. Examples are iOS, android, tablet, etc. * @param tags the set of tags to populate */ detectPlatformTags: function() { var me = this, ua = navigator.userAgent, isMobile = /Mobile(\/|\s)/.test(ua), element = document.createElement('div'), isEventSupported = function(name, tag) { if (tag === undefined) { tag = window; } var eventName = 'on' + name.toLowerCase(), isSupported = (eventName in element); if (!isSupported) { if (element.setAttribute && element.removeAttribute) { element.setAttribute(eventName, ''); isSupported = typeof element[eventName] === 'function'; if (typeof element[eventName] !== 'undefined') { element[eventName] = undefined; } element.removeAttribute(eventName); } } return isSupported; }, // Browser Detection getBrowsers = function() { var browsers = {}, maxIEVersion, prefix, value, key, index, len, match, version, matched; // MS Edge browser (and possibly others) can report multiple browsers in the UserAgent // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240" // we use this to prioritize the actual browser in this situation len = me.browserPriority.length; for (index = 0; index < len; index++) { key = me.browserPriority[index]; if (!matched) { value = me.browserPrefixes[key]; match = ua.match(new RegExp('(' + value + ')([\\w\\._]+)')); version = match && match.length > 1 ? parseInt(match[2]) : 0; if (version) { matched = true; } } else { version = 0; } browsers[key] = version; } //Deal with IE document mode if (browsers.ie) { var mode = document.documentMode; if (mode >= 8) { browsers.ie = mode; } } // Fancy IE greater than and less then quick tags version = browsers.ie || false; maxIEVersion = Math.max(version, me.maxIEVersion); for (index = 8; index <= maxIEVersion; ++index) { prefix = 'ie' + index; browsers[prefix + 'm'] = version ? version <= index : 0; browsers[prefix] = version ? version === index : 0; browsers[prefix + 'p'] = version ? version >= index : 0; } return browsers; }, //OS Detection getOperatingSystems = function() { var systems = {}, value, key, keys, index, len, match, matched, version, activeCount; keys = _getKeys(me.osPrefixes); len = keys.length; for (index = 0 , activeCount = 0; index < len; index++) { key = keys[index]; value = me.osPrefixes[key]; match = ua.match(new RegExp('(' + value + ')([^\\s;]+)')); matched = match ? match[1] : null; // This is here because some HTC android devices show an OSX Snow Leopard userAgent by default. // And the Kindle Fire doesn't have any indicator of Android as the OS in its User Agent if (matched && (matched === 'HTC_' || matched === 'Silk/')) { version = 2.3; } else { version = match && match.length > 1 ? parseFloat(match[match.length - 1]) : 0; } if (version) { activeCount++; } systems[key] = version; } keys = _getKeys(me.fallbackOSPrefixes); // If no OS could be found we resort to the fallbacks, otherwise we just // falsify the fallbacks len = keys.length; for (index = 0; index < len; index++) { key = keys[index]; // No OS was detected from osPrefixes if (activeCount === 0) { value = me.fallbackOSPrefixes[key]; match = ua.toLowerCase().match(new RegExp(value)); systems[key] = match ? true : 0; } else { systems[key] = 0; } } return systems; }, // Device Detection getDevices = function() { var devices = {}, value, key, keys, index, len, match; keys = _getKeys(me.devicePrefixes); len = keys.length; for (index = 0; index < len; index++) { key = keys[index]; value = me.devicePrefixes[key]; match = ua.match(new RegExp(value)); devices[key] = match ? true : 0; } return devices; }, browsers = getBrowsers(), systems = getOperatingSystems(), devices = getDevices(), platformParams = Boot.loadPlatformsParam(); // We apply platformParams from the query here first to allow for forced user valued // to be used in calculation of generated tags _merge(_tags, browsers, systems, devices, platformParams, true); _tags.phone = !!((_tags.iphone || _tags.ipod) || (!_tags.silk && (_tags.android && (_tags.android < 3 || isMobile))) || (_tags.blackberry && isMobile) || (_tags.windowsphone)); _tags.tablet = !!(!_tags.phone && (_tags.ipad || _tags.android || _tags.silk || _tags.rimtablet || (_tags.ie10 && /; Touch/.test(ua)))); _tags.touch = // if the browser has touch events we can be reasonably sure the device has // a touch screen isEventSupported('touchend') || // browsers that use pointer event have maxTouchPoints > 0 if the // device supports touch input // http://www.w3.org/TR/pointerevents/#widl-Navigator-maxTouchPoints navigator.maxTouchPoints || // IE10 uses a vendor-prefixed maxTouchPoints property navigator.msMaxTouchPoints; _tags.desktop = !_tags.phone && !_tags.tablet; _tags.cordova = _tags.phonegap = !!(window.PhoneGap || window.Cordova || window.cordova); _tags.webview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)(?!.*FBAN)/i.test(ua); _tags.androidstock = (_tags.android <= 4.3) && (_tags.safari || _tags.silk); // Re-apply any query params here to allow for user override of generated tags (desktop, touch, tablet, etc) _merge(_tags, platformParams, true); }, /** * Extracts user supplied platform tags from the "platformTags" query parameter * of the form: * * ?platformTags=name:state,name:state,... * * (each tag defaults to true when state is unspecified) * * Example: * * ?platformTags=isTablet,isPhone:false,isDesktop:0,iOS:1,Safari:true, ... * * @returns {Object} the platform tags supplied by the query string */ loadPlatformsParam: function() { // Check if the ?platform parameter is set in the URL var paramsString = window.location.search.substr(1), paramsArray = paramsString.split("&"), params = {}, i, platforms = {}, tmpArray, tmplen, platform, name, enabled; for (i = 0; i < paramsArray.length; i++) { tmpArray = paramsArray[i].split("="); params[tmpArray[0]] = tmpArray[1]; } if (params.platformTags) { tmpArray = params.platformTags.split(","); for (tmplen = tmpArray.length , i = 0; i < tmplen; i++) { platform = tmpArray[i].split(":"); name = platform[0]; enabled = true; if (platform.length > 1) { enabled = platform[1]; if (enabled === 'false' || enabled === '0') { enabled = false; } } platforms[name] = enabled; } } return platforms; }, filterPlatform: function(platform, excludes) { platform = _emptyArray.concat(platform || _emptyArray); excludes = _emptyArray.concat(excludes || _emptyArray); var plen = platform.length, elen = excludes.length, include = (!plen && elen), // default true if only excludes specified i, tag; for (i = 0; i < plen && !include; i++) { tag = platform[i]; include = !!_tags[tag]; } for (i = 0; i < elen && include; i++) { tag = excludes[i]; include = !_tags[tag]; } return include; }, init: function() { var scriptEls = doc.getElementsByTagName('script'), script = scriptEls[0], len = scriptEls.length, re = /\/ext(\-[a-z\-]+)?\.js$/, entry, src, state, baseUrl, key, n, origin; // No check for script definedness because there always should be at least one Boot.hasReadyState = ("readyState" in script); Boot.hasAsync = ("async" in script); Boot.hasDefer = ("defer" in script); Boot.hasOnLoad = ("onload" in script); // Feature detecting IE Boot.isIE8 = Boot.hasReadyState && !Boot.hasAsync && Boot.hasDefer && !Boot.hasOnLoad; Boot.isIE9 = Boot.hasReadyState && !Boot.hasAsync && Boot.hasDefer && Boot.hasOnLoad; Boot.isIE10p = Boot.hasReadyState && Boot.hasAsync && Boot.hasDefer && Boot.hasOnLoad; if (Boot.isIE8) { Boot.isIE10 = false; Boot.isIE10m = true; } else { Boot.isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1; Boot.isIE10m = Boot.isIE10 || Boot.isIE9 || Boot.isIE8; } // IE11 does not support conditional compilation so we detect it by exclusion Boot.isIE11 = Boot.isIE10p && !Boot.isIE10; // Since we are loading after other scripts, and we needed to gather them // anyway, we track them in _scripts so we don't have to ask for them all // repeatedly. for (n = 0; n < len; n++) { src = (script = scriptEls[n]).src; if (!src) { continue; } state = script.readyState || null; // If we find a script file called "ext-*.js", then the base path is that file's base path. if (!baseUrl && re.test(src)) { baseUrl = src; } if (!Boot.scripts[key = Boot.canonicalUrl(src)]) { // _debug("creating entry " + key + " in Boot.init"); entry = new Entry({ key: key, url: src, done: state === null || // non-IE state === 'loaded' || state === 'complete', // IE only el: script, prop: 'src' }); } } if (!baseUrl) { script = scriptEls[scriptEls.length - 1]; baseUrl = script.src; } Boot.baseUrl = baseUrl.substring(0, baseUrl.lastIndexOf('/') + 1); origin = window.location.origin || window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : ''); Boot.origin = origin; Boot.detectPlatformTags(); Ext.filterPlatform = Boot.filterPlatform; }, /** * This method returns a canonical URL for the given URL. * * For example, the following all produce the same canonical URL (which is the * last one): * * http://foo.com/bar/baz/zoo/derp/../../goo/Thing.js?_dc=12345 * http://foo.com/bar/baz/zoo/derp/../../goo/Thing.js * http://foo.com/bar/baz/zoo/derp/../jazz/../../goo/Thing.js * http://foo.com/bar/baz/zoo/../goo/Thing.js * http://foo.com/bar/baz/goo/Thing.js * * @private */ canonicalUrl: function(url) { // *WARNING WARNING WARNING* // This method yields the most correct result we can get but it is EXPENSIVE! // In ALL browsers! When called multiple times in a sequence, as if when // we resolve dependencies for entries, it will cause garbage collection events // and overall painful slowness. This is why we try to avoid it as much as we can. // // @TODO - see if we need this fallback logic // http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue resolverEl.href = url; var ret = resolverEl.href, dc = _config.disableCachingParam, pos = dc ? ret.indexOf(dc + '=') : -1, c, end; // If we have a _dc query parameter we need to remove it from the canonical // URL. if (pos > 0 && ((c = ret.charAt(pos - 1)) === '?' || c === '&')) { end = ret.indexOf('&', pos); end = (end < 0) ? '' : ret.substring(end); if (end && c === '?') { ++pos; // keep the '?' end = end.substring(1); } // remove the '&' ret = ret.substring(0, pos - 1) + end; } return ret; }, /** * Get the config value corresponding to the specified name. If no name is given, will return the config object * @param {String} name The config property name * @return {Object} */ getConfig: function(name) { return name ? Boot.config[name] : Boot.config; }, /** * Set the configuration. * @param {Object} config The config object to override the default values. * @return {Ext.Boot} this */ setConfig: function(name, value) { if (typeof name === 'string') { Boot.config[name] = value; } else { for (var s in name) { Boot.setConfig(s, name[s]); } } return Boot; }, getHead: function() { return Boot.docHead || (Boot.docHead = doc.head || doc.getElementsByTagName('head')[0]); }, create: function(url, key, cfg) { var config = cfg || {}; config.url = url; config.key = key; return Boot.scripts[key] = new Entry(config); }, getEntry: function(url, cfg, canonicalPath) { var key, entry; // Canonicalizing URLs via anchor element href yields the most correct result // but is *extremely* resource heavy so we need to avoid it whenever possible key = canonicalPath ? url : Boot.canonicalUrl(url); entry = Boot.scripts[key]; if (!entry) { entry = Boot.create(url, key, cfg); if (canonicalPath) { entry.canonicalPath = true; } } return entry; }, registerContent: function(url, type, content) { var cfg = { content: content, loaded: true, css: type === 'css' }; return Boot.getEntry(url, cfg); }, processRequest: function(request, sync) { request.loadEntries(sync); }, load: function(request) { // _debug("Boot.load called"); var request = new Request(request); if (request.sync || Boot.syncMode) { return Boot.loadSync(request); } // If there is a request in progress, we must // queue this new request to be fired when the current request completes. if (Boot.currentRequest) { // _debug("current active request, suspending this request"); // trigger assignment of entries now to ensure that overlapping // entries with currently running requests will synchronize state // with this pending one as they complete request.getEntries(); Boot.suspendedQueue.push(request); } else { Boot.currentRequest = request; Boot.processRequest(request, false); } return Boot; }, loadSync: function(request) { // _debug("Boot.loadSync called"); var request = new Request(request); Boot.syncMode++; Boot.processRequest(request, true); Boot.syncMode--; return Boot; }, loadBasePrefix: function(request) { request = new Request(request); request.prependBaseUrl = true; return Boot.load(request); }, loadSyncBasePrefix: function(request) { request = new Request(request); request.prependBaseUrl = true; return Boot.loadSync(request); }, requestComplete: function(request) { var next; if (Boot.currentRequest === request) { Boot.currentRequest = null; while (Boot.suspendedQueue.length > 0) { next = Boot.suspendedQueue.shift(); if (!next.done) { // _debug("resuming suspended request"); Boot.load(next); break; } } } if (!Boot.currentRequest && Boot.suspendedQueue.length == 0) { Boot.fireListeners(); } }, isLoading: function() { return !Boot.currentRequest && Boot.suspendedQueue.length == 0; }, fireListeners: function() { var listener; while (Boot.isLoading() && (listener = Boot.listeners.shift())) { listener(); } }, onBootReady: function(listener) { if (!Boot.isLoading()) { listener(); } else { Boot.listeners.push(listener); } }, /** * this is a helper function used by Ext.Loader to flush out * 'uses' arrays for classes in some Ext versions */ getPathsFromIndexes: function(indexMap, loadOrder) { // In older versions indexMap was an object instead of a sparse array if (!('length' in indexMap)) { var indexArray = [], index; for (index in indexMap) { if (!isNaN(+index)) { indexArray[+index] = indexMap[index]; } } indexMap = indexArray; } return Request.prototype.getPathsFromIndexes(indexMap, loadOrder); }, createLoadOrderMap: function(loadOrder) { return Request.prototype.createLoadOrderMap(loadOrder); }, fetch: function(url, complete, scope, async) { async = (async === undefined) ? !!complete : async; var xhr = new XMLHttpRequest(), result, status, content, exception = false, readyStateChange = function() { if (xhr && xhr.readyState == 4) { status = (xhr.status === 1223) ? 204 : (xhr.status === 0 && ((self.location || {}).protocol === 'file:' || (self.location || {}).protocol === 'ionp:')) ? 200 : xhr.status; content = xhr.responseText; result = { content: content, status: status, exception: exception }; if (complete) { complete.call(scope, result); } xhr.onreadystatechange = emptyFn; xhr = null; } }; if (async) { xhr.onreadystatechange = readyStateChange; } try { // _debug("fetching " + url + " " + (async ? "async" : "sync")); xhr.open('GET', url, async); xhr.send(null); } catch (err) { exception = err; readyStateChange(); return result; } if (!async) { readyStateChange(); } return result; }, notifyAll: function(entry) { entry.notifyRequests(); } }; function Request(cfg) { //The request class encapsulates a series of Entry objects //and provides notification around the completion of all Entries //in this request. if (cfg.$isRequest) { return cfg; } var cfg = cfg.url ? cfg : { url: cfg }, url = cfg.url, urls = url.charAt ? [ url ] : url, charset = cfg.charset || Boot.config.charset; _apply(this, cfg); delete this.url; this.urls = urls; this.charset = charset; } Request.prototype = { $isRequest: true, createLoadOrderMap: function(loadOrder) { var len = loadOrder.length, loadOrderMap = {}, i, element; for (i = 0; i < len; i++) { element = loadOrder[i]; loadOrderMap[element.path] = element; } return loadOrderMap; }, getLoadIndexes: function(item, indexMap, loadOrder, includeUses, skipLoaded) { var resolved = [], queue = [ item ], itemIndex = item.idx, queue, entry, dependencies, depIndex, i, len; if (indexMap[itemIndex]) { // prevent cycles return resolved; } // Both indexMap and resolved are sparse arrays keyed by indexes. // This gives us a naturally sorted sequence of indexes later on // when we need to convert them to paths. // indexMap is the map of all indexes we have visited at least once // per the current expandUrls() invocation, and resolved is the map // of all dependencies for the current item that are not included // in indexMap. indexMap[itemIndex] = resolved[itemIndex] = true; while (item = queue.shift()) { // Canonicalizing URLs is expensive, we try to avoid it if (item.canonicalPath) { entry = Boot.getEntry(item.path, null, true); } else { entry = Boot.getEntry(this.prepareUrl(item.path)); } if (!(skipLoaded && entry.done)) { if (includeUses && item.uses && item.uses.length) { dependencies = item.requires.concat(item.uses); } else { dependencies = item.requires; } for (i = 0 , len = dependencies.length; i < len; i++) { depIndex = dependencies[i]; if (!indexMap[depIndex]) { indexMap[depIndex] = resolved[depIndex] = true; queue.push(loadOrder[depIndex]); } } } } return resolved; }, getPathsFromIndexes: function(indexes, loadOrder) { var paths = [], index, len; // indexes is a sparse array with values being true for defined indexes for (index = 0 , len = indexes.length; index < len; index++) { if (indexes[index]) { paths.push(loadOrder[index].path); } } return paths; }, expandUrl: function(url, loadOrder, loadOrderMap, indexMap, includeUses, skipLoaded) { var item, resolved; if (loadOrder) { item = loadOrderMap[url]; if (item) { resolved = this.getLoadIndexes(item, indexMap, loadOrder, includeUses, skipLoaded); if (resolved.length) { return this.getPathsFromIndexes(resolved, loadOrder); } } } return [ url ]; }, expandUrls: function(urls, includeUses) { var me = this, loadOrder = me.loadOrder, expanded = [], expandMap = {}, indexMap = [], loadOrderMap, tmpExpanded, i, len, t, tlen, tUrl; if (typeof urls === "string") { urls = [ urls ]; } if (loadOrder) { loadOrderMap = me.loadOrderMap; if (!loadOrderMap) { loadOrderMap = me.loadOrderMap = me.createLoadOrderMap(loadOrder); } } for (i = 0 , len = urls.length; i < len; i++) { // We don't want to skip loaded entries (last argument === false). // There are some overrides that get loaded before their respective classes, // and when the class dependencies are processed we don't want to skip over // the overrides' dependencies just because they were loaded first. tmpExpanded = this.expandUrl(urls[i], loadOrder, loadOrderMap, indexMap, includeUses, false); for (t = 0 , tlen = tmpExpanded.length; t < tlen; t++) { tUrl = tmpExpanded[t]; if (!expandMap[tUrl]) { expandMap[tUrl] = true; expanded.push(tUrl); } } } if (expanded.length === 0) { expanded = urls; } return expanded; }, expandLoadOrder: function() { var me = this, urls = me.urls, expanded; if (!me.expanded) { expanded = this.expandUrls(urls, true); me.expanded = true; } else { expanded = urls; } me.urls = expanded; // if we added some urls to the request to honor the indicated // load order, the request needs to be sequential if (urls.length != expanded.length) { me.sequential = true; } return me; }, getUrls: function() { this.expandLoadOrder(); return this.urls; }, prepareUrl: function(url) { if (this.prependBaseUrl) { return Boot.baseUrl + url; } return url; }, getEntries: function() { var me = this, entries = me.entries, loadOrderMap, item, i, entry, urls, url; if (!entries) { entries = []; urls = me.getUrls(); // If we have loadOrder array then the map will be expanded by now if (me.loadOrder) { loadOrderMap = me.loadOrderMap; } for (i = 0; i < urls.length; i++) { url = me.prepareUrl(urls[i]); if (loadOrderMap) { item = loadOrderMap[url]; } entry = Boot.getEntry(url, { buster: me.buster, charset: me.charset }, item && item.canonicalPath); entry.requests.push(me); entries.push(entry); } me.entries = entries; } return entries; }, loadEntries: function(sync) { var me = this, entries = me.getEntries(), len = entries.length, start = me.loadStart || 0, continueLoad, entries, entry, i; if (sync !== undefined) { me.sync = sync; } me.loaded = me.loaded || 0; me.loading = me.loading || len; for (i = start; i < len; i++) { entry = entries[i]; if (!entry.loaded) { continueLoad = entries[i].load(me.sync); } else { continueLoad = true; } if (!continueLoad) { me.loadStart = i; entry.onDone(function() { me.loadEntries(sync); }); break; } } me.processLoadedEntries(); }, processLoadedEntries: function() { var me = this, entries = me.getEntries(), len = entries.length, start = me.startIndex || 0, i, entry; if (!me.done) { for (i = start; i < len; i++) { entry = entries[i]; if (!entry.loaded) { me.startIndex = i; return; } if (!entry.evaluated) { entry.evaluate(); } if (entry.error) { me.error = true; } } me.notify(); } }, notify: function() { var me = this; if (!me.done) { var error = me.error, fn = me[error ? 'failure' : 'success'], delay = ('delay' in me) ? me.delay : (error ? 1 : Boot.config.chainDelay), scope = me.scope || me; me.done = true; if (fn) { if (delay === 0 || delay > 0) { // Free the stack (and defer the next script) setTimeout(function() { fn.call(scope, me); }, delay); } else { fn.call(scope, me); } } me.fireListeners(); Boot.requestComplete(me); } }, onDone: function(listener) { var me = this, listeners = me.listeners || (me.listeners = []); if (me.done) { listener(me); } else { listeners.push(listener); } }, fireListeners: function() { var listeners = this.listeners, listener; if (listeners) { // _debug("firing request listeners"); while ((listener = listeners.shift())) { listener(this); } } } }; function Entry(cfg) { //The Entry class is a token to manage the load and evaluation //state of a particular url. It is used to notify all Requests //interested in this url that the content is available. if (cfg.$isEntry) { return cfg; } // _debug("creating entry for " + cfg.url); var charset = cfg.charset || Boot.config.charset, manifest = Ext.manifest, loader = manifest && manifest.loader, cache = (cfg.cache !== undefined) ? cfg.cache : (loader && loader.cache), buster, busterParam; if (Boot.config.disableCaching) { if (cache === undefined) { cache = !Boot.config.disableCaching; } if (cache === false) { buster = +new Date(); } else if (cache !== true) { buster = cache; } if (buster) { busterParam = (loader && loader.cacheParam) || Boot.config.disableCachingParam; buster = busterParam + "=" + buster; } } _apply(this, cfg); this.charset = charset; this.buster = buster; this.requests = []; } Entry.prototype = { $isEntry: true, done: false, evaluated: false, loaded: false, isCrossDomain: function() { var me = this; if (me.crossDomain === undefined) { // _debug("checking " + me.getLoadUrl() + " for prefix " + Boot.origin); me.crossDomain = (me.getLoadUrl().indexOf(Boot.origin) !== 0); } return me.crossDomain; }, isCss: function() { var me = this; if (me.css === undefined) { if (me.url) { var assetConfig = Boot.assetConfig[me.url]; me.css = assetConfig ? assetConfig.type === "css" : cssRe.test(me.url); } else { me.css = false; } } return this.css; }, getElement: function(tag) { var me = this, el = me.el; if (!el) { // _debug("creating element for " + me.url); if (me.isCss()) { tag = tag || "link"; el = doc.createElement(tag); if (tag == "link") { el.rel = 'stylesheet'; me.prop = 'href'; } else { me.prop = "textContent"; } el.type = "text/css"; } else { tag = tag || "script"; el = doc.createElement(tag); el.type = 'text/javascript'; me.prop = 'src'; if (me.charset) { el.charset = me.charset; } if (Boot.hasAsync) { el.async = false; } } me.el = el; } return el; }, getLoadUrl: function() { var me = this, url; url = me.canonicalPath ? me.url : Boot.canonicalUrl(me.url); if (!me.loadUrl) { me.loadUrl = !!me.buster ? (url + (url.indexOf('?') === -1 ? '?' : '&') + me.buster) : url; } return me.loadUrl; }, fetch: function(req) { var url = this.getLoadUrl(), async = !!req.async, complete = req.complete; Boot.fetch(url, complete, this, async); }, onContentLoaded: function(response) { var me = this, status = response.status, content = response.content, exception = response.exception, url = this.getLoadUrl(); me.loaded = true; if ((exception || status === 0) && !_environment.phantom) { me.error = ("Failed loading synchronously via XHR: '" + url + "'. It's likely that the file is either being loaded from a " + "different domain or from the local file system where cross " + "origin requests are not allowed for security reasons. Try " + "asynchronous loading instead.") || true; me.evaluated = true; } else if ((status >= 200 && status < 300) || status === 304 || _environment.phantom || (status === 0 && content.length > 0)) { me.content = content; } else { me.error = ("Failed loading synchronously via XHR: '" + url + "'. Please verify that the file exists. XHR status code: " + status) || true; me.evaluated = true; } }, createLoadElement: function(callback) { var me = this, el = me.getElement(); me.preserve = true; el.onerror = function() { me.error = true; if (callback) { callback(); callback = null; } }; if (Boot.isIE10m) { el.onreadystatechange = function() { if (this.readyState === 'loaded' || this.readyState === 'complete') { if (callback) { callback(); callback = this.onreadystatechange = this.onerror = null; } } }; } else { el.onload = function() { callback(); callback = this.onload = this.onerror = null; }; } // IE starts loading here el[me.prop] = me.getLoadUrl(); }, onLoadElementReady: function() { Boot.getHead().appendChild(this.getElement()); this.evaluated = true; }, inject: function(content, asset) { // _debug("injecting content for " + this.url); var me = this, head = Boot.getHead(), url = me.url, key = me.key, base, el, ieMode, basePath; if (me.isCss()) { me.preserve = true; basePath = key.substring(0, key.lastIndexOf("/") + 1); base = doc.createElement('base'); base.href = basePath; if (head.firstChild) { head.insertBefore(base, head.firstChild); } else { head.appendChild(base); } // reset the href attribute to cuase IE to pick up the change base.href = base.href; if (url) { content += "\n/*# sourceURL=" + key + " */"; } // create element after setting base el = me.getElement("style"); ieMode = ('styleSheet' in el); head.appendChild(base); if (ieMode) { head.appendChild(el); el.styleSheet.cssText = content; } else { el.textContent = content; head.appendChild(el); } head.removeChild(base); } else { // Debugger friendly, file names are still shown even though they're // eval'ed code. Breakpoints work on both Firebug and Chrome's Web // Inspector. if (url) { content += "\n//# sourceURL=" + key; } Ext.globalEval(content); } return me; }, loadCrossDomain: function() { var me = this, complete = function() { me.el.onerror = me.el.onload = emptyFn; me.el = null; me.loaded = me.evaluated = me.done = true; me.notifyRequests(); }; me.createLoadElement(function() { complete(); }); me.evaluateLoadElement(); // at this point, we need sequential evaluation, // which means we can't advance the load until // this entry has fully completed return false; }, loadElement: function() { var me = this, complete = function() { me.el.onerror = me.el.onload = emptyFn; me.el = null; me.loaded = me.evaluated = me.done = true; me.notifyRequests(); }; me.createLoadElement(function() { complete(); }); me.evaluateLoadElement(); return true; }, loadSync: function() { var me = this; me.fetch({ async: false, complete: function(response) { me.onContentLoaded(response); } }); me.evaluate(); me.notifyRequests(); }, load: function(sync) { var me = this; if (!me.loaded) { if (me.loading) { // if we're calling back through load and we're loading but haven't // yet loaded, then we should be in a sequential, cross domain // load scenario which means we can't continue the load on the // request until this entry has fully evaluated, which will mean // loaded = evaluated = done = true in one step. For css files, this // will happen immediately upon element creation / insertion, // but * * * * Refer to config options of {@link Ext.Loader} for the list of possible properties * * @param {Object} config The config object to override the default values * @return {Ext.Loader} this */ setConfig: Ext.Function.flexSetter(function(name, value) { var delegated = delegatedConfigs[name]; if (name === 'paths') { Loader.setPath(value); } else { _config[name] = value; if (delegated) { Boot.setConfig((delegated === true) ? name : delegated, value); } } return Loader; }), /** * Get the config value corresponding to the specified name. If no name is given, * will return the config object * * @param {String} name The config property name * @return {Object} */ getConfig: function(name) { return name ? _config[name] : _config; }, /** * Sets the path of a namespace. * For Example: * * Ext.Loader.setPath('Ext', '.'); * * @param {String/Object} name See {@link Ext.Function#flexSetter flexSetter} * @param {String} [path] See {@link Ext.Function#flexSetter flexSetter} * @return {Ext.Loader} this * @method */ setPath: function() { // Paths are an Ext.Inventory thing and ClassManager is an instance of that: Manager.setPath.apply(Manager, arguments); return Loader; }, /** * Sets a batch of path entries * * @param {Object} paths a set of className: path mappings * @return {Ext.Loader} this */ addClassPathMappings: function(paths) { // Paths are an Ext.Inventory thing and ClassManager is an instance of that: Manager.setPath(paths); return Loader; }, /** * fixes up loader path configs by prepending Ext.Boot#baseUrl to the beginning * of the path, then delegates to Ext.Loader#addClassPathMappings * @param pathConfig */ addBaseUrlClassPathMappings: function(pathConfig) { var name; for (name in pathConfig) { pathConfig[name] = Boot.baseUrl + pathConfig[name]; } Ext.Loader.addClassPathMappings(pathConfig); }, /** * Translates a className to a file path by adding the * the proper prefix and converting the .'s to /'s. For example: * * Ext.Loader.setPath('My', '/path/to/My'); * * // alerts '/path/to/My/awesome/Class.js' * alert(Ext.Loader.getPath('My.awesome.Class')); * * Note that the deeper namespace levels, if explicitly set, are always resolved first. * For example: * * Ext.Loader.setPath({ * 'My': '/path/to/lib', * 'My.awesome': '/other/path/for/awesome/stuff', * 'My.awesome.more': '/more/awesome/path' * }); * * // alerts '/other/path/for/awesome/stuff/Class.js' * alert(Ext.Loader.getPath('My.awesome.Class')); * * // alerts '/more/awesome/path/Class.js' * alert(Ext.Loader.getPath('My.awesome.more.Class')); * * // alerts '/path/to/lib/cool/Class.js' * alert(Ext.Loader.getPath('My.cool.Class')); * * // alerts 'Unknown/strange/Stuff.js' * alert(Ext.Loader.getPath('Unknown.strange.Stuff')); * * @param {String} className * @return {String} path */ getPath: function(className) { // Paths are an Ext.Inventory thing and ClassManager is an instance of that: return Manager.getPath(className); }, require: function(expressions, fn, scope, excludes) { var classNames; if (excludes) { return Loader.exclude(excludes).require(expressions, fn, scope); } classNames = Manager.getNamesByExpression(expressions); return Loader.load(classNames, fn, scope); }, syncRequire: function() { var wasEnabled = Loader.syncModeEnabled, ret; Loader.syncModeEnabled = true; ret = Loader.require.apply(Loader, arguments); Loader.syncModeEnabled = wasEnabled; return ret; }, exclude: function(excludes) { var selector = Manager.select({ require: function(classNames, fn, scope) { return Loader.load(classNames, fn, scope); }, syncRequire: function(classNames, fn, scope) { var wasEnabled = Loader.syncModeEnabled, ret; Loader.syncModeEnabled = true; ret = Loader.load(classNames, fn, scope); Loader.syncModeEnabled = wasEnabled; return ret; } }); selector.exclude(excludes); return selector; }, load: function(classNames, callback, scope) { if (callback) { if (callback.length) { // If callback expects arguments, shim it with a function that will map // the requires class(es) from the names we are given. callback = Loader.makeLoadCallback(classNames, callback); } callback = callback.bind(scope || Ext.global); } /* eslint-disable-next-line vars-on-top */ var state = Manager.classState, missingClassNames = [], urls = [], urlByClass = {}, numClasses = classNames.length, className, i, numMissing; for (i = 0; i < numClasses; ++i) { className = Manager.resolveName(classNames[i]); if (!Manager.isCreated(className)) { missingClassNames.push(className); if (!state[className]) { urlByClass[className] = Loader.getPath(className); urls.push(urlByClass[className]); } } } // If the dynamic dependency feature is not being used, throw an error // if the dependencies are not defined numMissing = missingClassNames.length; if (numMissing) { Loader.missingCount += numMissing; Manager.onCreated(function() { if (callback) { Ext.callback(callback, scope, arguments); } Loader.checkReady(); }, Loader, missingClassNames); if (!_config.enabled) { Ext.raise("Ext.Loader is not enabled, so dependencies cannot be resolved " + "dynamically. Missing required class" + ((missingClassNames.length > 1) ? "es" : "") + ": " + missingClassNames.join(', ')); } if (urls.length) { Loader.loadScripts({ url: urls, // scope will be this options object so we can pass these along: _classNames: missingClassNames, _urlByClass: urlByClass }); } else { // need to call checkReady here, as the _missingCoun // may have transitioned from 0 to > 0, meaning we // need to block ready Loader.checkReady(); } } else { if (callback) { callback.call(scope); } // need to call checkReady here, as the _missingCoun // may have transitioned from 0 to > 0, meaning we // need to block ready Loader.checkReady(); } if (Loader.syncModeEnabled) { // Class may have been just loaded or was already loaded if (numClasses === 1) { return Manager.get(classNames[0]); } } return Loader; }, makeLoadCallback: function(classNames, callback) { return function() { var classes = [], i = classNames.length; while (i-- > 0) { classes[i] = Manager.get(classNames[i]); } return callback.apply(this, classes); }; }, onLoadFailure: function(request) { var options = this, entries = request.entries || [], onError = options.onError, error, entry, i; Loader.hasFileLoadError = true; --Loader.scriptsLoading; if (onError) { for (i = 0; i < entries.length; i++) { entry = entries[i]; if (entry.error) { error = new Error('Failed to load: ' + entry.url); break; } } error = error || new Error('Failed to load'); onError.call(options.userScope, options, error, request); } else { Ext.log.error("[Ext.Loader] Some requested files failed to load."); } Loader.checkReady(); }, onLoadSuccess: function() { var options = this, onLoad = options.onLoad, classNames = options._classNames, urlByClass = options._urlByClass, state = Manager.classState, missingQueue = Loader.missingQueue, className, i, len; --Loader.scriptsLoading; if (onLoad) { // TODO: need an adapter to convert to v4 onLoad signatures onLoad.call(options.userScope, options); } // onLoad can cause more loads to start, so it must run first // classNames is the array of *all* classes that load() was asked to load, // including those that might have been already loaded but not yet created. // urlByClass is a map of only those classes that we asked Boot to load. for (i = 0 , len = classNames.length; i < len; i++) { className = classNames[i]; // When a script is loaded and executed, we should have Ext.define() called // for at least one of the classes in the list, which will set the state // for that class. That by itself does not mean that the class is available // *now* but it means that ClassManager is tracking it and will fire the // onCreated callback that we set back in load(). // However if there is no state for the class, that may mean two things: // either it is not a Ext class, or it is truly missing. In any case we need // to watch for that thing ourselves, which we will do every checkReady(). if (!state[className]) { missingQueue[className] = urlByClass[className]; } } Loader.checkReady(); }, // TODO: this timing of this needs to be deferred until all classes have had // a chance to be created reportMissingClasses: function() { var missingQueue = Loader.missingQueue, missingClasses = [], missingPaths = [], missingClassName; if (!Loader.syncModeEnabled && !Loader.scriptsLoading && Loader.isLoading && !Loader.hasFileLoadError) { for (missingClassName in missingQueue) { missingClasses.push(missingClassName); missingPaths.push(missingQueue[missingClassName]); } if (missingClasses.length) { throw new Error("The following classes are not declared even if their files " + "have been loaded: '" + missingClasses.join("', '") + "'. Please check the source code of their " + "corresponding files for possible typos: '" + missingPaths.join("', '")); } } }, /** * Add a new listener to be executed when all required scripts are fully loaded * * @param {Function} fn The function callback to be executed * @param {Object} scope The execution scope (`this`) of the callback function. * @param {Boolean} [withDomReady=true] Pass `false` to not also wait for document * dom ready. * @param {Object} [options] Additional callback options. * @param {Number} [options.delay=0] A number of milliseconds to delay. * @param {Number} [options.priority=0] Relative priority of this callback. Negative * numbers are reserved. */ onReady: function(fn, scope, withDomReady, options) { var listener; if (withDomReady) { Ready.on(fn, scope, options); } else { listener = Ready.makeListener(fn, scope, options); if (Loader.isLoading) { readyListeners.push(listener); } else { Ready.invoke(listener); } } }, /** * @private * Ensure that any classes referenced in the `uses` property are loaded. */ addUsedClasses: function(classes) { var cls, i, ln; if (classes) { classes = (typeof classes === 'string') ? [ classes ] : classes; for (i = 0 , ln = classes.length; i < ln; i++) { cls = classes[i]; if (typeof cls === 'string' && !Ext.Array.contains(usedClasses, cls)) { usedClasses.push(cls); } } } return Loader; }, /** * @private */ triggerReady: function() { var listener, refClasses = usedClasses; if (Loader.isLoading && refClasses.length) { // Empty the array to eliminate potential recursive loop issue usedClasses = []; // this may immediately call us back if all 'uses' classes // have been loaded Loader.require(refClasses); } else { // Must clear this before calling callbacks. This will cause any new loads // to call Ready.block() again. See below for more on this. Loader.isLoading = false; // These listeners are just those attached directly to Loader to wait for // class loading only. readyListeners.sort(Ready.sortFn); // this method can be called with Loader.isLoading either true or false // (can be called with false when all 'uses' classes are already loaded) // this may bypass the above if condition while (readyListeners.length && !Loader.isLoading) { // we may re-enter triggerReady so we cannot necessarily iterate the // readyListeners array listener = readyListeners.pop(); Ready.invoke(listener); } // If the DOM is also ready, this will fire the normal onReady listeners. // An astute observer would note that we may now be back to isLoading and // so ask "Why you call unblock?". The reason is that we must match the // calls to block and since we transitioned from isLoading to !isLoading // here we must call unblock. If we have transitioned back to isLoading in // the above loop it will have called block again so the counter will be // increased and this call will not reduce the block count to 0. This is // done by loadScripts. Ready.unblock(); } }, /** * @private * @param {String} className */ historyPush: function(className) { if (className && !isInHistory[className] && !Manager.overrideMap[className]) { isInHistory[className] = true; history.push(className); } return Loader; }, /** * This is an internal method that delegate content loading to the * bootstrap layer. * @private * @param params */ loadScripts: function(params) { var manifest = Ext.manifest, loadOrder = manifest && manifest.loadOrder, loadOrderMap = manifest && manifest.loadOrderMap, options; ++Loader.scriptsLoading; // if the load order map hasn't been created, create it now // and cache on the manifest if (loadOrder && !loadOrderMap) { manifest.loadOrderMap = loadOrderMap = Boot.createLoadOrderMap(loadOrder); } // verify the loading state, as this may have transitioned us from // not loading to loading Loader.checkReady(); options = Ext.apply({ loadOrder: loadOrder, loadOrderMap: loadOrderMap, charset: _config.scriptCharset, success: Loader.onLoadSuccess, failure: Loader.onLoadFailure, sync: Loader.syncModeEnabled, _classNames: [] }, params); options.userScope = options.scope; options.scope = options; Boot.load(options); }, /** * This method is provide for use by the bootstrap layer. * @private * @param {String[]} urls */ loadScriptsSync: function(urls) { var syncwas = Loader.syncModeEnabled; Loader.syncModeEnabled = true; Loader.loadScripts({ url: urls }); Loader.syncModeEnabled = syncwas; }, /** * This method is provide for use by the bootstrap layer. * @private * @param {String[]} urls */ loadScriptsSyncBasePrefix: function(urls) { var syncwas = Loader.syncModeEnabled; Loader.syncModeEnabled = true; Loader.loadScripts({ url: urls, prependBaseUrl: true }); Loader.syncModeEnabled = syncwas; }, /** * Loads the specified script URL and calls the supplied callbacks. If this method * is called before {@link Ext#isReady}, the script's load will delay the transition * to ready. This can be used to load arbitrary scripts that may contain further * {@link Ext#require Ext.require} calls. * * @param {Object/String/String[]} options The options object or simply the URL(s) to load. * @param {String} options.url The URL from which to load the script. * @param {Function} [options.onLoad] The callback to call on successful load. * @param {Function} [options.onError] The callback to call on failure to load. * @param {Object} [options.scope] The scope (`this`) for the supplied callbacks. */ loadScript: function(options) { var isString = typeof options === 'string', isArray = options instanceof Array, isObject = !isArray && !isString, url = isObject ? options.url : options, onError = isObject && options.onError, onLoad = isObject && options.onLoad, scope = isObject && options.scope, request = { url: url, scope: scope, onLoad: onLoad, onError: onError, _classNames: [] }; Loader.loadScripts(request); }, /** * @private */ checkMissingQueue: function() { var missingQueue = Loader.missingQueue, newQueue = {}, missing = 0, name; for (name in missingQueue) { // If class state is available for the name, that means ClassManager // is tracking it and will fire callback when it is created. // We only need to track non-class things in the Loader. if (!(Manager.classState[name] || Manager.isCreated(name))) { newQueue[name] = missingQueue[name]; missing++; } } Loader.missingCount = missing; Loader.missingQueue = newQueue; }, /** * @private */ checkReady: function() { var wasLoading = Loader.isLoading, isLoading; Loader.checkMissingQueue(); isLoading = Loader.missingCount + Loader.scriptsLoading; if (isLoading && !wasLoading) { Ready.block(); Loader.isLoading = !!isLoading; } else if (!isLoading && wasLoading) { Loader.triggerReady(); } if (!Loader.scriptsLoading && Loader.missingCount) { // Things look bad, but since load requests may come later, defer this // for a bit then check if things are still stuck. Ext.defer(function() { var name; if (!Loader.scriptsLoading && Loader.missingCount) { Ext.log.error('[Loader] The following classes failed to load:'); for (name in Loader.missingQueue) { Ext.log.error('[Loader] ' + name + ' from ' + Loader.missingQueue[name]); } } }, 1000); } } }); /** * Loads all classes by the given names and all their direct dependencies; optionally * executes the given callback function when finishes, within the optional scope. * * @param {String/String[]} expressions The class, classes or wildcards to load. * @param {Function} [fn] The callback function. * @param {Object} [scope] The execution scope (`this`) of the callback function. * @member Ext * @method require */ Ext.require = alias(Loader, 'require'); /** * Synchronously loads all classes by the given names and all their direct dependencies; * optionally executes the given callback function when finishes, within the optional scope. * * @param {String/String[]} expressions The class, classes or wildcards to load. * @param {Function} [fn] The callback function. * @param {Object} [scope] The execution scope (`this`) of the callback function. * @member Ext * @method syncRequire */ Ext.syncRequire = alias(Loader, 'syncRequire'); /** * Explicitly exclude files from being loaded. Useful when used in conjunction with a * broad include expression. Can be chained with more `require` and `exclude` methods, * for example: * * Ext.exclude('Ext.data.*').require('*'); * * Ext.exclude('widget.button*').require('widget.*'); * * @param {String/String[]} excludes * @return {Object} Contains `exclude`, `require` and `syncRequire` methods for chaining. * @member Ext * @method exclude */ Ext.exclude = alias(Loader, 'exclude'); /** * @cfg {String[]} requires * @member Ext.Class * List of classes that have to be loaded before instantiating this class. * For example: * * Ext.define('Mother', { * requires: ['Child'], * giveBirth: function() { * // we can be sure that child class is available. * return new Child(); * } * }); */ Class.registerPreprocessor('loader', function(cls, data, hooks, continueFn) { if (Ext.classSystemMonitor) { Ext.classSystemMonitor(cls, 'Ext.Loader#loaderPreprocessor', arguments); } /* eslint-disable-next-line vars-on-top */ var me = this, dependencies = [], dependency, className = Manager.getName(cls), i, j, ln, subLn, value, propertyName, propertyValue, requiredMap; /* Loop through the dependencyProperties, look for string class names and push them into a stack, regardless of whether the property's value is a string, array or object. For example: { extend: 'Ext.MyClass', requires: ['Ext.some.OtherClass'], mixins: { thing: 'Foo.bar.Thing'; } } which will later be transformed into: { extend: Ext.MyClass, requires: [Ext.some.OtherClass], mixins: { thing: Foo.bar.Thing; } } */ for (i = 0 , ln = dependencyProperties.length; i < ln; i++) { propertyName = dependencyProperties[i]; if (data.hasOwnProperty(propertyName)) { propertyValue = data[propertyName]; if (typeof propertyValue === 'string') { dependencies.push(propertyValue); } else if (propertyValue instanceof Array) { for (j = 0 , subLn = propertyValue.length; j < subLn; j++) { value = propertyValue[j]; if (typeof value === 'string') { dependencies.push(value); } } } else if (typeof propertyValue !== 'function') { for (j in propertyValue) { if (propertyValue.hasOwnProperty(j)) { value = propertyValue[j]; if (typeof value === 'string') { dependencies.push(value); } } } } } } if (dependencies.length === 0) { return; } if (className) { _requiresMap[className] = dependencies; } /* eslint-disable-next-line vars-on-top */ var manifestClasses = Ext.manifest && Ext.manifest.classes, deadlockPath = [], detectDeadlock; /* * Automatically detect deadlocks before-hand, * will throw an error with detailed path for ease of debugging. Examples * of deadlock cases: * * - A extends B, then B extends A * - A requires B, B requires C, then C requires A * * The detectDeadlock function will recursively transverse till the leaf, hence * it can detect deadlocks no matter how deep the path is. However we don't need * to run this check if the class name is in the manifest: that means Cmd has * already resolved all dependencies for this class with no deadlocks. */ if (className && (!manifestClasses || !manifestClasses[className])) { requiredMap = Loader.requiredByMap || (Loader.requiredByMap = {}); for (i = 0 , ln = dependencies.length; i < ln; i++) { dependency = dependencies[i]; (requiredMap[dependency] || (requiredMap[dependency] = [])).push(className); } detectDeadlock = function(cls) { var requires = _requiresMap[cls], dep, i, ln; deadlockPath.push(cls); if (requires) { if (Ext.Array.contains(requires, className)) { Ext.Error.raise("Circular requirement detected! '" + className + "' and '" + deadlockPath[1] + "' mutually require each other. " + "Path: " + deadlockPath.join(' -> ') + " -> " + deadlockPath[0]); } for (i = 0 , ln = requires.length; i < ln; i++) { dep = requires[i]; if (!isInHistory[dep]) { detectDeadlock(requires[i]); } } } }; detectDeadlock(className); } (className ? Loader.exclude(className) : Loader).require(dependencies, function() { var i, ln, j, subLn, k; for (i = 0 , ln = dependencyProperties.length; i < ln; i++) { propertyName = dependencyProperties[i]; if (data.hasOwnProperty(propertyName)) { propertyValue = data[propertyName]; if (typeof propertyValue === 'string') { data[propertyName] = Manager.get(propertyValue); } else if (propertyValue instanceof Array) { for (j = 0 , subLn = propertyValue.length; j < subLn; j++) { value = propertyValue[j]; if (typeof value === 'string') { data[propertyName][j] = Manager.get(value); } } } else if (typeof propertyValue !== 'function') { for (k in propertyValue) { if (propertyValue.hasOwnProperty(k)) { value = propertyValue[k]; if (typeof value === 'string') { data[propertyName][k] = Manager.get(value); } } } } } } continueFn.call(me, cls, data, hooks); }); return false; }, true, 'after', 'className'); /** * @cfg {String[]} uses * @member Ext.Class * List of optional classes to load together with this class. These aren't neccessarily loaded * before this class is created, but are guaranteed to be available before Ext.onReady * listeners are invoked. For example: * * Ext.define('Mother', { * uses: ['Child'], * giveBirth: function() { * // This code might, or might not work: * // return new Child(); * * // Instead use Ext.create() to load the class at the spot if not loaded already: * return Ext.create('Child'); * } * }); */ Manager.registerPostprocessor('uses', function(name, cls, data) { var uses = data.uses, classNames; if (Ext.classSystemMonitor) { Ext.classSystemMonitor(cls, 'Ext.Loader#usesPostprocessor', arguments); } if (uses) { classNames = Manager.getNamesByExpression(data.uses); Loader.addUsedClasses(classNames); } }); Manager.onCreated(Loader.historyPush); Loader.init(); }()); //----------------------------------------------------------------------------- // Use performance.now when available to keep timestamps consistent. Ext._endTime = Ext.ticks(); // This hook is to allow tools like DynaTrace to deterministically detect the availability // of Ext.onReady. Since Loader takes over Ext.onReady this must be done here and not in // Ext.env.Ready. if (Ext._beforereadyhandler) { Ext._beforereadyhandler(); } /** * @class Ext.util.Positionable */ Ext.define('Ext.overrides.util.Positionable', { override: 'Ext.util.Positionable', /** * @method alignTo * @param {Ext.util.Positionable/HTMLElement/String} anchorToEl The Positionable, * HTMLElement, or id of the element to align to. * @param {String} [alignment="tl-bl?"] The position to align to * @param {Number[]} [offsets] Offset the positioning by [x, y] * @param {Boolean/Object} [animate] true for the default animation or a standard * Element animation config object * @return {Ext.util.Positionable} this */ /** * @method anchorTo * Anchors an element to another element and realigns it when the window is resized. * @param {Ext.util.Positionable/HTMLElement/String} anchorToEl The Positionable, * HTMLElement, or id of the element to align to. * @param {String} [alignment="tl-bl?"] The position to align to * @param {Number[]} [offsets] Offset the positioning by [x, y] * @param {Boolean/Object} [animate] true for the default animation or a standard * Element animation config object * @param {Boolean/Number} [monitorScroll=50] True to monitor body scroll and * reposition. If this parameter is a number, it is used as the buffer delay in * milliseconds. * @param {Function} [callback] The function to call after the animation finishes * @return {Ext.util.Positionable} this */ anchorTo: function(anchorToEl, alignment, offsets, animate, monitorScroll, callback) { var me = this, scroll = !Ext.isEmpty(monitorScroll), action = function() { me.mixins.positionable.alignTo.call(me, anchorToEl, alignment, offsets, animate); Ext.callback(callback, me); }, anchor = me.getAnchor(); // previous listener anchor, remove it me.removeAnchor(); Ext.apply(anchor, { fn: action, scroll: scroll }); Ext.on('resize', action, null); if (scroll) { Ext.getWin().on('scroll', action, null, { buffer: !isNaN(monitorScroll) ? monitorScroll : 50 }); } action(); // align immediately return me; }, getAnchor: function() { var el = this.el, data, anchor; if (!el || !el.dom) { return; } data = el.getData(); anchor = data._anchor; if (!anchor) { anchor = data._anchor = {}; } return anchor; }, alignTo: function(element, position, offsets, /* private (documented in ext) */ animate) { var me = this, el = me.el, newMaxHeight, newRegion; // Release any height constraint prior to aligning if we are shrinkwrap height. if (me.isComponent && me.getSizeModel().height.shrinkWrap) { if (me.maxHeight) { me.setMaxHeight(null); } newMaxHeight = true; } newRegion = me.getAlignToRegion(element, position, offsets, me.minHeight || 150); me.setXY([ newRegion.x, newRegion.y ], el.anim && !!animate ? el.anim(animate) : false); // Impose calculated height constraint. if (newMaxHeight && (newMaxHeight = newRegion.getHeight()) !== me.getHeight()) { me.setMaxHeight(newMaxHeight); } return me; }, /** * @method move * Move the element relative to its current position. * @param {String} direction Possible values are: * * - `"l"` (or `"left"`) * - `"r"` (or `"right"`) * - `"t"` (or `"top"`, or `"up"`) * - `"b"` (or `"bottom"`, or `"down"`) * * @param {Number} distance How far to move the element in pixels * @param {Boolean/Object} [animate] true for the default animation or a standard * Element animation config object */ /** * Remove any anchor to this element. See {@link #anchorTo}. * @return {Ext.util.Positionable} this */ removeAnchor: function() { var anchor = this.getAnchor(); if (anchor && anchor.fn) { Ext.un('resize', anchor.fn); if (anchor.scroll) { Ext.getWin().on('scroll', anchor.fn); } delete anchor.fn; } return this; }, /** * @method setBox * Sets the element's box. If animate is true then x, y, width, and height will be * animated concurrently. * @param {Object} box The box to fill {x, y, width, height} * @param {Boolean/Object} [animate] true for the default animation or a standard * Element animation config object * @return {Ext.util.Positionable} this */ setBox: function(box, animate) { var me = this; if (box.isRegion) { box = { x: box.left, y: box.top, width: box.right - box.left, height: box.bottom - box.top }; } if (animate) { me.constrainBox(box); me.animate(Ext.applyIf({ to: box, listeners: { afteranimate: Ext.Function.bind(me.afterSetPosition, me, [ box.x, box.y ]) } }, animate)); } else { me.callParent([ box ]); } return me; } }); /** * @method setX * Sets the X position of the DOM element based on page coordinates. * @param {Number} x The X position * @param {Boolean/Object} [animate] True for the default animation, or a standard * Element animation config object * @return {Ext.util.Positionable} this */ /** * @method setXY * Sets the position of the DOM element in page coordinates. * @param {Number[]} pos Contains X & Y [x, y] values for new position (coordinates * are page-based) * @param {Boolean/Object} [animate] True for the default animation, or a standard * Element animation config object * @return {Ext.util.Positionable} this */ /** * @method setY * Sets the Y position of the DOM element based on page coordinates. * @param {Number} y The Y position * @param {Boolean/Object} [animate] True for the default animation, or a standard * Element animation config object * @return {Ext.util.Positionable} this */ /** * @class Ext.event.Event */ Ext.define('Ext.overrides.event.Event', { override: 'Ext.event.Event', /** * @method injectEvent * @member Ext.event.Event * Injects a DOM event using the data in this object and (optionally) a new target. * This is a low-level technique and not likely to be used by application code. The * currently supported event types are: *

HTMLEvents

* *

MouseEvents

* *

UIEvents

* * @param {Ext.Element/HTMLElement} target (optional) If specified, the target for the event. * This is likely to be used when relaying a DOM event. If not specified, {@link #getTarget} * is used to determine the target. */ injectEvent: (function() { var API, dispatchers = {}, // keyed by event type (e.g., 'mousedown') crazyIEButtons; // Good reference: http://developer.yahoo.com/yui/docs/UserAction.js.html // IE9 has createEvent, but this code causes major problems with htmleditor (it // blocks all mouse events and maybe more). TODO if (!Ext.isIE9m && document.createEvent) { // if (DOM compliant) API = { createHtmlEvent: function(doc, type, bubbles, cancelable) { var event = doc.createEvent('HTMLEvents'); event.initEvent(type, bubbles, cancelable); return event; }, createMouseEvent: function(doc, type, bubbles, cancelable, detail, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) { var event = doc.createEvent('MouseEvents'), view = doc.defaultView || window; if (event.initMouseEvent) { event.initMouseEvent(type, bubbles, cancelable, view, detail, clientX, clientY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget); } else { // old Safari event = doc.createEvent('UIEvents'); event.initEvent(type, bubbles, cancelable); event.view = view; event.detail = detail; event.screenX = clientX; event.screenY = clientY; event.clientX = clientX; event.clientY = clientY; event.ctrlKey = ctrlKey; event.altKey = altKey; event.metaKey = metaKey; event.shiftKey = shiftKey; event.button = button; event.relatedTarget = relatedTarget; } return event; }, createUIEvent: function(doc, type, bubbles, cancelable, detail) { var event = doc.createEvent('UIEvents'), view = doc.defaultView || window; event.initUIEvent(type, bubbles, cancelable, view, detail); return event; }, fireEvent: function(target, type, event) { target.dispatchEvent(event); } }; } else if (document.createEventObject) { // else if (IE) crazyIEButtons = { 0: 1, 1: 4, 2: 2 }; API = { createHtmlEvent: function(doc, type, bubbles, cancelable) { var event = doc.createEventObject(); event.bubbles = bubbles; event.cancelable = cancelable; return event; }, createMouseEvent: function(doc, type, bubbles, cancelable, detail, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) { var event = doc.createEventObject(); event.bubbles = bubbles; event.cancelable = cancelable; event.detail = detail; event.screenX = clientX; event.screenY = clientY; event.clientX = clientX; event.clientY = clientY; event.ctrlKey = ctrlKey; event.altKey = altKey; event.shiftKey = shiftKey; event.metaKey = metaKey; event.button = crazyIEButtons[button] || button; event.relatedTarget = relatedTarget; // cannot assign to/fromElement return event; }, createUIEvent: function(doc, type, bubbles, cancelable, detail) { var event = doc.createEventObject(); event.bubbles = bubbles; event.cancelable = cancelable; return event; }, fireEvent: function(target, type, event) { target.fireEvent('on' + type, event); } }; } //---------------- // HTMLEvents Ext.Object.each({ load: [ false, false ], unload: [ false, false ], select: [ true, false ], change: [ true, false ], submit: [ true, true ], reset: [ true, false ], resize: [ true, false ], scroll: [ true, false ] }, function(name, value) { var bubbles = value[0], cancelable = value[1]; dispatchers[name] = function(targetEl, srcEvent) { var e = API.createHtmlEvent(name, bubbles, cancelable); API.fireEvent(targetEl, name, e); }; }); //---------------- // MouseEvents function createMouseEventDispatcher(type, detail) { var cancelable = (type !== 'mousemove'); return function(targetEl, srcEvent) { var xy = srcEvent.getXY(), e; e = API.createMouseEvent(targetEl.ownerDocument, type, true, cancelable, detail, xy[0], xy[1], srcEvent.ctrlKey, srcEvent.altKey, srcEvent.shiftKey, srcEvent.metaKey, srcEvent.button, srcEvent.relatedTarget); API.fireEvent(targetEl, type, e); }; } Ext.each([ 'click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout' ], function(eventName) { dispatchers[eventName] = createMouseEventDispatcher(eventName, 1); }); //---------------- // UIEvents Ext.Object.each({ focusin: [ true, false ], focusout: [ true, false ], activate: [ true, true ], focus: [ false, false ], blur: [ false, false ] }, function(name, value) { var bubbles = value[0], cancelable = value[1]; dispatchers[name] = function(targetEl, srcEvent) { var e = API.createUIEvent(targetEl.ownerDocument, name, bubbles, cancelable, 1); API.fireEvent(targetEl, name, e); }; }); //--------- if (!API) { // not even sure what ancient browsers fall into this category... dispatchers = {}; // never mind all those we just built :P API = {}; } function cannotInject(target, srcEvent) {} // TODO log something return function(target) { var me = this, dispatcher = dispatchers[me.type] || cannotInject, t = target ? (target.dom || target) : me.getTarget(); dispatcher(t, me); }; }()), // call to produce method preventDefault: function(browserOnly) { var me = this, event = me.browserEvent, parentEvent = me.parentEvent, unselectable, target, fn; // This check is for IE8/9. The event object may have been // invalidated, so we can't delve into the details of it. If so, // just fall out gracefully and don't attempt to do anything. // eslint-disable-next-line valid-typeof if (typeof event.type !== 'unknown') { // In some cases we want to prevent default on the browser event // but keep propagating it through our event system. For example, // in Checkbox selection where the cells with checkboxes should // prevent focusing on mousedown but still fire the click event. if (!browserOnly) { me.defaultPrevented = true; } // if the event was created by prototype-chaining a new object to an existing event // instance, we need to make sure the parent event is defaultPrevented as well. if (parentEvent) { parentEvent.defaultPrevented = true; } if (event.preventDefault) { event.preventDefault(); } else { // The purpose of the code below is for preventDefault to stop focus from // occurring like it does in other modern browsers. This only happens in // IE8/9 when using attachEvent. The use of unselectable seems the most reliable // way to prevent this from happening. We need to use a timeout to restore the // unselectable state because if we don't setting it has no effect. It's important // to set the atrribute to 'on' as opposed to just setting the property on the // DOM element. See the link below for a discussion on the issue: // http://bugs.jquery.com/ticket/10345 if (event.type === 'mousedown') { target = event.target; unselectable = target.getAttribute('unselectable'); if (unselectable !== 'on') { target.setAttribute('unselectable', 'on'); fn = function() { target.setAttribute('unselectable', unselectable); }; // This function is hard to track, with a potential to be called // for any HtmlElement in the document. It may be a Fly, it may // not belong to any Component, and it may even be created by // 3rd party code that we have no control over and cannot intercept // the element being destroyed. // On the other hand, the function is pretty simple, cannot lead // to memory leaks and is only fired once. So, no harm no foul. fn.$skipTimerCheck = true; Ext.defer(fn, 1); } } // IE9 and earlier do not support preventDefault event.returnValue = false; // Some keys events require setting the keyCode to -1 to be prevented // all ctrl + X and F1 -> F12 if (event.ctrlKey || event.keyCode > 111 && event.keyCode < 124) { event.keyCode = -1; } } } return me; }, deprecated: { '5.0': { methods: { /** * @method clone * @member Ext.event.Event * Clones this event. * @return {Ext.event.Event} The cloned copy * @deprecated 5.0.0 This method is deprecated. */ clone: function() { return new this.self(this.browserEvent, this); } } } } }, function() { var Event = this, btnMap; if (Ext.isIE9m) { btnMap = { 0: 0, 1: 0, 4: 1, 2: 2 }; Event.override({ statics: { /** * @member Ext.event.Event * When events are attached using IE's attachEvent API instead of * addEventListener accessing any members of an event object asynchronously * results in "Member not found" error. To work around this we fabricate * our own event object by copying all of its members to a new object. * @param {Event} browserEvent The native browser event object * @private * @static */ enableIEAsync: function(browserEvent) { var name, fakeEvent = {}; for (name in browserEvent) { fakeEvent[name] = browserEvent[name]; } return fakeEvent; } }, constructor: function(event, info, touchesMap, identifiers) { var me = this; me.callParent([ event, info, touchesMap, identifiers ]); me.button = btnMap[event.button]; if (event.type === 'contextmenu') { // IE8/9 reports click as 0, so we can at least attempt to infer here me.button = 2; } // IE8 can throw an error when trying to access properties on a browserEvent // object when the event has been buffered or delayed. Cache them here // so we can access them later. me.toElement = event.toElement; me.fromElement = event.fromElement; }, mouseLeaveRe: /(mouseout|mouseleave)/, mouseEnterRe: /(mouseover|mouseenter)/, /** * @method enableIEAsync * @member Ext.event.Event * @inheritdoc Ext.event.Event#static-method-enableIEAsync * @private */ enableIEAsync: function(browserEvent) { this.browserEvent = this.self.enableIEAsync(browserEvent); }, getRelatedTarget: function(selector, maxDepth, returnEl) { var me = this, type, target; if (!me.relatedTarget) { type = me.type; if (me.mouseLeaveRe.test(type)) { target = me.toElement; } else if (me.mouseEnterRe.test(type)) { target = me.fromElement; } if (target) { me.relatedTarget = me.self.resolveTextNode(target); } } return me.callParent([ selector, maxDepth, returnEl ]); } }); // We place these listeners to capture Tab and Shift-Tab key strokes // and pass this information in the focus/blur event if it happens // between keydown/keyup pair. document.attachEvent('onkeydown', Ext.event.Event.globalTabKeyDown); document.attachEvent('onkeyup', Ext.event.Event.globalTabKeyUp); window.attachEvent('onunload', function() { document.detachEvent('onkeydown', Ext.event.Event.globalTabKeyDown); document.detachEvent('onkeyup', Ext.event.Event.globalTabKeyUp); }); } }); Ext.define('Ext.overrides.event.publisher.Dom', { override: 'Ext.event.publisher.Dom' }, function(DomPublisher) { var focusEvents = { focus: true, focusin: true, focusout: true, blur: true }; if (Ext.isIE10m) { DomPublisher.override({ isEventBlocked: function(e) { if (!focusEvents[e.type]) { return this.callParent([ e ]); } // eslint-disable-next-line vars-on-top var body = document.body, ev = e.browserEvent, el = Ext.synchronouslyFocusing; /* eslint-disable max-len, brace-style */ // This horrid hack is necessary to work around the issue with input elements // in IE10m that can fail to focus under certain conditions. See comment in // Ext.dom.Element override. if (el && ((ev.type === 'focusout' && (ev.srcElement === el || ev.srcElement === window) && ev.toElement === body) || (ev.type === 'focusin' && (ev.srcElement === body || ev.srcElement === window) && ev.fromElement === el && ev.toElement === null))) { return true; } /* eslint-enable max-len, brace-style */ return false; } }); } if (Ext.isIE9m) { // eslint-disable-next-line vars-on-top var docElement = document.documentElement, docBody = document.body, prototype = DomPublisher.prototype, onDirectEvent, onDirectCaptureEvent; // eslint-disable-line no-unused-vars prototype.target = document; prototype.directBoundListeners = {}; // This method gets bound to the element scope in addDirectListener so that // the currentTarget can be captured using "this". onDirectEvent = function(e, publisher, capture) { e.target = e.srcElement || window; e.currentTarget = this; if (capture) { // Although directly attached capture listeners are not supported in IE9m // we still need to call the handler so at least the event fires. publisher.onDirectCaptureEvent(e); } else { publisher.onDirectEvent(e); } }; onDirectCaptureEvent = function(e, publisher) { e.target = e.srcElement || window; e.currentTarget = this; // this, not DomPublisher publisher.onDirectCaptureEvent(e); }; DomPublisher.override({ addDelegatedListener: function(eventName) { this.delegatedListeners[eventName] = 1; // Use attachEvent for IE9 and below. Even though IE9 strict supports // addEventListener, it has issues with using synthetic events. this.target.attachEvent('on' + eventName, this.onDelegatedEvent); }, removeDelegatedListener: function(eventName) { delete this.delegatedListeners[eventName]; this.target.detachEvent('on' + eventName, this.onDelegatedEvent); }, addDirectListener: function(eventName, element, capture) { var me = this, dom = element.dom, // binding the listener to the element allows us to capture the // "currentTarget" (see onDirectEvent) boundFn = Ext.Function.bind(onDirectEvent, dom, [ me, capture ], true), directBoundListeners = me.directBoundListeners, handlers = directBoundListeners[eventName] || (directBoundListeners[eventName] = {}); handlers[dom.id] = boundFn; // may be called with an SVG element here, which // does not have the attachEvent method on IE 9 strict if (dom.attachEvent) { dom.attachEvent('on' + eventName, boundFn); } else { me.callParent([ eventName, element, capture ]); } }, removeDirectListener: function(eventName, element, capture) { var dom = element.dom; if (dom.detachEvent) { dom.detachEvent('on' + eventName, this.directBoundListeners[eventName][dom.id]); } else { this.callParent([ eventName, element, capture ]); } }, doDelegatedEvent: function(e) { e.target = e.srcElement || window; if (e.type === 'focusin') { // IE8 sometimes happen to focus element instead of the body // eslint-disable-next-line max-len e.relatedTarget = e.fromElement === docBody || e.fromElement === docElement ? null : e.fromElement; } else if (e.type === 'focusout') { // eslint-disable-next-line max-len e.relatedTarget = e.toElement === docBody || e.toElement === docElement ? null : e.toElement; } return this.callParent([ e ]); } }); // can't capture any events without addEventListener. Have to have direct // listeners for every event that does not bubble. Ext.apply(prototype.directEvents, prototype.captureEvents); // These do not bubble in IE9m so have to attach direct listeners as well. Ext.apply(prototype.directEvents, { change: 1, input: 1, paste: 1 }); prototype.captureEvents = {}; } }); Ext.define('Ext.overrides.event.publisher.Gesture', { override: 'Ext.event.publisher.Gesture' }, function() { if (Ext.isIE9m) { this.override({ updateTouches: function(e, isEnd) { var browserEvent = e.browserEvent, xy = e.getXY(); // I don't always set pageX and pageY on the event object, but when I do // it's because the Gesture publisher expects an event object that has them. browserEvent.pageX = xy[0]; browserEvent.pageY = xy[1]; this.callParent([ e, isEnd ]); }, doDelegatedEvent: function(e) { // Workaround IE's "Member not found" errors when accessing an event // object asynchronously. Needed for all gesture handlers because // they use requestAnimationFrame (see enableIEAsync for more details) this.callParent([ Ext.event.Event.enableIEAsync(e) ]); } }); } }); /** * @class Ext.dom.Element * @override Ext.dom.Element */ Ext.define('Ext.overrides.dom.Element', (function() { var Element, // we cannot do this yet "= Ext.dom.Element" WIN = window, DOC = document, HIDDEN = 'hidden', ISCLIPPED = 'isClipped', OVERFLOW = 'overflow', OVERFLOWX = 'overflow-x', OVERFLOWY = 'overflow-y', ORIGINALCLIP = 'originalClip', HEIGHT = 'height', WIDTH = 'width', VISIBILITY = 'visibility', DISPLAY = 'display', NONE = 'none', OFFSETS = 'offsets', CLIP = 'clip', ORIGINALDISPLAY = 'originalDisplay', VISMODE = 'visibilityMode', ISVISIBLE = 'isVisible', OFFSETCLASS = Ext.baseCSSPrefix + 'hidden-offsets', CLIPCLASS = Ext.baseCSSPrefix + 'hidden-clip', /* eslint-disable indent */ boxMarkup = [ '', '', '' ].join(''), /* eslint-enable indent */ scriptTagRe = /(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig, replaceScriptTagRe = /(?:)((\n|\r|.)*?)(?:<\/script>)/ig, srcRe = /\ssrc=(['"])(.*?)\1/i, nonSpaceRe = /\S/, typeRe = /\stype=(['"])(.*?)\1/i, adjustDirect2DTableRe = /table-row|table-.*-group/, msRe = /^-ms-/, camelRe = /(-[a-z])/gi, camelReplaceFn = function(m, a) { return a.charAt(1).toUpperCase(); }, XMASKED = Ext.baseCSSPrefix + "masked", XMASKEDRELATIVE = Ext.baseCSSPrefix + "masked-relative", EXTELMASKMSG = Ext.baseCSSPrefix + "mask-msg", bodyRe = /^body/i, propertyCache = {}, getVisMode = function(el) { var data = el.getData(), visMode = data[VISMODE]; if (visMode === undefined) { data[VISMODE] = visMode = Element.VISIBILITY; } return visMode; }, emptyRange = DOC.createRange ? DOC.createRange() : null, syncContentFly; if (Ext.isIE8) { // eslint-disable-next-line vars-on-top var garbageBin = DOC.createElement('div'), destroyQueue = [], // prevent memory leaks in IE8 // see http://social.msdn.microsoft.com/Forums/ie/en-US/c76967f0-dcf8-47d0-8984-8fe1282a94f5/ie-appendchildremovechild-memory-problem?forum=iewebdevelopment // This function is called to fully destroy an element on a timer so that code // following the remove call can still access the element. clearGarbage, clearGarbageFn = function() { var len = destroyQueue.length, i; for (i = 0; i < len; i++) { garbageBin.appendChild(destroyQueue[i]); } garbageBin.innerHTML = ''; destroyQueue.length = 0; }; clearGarbageFn.$skipTimerCheck = true; clearGarbage = Ext.Function.createBuffered(clearGarbageFn, 10); } return { override: 'Ext.dom.Element', mixins: [ 'Ext.util.Animate' ], uses: [ 'Ext.dom.GarbageCollector', 'Ext.dom.Fly', 'Ext.event.publisher.MouseEnterLeave', 'Ext.fx.Manager', 'Ext.fx.Anim' ], skipGarbageCollection: false, _init: function(E) { Element = E; // now we can poke this into closure scope // We want to expose destroyQueue on the prototype for testing purposes if (WIN.__UNIT_TESTING__) { E.destroyQueue = destroyQueue; } }, statics: { normalize: function(prop) { if (prop === 'float') { prop = Ext.supports.Float ? 'cssFloat' : 'styleFloat'; } // For '-ms-foo' we need msFoo return propertyCache[prop] || (propertyCache[prop] = prop.replace(msRe, 'ms-').replace(camelRe, camelReplaceFn)); } }, /** * Convenience method for constructing a KeyMap * @param {String/Number/Number[]/Object} key Either a string with the keys to listen for, * the numeric key code, array of key codes or an object with the following options: * @param {Number/Array} key.key * @param {Boolean} key.shift * @param {Boolean} key.ctrl * @param {Boolean} key.alt * @param {Function} fn The function to call * @param {Object} [scope] The scope (`this` reference) in which the specified function * is executed. Defaults to this Element. * @return {Ext.util.KeyMap} The KeyMap created */ addKeyListener: function(key, fn, scope) { var config; if (typeof key !== 'object' || Ext.isArray(key)) { config = { target: this, key: key, fn: fn, scope: scope }; } else { config = { target: this, key: key.key, shift: key.shift, ctrl: key.ctrl, alt: key.alt, fn: fn, scope: scope }; } return new Ext.util.KeyMap(config); }, /** * Creates a KeyMap for this element * @param {Object} config The KeyMap config. See {@link Ext.util.KeyMap} for more details * @return {Ext.util.KeyMap} The KeyMap created */ addKeyMap: function(config) { return new Ext.util.KeyMap(Ext.apply({ target: this }, config)); }, /** * @private * Returns the fractional portion of this element's measurement in the given dimension. * (IE9+ only) * @return {Number} */ adjustDirect2DDimension: function(dimension) { var me = this, dom = me.dom, display = me.getStyle('display'), inlineDisplay = dom.style.display, inlinePosition = dom.style.position, originIndex = dimension === WIDTH ? 0 : 1, currentStyle = dom.currentStyle, floating; if (display === 'inline') { dom.style.display = 'inline-block'; } dom.style.position = display.match(adjustDirect2DTableRe) ? 'absolute' : 'static'; // floating will contain digits that appears after the decimal point // if height or width are set to auto we fallback to msTransformOrigin calculation // Use currentStyle here instead of getStyle. In some difficult to reproduce // instances it resets the scrollWidth of the element floating = (parseFloat(currentStyle[dimension]) || parseFloat(currentStyle.msTransformOrigin.split(' ')[originIndex]) * 2) % 1; dom.style.position = inlinePosition; if (display === 'inline') { dom.style.display = inlineDisplay; } return floating; }, /** * @private */ afterAnimate: function() { var shadow = this.shadow; if (shadow && !shadow.disabled && !shadow.animate) { shadow.show(); } }, /** * @private */ anchorAnimX: function(anchor) { var xName = (anchor === 'l') ? 'right' : 'left'; this.dom.style[xName] = '0px'; }, /** * @private * process the passed fx configuration. */ anim: function(config) { if (!Ext.isObject(config)) { return (config) ? {} : false; } // eslint-disable-next-line vars-on-top var me = this, duration = config.duration || Ext.fx.Anim.prototype.duration, easing = config.easing || 'ease', animConfig; if (config.stopAnimation) { me.stopAnimation(); } Ext.applyIf(config, Ext.fx.Manager.getFxDefaults(me.id)); // Clear any 'paused' defaults. Ext.fx.Manager.setFxDefaults(me.id, { delay: 0 }); animConfig = { // Pass the DOM reference. That's tested first so will be converted // to an Ext.fx.Target fastest. target: me.dom, remove: config.remove, alternate: config.alternate || false, duration: duration, easing: easing, callback: config.callback, listeners: config.listeners, iterations: config.iterations || 1, scope: config.scope, block: config.block, concurrent: config.concurrent, delay: config.delay || 0, paused: true, keyframes: config.keyframes, from: config.from || {}, to: Ext.apply({}, config), userConfig: config }; Ext.apply(animConfig.to, config.to); // Anim API properties - backward compat delete animConfig.to.to; delete animConfig.to.from; delete animConfig.to.remove; delete animConfig.to.alternate; delete animConfig.to.keyframes; delete animConfig.to.iterations; delete animConfig.to.listeners; delete animConfig.to.target; delete animConfig.to.paused; delete animConfig.to.callback; delete animConfig.to.scope; delete animConfig.to.duration; delete animConfig.to.easing; delete animConfig.to.concurrent; delete animConfig.to.block; delete animConfig.to.stopAnimation; delete animConfig.to.delay; return animConfig; }, /** * Calls `{@link #addAnimation}` and returns this Element (for call chaining). For * details, see `{@link #addAnimation}`. * * @param {Object} config Configuration for {@link Ext.fx.Anim}. * Note that the {@link Ext.fx.Anim#to to} config is required. * @return {Ext.dom.Element} this */ animate: function(config) { this.addAnimation(config); return this; }, /** * Starts a custom animation on this Element. * * The following properties may be specified in `from`, `to`, and `keyframe` objects: * * - `x` - The page X position in pixels. * - `y` - The page Y position in pixels * - `left` - The element's CSS `left` value. Units must be supplied. * - `top` - The element's CSS `top` value. Units must be supplied. * - `width` - The element's CSS `width` value. Units must be supplied. * - `height` - The element's CSS `height` value. Units must be supplied. * - `scrollLeft` - The element's `scrollLeft` value. * - `scrollTop` - The element's `scrollTop` value. * - `opacity` - The element's `opacity` value (between `0` and `1`). * * **Be aware** that animating an Element which is being used by an Ext Component * without in some way informing the Component about the changed element state will * result in incorrect Component behaviour. This is because the Component will be * using the old state of the element. To avoid this problem, it is now possible * to directly animate certain properties of Components. * * @param {Object} config Configuration for {@link Ext.fx.Anim}. * Note that the {@link Ext.fx.Anim#to to} config is required. * @return {Ext.fx.Anim} The new animation. */ addAnimation: function(config) { var me = this, animId = me.dom.id || Ext.id(me.dom), listeners, anim, end; if (!Ext.fx.Manager.hasFxBlock(animId)) { // Bit of gymnastics here to ensure our internal listeners get bound first if (config.listeners) { listeners = config.listeners; delete config.listeners; } if (config.internalListeners) { config.listeners = config.internalListeners; delete config.internalListeners; } end = config.autoEnd; delete config.autoEnd; anim = new Ext.fx.Anim(me.anim(config)); anim.on({ afteranimate: 'afterAnimate', beforeanimate: 'beforeAnimate', scope: me, single: true }); if (listeners) { anim.on(listeners); } Ext.fx.Manager.queueFx(anim); if (end) { anim.jumpToEnd(); } } return anim; }, /** * @private */ beforeAnimate: function() { var shadow = this.shadow; if (shadow && !shadow.disabled && !shadow.animate) { shadow.hide(); } }, /** * Wraps the specified element with a special 9 element markup/CSS block that renders * by default as a gray container with a gradient background, rounded corners * and a 4-way shadow. * * This special markup is used throughout Ext when box wrapping elements * ({@link Ext.button.Button}, {@link Ext.panel.Panel} when * {@link Ext.panel.Panel#frame frame=true}, {@link Ext.window.Window}). * The markup is of this form: * *
*
*
* * Example usage: * * // Basic box wrap * Ext.get("foo").boxWrap(); * * // You can also add a custom class and use CSS inheritance rules to customize * // the box look. * // 'x-box-blue' is a built-in alternative -- look at the related CSS definitions * // as an example for how to create a custom box wrap style. * Ext.get("foo").boxWrap().addCls("x-box-blue"); * * @param {String} [cls='x-box'] A base CSS class to apply to the containing wrapper * element. Note that there are a number of CSS rules that are dependent on this name * to make the overall effect work, so if you supply an alternate base class, make sure * you also supply all of the necessary rules. * @return {Ext.dom.Element} The outermost wrapping element of the created box structure. */ boxWrap: function(cls) { var el; cls = cls || Ext.baseCSSPrefix + 'box'; el = Ext.get(this.insertHtml("beforeBegin", "")); el.selectNode('.' + cls + '-mc').appendChild(this.dom); return el; }, /** * Removes Empty, or whitespace filled text nodes. Combines adjacent text nodes. * @param {Boolean} [forceReclean=false] By default the element keeps track if it has been * cleaned already so you can call this over and over. However, if you update the element * and need to force a re-clean, you can pass true. */ clean: function(forceReclean) { var me = this, dom = me.dom, data = me.getData(), n = dom.firstChild, ni = -1, nx; if (data.isCleaned && forceReclean !== true) { return me; } while (n) { nx = n.nextSibling; if (n.nodeType === 3) { // Remove empty/whitespace text nodes if (!(nonSpaceRe.test(n.nodeValue))) { dom.removeChild(n); } // Combine adjacent text nodes else if (nx && nx.nodeType === 3) { n.appendData(Ext.String.trim(nx.data)); dom.removeChild(nx); nx = n.nextSibling; n.nodeIndex = ++ni; } } else { // Recursively clean Ext.fly(n, '_clean').clean(); n.nodeIndex = ++ni; } n = nx; } data.isCleaned = true; return me; }, /** * @method * Empties this element. Removes all child nodes. */ empty: emptyRange ? function() { var dom = this.dom; if (dom.firstChild) { emptyRange.setStartBefore(dom.firstChild); emptyRange.setEndAfter(dom.lastChild); emptyRange.deleteContents(); } } : function() { var dom = this.dom; while (dom.lastChild) { dom.removeChild(dom.lastChild); } }, clearListeners: function() { this.removeAnchor(); this.callParent(); }, /** * Clears positioning back to the default when the document was loaded. * @param {String} [value=''] The value to use for the left, right, top, bottom. * You could use 'auto'. * @return {Ext.dom.Element} this */ clearPositioning: function(value) { value = value || ''; return this.setStyle({ left: value, right: value, top: value, bottom: value, 'z-index': '', position: 'static' }); }, /** * Creates a proxy element of this element * @param {String/Object} config The class name of the proxy element or a DomHelper config * object * @param {String/HTMLElement} [renderTo] The element or element id to render the proxy to. * Defaults to: document.body. * @param {Boolean} [matchBox=false] True to align and size the proxy to this element now. * @return {Ext.dom.Element} The new proxy element */ createProxy: function(config, renderTo, matchBox) { config = (typeof config === 'object') ? config : { tag: "div", role: 'presentation', cls: config }; // eslint-disable-next-line vars-on-top var me = this, proxy = renderTo ? Ext.DomHelper.append(renderTo, config, true) : Ext.DomHelper.insertBefore(me.dom, config, true); proxy.setVisibilityMode(Element.DISPLAY); proxy.hide(); // check to make sure Element_position.js is loaded if (matchBox && me.setBox && me.getBox) { proxy.setBox(me.getBox()); } return proxy; }, /** * Clears any opacity settings from this element. Required in some cases for IE. * @return {Ext.dom.Element} this */ clearOpacity: function() { return this.setOpacity(''); }, /** * Store the current overflow setting and clip overflow on the element - use {@link #unclip} * to remove * @return {Ext.dom.Element} this */ clip: function() { var me = this, data = me.getData(), style; if (!data[ISCLIPPED]) { data[ISCLIPPED] = true; style = me.getStyle([ OVERFLOW, OVERFLOWX, OVERFLOWY ]); data[ORIGINALCLIP] = { o: style[OVERFLOW], x: style[OVERFLOWX], y: style[OVERFLOWY] }; me.setStyle(OVERFLOW, HIDDEN); me.setStyle(OVERFLOWX, HIDDEN); me.setStyle(OVERFLOWY, HIDDEN); } return me; }, destroy: function() { var me = this, dom = me.dom, data = me.peekData(), maskEl, maskMsg; if (dom) { if (me.isAnimate) { me.stopAnimation(true); } me.removeAnchor(); } if (me.deferredFocusTimer) { Ext.undefer(me.deferredFocusTimer); me.deferredFocusTimer = null; } me.callParent(); // prevent memory leaks in IE8 // see http://social.msdn.microsoft.com/Forums/ie/en-US/c76967f0-dcf8-47d0-8984-8fe1282a94f5/ie-appendchildremovechild-memory-problem?forum=iewebdevelopment // must not be document, documentElement, body or window object // Have to use != instead of !== for IE8 or it will not recognize that the window // objects are equal // eslint-disable-next-line eqeqeq if (dom && Ext.isIE8 && (dom.window != dom) && (dom.nodeType !== 9) && (dom.tagName !== 'BODY') && (dom.tagName !== 'HTML')) { destroyQueue[destroyQueue.length] = dom; // Will perform extra IE8 cleanup in 10 milliseconds // see http://social.msdn.microsoft.com/Forums/ie/en-US/c76967f0-dcf8-47d0-8984-8fe1282a94f5/ie-appendchildremovechild-memory-problem?forum=iewebdevelopment clearGarbage(); } if (data) { maskEl = data.maskEl; maskMsg = data.maskMsg; if (maskEl) { maskEl.destroy(); } if (maskMsg) { maskMsg.destroy(); } } }, /** * Convenience method for setVisibilityMode(Element.DISPLAY). * @param {String} [display] What to set display to when visible * @return {Ext.dom.Element} this */ enableDisplayMode: function(display) { var me = this; me.setVisibilityMode(Element.DISPLAY); if (display !== undefined) { me.getData()[ORIGINALDISPLAY] = display; } return me; }, /** * Fade an element in (from transparent to opaque). The ending opacity can be specified * using the `opacity` config option. Usage: * * // default: fade in from opacity 0 to 100% * el.fadeIn(); * * // custom: fade in from opacity 0 to 75% over 2 seconds * el.fadeIn({ opacity: .75, duration: 2000}); * * // common config options shown with default values * el.fadeIn({ * opacity: 1, //can be any value between 0 and 1 (e.g. .5) * easing: 'easeOut', * duration: 500 * }); * * @param {Object} options (optional) Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ fadeIn: function(options) { var me = this, dom = me.dom, animFly = new Ext.dom.Fly(); me.animate(Ext.apply({}, options, { opacity: 1, internalListeners: { beforeanimate: function(anim) { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); // restore any visibility/display that may have // been applied by a fadeout animation if (animFly.isStyle('display', 'none')) { animFly.setDisplayed(''); } else { animFly.show(); } } } })); return this; }, /** * Fade an element out (from opaque to transparent). The ending opacity can be specified * using the `opacity` config option. Note that IE may require `useDisplay: true` in order * to redisplay correctly. Usage: * * // default: fade out from the element's current opacity to 0 * el.fadeOut(); * * // custom: fade out from the element's current opacity to 25% over 2 seconds * el.fadeOut({ opacity: .25, duration: 2000}); * * // common config options shown with default values * el.fadeOut({ * opacity: 0, //can be any value between 0 and 1 (e.g. .5) * easing: 'easeOut', * duration: 500, * remove: false, * useDisplay: false * }); * * @param {Object} options (optional) Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ fadeOut: function(options) { var me = this, dom = me.dom, animFly = new Ext.dom.Fly(); options = Ext.apply({ opacity: 0, internalListeners: { afteranimate: function(anim) { if (anim.to.opacity === 0) { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); if (options.useDisplay) { animFly.setDisplayed(false); } else { animFly.hide(); } } } } }, options); me.animate(options); return me; }, /** * @private */ fixDisplay: function() { var me = this; if (me.isStyle(DISPLAY, NONE)) { me.setStyle(VISIBILITY, HIDDEN); me.setStyle(DISPLAY, me._getDisplay()); // first try reverting to default if (me.isStyle(DISPLAY, NONE)) { // if that fails, default to block me.setStyle(DISPLAY, "block"); } } }, /** * Shows a ripple of exploding, attenuating borders to draw attention to an Element. Usage: * * // default: a single light blue ripple * el.frame(); * * // custom: 3 red ripples lasting 3 seconds total * el.frame("#ff0000", 3, { duration: 3000 }); * * // common config options shown with default values * el.frame("#C3DAF9", 1, { * duration: 1000 // duration of each individual ripple. * // Note: Easing is not configurable and will be ignored if included * }); * * @param {String} [color='#C3DAF9'] The hex color value for the border. * @param {Number} [count=1] The number of ripples to display. * @param {Object} [obj] Object literal with any of the {@link Ext.fx.Anim} config options * @return {Ext.dom.Element} The Element */ frame: function(color, count, obj) { var me = this, dom = me.dom, animFly = new Ext.dom.Fly(), beforeAnim; color = color || '#C3DAF9'; count = count || 1; obj = obj || {}; beforeAnim = function() { var animScope = this, box, proxy, proxyAnim; // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); animFly.show(); box = animFly.getBox(); proxy = Ext.getBody().createChild({ role: 'presentation', id: animFly.dom.id + '-anim-proxy', style: { position: 'absolute', 'pointer-events': 'none', 'z-index': 35000, border: '0px solid ' + color } }); proxyAnim = new Ext.fx.Anim({ target: proxy, duration: obj.duration || 1000, iterations: count, from: { top: box.y, left: box.x, borderWidth: 0, opacity: 1, height: box.height, width: box.width }, to: { top: box.y - 20, left: box.x - 20, borderWidth: 10, opacity: 0, height: box.height + 40, width: box.width + 40 } }); proxyAnim.on('afteranimate', function() { proxy.destroy(); // kill the no-op element animation created below animScope.end(); }); }; me.animate({ // See "A Note About Wrapped Animations" at the top of this class: duration: (Math.max(obj.duration, 500) * 2) || 2000, listeners: { beforeanimate: { fn: beforeAnim } }, callback: obj.callback, scope: obj.scope }); return me; }, /** * Return the CSS color for the specified CSS attribute. rgb, 3 digit (like `#fff`) * and valid values are convert to standard 6 digit hex color. * @param {String} attr The css attribute * @param {String} defaultValue The default value to use when a valid color isn't found * @param {String} [prefix] defaults to #. Use an empty string when working with * color anims. * @private */ getColor: function(attr, defaultValue, prefix) { var v = this.getStyle(attr), color = prefix || prefix === '' ? prefix : '#', h, len, i; if (!v || (/transparent|inherit/.test(v))) { return defaultValue; } if (/^r/.test(v)) { v = v.slice(4, v.length - 1).split(','); len = v.length; for (i = 0; i < len; i++) { h = parseInt(v[i], 10); color += (h < 16 ? '0' : '') + h.toString(16); } } else { v = v.replace('#', ''); color += v.length === 3 ? v.replace(/^(\w)(\w)(\w)$/, '$1$1$2$2$3$3') : v; } return (color.length > 5 ? color.toLowerCase() : defaultValue); }, /** * Gets this element's {@link Ext.ElementLoader ElementLoader} * @return {Ext.ElementLoader} The loader */ getLoader: function() { var me = this, data = me.getData(), loader = data.loader; if (!loader) { data.loader = loader = new Ext.ElementLoader({ target: me }); } return loader; }, /** * Gets an object with all CSS positioning properties. Useful along with * `setPositioning` to get snapshot before performing an update and then restoring * the element. * @param {Boolean} [autoPx=false] true to return pixel values for "auto" styles. * @return {Object} */ getPositioning: function(autoPx) { var styles = this.getStyle([ 'left', 'top', 'position', 'z-index' ]), dom = this.dom; if (autoPx) { if (styles.left === 'auto') { styles.left = dom.offsetLeft + 'px'; } if (styles.top === 'auto') { styles.top = dom.offsetTop + 'px'; } } return styles; }, /** * Slides the element while fading it out of view. An anchor point can be optionally passed * to set the ending point of the effect. Usage: * * // default: slide the element downward while fading out * el.ghost(); * * // custom: slide the element out to the right with a 2-second duration * el.ghost('r', { duration: 2000 }); * * // common config options shown with default values * el.ghost('b', { * easing: 'easeOut', * duration: 500 * }); * * @param {String} [anchor] One of the valid {@link Ext.fx.Anim} anchor positions * (defaults to bottom: 'b') * @param {Object} [options] Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ ghost: function(anchor, options) { var me = this, dom = me.dom, animFly = new Ext.dom.Fly(), beforeAnim; anchor = anchor || "b"; beforeAnim = function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); // eslint-disable-next-line vars-on-top var width = animFly.getWidth(), height = animFly.getHeight(), xy = animFly.getXY(), position = animFly.getPositioning(), to = { opacity: 0 }; switch (anchor) { case 't': to.y = xy[1] - height; break; case 'l': to.x = xy[0] - width; break; case 'r': to.x = xy[0] + width; break; case 'b': to.y = xy[1] + height; break; case 'tl': to.x = xy[0] - width; to.y = xy[1] - height; break; case 'bl': to.x = xy[0] - width; to.y = xy[1] + height; break; case 'br': to.x = xy[0] + width; to.y = xy[1] + height; break; case 'tr': to.x = xy[0] + width; to.y = xy[1] - height; break; } this.to = to; this.on('afteranimate', function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); if (animFly) { animFly.hide(); animFly.clearOpacity(); animFly.setPositioning(position); } }); }; me.animate(Ext.applyIf(options || {}, { duration: 500, easing: 'ease-out', listeners: { beforeanimate: beforeAnim } })); return me; }, getTextSelection: function() { var ret, dom, doc, range, textRange; ret = this.callParent(); if (typeof ret[0] !== 'number') { dom = this.dom; doc = dom.ownerDocument; range = doc.selection.createRange(); textRange = dom.createTextRange(); textRange.setEndPoint('EndToStart', range); ret[0] = textRange.text.length; ret[1] = ret[0] + range.text.length; } return ret; }, /** * Hide this element - Uses display mode to determine whether to use "display", * "visibility", "offsets", or "clip". See {@link #setVisible}. * @param {Boolean/Object} [animate] true for the default animation or a standard * Element animation config object * @return {Ext.dom.Element} this */ hide: function(animate) { // hideMode override if (typeof animate === 'string') { this.setVisible(false, animate); return this; } this.setVisible(false, this.anim(animate)); return this; }, /** * Highlights the Element by setting a color (applies to the background-color by default, * but can be changed using the "attr" config option) and then fading back to the original * color. If no original color is available, you should provide the "endColor" config option * which will be cleared after the animation. Usage: * * // default: highlight background to yellow * el.highlight(); * * // custom: highlight foreground text to blue for 2 seconds * el.highlight("0000ff", { attr: 'color', duration: 2000 }); * * // common config options shown with default values * el.highlight("ffff9c", { * // can be any valid CSS property (attribute) that supports a color value * attr: "backgroundColor", * endColor: (current color) or "ffffff", * easing: 'easeIn', * duration: 1000 * }); * * @param {String} color (optional) The highlight color. Should be a 6 char hex color * without the leading # (defaults to yellow: 'ffff9c') * @param {Object} options (optional) Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ highlight: function(color, options) { var me = this, dom = me.dom, from = {}, animFly = new Ext.dom.Fly(), restore, to, attr, lns, event, fn; options = options || {}; lns = options.listeners || {}; attr = options.attr || 'backgroundColor'; from[attr] = color || 'ffff9c'; if (!options.to) { to = {}; to[attr] = options.endColor || me.getColor(attr, 'ffffff', ''); } else { to = options.to; } // Don't apply directly on lns, since we reference it in our own callbacks below options.listeners = Ext.apply(Ext.apply({}, lns), { beforeanimate: function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); restore = dom.style[attr]; animFly.clearOpacity(); animFly.show(); event = lns.beforeanimate; if (event) { fn = event.fn || event; return fn.apply(event.scope || lns.scope || WIN, arguments); } }, afteranimate: function() { if (dom) { dom.style[attr] = restore; } event = lns.afteranimate; if (event) { fn = event.fn || event; fn.apply(event.scope || lns.scope || WIN, arguments); } } }); me.animate(Ext.apply({}, options, { duration: 1000, easing: 'ease-in', from: from, to: to })); return me; }, /** * Initializes a {@link Ext.dd.DD} drag drop object for this element. * @param {String} group The group the DD object is member of * @param {Object} config The DD config object * @param {Object} overrides An object containing methods to override/implement * on the DD object * @return {Ext.dd.DD} The DD object */ initDD: function(group, config, overrides) { var dd = new Ext.dd.DD(Ext.id(this.dom), group, config); return Ext.apply(dd, overrides); }, /** * Initializes a {@link Ext.dd.DDProxy} object for this element. * @param {String} group The group the DDProxy object is member of * @param {Object} config The DDProxy config object * @param {Object} overrides An object containing methods to override/implement * on the DDProxy object * @return {Ext.dd.DDProxy} The DDProxy object */ initDDProxy: function(group, config, overrides) { var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config); return Ext.apply(dd, overrides); }, /** * Initializes a {@link Ext.dd.DDTarget} object for this element. * @param {String} group The group the DDTarget object is member of * @param {Object} config The DDTarget config object * @param {Object} overrides An object containing methods to override/implement * on the DDTarget object * @return {Ext.dd.DDTarget} The DDTarget object */ initDDTarget: function(group, config, overrides) { var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config); return Ext.apply(dd, overrides); }, /** * Returns true if this element is masked. Also re-centers any displayed message * within the mask. * * @param {Boolean} [deep] Go up the DOM hierarchy to determine if any parent * element is masked. * * @return {Boolean} */ isMasked: function(deep) { var me = this, data = me.getData(), maskEl = data.maskEl, maskMsg = data.maskMsg, hasMask = false, parent; if (maskEl && maskEl.isVisible()) { if (maskMsg) { maskMsg.center(me); } hasMask = true; } else if (deep) { parent = me.findParentNode(); if (parent) { return Ext.fly(parent).isMasked(deep); } } return hasMask; }, /** * Direct access to the Ext.ElementLoader {@link Ext.ElementLoader#method-load} method. * The method takes the same object parameter as {@link Ext.ElementLoader#method-load} * @param {Object} options a options object for Ext.ElementLoader * {@link Ext.ElementLoader#method-load} * @return {Ext.dom.Element} this */ load: function(options) { this.getLoader().load(options); return this; }, /** * Puts a mask over this element to disable user interaction. * This method can only be applied to elements which accept child nodes. Use * {@link #unmask} to remove the mask. * * @param {String} [msg] A message to display in the mask * @param {String} [msgCls] A css class to apply to the msg element * @param {Number} elHeight (private) Passed by AbstractComponent.mask to avoid the need * to interrogate the DOM to get the height * @return {Ext.dom.Element} The mask element */ mask: function(msg, msgCls, elHeight) { var me = this, dom = me.dom, data = me.getData(), maskEl = data.maskEl, maskMsg; if (!(bodyRe.test(dom.tagName) && me.getStyle('position') === 'static')) { me.addCls(XMASKEDRELATIVE); } // We always needs to recreate the mask since the DOM element may have been re-created if (maskEl) { maskEl.destroy(); } maskEl = Ext.DomHelper.append(dom, { role: 'presentation', cls: Ext.baseCSSPrefix + "mask " + Ext.baseCSSPrefix + "border-box", children: { role: 'presentation', cls: msgCls ? EXTELMASKMSG + " " + msgCls : EXTELMASKMSG, cn: { tag: 'div', role: 'presentation', cls: Ext.baseCSSPrefix + 'mask-msg-inner', cn: { tag: 'div', role: 'presentation', cls: Ext.baseCSSPrefix + 'mask-msg-text', html: msg || '' } } } }, true); maskMsg = Ext.fly(maskEl.dom.firstChild); data.maskEl = maskEl; me.addCls(XMASKED); maskEl.setDisplayed(true); if (typeof msg === 'string') { maskMsg.setDisplayed(true); maskMsg.center(me); } else { maskMsg.setDisplayed(false); } if (dom === DOC.body) { maskEl.addCls(Ext.baseCSSPrefix + 'mask-fixed'); } // When masking the body, don't touch its tabbable state me.saveTabbableState({ skipSelf: dom === DOC.body }); // ie will not expand full height automatically if (Ext.isIE9m && dom !== DOC.body && me.isStyle('height', 'auto')) { maskEl.setSize(undefined, elHeight || me.getHeight()); } return maskEl; }, /** * Fades the element out while slowly expanding it in all directions. When the effect * is completed, the element will be hidden (visibility = 'hidden') but block elements * will still take up space in the document. Usage: * * // default * el.puff(); * * // common config options shown with default values * el.puff({ * easing: 'easeOut', * duration: 500, * useDisplay: false * }); * * @param {Object} obj (optional) Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ puff: function(obj) { var me = this, dom = me.dom, animFly = new Ext.dom.Fly(), beforeAnim, box = me.getBox(), originalStyles; originalStyles = me.getStyle([ 'width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index', 'font-size', 'opacity' ], true); obj = Ext.applyIf(obj || {}, { easing: 'ease-out', duration: 500, useDisplay: false }); beforeAnim = function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); animFly.clearOpacity(); animFly.show(); this.to = { width: box.width * 2, height: box.height * 2, x: box.x - (box.width / 2), y: box.y - (box.height / 2), opacity: 0, fontSize: '200%' }; this.on('afteranimate', function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); if (obj.useDisplay) { animFly.setDisplayed(false); } else { animFly.hide(); } animFly.setStyle(originalStyles); Ext.callback(obj.callback, obj.scope); }); }; me.animate({ duration: obj.duration, easing: obj.easing, listeners: { beforeanimate: { fn: beforeAnim } } }); return me; }, // private // used to ensure the mouseup event is captured if it occurs outside of the // window in IE9m. The only reason this method exists, (vs just calling // el.dom.setCapture() directly) is so that we can override it to emptyFn // during testing because setCapture() can wreak havoc on emulated mouse events // http://msdn.microsoft.com/en-us/library/windows/desktop/ms646262(v=vs.85).aspx setCapture: function() { var dom = this.dom; if (Ext.isIE9m && dom.setCapture) { dom.setCapture(); } }, /** * Set the height of this Element. * * // change the height to 200px and animate with default configuration * Ext.fly('elementId').setHeight(200, true); * * // change the height to 150px and animate with a custom configuration * Ext.fly('elId').setHeight(150, { * duration : 500, // animation will have a duration of .5 seconds * // will change the content to "finished" * callback: function(){ this.setHtml("finished"); } * }); * * @param {Number/String} height The new height. This may be one of: * * - A Number specifying the new height in pixels. * - A String used to set the CSS height style. Animation may **not** be used. * * @param {Boolean/Object} [animate] a standard Element animation config object or `true` * for the default animation (`{duration: 350, easing: 'ease-in'}`) * @return {Ext.dom.Element} this */ setHeight: function(height, animate) { var me = this; if (!animate || !me.anim) { me.callParent(arguments); } else { if (!Ext.isObject(animate)) { animate = {}; } me.animate(Ext.applyIf({ to: { height: height } }, animate)); } return me; }, /** * Removes "vertical" state from this element (reverses everything done * by {@link #setVertical}). * @private */ setHorizontal: function() { var me = this, cls = me.verticalCls; delete me.vertical; if (cls) { delete me.verticalCls; me.removeCls(cls); } // delete the inverted methods and revert to inheriting from the prototype delete me.setWidth; delete me.setHeight; if (!Ext.isIE8) { delete me.getWidth; delete me.getHeight; } // revert to inheriting styleHooks from the prototype delete me.styleHooks; }, /** * Updates the *text* value of this element. * Replaces the content of this element with a *single text node* containing * the passed text. * @param {String} text The text to display in this Element. */ updateText: function(text) { var me = this, dom, textNode; if (dom) { textNode = dom.firstChild; if (!textNode || (textNode.nodeType !== 3 || textNode.nextSibling)) { textNode = DOC.createTextNode(); me.empty(); dom.appendChild(textNode); } if (text) { textNode.data = text; } } }, /** * Updates the innerHTML of this element, optionally searching for and processing scripts. * @param {String} html The new HTML * @param {Boolean} [loadScripts] Pass `true` to look for and process scripts. * @param {Function} [callback] For async script loading you can be notified * when the update completes. * @param {Object} [scope=`this`] The scope (`this` reference) in which to execute * the callback. * * Also used as the scope for any *inline* script source if the `loadScripts` parameter * is `true`. Scripts with a `src` attribute cannot be executed in this scope. * * Defaults to this Element. * @return {Ext.dom.Element} this */ setHtml: function(html, loadScripts, callback, scope) { var me = this, id, dom, interval; if (!me.dom) { return me; } html = html || ''; dom = me.dom; if (loadScripts !== true) { // Setting innerHtml changes the DOM and replace all dom nodes // with the new html. For IE specifically, all dom child nodes get // destroyed when removed from DOM tree even if DOM is referenced // within some JS file. Thus, before setting innerHTML, remove the // children so that they are not destroyed/removed from DOM tree. if (Ext.isIE) { while (dom.firstChild) { dom.removeChild(dom.firstChild); } } dom.innerHTML = html; Ext.callback(callback, me); return me; } id = Ext.id(); html += ''; interval = Ext.interval(function() { var hd, match, attrs, srcMatch, typeMatch, el, s; if (!(el = DOC.getElementById(id))) { return false; } Ext.uninterval(interval); Ext.removeNode(el); hd = Ext.getHead().dom; while ((match = scriptTagRe.exec(html))) { attrs = match[1]; srcMatch = attrs ? attrs.match(srcRe) : false; if (srcMatch && srcMatch[2]) { s = DOC.createElement("script"); s.src = srcMatch[2]; typeMatch = attrs.match(typeRe); if (typeMatch && typeMatch[2]) { s.type = typeMatch[2]; } hd.appendChild(s); } else if (match[2] && match[2].length > 0) { if (scope) { Ext.functionFactory(match[2]).call(scope); } else { Ext.globalEval(match[2]); } } } Ext.callback(callback, scope || me); }, 20); dom.innerHTML = html.replace(replaceScriptTagRe, ''); return me; }, /** * Set the opacity of the element * @param {Number} opacity The new opacity. 0 = transparent, .5 = 50% visible, * 1 = fully visible, etc * @param {Boolean/Object} [animate] a standard Element animation config object or `true` * for the default animation (`{duration: 350, easing: 'ease-in'}`) * @return {Ext.dom.Element} this */ setOpacity: function(opacity, animate) { var me = this; if (!me.dom) { return me; } if (!animate || !me.anim) { me.setStyle('opacity', opacity); } else { if (typeof animate !== 'object') { animate = { duration: 350, easing: 'ease-in' }; } me.animate(Ext.applyIf({ to: { opacity: opacity } }, animate)); } return me; }, /** * Set positioning with an object returned by `getPositioning`. * @param {Object} pc * @return {Ext.dom.Element} this */ setPositioning: function(pc) { return this.setStyle(pc); }, /** * Changes this Element's state to "vertical" (rotated 90 or 270 degrees). * This involves inverting the getters and setters for height and width, * and applying hooks for rotating getters and setters for border/margin/padding. * (getWidth becomes getHeight and vice versa), setStyle and getStyle will * also return the inverse when height or width are being operated on. * * @param {Number} angle the angle of rotation - either 90 or 270 * @param {String} cls an optional css class that contains the required * styles for switching the element to vertical orientation. Omit this if * the element already contains vertical styling. If cls is provided, * it will be removed from the element when {@link #setHorizontal} is called. * @private */ setVertical: function(angle, cls) { var me = this, proto = Element.prototype; me.vertical = true; if (cls) { me.addCls(me.verticalCls = cls); } me.setWidth = proto.setHeight; me.setHeight = proto.setWidth; if (!Ext.isIE8) { // In browsers that use CSS3 transforms we must invert getHeight and // get Width. In IE8 no adjustment is needed because we use // a BasicImage filter to rotate the element and the element's // offsetWidth and offsetHeight are automatically inverted. me.getWidth = proto.getHeight; me.getHeight = proto.getWidth; } // Switch to using the appropriate vertical style hooks me.styleHooks = (angle === 270) ? proto.verticalStyleHooks270 : proto.verticalStyleHooks90; }, /** * Set the size of this Element. If animation is true, both width and height will be * animated concurrently. * @param {Number/String} width The new width. This may be one of: * * - A Number specifying the new width in pixels. * - A String used to set the CSS width style. Animation may **not** be used. * - A size object in the format `{width: widthValue, height: heightValue}`. * * @param {Number/String} height The new height. This may be one of: * * - A Number specifying the new height in pixels. * - A String used to set the CSS height style. Animation may **not** be used. * * @param {Boolean/Object} [animate] a standard Element animation config object or `true` * for the default animation (`{duration: 350, easing: 'ease-in'}`) * * @return {Ext.dom.Element} this */ setSize: function(width, height, animate) { var me = this; if (Ext.isObject(width)) { // in case of object from getSize() animate = height; height = width.height; width = width.width; } if (!animate || !me.anim) { me.dom.style.width = Element.addUnits(width); me.dom.style.height = Element.addUnits(height); if (me.shadow || me.shim) { me.syncUnderlays(); } } else { if (animate === true) { animate = {}; } me.animate(Ext.applyIf({ to: { width: width, height: height } }, animate)); } return me; }, /** * Sets the visibility of the element (see details). If the visibilityMode is set * to Element.DISPLAY, it will use the display property to hide the element, * otherwise it uses visibility. The default is to hide and show using the * visibility property. * * @param {Boolean} visible Whether the element is visible * @param {Boolean/Object} [animate] True for the default animation, * or a standard Element animation config object. * * @return {Ext.dom.Element} this */ setVisible: function(visible, animate) { var me = this, dom = me.dom, animFly, visMode = getVisMode(me); // hideMode string override if (typeof animate === 'string') { switch (animate) { case DISPLAY: visMode = Element.DISPLAY; break; case VISIBILITY: visMode = Element.VISIBILITY; break; case OFFSETS: visMode = Element.OFFSETS; break; case CLIP: visMode = Element.CLIP; break; } me.setVisibilityMode(visMode); animate = false; } if (!animate || !me.anim) { if (visMode === Element.DISPLAY) { return me.setDisplayed(visible); } else if (visMode === Element.OFFSETS) { me[visible ? 'removeCls' : 'addCls'](OFFSETCLASS); } else if (visMode === Element.CLIP) { me[visible ? 'removeCls' : 'addCls'](CLIPCLASS); } else if (visMode === Element.VISIBILITY) { me.fixDisplay(); // Show by clearing visibility style. // Explicitly setting to "visible" overrides parent visibility setting dom.style.visibility = visible ? '' : HIDDEN; } } else { // closure for composites if (visible) { me.setOpacity(0.01); me.setVisible(true); } if (!Ext.isObject(animate)) { animate = { duration: 350, easing: 'ease-in' }; } animFly = new Ext.dom.Fly(); me.animate(Ext.applyIf({ callback: function() { if (!visible) { // Grab the dom again, since the reference may have changed // if we use fly animFly.attach(dom).setVisible(false).setOpacity(1); } }, to: { opacity: (visible) ? 1 : 0 } }, animate)); } me.getData()[ISVISIBLE] = visible; if (me.shadow || me.shim) { me.setUnderlaysVisible(visible); } return me; }, /** * Set the width of this Element. * * // change the width to 200px and animate with default configuration * Ext.fly('elementId').setWidth(200, true); * * // change the width to 150px and animate with a custom configuration * Ext.fly('elId').setWidth(150, { * duration : 500, // animation will have a duration of .5 seconds * // will change the content to "finished" * callback: function(){ this.setHtml("finished"); } * }); * * @param {Number/String} width The new width. This may be one of: * * - A Number specifying the new width in pixels. * - A String used to set the CSS width style. Animation may **not** be used. * * @param {Boolean/Object} [animate] a standard Element animation config object or `true` * for the default animation (`{duration: 350, easing: 'ease-in'}`) * @return {Ext.dom.Element} this */ setWidth: function(width, animate) { var me = this; if (!animate || !me.anim) { me.callParent(arguments); } else { if (!Ext.isObject(animate)) { animate = {}; } me.animate(Ext.applyIf({ to: { width: width } }, animate)); } return me; }, setX: function(x, animate) { return this.setXY([ x, this.getY() ], animate); }, setXY: function(xy, animate) { var me = this; if (!animate || !me.anim) { me.callParent([ xy ]); } else { if (!Ext.isObject(animate)) { animate = {}; } me.animate(Ext.applyIf({ to: { x: xy[0], y: xy[1] } }, animate)); } return this; }, setY: function(y, animate) { return this.setXY([ this.getX(), y ], animate); }, /** * Show this element - Uses display mode to determine whether to use "display", * "visibility", "offsets", or "clip". See {@link #setVisible}. * * @param {Boolean/Object} [animate] true for the default animation or a standard * Element animation config object. * * @return {Ext.dom.Element} this */ show: function(animate) { // hideMode override if (typeof animate === 'string') { this.setVisible(true, animate); return this; } this.setVisible(true, this.anim(animate)); return this; }, /** * Slides the element into view. An anchor point can be optionally passed to set the point * of origin for the slide effect. This function automatically handles wrapping the element * with a fixed-size container if needed. See the {@link Ext.fx.Anim} class overview * for valid anchor point options. Usage: * * // default: slide the element in from the top * el.slideIn(); * * // custom: slide the element in from the right with a 2-second duration * el.slideIn('r', { duration: 2000 }); * * // common config options shown with default values * el.slideIn('t', { * easing: 'easeOut', * duration: 500 * }); * * @param {String} [anchor] One of the valid {@link Ext.fx.Anim} anchor positions * (defaults to top: 't') * @param {Object} [options] Object literal with any of the {@link Ext.fx.Anim} * config options * @param {Boolean} options.preserveScroll Set to true if preservation of any descendant * elements' `scrollTop` values is required. By default the DOM wrapping operation * performed by `slideIn` and `slideOut` causes the browser to lose all scroll positions. * @param {Boolean} slideOut * @return {Ext.dom.Element} The Element */ slideIn: function(anchor, options, slideOut) { var me = this, dom = me.dom, elStyle = dom.style, animFly = new Ext.dom.Fly(), beforeAnim, wrapAnim, restoreScroll, wrapDomParentNode; anchor = anchor || "t"; options = options || {}; beforeAnim = function() { var animScope = this, listeners = options.listeners, box, originalStyles, anim, wrap; // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); if (!slideOut) { animFly.fixDisplay(); } box = animFly.getBox(); if ((anchor === 't' || anchor === 'b') && box.height === 0) { box.height = dom.scrollHeight; } else if ((anchor === 'l' || anchor === 'r') && box.width === 0) { box.width = dom.scrollWidth; } originalStyles = animFly.getStyle([ 'width', 'height', 'left', 'right', 'top', 'bottom', 'position', 'z-index' ], true); animFly.setSize(box.width, box.height); // Cache all descendants' scrollTop & scrollLeft values // if configured to preserve scroll. if (options.preserveScroll) { restoreScroll = animFly.cacheScrollValues(); } wrap = animFly.wrap({ role: 'presentation', id: Ext.id() + '-anim-wrap-for-' + dom.id, style: { visibility: slideOut ? 'visible' : 'hidden' } }); wrapDomParentNode = wrap.dom.parentNode; wrap.setPositioning(animFly.getPositioning()); if (wrap.isStyle('position', 'static')) { wrap.position('relative'); } animFly.clearPositioning('auto'); wrap.clip(); // The wrap will have reset all descendant scrollTops. // Restore them if we cached them. if (restoreScroll) { restoreScroll(); } // This element is temporarily positioned absolute within its wrapper. // Restore to its default, CSS-inherited visibility setting. // We cannot explicitly poke visibility:visible into its style // because that overrides the visibility of the wrap. animFly.setStyle({ visibility: '', position: 'absolute' }); if (slideOut) { wrap.setSize(box.width, box.height); } switch (anchor) { case 't': anim = { from: { width: box.width + 'px', height: '0px' }, to: { width: box.width + 'px', height: box.height + 'px' } }; elStyle.bottom = '0px'; break; case 'l': anim = { from: { width: '0px', height: box.height + 'px' }, to: { width: box.width + 'px', height: box.height + 'px' } }; me.anchorAnimX(anchor); break; case 'r': anim = { from: { x: box.x + box.width, width: '0px', height: box.height + 'px' }, to: { x: box.x, width: box.width + 'px', height: box.height + 'px' } }; me.anchorAnimX(anchor); break; case 'b': anim = { from: { y: box.y + box.height, width: box.width + 'px', height: '0px' }, to: { y: box.y, width: box.width + 'px', height: box.height + 'px' } }; break; case 'tl': anim = { from: { x: box.x, y: box.y, width: '0px', height: '0px' }, to: { width: box.width + 'px', height: box.height + 'px' } }; elStyle.bottom = '0px'; me.anchorAnimX('l'); break; case 'bl': anim = { from: { y: box.y + box.height, width: '0px', height: '0px' }, to: { y: box.y, width: box.width + 'px', height: box.height + 'px' } }; me.anchorAnimX('l'); break; case 'br': anim = { from: { x: box.x + box.width, y: box.y + box.height, width: '0px', height: '0px' }, to: { x: box.x, y: box.y, width: box.width + 'px', height: box.height + 'px' } }; me.anchorAnimX('r'); break; case 'tr': anim = { from: { x: box.x + box.width, width: '0px', height: '0px' }, to: { x: box.x, width: box.width + 'px', height: box.height + 'px' } }; elStyle.bottom = '0px'; me.anchorAnimX('r'); break; } wrap.show(); wrapAnim = Ext.apply({}, options); delete wrapAnim.listeners; wrapAnim = new Ext.fx.Anim(Ext.applyIf(wrapAnim, { target: wrap, duration: 500, easing: 'ease-out', from: slideOut ? anim.to : anim.from, to: slideOut ? anim.from : anim.to })); // In the absence of a callback, this listener MUST be added first wrapAnim.on('afteranimate', function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); animFly.setStyle(originalStyles); if (slideOut) { if (options.useDisplay) { animFly.setDisplayed(false); } else { animFly.hide(); } } if (wrap.dom) { if (wrap.dom.parentNode) { wrap.dom.parentNode.insertBefore(dom, wrap.dom); } else { wrapDomParentNode.appendChild(dom); } wrap.destroy(); } // The unwrap will have reset all descendant scrollTops. // Restore them if we cached them. if (restoreScroll) { restoreScroll(); } // kill the no-op element animation created below animScope.end(); }); // Add configured listeners after if (listeners) { wrapAnim.on(listeners); } }; me.animate({ // See "A Note About Wrapped Animations" at the top of this class: duration: options.duration ? Math.max(options.duration, 500) * 2 : 1000, listeners: { beforeanimate: beforeAnim } }); // kick off the wrap animation return me; }, /** * Slides the element out of view. An anchor point can be optionally passed to set the end * point for the slide effect. When the effect is completed, the element will be hidden * (visibility = 'hidden') but block elements will still take up space in the document. * The element must be removed from the DOM using the 'remove' config option if * desired. This function automatically handles wrapping the element with a fixed-size * container if needed. See the {@link Ext.fx.Anim} class overview for valid anchor point * options. Usage: * * // default: slide the element out to the top * el.slideOut(); * * // custom: slide the element out to the right with a 2-second duration * el.slideOut('r', { duration: 2000 }); * * // common config options shown with default values * el.slideOut('t', { * easing: 'easeOut', * duration: 500, * remove: false, * useDisplay: false * }); * * @param {String} anchor (optional) One of the valid {@link Ext.fx.Anim} anchor positions * (defaults to top: 't') * @param {Object} options (optional) Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ slideOut: function(anchor, options) { return this.slideIn(anchor, options, true); }, /** * Blinks the element as if it was clicked and then collapses on its center (similar to * switching off a television). When the effect is completed, the element will be hidden * (visibility = 'hidden') but block elements will still take up space in the document. * The element must be removed from the DOM using the 'remove' config option if desired. * Usage: * * // default * el.switchOff(); * * // all config options shown with default values * el.switchOff({ * easing: 'easeIn', * duration: .3, * remove: false, * useDisplay: false * }); * * @param {Object} options (optional) Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ switchOff: function(options) { var me = this, dom = me.dom, animFly = new Ext.dom.Fly(), beforeAnim; options = Ext.applyIf(options || {}, { easing: 'ease-in', duration: 500, remove: false, useDisplay: false }); beforeAnim = function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); // eslint-disable-next-line vars-on-top var animScope = this, size = animFly.getSize(), xy = animFly.getXY(), keyframe, position; animFly.clearOpacity(); animFly.clip(); position = animFly.getPositioning(); keyframe = new Ext.fx.Animator({ target: dom, duration: options.duration, easing: options.easing, keyframes: { 33: { opacity: 0.3 }, 66: { height: 1, y: xy[1] + size.height / 2 }, 100: { width: 1, x: xy[0] + size.width / 2 } } }); keyframe.on('afteranimate', function() { // Reattach to the DOM in case the caller animated a Fly // in which case the dom reference will have changed by now. animFly.attach(dom); if (options.useDisplay) { animFly.setDisplayed(false); } else { animFly.hide(); } animFly.clearOpacity(); animFly.setPositioning(position); animFly.setSize(size); // kill the no-op element animation created below animScope.end(); }); }; me.animate({ // See "A Note About Wrapped Animations" at the top of this class: duration: (Math.max(options.duration, 500) * 2), listeners: { beforeanimate: { fn: beforeAnim } }, callback: options.callback, scope: options.scope }); return me; }, /** * @private * Currently used for updating grid cells without modifying DOM structure * * Synchronizes content of this Element with the content of the passed element. * * Style and CSS class are copied from source into this Element, and contents are synced * recursively. If a child node is a text node, the textual data is copied. */ syncContent: function(source) { source = Ext.getDom(source); // eslint-disable-next-line vars-on-top var sourceNodes = source.childNodes, sourceLen = sourceNodes.length, dest = this.dom, destNodes = dest.childNodes, destLen = destNodes.length, i, destNode, sourceNode, sourceStyle, nodeType, newAttrs, attLen, attName, value, elData = dest._extData; if (!syncContentFly) { syncContentFly = new Ext.dom.Fly(); } // Update any attributes who's values have changed.. newAttrs = source.attributes; attLen = newAttrs.length; for (i = 0; i < attLen; i++) { attName = newAttrs[i].name; value = newAttrs[i].value; if (attName !== 'id' && dest.getAttribute(attName) !== value) { dest.setAttribute(attName, newAttrs[i].value); } } // The element's data is no longer synchronized. We just overwrite it in the DOM if (elData) { elData.isSynchronized = false; } // If the number of child nodes does not match, fall back to replacing innerHTML if (sourceLen !== destLen) { dest.innerHTML = source.innerHTML; return; } // Loop through source nodes. // If there are fewer, we must remove excess for (i = 0; i < sourceLen; i++) { sourceNode = sourceNodes[i]; destNode = destNodes[i]; nodeType = sourceNode.nodeType; sourceStyle = sourceNode.style; // If node structure is out of sync, just drop innerHTML in and return if (nodeType !== destNode.nodeType || (nodeType === 1 && sourceNode.tagName !== destNode.tagName)) { dest.innerHTML = source.innerHTML; return; } // Update non-Element node (text, comment) if (!sourceStyle) { destNode.data = sourceNode.data; } else // Sync element content { if (sourceNode.id && destNode.id !== sourceNode.id) { destNode.id = sourceNode.id; } destNode.style.cssText = sourceStyle.cssText; destNode.className = sourceNode.className; syncContentFly.attach(destNode).syncContent(sourceNode); } } }, /** * Toggles the element's visibility, depending on visibility mode. * @param {Boolean/Object} [animate] True for the default animation, or a standard Element * animation config object * @return {Ext.dom.Element} this */ toggle: function(animate) { var me = this; me.setVisible(!me.isVisible(), me.anim(animate)); return me; }, /** * Hides a previously applied mask. */ unmask: function() { var me = this, data = me.getData(), maskEl = data.maskEl, style; if (maskEl) { style = maskEl.dom.style; // Remove resource-intensive CSS expressions as soon as they are not required. if (style.clearExpression) { style.clearExpression('width'); style.clearExpression('height'); } if (maskEl) { maskEl.destroy(); delete data.maskEl; } me.removeCls([ XMASKED, XMASKEDRELATIVE ]); } me.restoreTabbableState(me.dom === DOC.body); }, /** * Return clipping (overflow) to original clipping before {@link #clip} was called * @return {Ext.dom.Element} this */ unclip: function() { var me = this, data = me.getData(), clip; if (data[ISCLIPPED]) { data[ISCLIPPED] = false; clip = data[ORIGINALCLIP]; if (clip.o) { me.setStyle(OVERFLOW, clip.o); } if (clip.x) { me.setStyle(OVERFLOWX, clip.x); } if (clip.y) { me.setStyle(OVERFLOWY, clip.y); } } return me; }, translate: function(x, y, z) { if (Ext.supports.CssTransforms && !Ext.isIE9m) { this.callParent(arguments); } else { if (x != null) { this.dom.style.left = x + 'px'; } if (y != null) { this.dom.style.top = y + 'px'; } } }, deprecated: { '4.0': { methods: { /** * @method pause * Creates a pause before any subsequent queued effects begin. If there are * no effects queued after the pause it will have no effect. Usage: * * el.pause(1); * * @deprecated 4.0 Use the `delay` config to {@link #animate} instead. * @param {Number} ms The length of time to pause (in milliseconds) * @return {Ext.dom.Element} The Element */ pause: function(ms) { var me = this; Ext.fx.Manager.setFxDefaults(me.id, { delay: ms }); return me; }, /** * @method scale * Animates the transition of an element's dimensions from a starting * height/width to an ending height/width. This method is a convenience * implementation of {@link #shift}. Usage: * * // change height and width to 100x100 pixels * el.scale(100, 100); * * // common config options shown with default values. * // The height and width will default to the element's existing values * // if passed as null. * el.scale( * [element's width], * [element's height], { * easing: 'easeOut', * duration: 350 * } * ); * * @deprecated 4.0 Just use {@link #animate} instead. * @param {Number} width The new width (pass undefined to keep the original * width) * @param {Number} height The new height (pass undefined to keep the original * height) * @param {Object} options (optional) Object literal with any of the * {@link Ext.fx.Anim} config options * @return {Ext.dom.Element} The Element */ scale: function(width, height, options) { this.animate(Ext.apply({}, options, { width: width, height: height })); return this; }, /** * @method shift * Animates the transition of any combination of an element's dimensions, * xy position and/or opacity. Any of these properties not specified in the * config object will not be changed. This effect requires that at least one new * dimension, position or opacity setting must be passed in on the config object * in order for the function to have any effect. Usage: * * // slide the element horizontally to x position 200 * // while changing the height and opacity * el.shift({ x: 200, height: 50, opacity: .8 }); * * // common config options shown with default values. * el.shift({ * width: [element's width], * height: [element's height], * x: [element's x position], * y: [element's y position], * opacity: [element's opacity], * easing: 'easeOut', * duration: 350 * }); * * @deprecated 4.0 Just use {@link #animate} instead. * @param {Object} options Object literal with any of the {@link Ext.fx.Anim} * config options * @return {Ext.dom.Element} The Element */ shift: function(options) { this.animate(options); return this; } } }, '4.2': { methods: { /** * @method moveTo * Sets the position of the element in page coordinates. * @param {Number} x X value for new position (coordinates are page-based) * @param {Number} y Y value for new position (coordinates are page-based) * @param {Boolean/Object} [animate] True for the default animation, * or a standard Element animation config object * @return {Ext.dom.Element} this * @deprecated 4.2.0 Use {@link Ext.dom.Element#setXY} instead. */ moveTo: function(x, y, animate) { return this.setXY([ x, y ], animate); }, /** * @method setBounds * Sets the element's position and size in one shot. If animation is true then * width, height, x and y will be animated concurrently. * * @param {Number} x X value for new position (coordinates are page-based) * @param {Number} y Y value for new position (coordinates are page-based) * @param {Number/String} width The new width. This may be one of: * * - A Number specifying the new width in pixels * - A String used to set the CSS width style. Animation may **not** be used. * * @param {Number/String} height The new height. This may be one of: * * - A Number specifying the new height in pixels * - A String used to set the CSS height style. Animation may **not** be used. * * @param {Boolean/Object} [animate] true for the default animation or * a standard Element animation config object * * @return {Ext.dom.Element} this * @deprecated 4.2.0 Use {@link Ext.util.Positionable#setBox} instead. */ setBounds: function(x, y, width, height, animate) { return this.setBox({ x: x, y: y, width: width, height: height }, animate); }, /** * @method setLeftTop * Sets the element's left and top positions directly using CSS style * @param {Number/String} left Number of pixels or CSS string value to * set as the left CSS property value * @param {Number/String} top Number of pixels or CSS string value to * set as the top CSS property value * @return {Ext.dom.Element} this * @deprecated 4.2.0 Use {@link Ext.dom.Element#setLocalXY} instead */ setLeftTop: function(left, top) { var me = this, style = me.dom.style; style.left = Element.addUnits(left); style.top = Element.addUnits(top); if (me.shadow || me.shim) { me.syncUnderlays(); } return me; }, /** * @method setLocation * Sets the position of the element in page coordinates. * @param {Number} x X value for new position * @param {Number} y Y value for new position * @param {Boolean/Object} [animate] True for the default animation, * or a standard Element animation config object * @return {Ext.dom.Element} this * @deprecated 4.2.0 Use {@link Ext.dom.Element#setXY} instead. */ setLocation: function(x, y, animate) { return this.setXY([ x, y ], animate); } } }, '5.0': { methods: { /** * @method getAttributeNS * Returns the value of a namespaced attribute from the element's underlying * DOM node. * @param {String} namespace The namespace in which to look for the attribute * @param {String} name The attribute name * @return {String} The attribute value * @deprecated 5.0.0 Please use {@link Ext.dom.Element#getAttribute} instead. */ getAttributeNS: function(namespace, name) { return this.getAttribute(name, namespace); }, /** * @method getCenterXY * Calculates the x, y to center this element on the screen * @return {Number[]} The x, y values [x, y] * @deprecated 5.0.0 Use {@link Ext.dom.Element#getAlignToXY} instead. * el.getAlignToXY(document, 'c-c'); */ getCenterXY: function() { return this.getAlignToXY(DOC, 'c-c'); }, /** * @method getComputedHeight * Returns either the offsetHeight or the height of this element based on CSS * height adjusted by padding or borders when needed to simulate offsetHeight * when offsets aren't available. This may not work on display:none elements * if a height has not been set using CSS. * @return {Number} * @deprecated 5.0.0 use {@link Ext.dom.Element#getHeight} instead */ getComputedHeight: function() { return Math.max(this.dom.offsetHeight, this.dom.clientHeight) || parseFloat(this.getStyle(HEIGHT)) || 0; }, /** * @method getComputedWidth * Returns either the offsetWidth or the width of this element based on CSS * width adjusted by padding or borders when needed to simulate offsetWidth * when offsets aren't available. This may not work on display:none elements * if a width has not been set using CSS. * @return {Number} * @deprecated 5.0.0 use {@link Ext.dom.Element#getWidth} instead. */ getComputedWidth: function() { return Math.max(this.dom.offsetWidth, this.dom.clientWidth) || parseFloat(this.getStyle(WIDTH)) || 0; }, /** * @method getStyleSize * Returns the dimensions of the element available to lay content out in. * * getStyleSize utilizes prefers style sizing if present, otherwise it chooses * the larger of offsetHeight/clientHeight and offsetWidth/clientWidth. * To obtain the size excluding scrollbars, use getViewSize. * * Sizing of the document body is handled at the adapter level which handles * special cases for IE and strict modes, etc. * * @return {Object} Object describing width and height. * @return {Number} return.width * @return {Number} return.height * @deprecated 5.0.0 Use {@link Ext.dom.Element#getSize} instead. */ getStyleSize: function() { var me = this, d = this.dom, isDoc = (d === DOC || d === DOC.body), s, w, h; // If the body, use static methods if (isDoc) { return { width: Element.getViewportWidth(), height: Element.getViewportHeight() }; } s = me.getStyle([ 'height', 'width' ], true); // seek inline // Use Styles if they are set if (s.width && s.width !== 'auto') { w = parseFloat(s.width); } // Use Styles if they are set if (s.height && s.height !== 'auto') { h = parseFloat(s.height); } // Use getWidth/getHeight if style not set. return { width: w || me.getWidth(true), height: h || me.getHeight(true) }; }, /** * @method isBorderBox * Returns true if this element uses the border-box-sizing model. * This method is deprecated as of version 5.0 because border-box sizing * is forced upon all elements via a style sheet rule, and the browsers * that do not support border-box (IE6/7 strict mode) are no longer supported. * @deprecated 5.0.0 This method is deprecated. Browsers that do not * support border-box (IE6/7 strict mode) are no longer supported. * @return {Boolean} */ isBorderBox: function() { return true; }, /** * @method isDisplayed * Returns true if display is not "none" * @return {Boolean} * @deprecated 5.0.0 use element.isStyle('display', 'none'); */ isDisplayed: function() { return !this.isStyle('display', 'none'); }, /** * @method focusable * Checks whether this element can be focused. * @return {Boolean} True if the element is focusable * @deprecated 5.0.0 use {@link #isFocusable} instead */ focusable: 'isFocusable' } } } }; })(), function() { var Element = Ext.dom.Element, proto = Element.prototype, useDocForId = !Ext.isIE8, DOC = document, view = DOC.defaultView, opacityRe = /alpha\(opacity=(.*)\)/i, trimRe = /^\s+|\s+$/g, styleHooks = proto.styleHooks, supports = Ext.supports, verticalStyleHooks90, verticalStyleHooks270, edges, k, edge, borderWidth, getBorderWidth; proto._init(Element); delete proto._init; Ext.plainTableCls = Ext.baseCSSPrefix + 'table-plain'; Ext.plainListCls = Ext.baseCSSPrefix + 'list-plain'; // ensure that any methods added by this override are also added to Ext.CompositeElementLite if (Ext.CompositeElementLite) { Ext.CompositeElementLite.importElementMethods(); } if (!supports.Opacity && Ext.isIE) { Ext.apply(styleHooks.opacity, { get: function(dom) { var filter = dom.style.filter, match, opacity; if (filter.match) { match = filter.match(opacityRe); if (match) { opacity = parseFloat(match[1]); if (!isNaN(opacity)) { return opacity ? opacity / 100 : 0; } } } return 1; }, set: function(dom, value) { var style = dom.style, val = style.filter.replace(opacityRe, '').replace(trimRe, ''); style.zoom = 1; // ensure dom.hasLayout // value can be a number or '' or null... so treat falsey as no opacity if (typeof (value) === 'number' && value >= 0 && value < 1) { value *= 100; style.filter = val + (val.length ? ' ' : '') + 'alpha(opacity=' + value + ')'; } else { style.filter = val; } } }); } if (!supports.matchesSelector) { // Match basic tagName.ClassName selector syntax for is implementation // eslint-disable-next-line vars-on-top var simpleSelectorRe = /^([a-z]+|\*)?(?:\.([a-z][a-z\-_0-9]*))?$/i, dashRe = /-/g, fragment, classMatcher = function(tag, cls) { var classRe = new RegExp('(?:^|\\s+)' + cls.replace(dashRe, '\\-') + '(?:\\s+|$)'); if (tag && tag !== '*') { tag = tag.toUpperCase(); return function(el) { return el.tagName === tag && classRe.test(el.className); }; } return function(el) { return classRe.test(el.className); }; }, tagMatcher = function(tag) { tag = tag.toUpperCase(); return function(el) { return el.tagName === tag; }; }, cache = {}; proto.matcherCache = cache; proto.is = function(selector) { var dom = this.dom, cls, match, testFn, root, isOrphan, is, tag; // Empty selector always matches if (!selector) { return true; } // Only Element node types can be matched. if (dom.nodeType !== 1) { return false; } // eslint-disable-next-line no-cond-assign if (!(testFn = Ext.isFunction(selector) ? selector : cache[selector])) { // eslint-disable-next-line no-cond-assign if (!(match = selector.match(simpleSelectorRe))) { // Not a simple tagName.className selector, do it the hard way root = dom.parentNode; if (!root) { isOrphan = true; root = fragment || (fragment = DOC.createDocumentFragment()); fragment.appendChild(dom); } is = Ext.Array.indexOf(Ext.fly(root, '_is').query(selector), dom) !== -1; if (isOrphan) { fragment.removeChild(dom); } return is; } tag = match[1]; cls = match[2]; cache[selector] = testFn = cls ? classMatcher(tag, cls) : tagMatcher(tag); } return testFn(dom); }; } // IE8 needs its own implementation of getStyle because it doesn't support getComputedStyle if (!view || !view.getComputedStyle) { proto.getStyle = function(property, inline) { var me = this, dom = me.dom, multiple = typeof property !== 'string', prop = property, props = prop, len = 1, isInline = inline, styleHooks = me.styleHooks, camel, domStyle, values, hook, out, style, i; if (multiple) { values = {}; prop = props[0]; i = 0; if (!(len = props.length)) { return values; } } if (!dom || dom.documentElement) { return values || ''; } domStyle = dom.style; if (inline) { style = domStyle; } else { style = dom.currentStyle; // fallback to inline style if rendering context not available if (!style) { isInline = true; style = domStyle; } } do { hook = styleHooks[prop]; if (!hook) { styleHooks[prop] = hook = { name: Element.normalize(prop) }; } if (hook.get) { out = hook.get(dom, me, isInline, style); } else { camel = hook.name; out = style[camel]; } if (!multiple) { return out; } values[prop] = out; prop = props[++i]; } while (i < len); return values; }; } // override getStyle for border-*-width if (Ext.isIE8) { getBorderWidth = function(dom, el, inline, style) { if (style[this.styleName] === 'none') { return '0px'; } return style[this.name]; }; edges = [ 'Top', 'Right', 'Bottom', 'Left' ]; k = edges.length; while (k--) { edge = edges[k]; borderWidth = 'border' + edge + 'Width'; styleHooks['border-' + edge.toLowerCase() + '-width'] = styleHooks[borderWidth] = { name: borderWidth, styleName: 'border' + edge + 'Style', get: getBorderWidth }; } // IE8 has an odd bug with handling font icons in pseudo elements; // it will render the icon once and not update it when something // like text color is changed via style addition or removal. // We have to force icon repaint by adding a style with forced empty // pseudo element content, (x-sync-repaint) and removing it back to work // around this issue. // See this: https://github.com/FortAwesome/Font-Awesome/issues/954 // and this: https://github.com/twbs/bootstrap/issues/13863 // eslint-disable-next-line vars-on-top var syncRepaintCls = Ext.baseCSSPrefix + 'sync-repaint'; proto.syncRepaint = function() { this.addCls(syncRepaintCls); // Measuring element width will make the browser to repaint it this.getWidth(); // Removing empty content makes the icon to appear again and be redrawn this.removeCls(syncRepaintCls); }; } if (Ext.isIE10m) { Ext.override(Element, { focus: function(defer, dom) { var me = this, ex; dom = dom || me.dom; if (me.deferredFocusTimer) { Ext.undefer(me.deferredFocusTimer); } me.deferredFocusTimer = null; if (Number(defer)) { me.deferredFocusTimer = Ext.defer(me.focus, defer, me, [ null, dom ]); } else { Ext.GlobalEvents.fireEvent('beforefocus', dom); // IE10m has an acute problem with focusing input elements; // when the element was just shown and did not have enough // time to initialize, focusing it might fail. The problem // is somewhat random in nature; most of the time focusing // an input element will succeed, failing only occasionally. // When it fails, the focus will be thrown to the document // body element, with subsequent focusout/focusin event pair // on the body, which throws off our focusenter/focusleave // processing. // Fortunately for us, when this focus failure happens, the // resulting focusout event will happen *synchronously* // unlike the normal focusing events which IE will fire // asynchronously. Also fortunately for us, in most cases // trying to focus the given element the second time // immediately after it failed to focus the first time // seems to do the trick; however when second focus attempt // succeeds, it will result in focusout on the body and // focusin on the given element, which again wreaks havoc // on our focusenter/focusleave handling. // The only workable solution we have is to pretend that // focus never went to the document body and ignore the // focusout and focusin caused by failed first focus attempt. // To this end, we fudge the event stream in Focus publisher // override. if (dom && (dom.tagName === 'INPUT' || dom.tagname === 'TEXTAREA')) { Ext.synchronouslyFocusing = document.activeElement; } // Also note that trying to focus an unfocusable element // might throw an exception in IE8. What a cute idea, MS. :( try { dom.focus(); } catch (xcpt) { ex = xcpt; } // Ok so now we have this situation when we tried to focus // the first time but did not succeed. Let's try again but // not if there was an exception the first time - when the // "focus failure" happens it does so silently. :( if (Ext.synchronouslyFocusing && document.activeElement !== dom && !ex) { dom.focus(); } Ext.synchronouslyFocusing = null; } return me; } }); } Ext.apply(Ext, { /** * `true` to automatically uncache orphaned Ext.Elements periodically. If set to * `false`, the application will be required to clean up orphaned Ext.Elements and * it's listeners as to not cause memory leakage. * @member Ext */ enableGarbageCollector: true, // In sencha v5 isBorderBox is no longer needed since all supported browsers // support border-box, but it is hard coded to true for backward compatibility isBorderBox: true, /** * @property {Boolean} useShims * @member Ext * Set to `true` to use a {@link Ext.util.Floating#shim shim} on all floating Components * and {@link Ext.LoadMask LoadMasks} */ useShims: false, getElementById: function(id) { var el = DOC.getElementById(id), detachedBodyEl; if (!el && (detachedBodyEl = Ext.detachedBodyEl)) { el = detachedBodyEl.dom.querySelector(Ext.makeIdSelector(id)); } return el; }, /** * Applies event listeners to elements by selectors when the document is ready. * The event name is specified with an `@` suffix. * * Ext.addBehaviors({ * // add a listener for click on all anchors in element with id foo * '#foo a@click': function(e, t){ * // do something * }, * * // add the same listener to multiple selectors (separated by comma BEFORE the @) * '#foo a, #bar span.some-class@mouseover': function(){ * // do something * } * }); * * @param {Object} obj The list of behaviors to apply * @member Ext */ addBehaviors: function(obj) { // simple cache for applying multiple behaviors to same selector // does query multiple times var cache = {}, parts, b, s; if (!Ext.isReady) { Ext.onInternalReady(function() { Ext.addBehaviors(obj); }); } else { for (b in obj) { if ((parts = b.split('@'))[1]) { // for Object prototype breakers s = parts[0]; if (!cache[s]) { cache[s] = Ext.fly(document).select(s, true); } cache[s].on(parts[1], obj[b]); } } cache = null; } } }); if (Ext.isIE9m) { Ext.getElementById = function(id) { var el = DOC.getElementById(id), detachedBodyEl; if (!el && (detachedBodyEl = Ext.detachedBodyEl)) { el = detachedBodyEl.dom.all[id]; } return el; }; proto.getById = function(id, asDom) { var dom = this.dom, ret = null, entry, el; if (dom) { // for normal elements getElementById is the best solution, but if the el is // not part of the document.body, we need to use all[] el = (useDocForId && DOC.getElementById(id)) || dom.all[id]; if (el) { if (asDom) { ret = el; } else { // calling Element.get here is a real hit (2x slower) because it has to // redetermine that we are giving it a dom el. entry = Ext.cache[id]; if (entry) { if (entry.skipGarbageCollection || !Ext.isGarbage(entry.dom)) { ret = entry; } else { Ext.raise("Stale Element with id '" + el.id + "' found in Element cache. " + "Make sure to clean up Element instances using destroy()"); entry.destroy(); } } ret = ret || new Ext.Element(el); } } } return ret; }; } else if (!DOC.querySelector) { Ext.getDetachedBody = Ext.getBody; Ext.getElementById = function(id) { return DOC.getElementById(id); }; proto.getById = function(id, asDom) { var dom = DOC.getElementById(id); return asDom ? dom : (dom ? Ext.get(dom) : null); }; } if (Ext.isIE && !(Ext.isIE9p && DOC.documentMode >= 9)) { // Essentially all web browsers (Firefox, Internet Explorer, recent versions of Opera, // Safari, Konqueror, and iCab, as a non-exhaustive list) return null when the specified // attribute does not exist on the specified element. // The DOM specification says that the correct return value in this case is actually // the empty string, and some DOM implementations implement this behavior. // The implementation of getAttribute in XUL (Gecko) actually follows the specification // and returns an empty string. Consequently, you should use hasAttribute to check // for an attribute's existence prior to calling getAttribute() if it is possible that // the requested attribute does not exist on the specified element. // // https://developer.mozilla.org/en-US/docs/DOM/element.getAttribute // http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-745549614 proto.getAttribute = function(name, ns) { var d = this.dom, type; if (ns) { type = typeof d[ns + ":" + name]; if (type !== 'undefined' && type !== 'unknown') { return d[ns + ":" + name] || null; } return null; } if (name === "for") { name = "htmlFor"; } return d[name] || null; }; } Ext.onInternalReady(function() { var transparentRe = /^(?:transparent|(?:rgba[(](?:\s*\d+\s*[,]){3}\s*0\s*[)]))$/i, origSetWidth = proto.setWidth, origSetHeight = proto.setHeight, origSetSize = proto.setSize, origUnselectable = proto.unselectable, pxRe = /^\d+(?:\.\d*)?px$/i, colorStyles, i, name, camel; if (supports.FixedTableWidthBug) { // EXTJSIV-12665 // https://bugs.webkit.org/show_bug.cgi?id=130239 // Webkit browsers fail to layout correctly when a form field's width is less // than the min-width of the body element. The only way to fix it seems to be // to toggle the display style of the field's element before and after setting // the width. Note: once the bug has been corrected by toggling the element's // display, successive calls to setWidth will work without the hack. It's only // when going from naturally widthed to having an explicit width that the bug // occurs. styleHooks.width = { name: 'width', set: function(dom, value, el) { var style = dom.style, needsFix = el._needsTableWidthFix, origDisplay = style.display; if (needsFix) { style.display = 'none'; } style.width = value; if (needsFix) { // repaint // eslint-disable-next-line no-unused-expressions dom.scrollWidth; style.display = origDisplay; } } }; proto.setWidth = function(width, animate) { var me = this, dom = me.dom, style = dom.style, needsFix = me._needsTableWidthFix, origDisplay = style.display; if (needsFix && !animate) { style.display = 'none'; } origSetWidth.call(me, width, animate); if (needsFix && !animate) { // repaint // eslint-disable-next-line no-unused-expressions dom.scrollWidth; style.display = origDisplay; } return me; }; proto.setSize = function(width, height, animate) { var me = this, dom = me.dom, style = dom.style, needsFix = me._needsTableWidthFix, origDisplay = style.display; if (needsFix && !animate) { style.display = 'none'; } origSetSize.call(me, width, height, animate); if (needsFix && !animate) { // repaint // eslint-disable-next-line no-unused-expressions dom.scrollWidth; style.display = origDisplay; } return me; }; } if (Ext.isIE8) { styleHooks.height = { name: 'height', set: function(dom, value, el) { var component = el.component, frameInfo, frameBodyStyle; if (component && component._syncFrameHeight && el === component.el) { frameBodyStyle = component.frameBody.dom.style; if (pxRe.test(value)) { frameInfo = component.getFrameInfo(); if (frameInfo) { frameBodyStyle.height = (parseInt(value, 10) - frameInfo.height) + 'px'; } } else if (!value || value === 'auto') { frameBodyStyle.height = ''; } } dom.style.height = value; } }; proto.setHeight = function(height, animate) { var component = this.component, frameInfo, frameBodyStyle; if (component && component._syncFrameHeight && this === component.el) { frameBodyStyle = component.frameBody.dom.style; if (!height || height === 'auto') { frameBodyStyle.height = ''; } else { frameInfo = component.getFrameInfo(); if (frameInfo) { frameBodyStyle.height = (height - frameInfo.height) + 'px'; } } } return origSetHeight.call(this, height, animate); }; proto.setSize = function(width, height, animate) { var component = this.component, frameInfo, frameBodyStyle; if (component && component._syncFrameHeight && this === component.el) { frameBodyStyle = component.frameBody.dom.style; if (!height || height === 'auto') { frameBodyStyle.height = ''; } else { frameInfo = component.getFrameInfo(); if (frameInfo) { frameBodyStyle.height = (height - frameInfo.height) + 'px'; } } } return origSetSize.call(this, width, height, animate); }; // Override for IE8 which throws an error setting innerHTML when inside // an event handler invoked from that element. proto.setText = function(text) { var dom = this.dom; // Remove all child nodes, leave only a single textNode if (!(dom.childNodes.length === 1 && dom.firstChild.nodeType === 3)) { while (dom.lastChild && dom.lastChild.nodeType !== 3) { dom.removeChild(dom.lastChild); } dom.appendChild(document.createTextNode()); } // Set the data of the textNode dom.firstChild.data = text; }; proto.unselectable = function() { origUnselectable.call(this); this.dom.onselectstart = function() { return false; }; }; } function fixTransparent(dom, el, inline, style) { var value = style[this.name] || ''; return transparentRe.test(value) ? 'transparent' : value; } /* * Helper function to create the function that will restore the selection. */ function makeSelectionRestoreFn(activeEl, start, end) { return function() { activeEl.selectionStart = start; activeEl.selectionEnd = end; }; } /* * Creates a function to call to clean up problems with the work-around for the * WebKit RightMargin bug. The work-around is to add "display: 'inline-block'" to * the element before calling getComputedStyle and then to restore its original * display value. The problem with this is that it corrupts the selection of an * INPUT or TEXTAREA element (as in the "I-beam" goes away but the focus remains). * To cleanup after this, we need to capture the selection of any such element and * then restore it after we have restored the display style. * * @param {HTMLElement} target The top-most element being adjusted. * @private */ function getRightMarginFixCleaner(target) { var hasInputBug = supports.DisplayChangeInputSelectionBug, hasTextAreaBug = supports.DisplayChangeTextAreaSelectionBug, activeEl, tag, start, end; if (hasInputBug || hasTextAreaBug) { activeEl = Element.getActiveElement(); tag = activeEl && activeEl.tagName; if ((hasTextAreaBug && tag === 'TEXTAREA') || (hasInputBug && tag === 'INPUT' && activeEl.type === 'text')) { if (Ext.fly(target).isAncestor(activeEl)) { start = activeEl.selectionStart; end = activeEl.selectionEnd; if (Ext.isNumber(start) && Ext.isNumber(end)) { // to be safe... // We don't create the raw closure here inline because that // will be costly even if we don't want to return it (nested // function decls and exprs are often instantiated on entry // regardless of whether execution ever reaches them): return makeSelectionRestoreFn(activeEl, start, end); } } } } return Ext.emptyFn; } // avoid special cases, just return a nop function fixRightMargin(dom, el, inline, style) { var result = style.marginRight, domStyle, display; // Ignore cases when the margin is correctly reported as 0, the bug only shows // numbers larger. if (result !== '0px') { domStyle = dom.style; display = domStyle.display; domStyle.display = 'inline-block'; // eslint-disable-next-line max-len result = (inline ? style : dom.ownerDocument.defaultView.getComputedStyle(dom, null)).marginRight; domStyle.display = display; } return result; } function fixRightMarginAndInputFocus(dom, el, inline, style) { var result = style.marginRight, domStyle, cleaner, display; if (result !== '0px') { domStyle = dom.style; cleaner = getRightMarginFixCleaner(dom); display = domStyle.display; domStyle.display = 'inline-block'; // eslint-disable-next-line max-len result = (inline ? style : dom.ownerDocument.defaultView.getComputedStyle(dom, '')).marginRight; domStyle.display = display; cleaner(); } return result; } // TODO - this was fixed in Safari 3 - verify if this is still an issue // Fix bug caused by this: https://bugs.webkit.org/show_bug.cgi?id=13343 if (!supports.RightMargin) { styleHooks.marginRight = styleHooks['margin-right'] = { name: 'marginRight', // TODO - Touch should use conditional compilation here or ensure that the // underlying Ext.supports flags are set correctly... // eslint-disable-next-line max-len get: (supports.DisplayChangeInputSelectionBug || supports.DisplayChangeTextAreaSelectionBug) ? fixRightMarginAndInputFocus : fixRightMargin }; } if (!supports.TransparentColor) { colorStyles = [ 'background-color', 'border-color', 'color', 'outline-color' ]; for (i = colorStyles.length; i--; ) { name = colorStyles[i]; camel = Element.normalize(name); styleHooks[name] = styleHooks[camel] = { name: camel, get: fixTransparent }; } } // When elements are rotated 80 or 270 degrees, their border, margin and padding hooks // need to be rotated as well. proto.verticalStyleHooks90 = verticalStyleHooks90 = Ext.Object.chain(styleHooks); proto.verticalStyleHooks270 = verticalStyleHooks270 = Ext.Object.chain(styleHooks); verticalStyleHooks90.width = styleHooks.height || { name: 'height' }; verticalStyleHooks90.height = styleHooks.width || { name: 'width' }; verticalStyleHooks90['margin-top'] = { name: 'marginLeft' }; verticalStyleHooks90['margin-right'] = { name: 'marginTop' }; verticalStyleHooks90['margin-bottom'] = { name: 'marginRight' }; verticalStyleHooks90['margin-left'] = { name: 'marginBottom' }; verticalStyleHooks90['padding-top'] = { name: 'paddingLeft' }; verticalStyleHooks90['padding-right'] = { name: 'paddingTop' }; verticalStyleHooks90['padding-bottom'] = { name: 'paddingRight' }; verticalStyleHooks90['padding-left'] = { name: 'paddingBottom' }; verticalStyleHooks90['border-top'] = { name: 'borderLeft' }; verticalStyleHooks90['border-right'] = { name: 'borderTop' }; verticalStyleHooks90['border-bottom'] = { name: 'borderRight' }; verticalStyleHooks90['border-left'] = { name: 'borderBottom' }; verticalStyleHooks270.width = styleHooks.height || { name: 'height' }; verticalStyleHooks270.height = styleHooks.width || { name: 'width' }; verticalStyleHooks270['margin-top'] = { name: 'marginRight' }; verticalStyleHooks270['margin-right'] = { name: 'marginBottom' }; verticalStyleHooks270['margin-bottom'] = { name: 'marginLeft' }; verticalStyleHooks270['margin-left'] = { name: 'marginTop' }; verticalStyleHooks270['padding-top'] = { name: 'paddingRight' }; verticalStyleHooks270['padding-right'] = { name: 'paddingBottom' }; verticalStyleHooks270['padding-bottom'] = { name: 'paddingLeft' }; verticalStyleHooks270['padding-left'] = { name: 'paddingTop' }; verticalStyleHooks270['border-top'] = { name: 'borderRight' }; verticalStyleHooks270['border-right'] = { name: 'borderBottom' }; verticalStyleHooks270['border-bottom'] = { name: 'borderLeft' }; verticalStyleHooks270['border-left'] = { name: 'borderTop' }; /** * @property {Boolean} scopeCss * @member Ext * Set this to true before onReady to prevent any styling from being added to * the body element. By default a few styles such as font-family, and color * are added to the body element via a "x-body" class. When this is set to * `true` the "x-body" class is not added to the body element, but is added * to the elements of root-level containers instead. */ if (!Ext.scopeCss) { Ext.getBody().addCls(Ext.baseCSSPrefix + 'body'); } }, null, { priority: 1500 }); }); // onReady // @tag core /** * @class Ext.GlobalEvents */ Ext.define('Ext.overrides.GlobalEvents', { override: 'Ext.GlobalEvents', /** * @event resumelayouts * Fires after global layout processing has been resumed in {@link * Ext.Component#resumeLayouts}. */ attachListeners: function() { var me = this, docElement, bufferedFn; // In IE9- when using legacy onresize event via attachEvent or onresize property, // the event may fire for *content size changes* as well as actual document view // size changes. See this: https://msdn.microsoft.com/en-us/library/ms536959(v=vs.85).aspx // and this: http://stackoverflow.com/questions/1852751/window-resize-event-firing-in-internet-explorer // The amount of these events firing all at once can be entirely staggering, and they // often happen during layouts so we have to be über careful to execute as few JavaScript // statements as possible to improve overall framework performance. if (Ext.isIE8) { docElement = Ext.getDoc().dom.documentElement; bufferedFn = Ext.Function.createBuffered(me.fireResize, me.resizeBuffer, me); Ext.getWin().dom.attachEvent('onresize', function() { if (docElement.clientWidth !== Ext.GlobalEvents.curWidth || docElement.clientHeight !== Ext.GlobalEvents.curHeight) { bufferedFn(); } }); } me.callParent(); }, deprecated: { 5: { methods: { addListener: function(ename, fn, scope, options, order, caller, eventOptions) { var name, readyFn; // The "ready" event was removed from Ext.globalEvents in 5.0 in favor of // Ext.onReady(). This function adds compatibility for the ready event if (ename === 'ready') { readyFn = fn; } else if (typeof ename !== 'string') { for (name in ename) { if (name === 'ready') { readyFn = ename[name]; } } } if (readyFn) { Ext.log.warn("Ext.on('ready', fn) is deprecated. " + "Please use Ext.onReady(fn) instead."); Ext.onReady(readyFn); } this.callParent([ ename, fn, scope, options, order, caller, eventOptions ]); } } } } }); /** * @class Ext.plugin.Abstract */ Ext.define('Ext.overrides.plugin.Abstract', { override: 'Ext.plugin.Abstract', $configStrict: false, $configPrefixed: false, disabled: false, /** * @cfg {String|Array} stateEvents * The configured list of stateEvents used to (optionally) participate in Owner Component's * state management. * @member Ext.plugin.Abstract */ /** * @method * The getState method is invoked by the client Component's State mixin when one or more of the * specified {@link #stateEvents} are raised. * * The supplied implementation is empty. If plugin Subclasses are to (optionally) participate * in the client Component's state management, implementers should provide a suitable method * which returns a state object. * @return {Object} state * @member Ext.plugin.Abstract */ getState: null, /** * @method * The applyState method is invoked by the client Component's State mixin after initComponent * method has been run for the client. * * The supplied implementation is empty. If plugin Subclasses are to (optionally) participate * in the client Component's state management, implementers should provide a suitable method * to utilize it. * @param {Object} state The current plugin state object to be applied. * @param {Object} allState The current aggregate state of the Component and all plugins. * @member Ext.plugin.Abstract */ applyState: null, /** * The base implementation just sets the plugin's `disabled` flag to `false` * * Plugin subclasses which need more complex processing may implement an overriding * implementation. * @member Ext.plugin.Abstract */ enable: function() { this.disabled = false; }, /** * The base implementation just sets the plugin's `disabled` flag to `true` * * Plugin subclasses which need more complex processing may implement an overriding * implementation. * @member Ext.plugin.Abstract */ disable: function() { this.disabled = true; } }); /** * @class Ext.Widget */ Ext.define('Ext.overrides.Widget', { override: 'Ext.Widget', uses: [ 'Ext.Component', 'Ext.layout.component.Auto' ], $configStrict: false, isComponent: true, liquidLayout: true, // in Ext JS the rendered flag is set as soon as a component has its element. Since // widgets always have an element when constructed, they are always considered to be // "rendered" rendered: true, rendering: true, config: { renderTo: null }, constructor: function(config) { var me = this, renderTo; me.callParent([ config ]); // initialize the component layout me.getComponentLayout(); renderTo = me.getRenderTo(); if (renderTo) { me.render(renderTo); } }, addClsWithUI: function(cls) { this.el.addCls(cls); }, afterComponentLayout: Ext.emptyFn, updateLayout: function() { var owner = this.getRefOwner(); if (owner) { owner.updateLayout(); } }, destroy: function() { var me = this, ownerCt = me.ownerCt; if (ownerCt && ownerCt.remove) { ownerCt.remove(me, false); } me.callParent(); }, finishRender: function() { this.rendering = false; this.initBindable(); this.initKeyMap(); }, getAnimationProps: function() { // see Ext.util.Animate mixin return {}; }, getComponentLayout: function() { var me = this, layout = me.componentLayout; if (!layout) { layout = me.componentLayout = new Ext.layout.component.Auto(); layout.setOwner(me); } return layout; }, getEl: function() { return this.element; }, /** * @private * Needed for when widget is rendered into a grid cell. The class to add to the cell element. * @member Ext.Widget */ getTdCls: function() { return Ext.baseCSSPrefix + this.getTdType() + '-' + (this.ui || 'default') + '-cell'; }, /** * @private * Partner method to {@link #getTdCls}. * * Returns the base type for the component. Defaults to return `this.xtype`, but * All derived classes of {@link Ext.form.field.Text TextField} can return the type 'textfield', * and all derived classes of {@link Ext.button.Button Button} can return the type 'button' * @member Ext.Widget */ getTdType: function() { return this.xtype; }, getItemId: function() { // needed by ComponentQuery return this.itemId || this.id; }, getSizeModel: function() { return Ext.Component.prototype.getSizeModel.apply(this, arguments); }, onAdded: function(container, pos, instanced) { var me = this; me.ownerCt = container; me.onInheritedAdd(me, instanced); // this component is no longer detached from the body me.isDetached = false; }, onRemoved: function(destroying) { this.onInheritedRemove(destroying); this.ownerCt = this.ownerLayout = null; }, parseBox: function(box) { return Ext.Element.parseBox(box); }, removeClsWithUI: function(cls) { this.el.removeCls(cls); }, render: function(container, position) { var me = this, element = me.element, proto = Ext.Component.prototype, nextSibling; if (!me.ownerCt || me.floating) { if (Ext.scopeCss) { element.addCls(proto.rootCls); } element.addCls(proto.borderBoxCls); } if (position) { nextSibling = container.childNodes[position]; if (nextSibling) { Ext.fly(container).insertBefore(element, nextSibling); return; } } Ext.fly(container).appendChild(element); me.finishRender(); }, setPosition: function(x, y) { this.el.setLocalXY(x, y); }, up: function() { return Ext.Component.prototype.up.apply(this, arguments); }, isAncestor: function() { return Ext.Component.prototype.isAncestor.apply(this, arguments); }, onFocusEnter: function() { return Ext.Component.prototype.onFocusEnter.apply(this, arguments); }, onFocusLeave: function() { return Ext.Component.prototype.onFocusLeave.apply(this, arguments); }, isLayoutChild: function(candidate) { var ownerCt = this.ownerCt; return ownerCt ? (ownerCt === candidate || ownerCt.isLayoutChild(candidate)) : false; }, privates: { doAddListener: function(name, fn, scope, options, order, caller, manager) { if (name === 'painted' || name === 'resize') { this.element.doAddListener(name, fn, scope || this, options, order); } this.callParent([ name, fn, scope, options, order, caller, manager ]); }, doRemoveListener: function(name, fn, scope) { if (name === 'painted' || name === 'resize') { this.element.doRemoveListener(name, fn, scope); } this.callParent([ name, fn, scope ]); } } }, function(Cls) { var prototype = Cls.prototype; if (Ext.isIE9m) { // Since IE8/9 don't not support Object.defineProperty correctly we can't add the reference // nodes on demand, so we just fall back to adding all references up front. prototype.addElementReferenceOnDemand = prototype.addElementReference; } }); /** * @class Ext.Progress * * @example * Ext.create({ * xtype: 'grid', * title: 'Simpsons', * store: { * data: [ * { name: 'Lisa', progress: .159 }, * { name: 'Bart', progress: .216 }, * { name: 'Homer', progress: .55 }, * { name: 'Maggie', progress: .167 }, * { name: 'Marge', progress: .145 } * ] * }, * columns: [ * { text: 'Name', dataIndex: 'name' }, * { * text: 'Progress', * xtype: 'widgetcolumn', * width: 120, * dataIndex: 'progress', * widget: { * xtype: 'progress' * } * } * ], * height: 200, * width: 400, * renderTo: Ext.getBody() * }); */ Ext.define('Ext.overrides.Progress', { override: 'Ext.Progress', config: { ui: 'default' }, updateWidth: function(width, oldWidth) { var me = this; me.callParent([ width, oldWidth ]); width -= me.element.getBorderWidth('lr'); me.backgroundEl.setWidth(width); me.textEl.setWidth(width); }, privates: { startBarAnimation: function(o) { this.barEl.animate(o); }, stopBarAnimation: function() { this.barEl.stopAnimation(); } } }); /** * @class Ext.mixin.Focusable */ Ext.define('Ext.overrides.mixin.Focusable', { override: 'Ext.Component', /** * @cfg {String} [focusCls='focus'] CSS class suffix that will be used to * compose the CSS class name that will be added to Component's {@link #focusClsEl}, * and removed when Component blurs. * * **Note** that this is not a full CSS class name; this suffix will be combined * with component's UI class via {@link #addClsWithUI} and {@link #removeClsWithUI} methods. */ focusCls: 'focus', /** * Try to focus this component. * * If this component is disabled, a close relation will be targeted for focus instead * to keep focus localized for keyboard users. * @param {Mixed} [selectText] If applicable, `true` to also select all the text in this * component, or an array consisting of start and end (defaults to start) position of selection. * @param {Boolean/Number} [delay] Delay the focus this number of milliseconds (true for * 10 milliseconds). * @param {Function} [callback] Only needed if the `delay` parameter is used. A function to call * upon focus. * @param {Function} [scope] Only needed if the `delay` parameter is used. The scope (`this` * reference) in which to execute the callback. * @return {Ext.Component} The focused Component. Usually `this` Component. Some Containers may * delegate focus to a descendant Component ({@link Ext.window.Window Window}s can do this * through their {@link Ext.window.Window#defaultFocus defaultFocus} config option. If this * component is disabled, a closely related component will be focused and that will be returned. */ focus: function(selectText, delay, callback, scope) { var me = this, containerScrollTop; if ((!me.focusable && !me.isContainer) || me.destroyed || me.destroying) { return me; } // If delay is wanted, queue a call to this function. if (delay) { me.getFocusTask().delay(Ext.isNumber(delay) ? delay : 10, me.focus, me, [ selectText, false, callback, scope ]); return me; } // An immediate focus call must cancel any outstanding delayed focus calls. me.cancelFocus(); if (me.floating && me.container && me.container.dom) { containerScrollTop = me.container.dom.scrollTop; } // Core Focusable method will return true if focusing was attempted if (me.mixins.focusable.focus.apply(me, arguments) !== false) { if (callback) { Ext.callback(callback, scope); } // Focusing a floating Component brings it to the front of its stack. // this is performed by its zIndexManager. Pass preventFocus true to avoid recursion. if (me.floating && containerScrollTop !== undefined) { me.container.dom.scrollTop = containerScrollTop; } } return me; }, /** * Cancel any deferred focus on this component * @protected */ cancelFocus: function() { var me = this, task = me.getFocusTask(); if (task) { task.cancel(); } }, /** * @method * Template method to do any pre-blur processing. * @protected * @param {Ext.event.Event} e The event object */ beforeBlur: Ext.emptyFn, /** * @method * Template method to do any post-blur processing. * @protected * @param {Ext.event.Event} e The event object */ postBlur: Ext.emptyFn, /** * @method * Template method to do any pre-focus processing. * @protected * @param {Ext.event.Event} e The event object */ beforeFocus: Ext.emptyFn, /** * @method * Template method to do any post-focus processing. * @protected * @param {Ext.event.Event} e The event object */ postFocus: Ext.emptyFn, onFocusEnter: function(e) { var me = this; if (me.destroying || me.destroyed) { return; } // Focusing must being a floating component to the front. // Only bring to front if this component is not the manager's // topmost component (may be a result of focusOnToFront). if (me.floating && me !== me.zIndexManager.getActive()) { me.toFront(true); } me.callParent([ e ]); }, destroyFocusable: function() { var me = this; // Calling cancelFocus() will assign focusTask property, // which we don't want during destruction if (me.focusTask) { me.focusTask.stop(me.focus, me); } me.callParent(); }, privates: { addFocusCls: function(e) { var me = this, focusCls = me.focusCls, el; if (focusCls) { el = me.getFocusClsEl(e); if (el) { el.addCls(me.addClsWithUI(focusCls, true)); } } }, removeFocusCls: function(e) { var me = this, focusCls = me.focusCls, el; if (focusCls) { el = me.getFocusClsEl(e); if (el) { el.removeCls(me.removeClsWithUI(focusCls, true)); } } }, /** * @private */ getFocusTask: function() { if (!this.focusTask) { this.focusTask = Ext.focusTask; } return this.focusTask; }, updateMaskState: function(state, mask) { var me = this, ariaEl = me.ariaEl.dom, skipMask = me.getInherited().disabled && me.getInherited().disableMask, value; if (state) { me.disableTabbing(); if (!skipMask) { me.setMasked(true); } if (ariaEl) { ariaEl.setAttribute('aria-busy', 'true'); // It is possible that ariaEl already has aria-describedby attribute; // in that case we need to save it to restore later. value = ariaEl.getAttribute('aria-describedby'); if (value) { me._savedAriaDescribedBy = value; } ariaEl.setAttribute('aria-describedby', mask.ariaEl.id); } } else { me.enableTabbing(); if (!skipMask) { me.setMasked(false); } if (ariaEl) { ariaEl.removeAttribute('aria-busy'); value = ariaEl.getAttribute('aria-describedby'); ariaEl.removeAttribute('aria-describedby'); if (value === mask.ariaEl.id && me._savedAriaDescribedBy) { ariaEl.setAttribute('aria-describedby', me._savedAriaDescribedBy); delete me._savedAriaDescribedBy; } } } } } }, function() { // One global DelayedTask to assign focus // So that the last focus call wins. if (!Ext.focusTask) { Ext.focusTask = new Ext.util.DelayedTask(); } }); Ext.define('Ext.overrides.app.domain.Component', { override: 'Ext.app.domain.Component', requires: [ 'Ext.Component' ] }, function(ComponentDomain) { // The core Component domain monitors events on the Ext.Widget class // in Ext Components are not widgets so we need to monitor Ext.Component as well. ComponentDomain.monitor(Ext.Component); }); // This is an override because it must be loaded very early, possibly before Ext.app.Application // in dev mode so that Ext.application() can be called. // Being an override also ensures that it is only included in a built app if Ext.app.Application // is present. // // @override Ext.app.Application /** * @method application * @member Ext * Loads Ext.app.Application class and starts it up with given configuration after the * page is ready. * * See `Ext.app.Application` for details. * * @param {Object/String} config Application config object or name of a class derived * from Ext.app.Application. */ Ext.application = function(config) { var createApp = function(App) { // This won't be called until App class has been created. Ext.onReady(function() { var Viewport = Ext.viewport; // eslint-disable-next-line dot-notation Viewport = Viewport && Viewport['Viewport']; if (Viewport && Viewport.setup) { Viewport.setup(App.prototype.config.viewport); } Ext.app.Application.instance = new App(); }); }; if (typeof config === "string") { Ext.require(config, function() { createApp(Ext.ClassManager.get(config)); }); } else { config = Ext.apply({ extend: 'Ext.app.Application' }, // can be replaced by config! config); // We have to process "paths" before creating Application class, // or `requires` won't work. Ext.app.setupPaths(config.name, config.appFolder, config.paths); config['paths processed'] = true; // Let Ext.define do the hard work but don't assign a class name. Ext.define(config.name + ".$application", config, function() { createApp(this); }); } }; /** * @class Ext.app.Application */ Ext.define('Ext.overrides.app.Application', { override: 'Ext.app.Application', uses: [ 'Ext.tip.QuickTipManager' ], // @cmd-auto-dependency {aliasPrefix: "view.", mvc: true, requires: ["Ext.plugin.Viewport"]} /** * @cfg {Boolean/String} [autoCreateViewport=false] * @deprecated 5.1 Instead use {@link #mainView} * @member Ext.app.Application */ autoCreateViewport: false, config: { /** * @cfg {Boolean} enableQuickTips * @deprecated 6.2.0 Use {@link #quickTips}. */ enableQuickTips: null }, /** * @cfg {Boolean} quickTips * True to automatically set up Ext.tip.QuickTip support. * * @since 6.2.0 */ quickTips: true, updateEnableQuickTips: function(enableQuickTips) { this.setQuickTips(enableQuickTips); }, applyMainView: function(mainView) { var view, proto, config, protoPlugins, configPlugins; if (typeof mainView === 'string') { view = this.getView(mainView); config = {}; } else { config = mainView; view = Ext.ClassManager.getByConfig(mainView); } proto = view.prototype; if (!proto.isViewport) { // Need to copy over any plugins defined on the prototype and on the config. protoPlugins = Ext.Array.from(proto.plugins); configPlugins = Ext.Array.from(config.plugins); config = Ext.apply({}, config); config.plugins = [ 'viewport' ].concat(protoPlugins, configPlugins); } return view.create(config); }, getDependencies: function(cls, data, requires) { var Controller = Ext.app.Controller, proto = cls.prototype, namespace = data.$namespace, viewportClass = data.autoCreateViewport; if (viewportClass) { if (!namespace) { Ext.raise("[Ext.app.Application] Can't resolve namespace for " + data.$className + ", did you forget to specify 'name' property?"); } if (viewportClass === true) { viewportClass = 'Viewport'; } else { requires.push('Ext.plugin.Viewport'); } Controller.processDependencies(proto, requires, namespace, 'view', viewportClass); } }, onBeforeLaunch: function() { var me = this, autoCreateViewport = me.autoCreateViewport; if (me.getQuickTips()) { me.initQuickTips(); } if (autoCreateViewport) { me.initViewport(); } this.callParent(arguments); }, getViewportName: function() { var name = null, autoCreate = this.autoCreateViewport; if (autoCreate) { name = (autoCreate === true) ? 'Viewport' : autoCreate; } return name; }, initViewport: function() { this.setMainView(this.getViewportName()); }, initQuickTips: function() { Ext.tip.QuickTipManager.init(); } }); Ext.define('Ext.overrides.app.domain.View', { override: 'Ext.app.domain.View', requires: [ 'Ext.Component' ], constructor: function(controller) { this.callParent([ controller ]); // The base class handles Ext.Widget, which encompasses // component for modern, so we only need the override here. this.monitoredClasses.push(Ext.Component); } }); /** * @class Ext.dom.Helper */ Ext.define('Ext.overrides.dom.Helper', (function() { var tableRe = /^(?:table|thead|tbody|tr|td)$/i, tableElRe = /td|tr|tbody|thead/i, ts = '', te = '
', tbs = ts + '', tbe = '' + te, trs = tbs + '', tre = '' + tbe; return { override: 'Ext.dom.Helper', ieInsertHtml: function(where, el, html) { var frag = null; // IE's incomplete table implementation: http://www.ericvasilik.com/2006/07/code-karma.html if (Ext.isIE9m && tableRe.test(el.tagName)) { frag = this.insertIntoTable(el.tagName.toLowerCase(), where, el, html); } return frag; }, ieOverwrite: function(el, html) { // IE Inserting HTML into a table/tbody/tr requires extra processing: // http://www.ericvasilik.com/2006/07/code-karma.html if (Ext.isIE9m && tableRe.test(el.tagName)) { // Clearing table elements requires removal of all elements. while (el.firstChild) { el.removeChild(el.firstChild); } if (html) { return this.insertHtml('afterbegin', el, html); } } }, ieTable: function(depth, openingTags, htmlContent, closingTags) { var i = -1, el = this.detachedDiv, ns, nx; el.innerHTML = [ openingTags, htmlContent, closingTags ].join(''); while (++i < depth) { el = el.firstChild; } // If the result is multiple siblings, then encapsulate them into one fragment. ns = el.nextSibling; if (ns) { ns = el; el = document.createDocumentFragment(); while (ns) { nx = ns.nextSibling; el.appendChild(ns); ns = nx; } } return el; }, /** * @private * @method insertIntoTable * @member Ext.dom.Helper * workaround for broken table implementation in IE9m * http://www.ericvasilik.com/2006/07/code-karma.html */ insertIntoTable: function(tag, where, destinationEl, html) { var node, before, bb = where === 'beforebegin', ab = where === 'afterbegin', be = where === 'beforeend', ae = where === 'afterend'; if (tag === 'td' && (ab || be) || !tableElRe.test(tag) && (bb || ae)) { return null; } /* eslint-disable indent, multiline-ternary, no-multi-spaces */ before = bb ? destinationEl : ae ? destinationEl.nextSibling : ab ? destinationEl.firstChild : null; /* eslint-enable indent, multiline-ternary, no-multi-spaces */ if (bb || ae) { destinationEl = destinationEl.parentNode; } if (tag === 'td' || (tag === 'tr' && (be || ab))) { node = this.ieTable(4, trs, html, tre); } else if (((tag === 'tbody' || tag === 'thead') && (be || ab)) || (tag === 'tr' && (bb || ae))) { node = this.ieTable(3, tbs, html, tbe); } else { node = this.ieTable(2, ts, html, te); } destinationEl.insertBefore(node, before); return node; } }; })()); /** * @class Ext.list.AbstractTreeItem */ Ext.define('Ext.overrides.list.AbstractTreeItem', { override: 'Ext.list.AbstractTreeItem', // This config is used by TreeIten, however to support the generic API (RootItem), // we need this up here. config: { floated: null } }); /** * @class Ext.list.TreeItem */ Ext.define('Ext.overrides.list.TreeItem', { override: 'Ext.list.TreeItem', // Implement a setter. // There *is* no "floated" config in Classic. // We're still an inner item, we just get put inside a Container. setFloated: function(floated) { var me = this, el = me.element, placeholder = me.placeholder, node, wasExpanded; if (me.treeItemFloated !== floated) { if (floated) { placeholder = el.clone(false, true); // shallow, asDom placeholder.id += '-placeholder'; // avoid duplicate id me.placeholder = Ext.get(placeholder); me.wasExpanded = me.getExpanded(); me.setExpanded(true); el.addCls(me.floatedCls); el.dom.parentNode.insertBefore(placeholder, el.dom); me.floater = me.createFloater(); } // toolkit-specific else if (placeholder) { wasExpanded = me.wasExpanded; node = me.getNode(); me.setExpanded(wasExpanded); if (!wasExpanded && node.isExpanded()) { // If we have been floating and expanded a child, we may have been // expanded as part of the ancestors. Attempt to restore state. me.preventAnimation = true; node.collapse(); me.preventAnimation = false; } me.floater.remove(me, false); // don't destroy el.removeCls(me.floatedCls); placeholder.dom.parentNode.insertBefore(el.dom, placeholder.dom); placeholder.destroy(); me.floater.destroy(); me.placeholder = me.floater = null; } // Use an internal property name. We are NOT really floated me.treeItemFloated = floated; } }, getFloated: function() { return this.treeItemFloated; }, runAnimation: function(animation) { return this.itemContainer.addAnimation(animation); }, stopAnimation: function(animation) { animation.jumpToEnd(); }, privates: { createFloater: function() { var me = this, owner = me.getOwner(), ownerTree = me.up('treelist'), floater, toolElement = me.getToolElement(), expandedWidth = ownerTree.expandedWidth, defaultListWidth = ownerTree.defaultListWidth; if (expandedWidth === null) { expandedWidth = defaultListWidth; } me.floater = floater = new Ext.container.Container({ cls: ownerTree.self.prototype.element.cls + ' ' + ownerTree.uiPrefix + ownerTree.getUi() + ' ' + Ext.baseCSSPrefix + 'treelist-floater', floating: true, // We do not get element resize events on IE8 // so fall back to 6.0.1 sizing to 200 wide. width: Ext.isIE8 ? defaultListWidth : (expandedWidth - toolElement.getWidth()), shadow: false, hidden: true, renderTo: Ext.getBody(), listeners: { element: 'el', click: function(e) { return owner.onClick(e); } } }); floater.add(me); floater.show(); floater.el.alignTo(toolElement, 'tr?'); return floater; } } }); /** * @class Ext.list.Tree */ Ext.define('Ext.overrides.list.Tree', { override: 'Ext.list.Tree', canMeasure: true, constructor: function(config) { this.callParent([ config ]); // Track size so that we can track the expanded size // for use by the floated state of items when in micro mode. // Browsers where this event is not supported, fall back to a width // of 200px for floated tree items. if (!Ext.isIE8) { this.element.on('resize', 'onElResize', this); } }, beforeLayout: function() { this.syncIconSize(); }, onElResize: function(el, details) { if (!this.getMicro() && this.canMeasure) { this.expandedWidth = details.width; } }, privates: { defaultListWidth: 200, expandedWidth: null } }); /** * @class Ext.sparkline.Base */ Ext.define('Ext.override.sparkline.Base', { override: 'Ext.sparkline.Base', statics: { constructTip: function() { // eslint-disable-next-line dot-notation return new Ext.tip['ToolTip']({ id: 'sparklines-tooltip', showDelay: 0, dismissDelay: 0, hideDelay: 400 }); } }, onMouseMove: function(e) { this.getSharedTooltip().triggerEvent = e; this.callParent([ e ]); }, onMouseLeave: function(e) { this.callParent([ e ]); this.getSharedTooltip().target = null; }, privates: { hideTip: function() { var tip = this.getSharedTooltip(); tip.target = null; tip.hide(); }, showTip: function() { var tip = this.getSharedTooltip(); tip.target = this.el; tip.onTargetOver(tip.triggerEvent); } } }, function(Cls) { // If we are on a VML platform (IE8 - TODO: remove this when that retires)... if (!Ext.supports.Canvas) { Cls.prototype.element = { tag: 'span', reference: 'element', listeners: { mouseenter: 'onMouseEnter', mouseleave: 'onMouseLeave', mousemove: 'onMouseMove' }, style: { display: 'inline-block', position: 'relative', overflow: 'hidden', margin: '0px', padding: '0px', verticalAlign: 'top', cursor: 'default' }, children: [ { tag: 'svml:group', reference: 'groupEl', coordorigin: '0 0', coordsize: '0 0', style: 'position:absolute;width:0;height:0;pointer-events:none' } ] }; } }); /** * @class Ext.app.ViewController */ /** * @method beforeRender * @template * Template method called by the owning component's * {@link Ext.Component#method-beforeRender beforeRender} method. * @param {Ext.Component} component The owner component attached to the * ViewController */ /** * @method afterRender * @template * Template method called by the owning component's * {@link Ext.Component#method-afterRender afterRender} method. * @param {Ext.Component} component The owner component attached to the * ViewController */ /** * @method boxReady * @template * Template method called by the owning component's * {@link Ext.Component#method-onBoxReady onBoxReady} method. * @param {Ext.Component} component The owner component attached to the * ViewController */ /** * @class Ext.form.field.Checkbox */ Ext.define(null, { override: 'Ext.form.field.Checkbox', compatibility: Ext.isIE8, // IE8 does not support change event but it has propertychange which is even better changeEventName: 'propertychange', onChangeEvent: function(e) { // IE8 propertychange fires for *any* property change but we're only interested in checked // We also don't want to react to propertychange fired as the result of assigning // checked property in setRawValue(). if (this.duringSetRawValue || e.browserEvent.propertyName !== 'checked') { return; } this.callParent([ e ]); }, updateCheckedCls: function(checked) { var me = this, displayEl = me.displayEl; me.callParent([ checked ]); // IE8 has a bug with font icons and pseudo-elements if (displayEl && checked !== me.lastValue) { displayEl.repaint(); } } }); /** * @class Ext.form.field.Radio */ Ext.define(null, { override: 'Ext.form.field.Radio', compatibility: Ext.isIE8, getSubTplData: function(fieldData) { var data = this.callParent([ fieldData ]); // Rendering a radio button with checked attribute // will have a curious side effect in IE8: the DOM // node will have checked property set to `true` but // radio group (radios with the same name attribute) // will behave as if no radio is checked in the group; // tabbing into the group will select first or last // button instead of the checked one. // So instead of rendering the attribute we will set // checked value in the DOM after rendering. Apparently // such a tiny nudge is enough for the browser to behave. delete data.checked; return data; }, afterRender: function() { this.callParent(); if (this.checked) { this.inputEl.dom.checked = true; } }, onChange: function(newValue, oldValue) { // We don't need to bother updating other radio buttons in IE8 // since it will fire propertychange event on any change, not only false -> true. // This is unlike standard compliant browsers, see main class. this.callSuper([ newValue, oldValue ]); } }); /** * @class Ext.scroll.Scroller */ Ext.define(null, { override: 'Ext.scroll.Scroller', compatibility: Ext.isIE8, privates: { // Important note: this code had to be copied as a whole // because the scrollLeft assignment trickery only works // reliably when it is done within the same function context. doScrollTo: function(x, y, animate) { var me = this, element = me.getScrollElement(), maxPosition, dom, to, xInf, yInf, ret, deferred, callback; if (element && !element.destroyed) { dom = element.dom; xInf = (x === Infinity); yInf = (y === Infinity); if (xInf || yInf) { maxPosition = me.getMaxPosition(); if (xInf) { x = maxPosition.x; } if (yInf) { y = maxPosition.y; } } if (x !== null) { x = me.convertX(x); } if (animate) { to = {}; if (y != null) { to.scrollTop = y; } if (x != null) { to.scrollLeft = x; } animate = Ext.mergeIf({ to: { scrollTop: y, scrollLeft: x } }, animate); deferred = new Ext.Deferred(); callback = animate.callback; animate.callback = function() { if (callback) { callback.call(animate.scope || Ext.global, arguments); } // The callback will be called if the element is destroyed if (me.destroyed) { deferred.reject(); } else { deferred.resolve(); } }; element.animate(animate); ret = deferred.promise; } else { // When we need to assign both scrollTop and scrollLeft, // IE8 might fire scroll event on the first assignment // but not on the second; that behavior is unlike the other // browsers which will wait for the second assignment // to happen before firing the event. This leads to our // scrollstart event firing prematurely, when the scrolling // has not actually finished yet. // To work around that, we ignore the first event and then // force another one by assigning scrollLeft the second time. if ((x != null && x !== 0) && y != null) { me.deferDomScroll = true; } if (y != null) { dom.scrollTop = y; } if (x != null) { dom.scrollLeft = x; } if (me.deferDomScroll) { me.deferDomScroll = false; // Reading the DOM makes sure the second assignment will fire the event. // eslint-disable-next-line no-unused-expressions +dom.scrollLeft; dom.scrollLeft = x; // eslint-disable-next-line no-unused-expressions +dom.scrollTop; dom.scrollTop = y; } ret = Ext.Deferred.getCachedResolved(); } // Our position object will need refreshing before returning. me.positionDirty = true; } else { ret = Ext.Deferred.getCachedRejected(); } return ret; }, onDomScroll: function() { var me = this; if (me.deferDomScroll) { return; } me.callParent(); } } });