@qooxdoo/framework 7.9.2 → 8.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +191 -33
- package/Manifest.json +3 -3
- package/bin/tools/utils.js +50 -13
- package/lib/compiler/compile-info.json +300 -230
- package/lib/compiler/index.js +56748 -44036
- package/lib/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-node.tmpl.js +1 -0
- package/lib/resource/qx/tool/compiler/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +1 -0
- package/{source/resource/qx/tool → lib/resource/qx/tool/compiler}/cli/templates/template_vars.js +12 -9
- package/{source/resource/qx/tool → lib/resource/qx/tool/compiler}/schema/Manifest-1-0-0.json +2 -2
- package/lib/resource/qx/tool/{schema → compiler/schema}/Manifest-2-0-0.json +2 -2
- package/lib/resource/qx/tool/{schema → compiler/schema}/compile-1-0-0.json +15 -3
- package/{source/resource/qx/tool → lib/resource/qx/tool/compiler}/schema/qooxdoo-1-0-0.json +1 -1
- package/lib/resource/qx/tool/website/build/404.html +22 -22
- package/lib/resource/qx/tool/website/build/about.html +23 -23
- package/lib/resource/qx/tool/website/build/assets/common.js +30 -18
- package/lib/resource/qx/tool/website/build/assets/custom.css +290 -0
- package/lib/resource/qx/tool/website/build/assets/qxWeb.js +28 -0
- package/lib/resource/qx/tool/website/build/diagnostics/dependson.html +30 -30
- package/lib/resource/qx/tool/website/build/diagnostics/dependson.js +49 -40
- package/lib/resource/qx/tool/website/build/diagnostics/requiredby.html +20 -23
- package/lib/resource/qx/tool/website/build/diagnostics/requiredby.js +38 -31
- package/lib/resource/qx/tool/website/build/index.html +24 -24
- package/lib/resource/qx/tool/website/build/scripts/serve.js +63 -65
- package/lib/resource/qx/tool/website/partials/footer.html +8 -13
- package/lib/resource/qx/tool/website/partials/head.html +9 -7
- package/lib/resource/qx/tool/website/partials/header.html +3 -3
- package/lib/resource/qx/tool/website/src/assets/common.js +32 -0
- package/lib/resource/qx/tool/website/src/assets/custom.css +290 -0
- package/lib/resource/qx/tool/website/src/assets/qxWeb.js +28 -0
- package/lib/resource/qx/tool/website/src/diagnostics/dependson.js +49 -40
- package/lib/resource/qx/tool/website/src/diagnostics/requiredby.js +38 -31
- package/lib/resource/qx/tool/website/src/index.html +2 -2
- package/lib/resource/qx/tool/website/src/scripts/serve.js +63 -65
- package/package.json +20 -19
- package/source/boot/index.html +2 -2
- package/source/class/qx/Bootstrap.js +931 -705
- package/source/class/qx/Class.js +1476 -1451
- package/source/class/qx/Interface.js +40 -107
- package/source/class/qx/Mixin.js +58 -116
- package/source/class/qx/Promise.js +1 -0
- package/source/class/qx/Theme.js +1 -1
- package/source/class/qx/application/Routing.js +2 -0
- package/source/class/qx/bom/Font.js +3 -0
- package/source/class/qx/bom/client/Locale.js +5 -0
- package/source/class/qx/bom/request/Jsonp.js +5 -13
- package/source/class/qx/bom/request/Script.js +11 -35
- package/source/class/qx/bom/request/SimpleXhr.js +13 -41
- package/source/class/qx/bom/request/Xhr.js +19 -80
- package/source/class/qx/bom/storage/Memory.js +2 -0
- package/source/class/qx/bom/storage/UserData.js +2 -0
- package/source/class/qx/bom/storage/Web.js +2 -0
- package/source/class/qx/bom/webfonts/Validator.js +13 -5
- package/source/class/qx/core/Assert.js +14 -0
- package/source/class/qx/core/BaseInit.js +19 -20
- package/source/class/qx/core/Environment.js +23 -20
- package/source/class/qx/core/MEvent.js +1 -1
- package/source/class/qx/core/MObjectId.js +8 -6
- package/source/class/qx/core/MProperty.js +172 -136
- package/source/class/qx/core/Object.js +88 -102
- package/source/class/qx/core/check/AbstractCheck.js +111 -0
- package/source/class/qx/core/check/Any.js +63 -0
- package/source/class/qx/core/check/CheckFactory.js +151 -0
- package/source/class/qx/core/check/DynamicTypeCheck.js +90 -0
- package/source/class/qx/core/check/ICheck.js +75 -0
- package/source/class/qx/core/check/IsOneOfCheck.js +63 -0
- package/source/class/qx/core/check/JsDocCheck.js +71 -0
- package/source/class/qx/core/check/SimpleCheck.js +42 -0
- package/source/class/qx/core/check/standard/ArrayCheck.js +49 -0
- package/source/class/qx/core/check/standard/BooleanCheck.js +47 -0
- package/source/class/qx/core/check/standard/ClassCheck.js +33 -0
- package/source/class/qx/core/check/standard/ColorCheck.js +33 -0
- package/source/class/qx/core/check/standard/DateCheck.js +49 -0
- package/source/class/qx/core/check/standard/DecoratorCheck.js +33 -0
- package/source/class/qx/core/check/standard/DocumentCheck.js +40 -0
- package/source/class/qx/core/check/standard/ElementCheck.js +40 -0
- package/source/class/qx/core/check/standard/ErrorCheck.js +46 -0
- package/source/class/qx/core/check/standard/EventCheck.js +40 -0
- package/source/class/qx/core/check/standard/FontCheck.js +33 -0
- package/source/class/qx/core/check/standard/FunctionCheck.js +49 -0
- package/source/class/qx/core/check/standard/IntegerCheck.js +54 -0
- package/source/class/qx/core/check/standard/InterfaceCheck.js +33 -0
- package/source/class/qx/core/check/standard/MapCheck.js +33 -0
- package/source/class/qx/core/check/standard/MixinCheck.js +33 -0
- package/source/class/qx/core/check/standard/NodeCheck.js +40 -0
- package/source/class/qx/core/check/standard/NumberCheck.js +48 -0
- package/source/class/qx/core/check/standard/ObjectCheck.js +33 -0
- package/source/class/qx/core/check/standard/PositiveIntegerCheck.js +45 -0
- package/source/class/qx/core/check/standard/PositiveNumberCheck.js +45 -0
- package/source/class/qx/core/check/standard/PromiseCheck.js +33 -0
- package/source/class/qx/core/check/standard/RegExpCheck.js +46 -0
- package/source/class/qx/core/check/standard/StringCheck.js +43 -0
- package/source/class/qx/core/check/standard/ThemeCheck.js +33 -0
- package/source/class/qx/core/check/standard/WindowCheck.js +40 -0
- package/source/class/qx/core/property/ExplicitPropertyStorage.js +87 -0
- package/source/class/qx/core/property/GroupProperty.js +262 -0
- package/source/class/qx/core/property/IProperty.js +46 -0
- package/source/class/qx/core/property/IPropertyStorage.js +83 -0
- package/source/class/qx/core/property/ImmutableArrayStorage.js +38 -0
- package/source/class/qx/core/property/ImmutableDataArrayStorage.js +38 -0
- package/source/class/qx/core/property/ImmutableObjectStorage.js +39 -0
- package/source/class/qx/core/property/Property.js +1481 -0
- package/source/class/qx/core/property/PropertyStorageFactory.js +22 -0
- package/source/class/qx/core/property/SimplePropertyStorage.js +105 -0
- package/source/class/qx/data/Array.js +102 -57
- package/source/class/qx/data/MBinding.js +4 -29
- package/source/class/qx/data/SingleValueBinding.js +596 -1495
- package/source/class/qx/data/binding/AbstractSegment.js +197 -0
- package/source/class/qx/data/binding/ArrayIndexSegment.js +148 -0
- package/source/class/qx/data/binding/IInputReceiver.js +14 -0
- package/source/class/qx/data/binding/PropNameSegment.js +150 -0
- package/source/class/qx/data/controller/CheckedList.js +1 -1
- package/source/class/qx/data/controller/Form.js +78 -8
- package/source/class/qx/data/controller/Tree.js +27 -117
- package/source/class/qx/data/marshal/Json.js +46 -149
- package/source/class/qx/data/store/Json.js +0 -2
- package/source/class/qx/dev/Debug.js +1 -1
- package/source/class/qx/dev/LeakDetector.js +144 -0
- package/source/class/qx/dev/unit/AsyncWrapper.js +1 -0
- package/source/class/qx/dev/unit/MMock.js +7 -2
- package/source/class/qx/dev/unit/Sinon.js +0 -4
- package/source/class/qx/dev/unit/TestClass.js +2 -2
- package/source/class/qx/dev/unit/TestFunction.js +1 -0
- package/source/class/qx/dev/unit/TestLoaderBasic.js +1 -0
- package/source/class/qx/dev/unit/TestRunner.js +106 -0
- package/source/class/qx/event/IEventDispatcher.js +8 -4
- package/source/class/qx/event/Manager.js +4 -0
- package/source/class/qx/event/Messaging.js +2 -0
- package/source/class/qx/event/Pool.js +7 -0
- package/source/class/qx/event/Registration.js +33 -55
- package/source/class/qx/event/Timer.js +2 -0
- package/source/class/qx/event/Utils.js +25 -8
- package/source/class/qx/event/dispatch/AbstractBubbling.js +98 -194
- package/source/class/qx/event/dispatch/Direct.js +18 -13
- package/source/class/qx/event/handler/Appear.js +20 -24
- package/source/class/qx/event/handler/Application.js +4 -0
- package/source/class/qx/event/handler/DragDrop.js +182 -385
- package/source/class/qx/event/handler/Element.js +3 -0
- package/source/class/qx/event/handler/Focus.js +36 -30
- package/source/class/qx/event/handler/Input.js +5 -0
- package/source/class/qx/event/handler/Keyboard.js +107 -165
- package/source/class/qx/event/handler/Pointer.js +39 -68
- package/source/class/qx/event/handler/PointerCore.js +7 -25
- package/source/class/qx/event/handler/Window.js +5 -0
- package/source/class/qx/event/type/Event.js +12 -0
- package/source/class/qx/event/type/KeySequence.js +3 -0
- package/source/class/qx/event/type/Native.js +3 -0
- package/source/class/qx/html/Element.js +26 -91
- package/source/class/qx/io/jsonrpc/Client.js +1 -1
- package/source/class/qx/io/jsonrpc/protocol/Error.js +2 -2
- package/source/class/qx/io/jsonrpc/protocol/Parser.js +1 -0
- package/source/class/qx/io/jsonrpc/protocol/Result.js +2 -2
- package/source/class/qx/io/request/Xhr.js +3 -8
- package/source/class/qx/lang/normalize/Array.js +23 -1
- package/source/class/qx/locale/Date.js +520 -113
- package/source/class/qx/locale/LocalizedString.js +3 -0
- package/source/class/qx/locale/Manager.js +14 -3
- package/source/class/qx/locale/Number.js +60 -7
- package/source/class/qx/log/Logger.js +1 -1
- package/source/class/qx/module/Animation.js +2 -0
- package/source/class/qx/module/Attribute.js +2 -0
- package/source/class/qx/module/Css.js +7 -24
- package/source/class/qx/module/Event.js +2 -0
- package/source/class/qx/module/Manipulating.js +2 -0
- package/source/class/qx/module/Traversing.js +2 -0
- package/source/class/qx/test/Bootstrap.js +68 -53
- package/source/class/qx/test/Class.js +310 -2
- package/source/class/qx/test/Mixin.js +192 -42
- package/source/class/qx/test/Promise.js +129 -331
- package/source/class/qx/test/Theme.js +11 -0
- package/source/class/qx/test/bom/Font.js +2 -5
- package/source/class/qx/test/bom/Template.js +1 -1
- package/source/class/qx/test/compiler/ClassFile.js +14 -0
- package/source/class/qx/test/core/Assert.js +12 -0
- package/source/class/qx/test/core/Environment.js +17 -3
- package/source/class/qx/test/core/InheritanceDummy.js +10 -1
- package/source/class/qx/test/core/Object.js +51 -24
- package/source/class/qx/test/core/ObjectId.js +10 -1
- package/source/class/qx/test/core/Property.js +1338 -121
- package/source/class/qx/test/core/PropertyHelper.js +12 -0
- package/source/class/qx/test/core/Target.js +1 -0
- package/source/class/qx/test/core/Validation.js +2 -0
- package/source/class/qx/test/data/DataArray.js +218 -639
- package/source/class/qx/test/data/DataArrayWithChangeBubble.js +45 -215
- package/source/class/qx/test/data/MultiBinding.js +42 -0
- package/source/class/qx/test/data/async/__init__.js +4 -0
- package/source/class/qx/test/data/controller/Form.js +523 -14
- package/source/class/qx/test/data/controller/List.js +94 -426
- package/source/class/qx/test/data/controller/ListReverse.js +5 -20
- package/source/class/qx/test/data/controller/ListWithObjects.js +49 -225
- package/source/class/qx/test/data/controller/Object.js +54 -222
- package/source/class/qx/test/data/controller/Tree.js +195 -934
- package/source/class/qx/test/data/marshal/Json.js +74 -312
- package/source/class/qx/test/data/singlevalue/Array.js +55 -279
- package/source/class/qx/test/data/singlevalue/Async.js +173 -0
- package/source/class/qx/test/data/singlevalue/Deep.js +148 -327
- package/source/class/qx/test/data/singlevalue/Resolve.js +8 -28
- package/source/class/qx/test/data/singlevalue/Simple.js +124 -359
- package/source/class/qx/test/data/store/Json.js +86 -254
- package/source/class/qx/test/data/store/Jsonp.js +9 -29
- package/source/class/qx/test/data/store/Offline.js +2 -8
- package/source/class/qx/test/data/store/Rest.js +3 -3
- package/source/class/qx/test/dev/unit/Requirements.js +26 -10
- package/source/class/qx/test/event/GlobalError.js +2 -2
- package/source/class/qx/test/html/Iframe.js +1 -1
- package/source/class/qx/test/io/graphql/Client.js +2 -0
- package/source/class/qx/test/io/jsonrpc/Protocol.js +4 -2
- package/source/class/qx/test/io/request/MRequest.js +2 -8
- package/source/class/qx/test/io/request/Xhr.js +27 -117
- package/source/class/qx/test/lang/Function.js +6 -25
- package/source/class/qx/test/lang/Type.js +31 -13
- package/source/class/qx/test/locale/Date.js +173 -2
- package/source/class/qx/test/locale/Locale.js +23 -28
- package/source/class/qx/test/locale/Number.js +71 -0
- package/source/class/qx/test/log/Logger.js +7 -1
- package/source/class/qx/test/log/fixture/ClassA.js +2 -5
- package/source/class/qx/test/mobile/basic/Atom.js +3 -3
- package/source/class/qx/test/mobile/container/Scroll.js +4 -4
- package/source/class/qx/test/mobile/form/CheckBox.js +6 -12
- package/source/class/qx/test/performance/Property.js +5 -4
- package/source/class/qx/test/performance/widget/WidgetWithDecorator.js +2 -0
- package/source/class/qx/test/theme/Simple.js +34 -0
- package/source/class/qx/test/{MAppearance.js → theme/SimpleAppearance.js} +5 -4
- package/source/class/qx/test/{MDecoration.js → theme/SimpleDecoration.js} +6 -4
- package/source/class/qx/test/theme/manager/Meta.js +7 -5
- package/source/class/qx/test/tool/__init__.js +3 -0
- package/source/class/qx/test/tool/cli/AbstractValue.js +274 -0
- package/source/class/qx/test/tool/cli/Argument.js +384 -0
- package/source/class/qx/test/tool/cli/Command.js +387 -0
- package/source/class/qx/test/tool/cli/Flag.js +413 -0
- package/source/class/qx/test/tool/cli/__init__.js +3 -0
- package/source/class/qx/test/ui/LayoutTestCase.js +1 -14
- package/source/class/qx/test/ui/basic/Label.js +106 -0
- package/source/class/qx/test/ui/core/Blocker.js +125 -3
- package/source/class/qx/test/ui/form/Form.js +106 -0
- package/source/class/qx/test/ui/form/FormManager.js +6 -5
- package/source/class/qx/test/ui/form/SplitButton.js +1 -1
- package/source/class/qx/test/ui/toolbar/OverflowHandling.js +13 -14
- package/source/class/qx/test/ui/toolbar/ToolBar.js +16 -16
- package/source/class/qx/test/ui/tree/TreeFolder.js +5 -7
- package/source/class/qx/test/ui/tree/virtual/AbstractTreeTest.js +2 -0
- package/source/class/qx/test/ui/tree/virtual/Tree.js +36 -0
- package/source/class/qx/test/util/DateFormat.js +1 -1
- package/source/class/qx/test/util/PropertyUtil.js +0 -36
- package/source/class/qx/theme/classic/Appearance.js +1 -1
- package/source/class/qx/theme/indigo/ColorDark.js +2 -0
- package/source/class/qx/theme/manager/Font.js +6 -1
- package/source/class/qx/theme/manager/Meta.js +2 -1
- package/source/class/qx/theme/simple/Appearance.js +31 -95
- package/source/class/qx/theme/simple/Decoration.js +0 -1
- package/source/class/qx/theme/tangible/Appearance.js +1 -1
- package/source/class/qx/tool/cli/AbstractCliApp.js +72 -0
- package/source/class/qx/tool/cli/AbstractValue.js +186 -0
- package/source/class/qx/tool/cli/Argument.js +155 -0
- package/source/class/qx/tool/cli/Command.js +518 -0
- package/source/class/qx/tool/cli/Flag.js +202 -0
- package/source/class/qx/tool/cli/Parser.js +39 -0
- package/source/class/qx/tool/cli/__init__.js +26 -1
- package/source/class/qx/tool/compiler/Analyser.js +41 -13
- package/source/class/qx/tool/compiler/ClassFile.js +37 -9
- package/source/class/qx/tool/compiler/Console.js +2 -0
- package/source/class/qx/tool/compiler/MetaExtraction.js +53 -33
- package/source/class/qx/tool/compiler/app/Library.js +1 -1
- package/source/class/qx/tool/compiler/app/WebFont.js +2 -0
- package/source/class/qx/tool/compiler/cli/Application.js +58 -0
- package/source/class/qx/tool/{cli/commands → compiler/cli}/Command.js +99 -45
- package/source/class/qx/tool/{cli → compiler/cli}/ConfigDb.js +7 -7
- package/source/class/qx/tool/compiler/cli/ConfigLoader.js +272 -0
- package/source/class/qx/tool/{cli → compiler/cli}/LibraryApplication.js +3 -3
- package/source/class/qx/tool/compiler/cli/RootCommand.js +63 -0
- package/source/class/qx/tool/{cli → compiler/cli}/Watch.js +49 -24
- package/source/class/qx/tool/compiler/cli/__init__.js +3 -0
- package/source/class/qx/tool/{cli → compiler/cli}/api/AbstractApi.js +2 -11
- package/source/class/qx/tool/{cli → compiler/cli}/api/CompilerApi.js +11 -10
- package/source/class/qx/tool/{cli → compiler/cli}/api/LibraryApi.js +13 -4
- package/source/class/qx/tool/{cli → compiler/cli}/api/Test.js +1 -1
- package/source/class/qx/tool/compiler/cli/commands/Add.js +49 -0
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Clean.js +12 -25
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Compile.js +524 -615
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Config.js +22 -20
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Create.js +77 -54
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Deploy.js +45 -60
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Es6ify.js +57 -41
- package/source/class/qx/tool/{cli → compiler/cli}/commands/ExportGlyphs.js +26 -7
- package/source/class/qx/tool/compiler/cli/commands/Lint.js +420 -0
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Migrate.js +40 -20
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Package.js +20 -32
- package/source/class/qx/tool/compiler/cli/commands/Pkg.js +36 -0
- package/source/class/qx/tool/compiler/cli/commands/Prettier.js +278 -0
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Run.js +43 -39
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Serve.js +63 -61
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Test.js +49 -52
- package/source/class/qx/tool/{cli → compiler/cli}/commands/Typescript.js +51 -30
- package/source/class/qx/tool/{cli → compiler/cli}/commands/add/Class.js +54 -31
- package/source/class/qx/tool/{cli → compiler/cli}/commands/add/Script.js +56 -32
- package/source/class/qx/tool/{cli → compiler/cli}/commands/config/Delete.js +19 -13
- package/source/class/qx/tool/{cli → compiler/cli}/commands/config/Get.js +19 -13
- package/source/class/qx/tool/{cli → compiler/cli}/commands/config/List.js +20 -20
- package/source/class/qx/tool/{cli → compiler/cli}/commands/config/Set.js +28 -20
- package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Install.js +140 -75
- package/source/class/qx/tool/{cli → compiler/cli}/commands/package/List.js +119 -80
- package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Publish.js +194 -178
- package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Remove.js +18 -21
- package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Update.js +90 -69
- package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Upgrade.js +67 -54
- package/source/class/qx/tool/compiler/makers/AbstractAppMaker.js +2 -1
- package/source/class/qx/tool/compiler/resources/Manager.js +2 -0
- package/source/class/qx/tool/compiler/resources/ScssConverter.js +1 -1
- package/source/class/qx/tool/compiler/resources/ScssFile.js +1 -1
- package/source/class/qx/tool/compiler/targets/Target.js +5 -10
- package/source/class/qx/tool/compiler/targets/TypeScriptWriter.js +6 -2
- package/source/class/qx/tool/compiler/targets/meta/ApplicationMeta.js +2 -4
- package/source/class/qx/tool/compiler/targets/meta/BootJs.js +2 -0
- package/source/class/qx/tool/compiler/targets/meta/PackageJavascript.js +2 -0
- package/source/class/qx/tool/config/Abstract.js +5 -5
- package/source/class/qx/tool/config/Lockfile.js +1 -1
- package/source/class/qx/tool/migration/BaseMigration.js +9 -7
- package/source/class/qx/tool/migration/M6_0_0.js +3 -3
- package/source/class/qx/tool/migration/M8_0_0.js +958 -0
- package/source/class/qx/tool/utils/Debounce.js +0 -1
- package/source/class/qx/tool/utils/Http.js +109 -21
- package/source/class/qx/tool/utils/LogManager.js +7 -0
- package/source/class/qx/tool/utils/Promisify.js +12 -1
- package/source/class/qx/tool/utils/QooxdooVersions.js +193 -0
- package/source/class/qx/tool/utils/Utils.js +8 -5
- package/source/class/qx/tool/utils/Website.js +9 -222
- package/source/class/qx/tool/utils/Zip.js +47 -0
- package/source/class/qx/tool/utils/files/Utils.js +3 -11
- package/source/class/qx/tool/utils/json/Tokenizer.js +5 -0
- package/source/class/qx/ui/basic/Atom.js +8 -8
- package/source/class/qx/ui/core/Blocker.js +17 -4
- package/source/class/qx/ui/core/DragDropCursor.js +2 -1
- package/source/class/qx/ui/core/EventHandler.js +13 -21
- package/source/class/qx/ui/core/LayoutItem.js +8 -31
- package/source/class/qx/ui/core/MExecutable.js +7 -31
- package/source/class/qx/ui/core/MNativeOverflow.js +4 -2
- package/source/class/qx/ui/core/Widget.js +50 -165
- package/source/class/qx/ui/core/scroll/IScrollBar.js +9 -3
- package/source/class/qx/ui/core/scroll/ScrollBar.js +7 -1
- package/source/class/qx/ui/core/scroll/ScrollPane.js +12 -4
- package/source/class/qx/ui/embed/Html.js +6 -2
- package/source/class/qx/ui/form/AbstractField.js +4 -12
- package/source/class/qx/ui/form/Button.js +6 -4
- package/source/class/qx/ui/form/CheckedSelectBox.js +8 -8
- package/source/class/qx/ui/form/FileSelectorButton.js +1 -1
- package/source/class/qx/ui/form/Form.js +3 -0
- package/source/class/qx/ui/form/IListItem.js +3 -1
- package/source/class/qx/ui/form/IRadioItem.js +3 -1
- package/source/class/qx/ui/form/MForm.js +3 -1
- package/source/class/qx/ui/form/Slider.js +6 -2
- package/source/class/qx/ui/form/SplitButton.js +5 -5
- package/source/class/qx/ui/form/TextField.js +1 -2
- package/source/class/qx/ui/form/validation/Manager.js +6 -2
- package/source/class/qx/ui/menubar/Button.js +1 -1
- package/source/class/qx/ui/mobile/basic/Atom.js +5 -5
- package/source/class/qx/ui/mobile/dialog/Menu.js +9 -31
- package/source/class/qx/ui/mobile/dialog/Popup.js +13 -1
- package/source/class/qx/ui/table/pane/FocusIndicator.js +5 -2
- package/source/class/qx/ui/table/pane/Scroller.js +5 -20
- package/source/class/qx/ui/table/selection/Model.js +1 -0
- package/source/class/qx/ui/toolbar/Button.js +1 -1
- package/source/class/qx/ui/toolbar/CheckBox.js +1 -1
- package/source/class/qx/ui/toolbar/FileSelectorButton.js +1 -2
- package/source/class/qx/ui/toolbar/Part.js +2 -2
- package/source/class/qx/ui/toolbar/PartContainer.js +2 -2
- package/source/class/qx/ui/toolbar/ToolBar.js +24 -49
- package/source/class/qx/ui/tree/VirtualTree.js +6 -4
- package/source/class/qx/ui/tree/core/AbstractItem.js +10 -17
- package/source/class/qx/ui/tree/core/IVirtualTree.js +4 -2
- package/source/class/qx/ui/tree/provider/IVirtualTreeProvider.js +20 -10
- package/source/class/qx/ui/treevirtual/SimpleTreeDataModel.js +4 -1
- package/source/class/qx/ui/virtual/cell/Cell.js +20 -48
- package/source/class/qx/ui/virtual/cell/WidgetCell.js +2 -4
- package/source/class/qx/ui/virtual/core/Axis.js +4 -0
- package/source/class/qx/ui/virtual/core/ILayer.js +14 -10
- package/source/class/qx/ui/virtual/core/Scroller.js +4 -4
- package/source/class/qx/ui/virtual/layer/WidgetCell.js +4 -0
- package/source/class/qx/ui/virtual/selection/Abstract.js +3 -0
- package/source/class/qx/ui/virtual/selection/MModel.js +1 -1
- package/source/class/qx/ui/window/IDesktop.js +6 -2
- package/source/class/qx/ui/window/IWindowManager.js +10 -4
- package/source/class/qx/ui/window/MDesktop.js +2 -1
- package/source/class/qx/ui/window/Manager.js +1 -1
- package/source/class/qx/ui/window/Window.js +6 -4
- package/source/class/qx/util/OOUtil.js +8 -9
- package/source/class/qx/util/PropertyUtil.js +34 -154
- package/source/class/qx/util/ResponseParser.js +2 -0
- package/source/class/qx/util/Serializer.js +69 -114
- package/source/class/qx/util/format/DateFormat.js +3 -2
- package/source/global.d.ts +4 -0
- package/source/resource/qx/tool/bin/download-assets +0 -2
- package/source/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-node.tmpl.js +1 -0
- package/{lib/resource/qx/tool → source/resource/qx/tool/compiler}/cli/templates/template_vars.js +12 -9
- package/{lib/resource/qx/tool → source/resource/qx/tool/compiler}/schema/Manifest-1-0-0.json +2 -2
- package/source/resource/qx/tool/{schema → compiler/schema}/Manifest-2-0-0.json +2 -2
- package/source/resource/qx/tool/{schema → compiler/schema}/compile-1-0-0.json +15 -3
- package/{lib/resource/qx/tool → source/resource/qx/tool/compiler}/schema/qooxdoo-1-0-0.json +1 -1
- package/source/resource/qx/tool/website/build/404.html +22 -22
- package/source/resource/qx/tool/website/build/about.html +23 -23
- package/source/resource/qx/tool/website/build/assets/common.js +30 -18
- package/source/resource/qx/tool/website/build/assets/custom.css +290 -0
- package/source/resource/qx/tool/website/build/assets/qxWeb.js +28 -0
- package/source/resource/qx/tool/website/build/diagnostics/dependson.html +30 -30
- package/source/resource/qx/tool/website/build/diagnostics/dependson.js +49 -40
- package/source/resource/qx/tool/website/build/diagnostics/requiredby.html +20 -23
- package/source/resource/qx/tool/website/build/diagnostics/requiredby.js +38 -31
- package/source/resource/qx/tool/website/build/index.html +24 -24
- package/source/resource/qx/tool/website/build/scripts/serve.js +63 -65
- package/source/resource/qx/tool/website/partials/footer.html +8 -13
- package/source/resource/qx/tool/website/partials/head.html +9 -7
- package/source/resource/qx/tool/website/partials/header.html +3 -3
- package/source/resource/qx/tool/website/src/assets/common.js +32 -0
- package/source/resource/qx/tool/website/src/assets/custom.css +290 -0
- package/source/resource/qx/tool/website/src/assets/qxWeb.js +28 -0
- package/source/resource/qx/tool/website/src/diagnostics/dependson.js +49 -40
- package/source/resource/qx/tool/website/src/diagnostics/requiredby.js +38 -31
- package/source/resource/qx/tool/website/src/index.html +2 -2
- package/source/resource/qx/tool/website/src/scripts/serve.js +63 -65
- package/lib/resource/qx/tool/bin/build-devtools +0 -13
- package/lib/resource/qx/tool/bin/build-website +0 -15
- package/lib/resource/qx/tool/bin/download-assets +0 -23
- package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +0 -1
- package/lib/resource/qx/tool/website/build/assets/bootstrap.css +0 -7
- package/lib/resource/qx/tool/website/build/assets/bootstrap.min.css +0 -7
- package/lib/resource/qx/tool/website/build/assets/bootstrap.min.css.map +0 -1
- package/lib/resource/qx/tool/website/build/assets/jquery.js +0 -5453
- package/lib/resource/qx/tool/website/build/qooxdoo.css +0 -21
- package/lib/resource/qx/tool/website/sass/qooxdoo.css +0 -3
- package/lib/resource/qx/tool/website/sass/qooxdoo.css.map +0 -1
- package/lib/resource/qx/tool/website/src/assets/bootstrap.css +0 -7
- package/lib/resource/qx/tool/website/src/assets/bootstrap.min.css +0 -7
- package/lib/resource/qx/tool/website/src/assets/bootstrap.min.css.map +0 -1
- package/lib/resource/qx/tool/website/src/assets/jquery.js +0 -5453
- package/source/class/qx/core/Property.js +0 -2100
- package/source/class/qx/tool/cli/Application.js +0 -47
- package/source/class/qx/tool/cli/Cli.js +0 -713
- package/source/class/qx/tool/cli/commands/Add.js +0 -46
- package/source/class/qx/tool/cli/commands/Lint.js +0 -255
- package/source/class/qx/tool/cli/commands/Pkg.js +0 -56
- package/source/class/qx/tool/cli/commands/package/Migrate.js +0 -37
- package/source/class/qx/tool/compiler/app/Cldr.js +0 -725
- package/source/resource/qx/tool/bin/build-devtools +0 -13
- package/source/resource/qx/tool/bin/build-website +0 -15
- package/source/resource/qx/tool/website/build/assets/bootstrap.css +0 -7
- package/source/resource/qx/tool/website/build/assets/bootstrap.min.css +0 -7
- package/source/resource/qx/tool/website/build/assets/bootstrap.min.css.map +0 -1
- package/source/resource/qx/tool/website/build/assets/jquery.js +0 -5453
- package/source/resource/qx/tool/website/build/qooxdoo.css +0 -21
- package/source/resource/qx/tool/website/sass/qooxdoo.scss +0 -31
- package/source/resource/qx/tool/website/src/assets/bootstrap.css +0 -7
- package/source/resource/qx/tool/website/src/assets/bootstrap.min.css +0 -7
- package/source/resource/qx/tool/website/src/assets/bootstrap.min.css.map +0 -1
- package/source/resource/qx/tool/website/src/assets/jquery.js +0 -5453
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/TypeScriptWriter-base_declaration.d.ts +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/default.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/header.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/interface.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/mixin.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/singleton.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-browser.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-rhino.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/.gitignore.tmpl +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/Manifest.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/compile.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/readme.tmpl.md +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/index.tmpl.html +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/nojs.tmpl.html +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/Application.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/__init__.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/app.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/favicon.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/js_256x256.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/test.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/translation/readme.txt +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/.gitignore.tmpl +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/Manifest.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/compile.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/readme.tmpl.md +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/index.tmpl.html +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/nojs.tmpl.html +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/Application.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/app.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/favicon.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/js_256x256.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/theme/custom/css/custom.css +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/translation/readme.txt +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/.gitignore.tmpl +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/Manifest.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/compile.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/readme.tmpl.md +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/Button.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/__init__.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/resource/custom/test.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Decoration.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/resource/custom/test.png +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/translation/readme.txt +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/.gitignore.tmpl +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/Manifest.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/compile.tmpl.json +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/readme.tmpl.txt +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/Application.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/__init__.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/resource/custom/.gitignore.tmpl +0 -0
- /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/translation/readme.txt +0 -0
- /package/lib/resource/qx/tool/{loadsass.js → compiler/loadsass.js} +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/TypeScriptWriter-base_declaration.d.ts +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/default.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/header.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/interface.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/mixin.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/singleton.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-browser.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-rhino.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/.gitignore.tmpl +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/Manifest.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/compile.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/readme.tmpl.md +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/index.tmpl.html +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/nojs.tmpl.html +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/Application.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/__init__.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/app.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/favicon.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/js_256x256.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/test.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/translation/readme.txt +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/.gitignore.tmpl +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/Manifest.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/compile.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/readme.tmpl.md +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/index.tmpl.html +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/nojs.tmpl.html +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/Application.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/app.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/favicon.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/js_256x256.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/theme/custom/scss/_styles.scss +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/theme/custom/scss/custom.scss +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/translation/readme.txt +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/.gitignore.tmpl +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/Manifest.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/compile.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/readme.tmpl.md +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/Button.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/__init__.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/resource/custom/test.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Decoration.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/resource/custom/test.png +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/translation/readme.txt +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/.gitignore.tmpl +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/Manifest.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/compile.tmpl.json +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/readme.tmpl.txt +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/Application.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/__init__.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/resource/custom/.gitignore.tmpl +0 -0
- /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/translation/readme.txt +0 -0
- /package/source/resource/qx/tool/{loadsass.js → compiler/loadsass.js} +0 -0
|
@@ -632,16 +632,9 @@ qx.Class.define("qx.test.data.controller.Form", {
|
|
|
632
632
|
testModelCreationWithListController() {
|
|
633
633
|
// create a select box
|
|
634
634
|
var selectBox = new qx.ui.form.SelectBox();
|
|
635
|
-
var listModel = qx.data.marshal.Json.createModel([
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
]);
|
|
639
|
-
|
|
640
|
-
var listController = new qx.data.controller.List(
|
|
641
|
-
listModel,
|
|
642
|
-
selectBox,
|
|
643
|
-
"name"
|
|
644
|
-
);
|
|
635
|
+
var listModel = qx.data.marshal.Json.createModel([{ name: "a" }, { name: "b" }]);
|
|
636
|
+
|
|
637
|
+
var listController = new qx.data.controller.List(listModel, selectBox, "name");
|
|
645
638
|
|
|
646
639
|
// add the selectBox to the form
|
|
647
640
|
this.__form.add(selectBox, "sb");
|
|
@@ -654,6 +647,13 @@ qx.Class.define("qx.test.data.controller.Form", {
|
|
|
654
647
|
var model = c.createModel();
|
|
655
648
|
|
|
656
649
|
// check the init value of the model selection
|
|
650
|
+
|
|
651
|
+
// This test is BROKEN: `model` is based on the initial values of the
|
|
652
|
+
// form. The listController has nothing to do with the form yet. The
|
|
653
|
+
// initial value will be the first item in the `listModel` list, which
|
|
654
|
+
// is 'a', item 0, not 'b', item 1. This *should* and now does throw
|
|
655
|
+
// an error. The question is, why didn't it throw an error previously?
|
|
656
|
+
// What is causing the difference in behavior?
|
|
657
657
|
this.assertEquals(listModel.getItem(1), model.getSb());
|
|
658
658
|
|
|
659
659
|
// set the selection
|
|
@@ -833,10 +833,7 @@ qx.Class.define("qx.test.data.controller.Form", {
|
|
|
833
833
|
this.__model.setTf2("b");
|
|
834
834
|
|
|
835
835
|
// check the binding
|
|
836
|
-
this.assertEquals(
|
|
837
|
-
this.__tf1.getValue(),
|
|
838
|
-
this.__model.getTf1().substring(1)
|
|
839
|
-
);
|
|
836
|
+
this.assertEquals(this.__tf1.getValue(), this.__model.getTf1().substring(1));
|
|
840
837
|
|
|
841
838
|
this.assertEquals(this.__tf2.getValue(), this.__model.getTf2());
|
|
842
839
|
|
|
@@ -871,6 +868,7 @@ qx.Class.define("qx.test.data.controller.Form", {
|
|
|
871
868
|
|
|
872
869
|
// select the first item
|
|
873
870
|
var listItems = list.getSelectables();
|
|
871
|
+
formController.setModel(listItems[0].getModel());
|
|
874
872
|
list.setSelection([listItems[0]]);
|
|
875
873
|
|
|
876
874
|
// check if the model is still the same
|
|
@@ -949,6 +947,517 @@ qx.Class.define("qx.test.data.controller.Form", {
|
|
|
949
947
|
// destroy the objects
|
|
950
948
|
tf.destroy();
|
|
951
949
|
c.dispose();
|
|
950
|
+
},
|
|
951
|
+
|
|
952
|
+
testCamelCaseConversion() {
|
|
953
|
+
// Test for issue #10808: Verify camelCase conversion works correctly
|
|
954
|
+
// v8's binding system requires lowercase-first property names
|
|
955
|
+
this.__form.dispose();
|
|
956
|
+
this.__form = new qx.ui.form.Form();
|
|
957
|
+
|
|
958
|
+
var usernameField = new qx.ui.form.TextField();
|
|
959
|
+
var emailField = new qx.ui.form.TextField();
|
|
960
|
+
var passwordField = new qx.ui.form.PasswordField();
|
|
961
|
+
|
|
962
|
+
// Add fields with capitalized names
|
|
963
|
+
this.__form.add(usernameField, "Username", null, "Username");
|
|
964
|
+
this.__form.add(emailField, "Email", null, "EmailAddress");
|
|
965
|
+
this.__form.add(passwordField, "Password", null, "PassWord");
|
|
966
|
+
|
|
967
|
+
// Create controller and model
|
|
968
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
969
|
+
var model = c.createModel();
|
|
970
|
+
|
|
971
|
+
// WITH conversion: property names should be camelCase (lowercase first letter)
|
|
972
|
+
this.assertFunction(model.getUsername, "getUsername() should exist (camelCase)");
|
|
973
|
+
this.assertFunction(model.getEmailAddress, "getEmailAddress() should exist (camelCase)");
|
|
974
|
+
this.assertFunction(model.getPassWord, "getPassWord() should exist (camelCase)");
|
|
975
|
+
|
|
976
|
+
// Test data binding: set values via model (using camelCase)
|
|
977
|
+
model.setUsername("testuser");
|
|
978
|
+
model.setEmailAddress("test@example.com");
|
|
979
|
+
model.setPassWord("secret123");
|
|
980
|
+
|
|
981
|
+
// Verify values are bound to form fields
|
|
982
|
+
this.assertEquals("testuser", usernameField.getValue());
|
|
983
|
+
this.assertEquals("test@example.com", emailField.getValue());
|
|
984
|
+
this.assertEquals("secret123", passwordField.getValue());
|
|
985
|
+
|
|
986
|
+
// Test reverse binding: set values in form
|
|
987
|
+
usernameField.setValue("newuser");
|
|
988
|
+
emailField.setValue("new@example.com");
|
|
989
|
+
passwordField.setValue("newpass");
|
|
990
|
+
|
|
991
|
+
// Verify values are reflected in model (camelCase properties)
|
|
992
|
+
this.assertEquals("newuser", model.getUsername());
|
|
993
|
+
this.assertEquals("new@example.com", model.getEmailAddress());
|
|
994
|
+
this.assertEquals("newpass", model.getPassWord());
|
|
995
|
+
|
|
996
|
+
// Cleanup
|
|
997
|
+
usernameField.dispose();
|
|
998
|
+
emailField.dispose();
|
|
999
|
+
passwordField.dispose();
|
|
1000
|
+
c.dispose();
|
|
1001
|
+
model.dispose();
|
|
1002
|
+
},
|
|
1003
|
+
|
|
1004
|
+
testGetItemAfterCamelCaseConversion() {
|
|
1005
|
+
// Test for issue #10808 (goldim's concern): getItem() should work with original name
|
|
1006
|
+
this.__form.dispose();
|
|
1007
|
+
this.__form = new qx.ui.form.Form();
|
|
1008
|
+
|
|
1009
|
+
var field = new qx.ui.form.TextField();
|
|
1010
|
+
|
|
1011
|
+
// Add field with explicit capitalized name
|
|
1012
|
+
this.__form.add(field, "My Field", null, "Username");
|
|
1013
|
+
|
|
1014
|
+
// getItem() SHOULD work with the original name provided
|
|
1015
|
+
this.assertIdentical(
|
|
1016
|
+
field,
|
|
1017
|
+
this.__form.getItem("Username"),
|
|
1018
|
+
"getItem() should work with original provided name"
|
|
1019
|
+
);
|
|
1020
|
+
|
|
1021
|
+
// Create model and verify binding works with camelCase
|
|
1022
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1023
|
+
var model = c.createModel();
|
|
1024
|
+
|
|
1025
|
+
// Model SHOULD have camelCase property (for v8 compatibility)
|
|
1026
|
+
this.assertFunction(model.getUsername, "model should have getUsername()");
|
|
1027
|
+
|
|
1028
|
+
// Set value through model
|
|
1029
|
+
model.setUsername("testvalue");
|
|
1030
|
+
this.assertEquals(
|
|
1031
|
+
"testvalue",
|
|
1032
|
+
field.getValue(),
|
|
1033
|
+
"Value should be bound from model to field"
|
|
1034
|
+
);
|
|
1035
|
+
|
|
1036
|
+
// Set value through field
|
|
1037
|
+
field.setValue("fieldvalue");
|
|
1038
|
+
this.assertEquals(
|
|
1039
|
+
"fieldvalue",
|
|
1040
|
+
model.getUsername(),
|
|
1041
|
+
"Value should be bound from field to model"
|
|
1042
|
+
);
|
|
1043
|
+
|
|
1044
|
+
field.dispose();
|
|
1045
|
+
c.dispose();
|
|
1046
|
+
model.dispose();
|
|
1047
|
+
},
|
|
1048
|
+
|
|
1049
|
+
testLabelGeneratedNameNotConverted() {
|
|
1050
|
+
// Test for issue #10808 (goldim's concern): label-based names should NOT be converted
|
|
1051
|
+
this.__form.dispose();
|
|
1052
|
+
this.__form = new qx.ui.form.Form();
|
|
1053
|
+
|
|
1054
|
+
var field1 = new qx.ui.form.TextField();
|
|
1055
|
+
var field2 = new qx.ui.form.TextField();
|
|
1056
|
+
|
|
1057
|
+
// Add fields WITHOUT explicit names - names will be generated from labels
|
|
1058
|
+
this.__form.add(field1, "Username");
|
|
1059
|
+
this.__form.add(field2, "Email Address");
|
|
1060
|
+
|
|
1061
|
+
// Label-generated names should NOT be converted
|
|
1062
|
+
this.assertIdentical(
|
|
1063
|
+
field1,
|
|
1064
|
+
this.__form.getItem("Username"),
|
|
1065
|
+
"getItem() with label-generated name should work"
|
|
1066
|
+
);
|
|
1067
|
+
this.assertIdentical(
|
|
1068
|
+
field2,
|
|
1069
|
+
this.__form.getItem("EmailAddress"),
|
|
1070
|
+
"getItem() with label-generated name (spaces removed) should work"
|
|
1071
|
+
);
|
|
1072
|
+
|
|
1073
|
+
// Create model
|
|
1074
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1075
|
+
var model = c.createModel();
|
|
1076
|
+
|
|
1077
|
+
// Model should have properties matching the label-generated names (NOT converted)
|
|
1078
|
+
this.assertFunction(model.getUsername, "model should have getUsername()");
|
|
1079
|
+
this.assertFunction(
|
|
1080
|
+
model.getEmailAddress,
|
|
1081
|
+
"model should have getEmailAddress()"
|
|
1082
|
+
);
|
|
1083
|
+
|
|
1084
|
+
// Verify binding works with label-generated names
|
|
1085
|
+
model.setUsername("user1");
|
|
1086
|
+
model.setEmailAddress("user@test.com");
|
|
1087
|
+
|
|
1088
|
+
this.assertEquals("user1", field1.getValue());
|
|
1089
|
+
this.assertEquals("user@test.com", field2.getValue());
|
|
1090
|
+
|
|
1091
|
+
field1.dispose();
|
|
1092
|
+
field2.dispose();
|
|
1093
|
+
c.dispose();
|
|
1094
|
+
model.dispose();
|
|
1095
|
+
},
|
|
1096
|
+
|
|
1097
|
+
testMixedExplicitAndLabelGeneratedNames() {
|
|
1098
|
+
// Test combining explicit names and label-generated names
|
|
1099
|
+
this.__form.dispose();
|
|
1100
|
+
this.__form = new qx.ui.form.Form();
|
|
1101
|
+
|
|
1102
|
+
var explicitField = new qx.ui.form.TextField();
|
|
1103
|
+
var labelField = new qx.ui.form.TextField();
|
|
1104
|
+
|
|
1105
|
+
// Explicit name provided (will be converted to camelCase for data binding)
|
|
1106
|
+
this.__form.add(explicitField, "Some Label", null, "FirstName");
|
|
1107
|
+
// Label-generated name (stays as-is)
|
|
1108
|
+
this.__form.add(labelField, "LastName");
|
|
1109
|
+
|
|
1110
|
+
// Both should work with getItem() using their stored names
|
|
1111
|
+
this.assertIdentical(
|
|
1112
|
+
explicitField,
|
|
1113
|
+
this.__form.getItem("FirstName"),
|
|
1114
|
+
"getItem() should work with explicit name"
|
|
1115
|
+
);
|
|
1116
|
+
this.assertIdentical(
|
|
1117
|
+
labelField,
|
|
1118
|
+
this.__form.getItem("LastName"),
|
|
1119
|
+
"getItem() should work with label-generated name"
|
|
1120
|
+
);
|
|
1121
|
+
|
|
1122
|
+
// Create model
|
|
1123
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1124
|
+
var model = c.createModel();
|
|
1125
|
+
|
|
1126
|
+
// Model should have camelCase properties for data binding
|
|
1127
|
+
this.assertFunction(
|
|
1128
|
+
model.getFirstName,
|
|
1129
|
+
"Model should have getFirstName()"
|
|
1130
|
+
);
|
|
1131
|
+
this.assertFunction(
|
|
1132
|
+
model.getLastName,
|
|
1133
|
+
"Model should have getLastName()"
|
|
1134
|
+
);
|
|
1135
|
+
|
|
1136
|
+
// Test binding for both
|
|
1137
|
+
model.setFirstName("John");
|
|
1138
|
+
model.setLastName("Doe");
|
|
1139
|
+
|
|
1140
|
+
this.assertEquals("John", explicitField.getValue());
|
|
1141
|
+
this.assertEquals("Doe", labelField.getValue());
|
|
1142
|
+
|
|
1143
|
+
// Test reverse binding
|
|
1144
|
+
explicitField.setValue("Jane");
|
|
1145
|
+
labelField.setValue("Smith");
|
|
1146
|
+
|
|
1147
|
+
this.assertEquals("Jane", model.getFirstName());
|
|
1148
|
+
this.assertEquals("Smith", model.getLastName());
|
|
1149
|
+
|
|
1150
|
+
explicitField.dispose();
|
|
1151
|
+
labelField.dispose();
|
|
1152
|
+
c.dispose();
|
|
1153
|
+
model.dispose();
|
|
1154
|
+
},
|
|
1155
|
+
|
|
1156
|
+
testCollisionDetection() {
|
|
1157
|
+
// Test for issue #10808: Collision detection with camelCase conversion
|
|
1158
|
+
// "Username" and "username" both convert to "username" - should throw error
|
|
1159
|
+
this.__form.dispose();
|
|
1160
|
+
this.__form = new qx.ui.form.Form();
|
|
1161
|
+
|
|
1162
|
+
var field1 = new qx.ui.form.TextField();
|
|
1163
|
+
var field2 = new qx.ui.form.TextField();
|
|
1164
|
+
|
|
1165
|
+
// Add two fields that differ only in first letter capitalization
|
|
1166
|
+
this.__form.add(field1, "User 1", null, "Username");
|
|
1167
|
+
this.__form.add(field2, "User 2", null, "username");
|
|
1168
|
+
|
|
1169
|
+
// Create controller
|
|
1170
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1171
|
+
|
|
1172
|
+
// WITH conversion: both "Username" and "username" map to "username"
|
|
1173
|
+
// This should throw a collision detection error
|
|
1174
|
+
this.assertException(
|
|
1175
|
+
function () {
|
|
1176
|
+
c.createModel();
|
|
1177
|
+
},
|
|
1178
|
+
Error,
|
|
1179
|
+
/Form field naming collision detected.*issue #10808/,
|
|
1180
|
+
"Should throw collision error when Username and username both exist"
|
|
1181
|
+
);
|
|
1182
|
+
|
|
1183
|
+
// Cleanup
|
|
1184
|
+
field1.dispose();
|
|
1185
|
+
field2.dispose();
|
|
1186
|
+
c.dispose();
|
|
1187
|
+
},
|
|
1188
|
+
|
|
1189
|
+
testDeepBindingConversion() {
|
|
1190
|
+
// Test for issue #10808: Deep binding paths should be converted correctly
|
|
1191
|
+
// "User.Name" → "user.name", "Company.Owner.FirstName" → "company.owner.firstName"
|
|
1192
|
+
this.__form.dispose();
|
|
1193
|
+
this.__form = new qx.ui.form.Form();
|
|
1194
|
+
|
|
1195
|
+
var nameField = new qx.ui.form.TextField();
|
|
1196
|
+
var ownerField = new qx.ui.form.TextField();
|
|
1197
|
+
|
|
1198
|
+
// Add fields with deep binding paths (capitalized)
|
|
1199
|
+
this.__form.add(nameField, "Name", null, "User.Name");
|
|
1200
|
+
this.__form.add(ownerField, "Owner First Name", null, "Company.Owner.FirstName");
|
|
1201
|
+
|
|
1202
|
+
// Create controller and model
|
|
1203
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1204
|
+
var model = c.createModel();
|
|
1205
|
+
|
|
1206
|
+
// Model should have nested structure with camelCase property names
|
|
1207
|
+
this.assertObject(model.getUser(), "Model should have 'user' object");
|
|
1208
|
+
this.assertObject(model.getCompany(), "Model should have 'company' object");
|
|
1209
|
+
this.assertObject(model.getCompany().getOwner(), "Company should have 'owner' object");
|
|
1210
|
+
|
|
1211
|
+
// Set values through model (using camelCase deep paths)
|
|
1212
|
+
model.getUser().setName("John Doe");
|
|
1213
|
+
model.getCompany().getOwner().setFirstName("Jane");
|
|
1214
|
+
|
|
1215
|
+
// Verify values are bound to form fields
|
|
1216
|
+
this.assertEquals("John Doe", nameField.getValue(), "User.Name should be bound");
|
|
1217
|
+
this.assertEquals("Jane", ownerField.getValue(), "Company.Owner.FirstName should be bound");
|
|
1218
|
+
|
|
1219
|
+
// Test reverse binding: set values in form fields
|
|
1220
|
+
nameField.setValue("Bob Smith");
|
|
1221
|
+
ownerField.setValue("Alice");
|
|
1222
|
+
|
|
1223
|
+
// Verify values are reflected in model (camelCase nested properties)
|
|
1224
|
+
this.assertEquals("Bob Smith", model.getUser().getName(), "user.name should be updated");
|
|
1225
|
+
this.assertEquals("Alice", model.getCompany().getOwner().getFirstName(), "company.owner.firstName should be updated");
|
|
1226
|
+
|
|
1227
|
+
// Cleanup
|
|
1228
|
+
nameField.dispose();
|
|
1229
|
+
ownerField.dispose();
|
|
1230
|
+
c.dispose();
|
|
1231
|
+
model.dispose();
|
|
1232
|
+
},
|
|
1233
|
+
|
|
1234
|
+
testUpdateModelWithCamelCaseConversion() {
|
|
1235
|
+
// Test for issue #10808: updateModel() should use camelCase conversion
|
|
1236
|
+
this.__form.dispose();
|
|
1237
|
+
this.__form = new qx.ui.form.Form();
|
|
1238
|
+
|
|
1239
|
+
var usernameField = new qx.ui.form.TextField();
|
|
1240
|
+
var emailField = new qx.ui.form.TextField();
|
|
1241
|
+
|
|
1242
|
+
// Add fields with capitalized names
|
|
1243
|
+
this.__form.add(usernameField, "Username", null, "Username");
|
|
1244
|
+
this.__form.add(emailField, "Email", null, "EmailAddress");
|
|
1245
|
+
|
|
1246
|
+
// Create controller with selfUpdate=true (manual update mode)
|
|
1247
|
+
var c = new qx.data.controller.Form(null, this.__form, true);
|
|
1248
|
+
var model = c.createModel();
|
|
1249
|
+
|
|
1250
|
+
// Initially, model should be empty or have default values
|
|
1251
|
+
this.assertFunction(model.getUsername, "Model should have getUsername()");
|
|
1252
|
+
this.assertFunction(model.getEmailAddress, "Model should have getEmailAddress()");
|
|
1253
|
+
|
|
1254
|
+
// Set values in form fields (but model is NOT auto-updated due to selfUpdate=true)
|
|
1255
|
+
usernameField.setValue("testuser");
|
|
1256
|
+
emailField.setValue("test@example.com");
|
|
1257
|
+
|
|
1258
|
+
// Values should NOT be in model yet (selfUpdate mode)
|
|
1259
|
+
// Note: We can't assert the old values because they might be undefined initially
|
|
1260
|
+
// So we just verify the method exists and then call updateModel
|
|
1261
|
+
|
|
1262
|
+
// Call updateModel() - this should transfer values from form to model using camelCase
|
|
1263
|
+
c.updateModel();
|
|
1264
|
+
|
|
1265
|
+
// Now model should have the values (with camelCase property names)
|
|
1266
|
+
this.assertEquals("testuser", model.getUsername(), "username should be updated via updateModel()");
|
|
1267
|
+
this.assertEquals("test@example.com", model.getEmailAddress(), "emailAddress should be updated via updateModel()");
|
|
1268
|
+
|
|
1269
|
+
// Change values again and update
|
|
1270
|
+
usernameField.setValue("newuser");
|
|
1271
|
+
emailField.setValue("new@example.com");
|
|
1272
|
+
c.updateModel();
|
|
1273
|
+
|
|
1274
|
+
// Verify updated values
|
|
1275
|
+
this.assertEquals("newuser", model.getUsername(), "username should be updated again");
|
|
1276
|
+
this.assertEquals("new@example.com", model.getEmailAddress(), "emailAddress should be updated again");
|
|
1277
|
+
|
|
1278
|
+
// Cleanup
|
|
1279
|
+
usernameField.dispose();
|
|
1280
|
+
emailField.dispose();
|
|
1281
|
+
c.dispose();
|
|
1282
|
+
model.dispose();
|
|
1283
|
+
},
|
|
1284
|
+
|
|
1285
|
+
testAlreadyCamelCaseNames() {
|
|
1286
|
+
// Test for issue #10808: Names already in camelCase should not be broken
|
|
1287
|
+
this.__form.dispose();
|
|
1288
|
+
this.__form = new qx.ui.form.Form();
|
|
1289
|
+
|
|
1290
|
+
var usernameField = new qx.ui.form.TextField();
|
|
1291
|
+
var emailField = new qx.ui.form.TextField();
|
|
1292
|
+
var passwordField = new qx.ui.form.PasswordField();
|
|
1293
|
+
|
|
1294
|
+
// Add fields with names already in camelCase (lowercase first letter)
|
|
1295
|
+
this.__form.add(usernameField, "Username", null, "username");
|
|
1296
|
+
this.__form.add(emailField, "Email", null, "emailAddress");
|
|
1297
|
+
this.__form.add(passwordField, "Password", null, "password");
|
|
1298
|
+
|
|
1299
|
+
// Create controller and model
|
|
1300
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1301
|
+
var model = c.createModel();
|
|
1302
|
+
|
|
1303
|
+
// Model properties should remain unchanged (already camelCase)
|
|
1304
|
+
this.assertFunction(model.getUsername, "getUsername() should exist (unchanged)");
|
|
1305
|
+
this.assertFunction(model.getEmailAddress, "getEmailAddress() should exist (unchanged)");
|
|
1306
|
+
this.assertFunction(model.getPassword, "getPassword() should exist (unchanged)");
|
|
1307
|
+
|
|
1308
|
+
// Test bidirectional binding works correctly
|
|
1309
|
+
model.setUsername("testuser");
|
|
1310
|
+
model.setEmailAddress("test@example.com");
|
|
1311
|
+
model.setPassword("secret");
|
|
1312
|
+
|
|
1313
|
+
this.assertEquals("testuser", usernameField.getValue());
|
|
1314
|
+
this.assertEquals("test@example.com", emailField.getValue());
|
|
1315
|
+
this.assertEquals("secret", passwordField.getValue());
|
|
1316
|
+
|
|
1317
|
+
// Reverse binding
|
|
1318
|
+
usernameField.setValue("newuser");
|
|
1319
|
+
emailField.setValue("new@example.com");
|
|
1320
|
+
passwordField.setValue("newsecret");
|
|
1321
|
+
|
|
1322
|
+
this.assertEquals("newuser", model.getUsername());
|
|
1323
|
+
this.assertEquals("new@example.com", model.getEmailAddress());
|
|
1324
|
+
this.assertEquals("newsecret", model.getPassword());
|
|
1325
|
+
|
|
1326
|
+
// Cleanup
|
|
1327
|
+
usernameField.dispose();
|
|
1328
|
+
emailField.dispose();
|
|
1329
|
+
passwordField.dispose();
|
|
1330
|
+
c.dispose();
|
|
1331
|
+
model.dispose();
|
|
1332
|
+
},
|
|
1333
|
+
|
|
1334
|
+
testMultipleFieldCollisions() {
|
|
1335
|
+
// Test for issue #10808: Multiple fields that collide to same camelCase name
|
|
1336
|
+
this.__form.dispose();
|
|
1337
|
+
this.__form = new qx.ui.form.Form();
|
|
1338
|
+
|
|
1339
|
+
var field1 = new qx.ui.form.TextField();
|
|
1340
|
+
var field2 = new qx.ui.form.TextField();
|
|
1341
|
+
var field3 = new qx.ui.form.TextField();
|
|
1342
|
+
|
|
1343
|
+
// Add fields that all map to "userName" in camelCase
|
|
1344
|
+
this.__form.add(field1, "User 1", null, "UserName");
|
|
1345
|
+
this.__form.add(field2, "User 2", null, "userName"); // This will collide with UserName
|
|
1346
|
+
this.__form.add(field3, "User 3", null, "username"); // This would also collide
|
|
1347
|
+
|
|
1348
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1349
|
+
|
|
1350
|
+
// Should throw error on FIRST collision (UserName vs userName)
|
|
1351
|
+
this.assertException(
|
|
1352
|
+
function () {
|
|
1353
|
+
c.createModel();
|
|
1354
|
+
},
|
|
1355
|
+
Error,
|
|
1356
|
+
/Form field naming collision detected.*issue #10808/,
|
|
1357
|
+
"Should throw collision error for multiple conflicting fields"
|
|
1358
|
+
);
|
|
1359
|
+
|
|
1360
|
+
// Cleanup
|
|
1361
|
+
field1.dispose();
|
|
1362
|
+
field2.dispose();
|
|
1363
|
+
field3.dispose();
|
|
1364
|
+
c.dispose();
|
|
1365
|
+
},
|
|
1366
|
+
|
|
1367
|
+
testAddBindingOptionsWithConversion() {
|
|
1368
|
+
// Test for issue #10808: addBindingOptions should work with camelCase conversion
|
|
1369
|
+
this.__form.dispose();
|
|
1370
|
+
this.__form = new qx.ui.form.Form();
|
|
1371
|
+
|
|
1372
|
+
var numberField = new qx.ui.form.TextField();
|
|
1373
|
+
|
|
1374
|
+
// Add field with capitalized name
|
|
1375
|
+
this.__form.add(numberField, "Age", null, "UserAge");
|
|
1376
|
+
|
|
1377
|
+
// Create controller and model
|
|
1378
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1379
|
+
var model = c.createModel();
|
|
1380
|
+
|
|
1381
|
+
// Add binding options with a converter (string to number)
|
|
1382
|
+
var converterCalled = false;
|
|
1383
|
+
c.addBindingOptions(
|
|
1384
|
+
"UserAge", // Original field name
|
|
1385
|
+
null, // model to target options
|
|
1386
|
+
{
|
|
1387
|
+
converter: function(value) {
|
|
1388
|
+
converterCalled = true;
|
|
1389
|
+
return value ? parseInt(value, 10) : 0;
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
);
|
|
1393
|
+
|
|
1394
|
+
// Set value in field (as string)
|
|
1395
|
+
numberField.setValue("25");
|
|
1396
|
+
|
|
1397
|
+
// Model should have the converted number value
|
|
1398
|
+
// The binding should work with camelCase property name
|
|
1399
|
+
this.assertTrue(converterCalled, "Converter should have been called");
|
|
1400
|
+
this.assertEquals(25, model.getUserAge(), "Model should have converted number value");
|
|
1401
|
+
|
|
1402
|
+
// Test with different value
|
|
1403
|
+
converterCalled = false;
|
|
1404
|
+
numberField.setValue("30");
|
|
1405
|
+
this.assertTrue(converterCalled, "Converter should be called again");
|
|
1406
|
+
this.assertEquals(30, model.getUserAge(), "Model should have new converted value");
|
|
1407
|
+
|
|
1408
|
+
// Cleanup
|
|
1409
|
+
numberField.dispose();
|
|
1410
|
+
c.dispose();
|
|
1411
|
+
model.dispose();
|
|
1412
|
+
},
|
|
1413
|
+
|
|
1414
|
+
testDeepBindingEdgeCases() {
|
|
1415
|
+
// Test for issue #10808: Edge cases for deep binding conversion
|
|
1416
|
+
this.__form.dispose();
|
|
1417
|
+
this.__form = new qx.ui.form.Form();
|
|
1418
|
+
|
|
1419
|
+
var field1 = new qx.ui.form.TextField();
|
|
1420
|
+
var field2 = new qx.ui.form.TextField();
|
|
1421
|
+
var field3 = new qx.ui.form.TextField();
|
|
1422
|
+
|
|
1423
|
+
// Test various edge cases for deep binding
|
|
1424
|
+
this.__form.add(field1, "Name", null, "A.B.C"); // Short parts
|
|
1425
|
+
this.__form.add(field2, "Data", null, "VeryLongName.AnotherLongName.FinalName");
|
|
1426
|
+
this.__form.add(field3, "Single", null, "SingleLevel"); // No dot (not really deep)
|
|
1427
|
+
|
|
1428
|
+
var c = new qx.data.controller.Form(null, this.__form);
|
|
1429
|
+
var model = c.createModel();
|
|
1430
|
+
|
|
1431
|
+
// Verify deep nested structure with camelCase
|
|
1432
|
+
this.assertObject(model.getA(), "Model should have 'a' object");
|
|
1433
|
+
this.assertObject(model.getA().getB(), "a should have 'b' object");
|
|
1434
|
+
this.assertFunction(model.getA().getB().setC, "a.b should have setC method");
|
|
1435
|
+
|
|
1436
|
+
this.assertObject(model.getVeryLongName(), "Model should have 'veryLongName' object");
|
|
1437
|
+
this.assertObject(model.getVeryLongName().getAnotherLongName(), "veryLongName should have 'anotherLongName'");
|
|
1438
|
+
this.assertFunction(
|
|
1439
|
+
model.getVeryLongName().getAnotherLongName().setFinalName,
|
|
1440
|
+
"veryLongName.anotherLongName should have setFinalName"
|
|
1441
|
+
);
|
|
1442
|
+
|
|
1443
|
+
// Single level should work as normal property
|
|
1444
|
+
this.assertFunction(model.setSingleLevel, "Model should have setSingleLevel method");
|
|
1445
|
+
|
|
1446
|
+
// Test binding
|
|
1447
|
+
model.getA().getB().setC("value1");
|
|
1448
|
+
model.getVeryLongName().getAnotherLongName().setFinalName("value2");
|
|
1449
|
+
model.setSingleLevel("value3");
|
|
1450
|
+
|
|
1451
|
+
this.assertEquals("value1", field1.getValue());
|
|
1452
|
+
this.assertEquals("value2", field2.getValue());
|
|
1453
|
+
this.assertEquals("value3", field3.getValue());
|
|
1454
|
+
|
|
1455
|
+
// Cleanup
|
|
1456
|
+
field1.dispose();
|
|
1457
|
+
field2.dispose();
|
|
1458
|
+
field3.dispose();
|
|
1459
|
+
c.dispose();
|
|
1460
|
+
model.dispose();
|
|
952
1461
|
}
|
|
953
1462
|
}
|
|
954
1463
|
});
|