@qooxdoo/framework 7.9.1 → 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.
Files changed (597) hide show
  1. package/CHANGELOG.md +191 -33
  2. package/Manifest.json +3 -3
  3. package/bin/tools/utils.js +50 -13
  4. package/lib/compiler/compile-info.json +295 -225
  5. package/lib/compiler/index.js +56729 -44017
  6. package/lib/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-node.tmpl.js +1 -0
  7. package/lib/resource/qx/tool/compiler/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +1 -0
  8. package/{source/resource/qx/tool → lib/resource/qx/tool/compiler}/cli/templates/template_vars.js +12 -9
  9. package/{source/resource/qx/tool → lib/resource/qx/tool/compiler}/schema/Manifest-1-0-0.json +2 -2
  10. package/lib/resource/qx/tool/{schema → compiler/schema}/Manifest-2-0-0.json +2 -2
  11. package/lib/resource/qx/tool/{schema → compiler/schema}/compile-1-0-0.json +15 -3
  12. package/{source/resource/qx/tool → lib/resource/qx/tool/compiler}/schema/qooxdoo-1-0-0.json +1 -1
  13. package/lib/resource/qx/tool/website/build/404.html +22 -22
  14. package/lib/resource/qx/tool/website/build/about.html +23 -23
  15. package/lib/resource/qx/tool/website/build/assets/common.js +30 -18
  16. package/lib/resource/qx/tool/website/build/assets/custom.css +290 -0
  17. package/lib/resource/qx/tool/website/build/assets/qxWeb.js +28 -0
  18. package/lib/resource/qx/tool/website/build/diagnostics/dependson.html +30 -30
  19. package/lib/resource/qx/tool/website/build/diagnostics/dependson.js +49 -40
  20. package/lib/resource/qx/tool/website/build/diagnostics/requiredby.html +20 -23
  21. package/lib/resource/qx/tool/website/build/diagnostics/requiredby.js +38 -31
  22. package/lib/resource/qx/tool/website/build/index.html +24 -24
  23. package/lib/resource/qx/tool/website/build/scripts/serve.js +63 -65
  24. package/lib/resource/qx/tool/website/partials/footer.html +8 -13
  25. package/lib/resource/qx/tool/website/partials/head.html +9 -7
  26. package/lib/resource/qx/tool/website/partials/header.html +3 -3
  27. package/lib/resource/qx/tool/website/src/assets/common.js +32 -0
  28. package/lib/resource/qx/tool/website/src/assets/custom.css +290 -0
  29. package/lib/resource/qx/tool/website/src/assets/qxWeb.js +28 -0
  30. package/lib/resource/qx/tool/website/src/diagnostics/dependson.js +49 -40
  31. package/lib/resource/qx/tool/website/src/diagnostics/requiredby.js +38 -31
  32. package/lib/resource/qx/tool/website/src/index.html +2 -2
  33. package/lib/resource/qx/tool/website/src/scripts/serve.js +63 -65
  34. package/package.json +20 -19
  35. package/source/boot/index.html +2 -2
  36. package/source/class/qx/Bootstrap.js +931 -705
  37. package/source/class/qx/Class.js +1476 -1451
  38. package/source/class/qx/Interface.js +40 -107
  39. package/source/class/qx/Mixin.js +58 -116
  40. package/source/class/qx/Promise.js +1 -0
  41. package/source/class/qx/Theme.js +1 -1
  42. package/source/class/qx/application/Routing.js +2 -0
  43. package/source/class/qx/bom/Font.js +3 -0
  44. package/source/class/qx/bom/client/Locale.js +5 -0
  45. package/source/class/qx/bom/request/Jsonp.js +5 -13
  46. package/source/class/qx/bom/request/Script.js +11 -35
  47. package/source/class/qx/bom/request/SimpleXhr.js +13 -41
  48. package/source/class/qx/bom/request/Xhr.js +19 -80
  49. package/source/class/qx/bom/storage/Memory.js +2 -0
  50. package/source/class/qx/bom/storage/UserData.js +2 -0
  51. package/source/class/qx/bom/storage/Web.js +2 -0
  52. package/source/class/qx/bom/webfonts/Validator.js +13 -5
  53. package/source/class/qx/core/Assert.js +14 -0
  54. package/source/class/qx/core/BaseInit.js +19 -20
  55. package/source/class/qx/core/Environment.js +23 -20
  56. package/source/class/qx/core/MEvent.js +1 -1
  57. package/source/class/qx/core/MObjectId.js +8 -6
  58. package/source/class/qx/core/MProperty.js +172 -136
  59. package/source/class/qx/core/Object.js +88 -102
  60. package/source/class/qx/core/check/AbstractCheck.js +111 -0
  61. package/source/class/qx/core/check/Any.js +63 -0
  62. package/source/class/qx/core/check/CheckFactory.js +151 -0
  63. package/source/class/qx/core/check/DynamicTypeCheck.js +90 -0
  64. package/source/class/qx/core/check/ICheck.js +75 -0
  65. package/source/class/qx/core/check/IsOneOfCheck.js +63 -0
  66. package/source/class/qx/core/check/JsDocCheck.js +71 -0
  67. package/source/class/qx/core/check/SimpleCheck.js +42 -0
  68. package/source/class/qx/core/check/standard/ArrayCheck.js +49 -0
  69. package/source/class/qx/core/check/standard/BooleanCheck.js +47 -0
  70. package/source/class/qx/core/check/standard/ClassCheck.js +33 -0
  71. package/source/class/qx/core/check/standard/ColorCheck.js +33 -0
  72. package/source/class/qx/core/check/standard/DateCheck.js +49 -0
  73. package/source/class/qx/core/check/standard/DecoratorCheck.js +33 -0
  74. package/source/class/qx/core/check/standard/DocumentCheck.js +40 -0
  75. package/source/class/qx/core/check/standard/ElementCheck.js +40 -0
  76. package/source/class/qx/core/check/standard/ErrorCheck.js +46 -0
  77. package/source/class/qx/core/check/standard/EventCheck.js +40 -0
  78. package/source/class/qx/core/check/standard/FontCheck.js +33 -0
  79. package/source/class/qx/core/check/standard/FunctionCheck.js +49 -0
  80. package/source/class/qx/core/check/standard/IntegerCheck.js +54 -0
  81. package/source/class/qx/core/check/standard/InterfaceCheck.js +33 -0
  82. package/source/class/qx/core/check/standard/MapCheck.js +33 -0
  83. package/source/class/qx/core/check/standard/MixinCheck.js +33 -0
  84. package/source/class/qx/core/check/standard/NodeCheck.js +40 -0
  85. package/source/class/qx/core/check/standard/NumberCheck.js +48 -0
  86. package/source/class/qx/core/check/standard/ObjectCheck.js +33 -0
  87. package/source/class/qx/core/check/standard/PositiveIntegerCheck.js +45 -0
  88. package/source/class/qx/core/check/standard/PositiveNumberCheck.js +45 -0
  89. package/source/class/qx/core/check/standard/PromiseCheck.js +33 -0
  90. package/source/class/qx/core/check/standard/RegExpCheck.js +46 -0
  91. package/source/class/qx/core/check/standard/StringCheck.js +43 -0
  92. package/source/class/qx/core/check/standard/ThemeCheck.js +33 -0
  93. package/source/class/qx/core/check/standard/WindowCheck.js +40 -0
  94. package/source/class/qx/core/property/ExplicitPropertyStorage.js +87 -0
  95. package/source/class/qx/core/property/GroupProperty.js +262 -0
  96. package/source/class/qx/core/property/IProperty.js +46 -0
  97. package/source/class/qx/core/property/IPropertyStorage.js +83 -0
  98. package/source/class/qx/core/property/ImmutableArrayStorage.js +38 -0
  99. package/source/class/qx/core/property/ImmutableDataArrayStorage.js +38 -0
  100. package/source/class/qx/core/property/ImmutableObjectStorage.js +39 -0
  101. package/source/class/qx/core/property/Property.js +1481 -0
  102. package/source/class/qx/core/property/PropertyStorageFactory.js +22 -0
  103. package/source/class/qx/core/property/SimplePropertyStorage.js +105 -0
  104. package/source/class/qx/data/Array.js +102 -57
  105. package/source/class/qx/data/MBinding.js +4 -29
  106. package/source/class/qx/data/SingleValueBinding.js +596 -1495
  107. package/source/class/qx/data/binding/AbstractSegment.js +197 -0
  108. package/source/class/qx/data/binding/ArrayIndexSegment.js +148 -0
  109. package/source/class/qx/data/binding/IInputReceiver.js +14 -0
  110. package/source/class/qx/data/binding/PropNameSegment.js +150 -0
  111. package/source/class/qx/data/controller/CheckedList.js +1 -1
  112. package/source/class/qx/data/controller/Form.js +78 -8
  113. package/source/class/qx/data/controller/Tree.js +27 -117
  114. package/source/class/qx/data/marshal/Json.js +46 -149
  115. package/source/class/qx/data/store/Json.js +0 -2
  116. package/source/class/qx/dev/Debug.js +1 -1
  117. package/source/class/qx/dev/LeakDetector.js +144 -0
  118. package/source/class/qx/dev/unit/AsyncWrapper.js +1 -0
  119. package/source/class/qx/dev/unit/MMock.js +7 -2
  120. package/source/class/qx/dev/unit/Sinon.js +0 -4
  121. package/source/class/qx/dev/unit/TestClass.js +2 -2
  122. package/source/class/qx/dev/unit/TestFunction.js +1 -0
  123. package/source/class/qx/dev/unit/TestLoaderBasic.js +1 -0
  124. package/source/class/qx/dev/unit/TestRunner.js +106 -0
  125. package/source/class/qx/event/IEventDispatcher.js +8 -4
  126. package/source/class/qx/event/Manager.js +4 -0
  127. package/source/class/qx/event/Messaging.js +2 -0
  128. package/source/class/qx/event/Pool.js +7 -0
  129. package/source/class/qx/event/Registration.js +33 -55
  130. package/source/class/qx/event/Timer.js +2 -0
  131. package/source/class/qx/event/Utils.js +25 -8
  132. package/source/class/qx/event/dispatch/AbstractBubbling.js +98 -194
  133. package/source/class/qx/event/dispatch/Direct.js +18 -13
  134. package/source/class/qx/event/handler/Appear.js +20 -24
  135. package/source/class/qx/event/handler/Application.js +4 -0
  136. package/source/class/qx/event/handler/DragDrop.js +182 -385
  137. package/source/class/qx/event/handler/Element.js +3 -0
  138. package/source/class/qx/event/handler/Focus.js +36 -30
  139. package/source/class/qx/event/handler/Input.js +5 -0
  140. package/source/class/qx/event/handler/Keyboard.js +107 -165
  141. package/source/class/qx/event/handler/Pointer.js +39 -68
  142. package/source/class/qx/event/handler/PointerCore.js +7 -25
  143. package/source/class/qx/event/handler/Window.js +5 -0
  144. package/source/class/qx/event/type/Event.js +12 -0
  145. package/source/class/qx/event/type/KeySequence.js +3 -0
  146. package/source/class/qx/event/type/Native.js +3 -0
  147. package/source/class/qx/html/Element.js +26 -91
  148. package/source/class/qx/io/jsonrpc/Client.js +1 -1
  149. package/source/class/qx/io/jsonrpc/protocol/Error.js +2 -2
  150. package/source/class/qx/io/jsonrpc/protocol/Parser.js +1 -0
  151. package/source/class/qx/io/jsonrpc/protocol/Result.js +2 -2
  152. package/source/class/qx/io/request/Xhr.js +3 -8
  153. package/source/class/qx/lang/normalize/Array.js +23 -1
  154. package/source/class/qx/locale/Date.js +520 -113
  155. package/source/class/qx/locale/LocalizedString.js +3 -0
  156. package/source/class/qx/locale/Manager.js +14 -3
  157. package/source/class/qx/locale/Number.js +60 -7
  158. package/source/class/qx/log/Logger.js +1 -1
  159. package/source/class/qx/module/Animation.js +2 -0
  160. package/source/class/qx/module/Attribute.js +2 -0
  161. package/source/class/qx/module/Css.js +7 -24
  162. package/source/class/qx/module/Event.js +2 -0
  163. package/source/class/qx/module/Manipulating.js +2 -0
  164. package/source/class/qx/module/Traversing.js +2 -0
  165. package/source/class/qx/test/Bootstrap.js +68 -53
  166. package/source/class/qx/test/Class.js +310 -2
  167. package/source/class/qx/test/Mixin.js +192 -42
  168. package/source/class/qx/test/Promise.js +129 -331
  169. package/source/class/qx/test/Theme.js +11 -0
  170. package/source/class/qx/test/bom/Font.js +2 -5
  171. package/source/class/qx/test/bom/Template.js +1 -1
  172. package/source/class/qx/test/compiler/ClassFile.js +14 -0
  173. package/source/class/qx/test/core/Assert.js +12 -0
  174. package/source/class/qx/test/core/Environment.js +17 -3
  175. package/source/class/qx/test/core/InheritanceDummy.js +10 -1
  176. package/source/class/qx/test/core/Object.js +51 -24
  177. package/source/class/qx/test/core/ObjectId.js +10 -1
  178. package/source/class/qx/test/core/Property.js +1338 -121
  179. package/source/class/qx/test/core/PropertyHelper.js +12 -0
  180. package/source/class/qx/test/core/Target.js +1 -0
  181. package/source/class/qx/test/core/Validation.js +2 -0
  182. package/source/class/qx/test/data/DataArray.js +218 -639
  183. package/source/class/qx/test/data/DataArrayWithChangeBubble.js +45 -215
  184. package/source/class/qx/test/data/MultiBinding.js +42 -0
  185. package/source/class/qx/test/data/async/__init__.js +4 -0
  186. package/source/class/qx/test/data/controller/Form.js +523 -14
  187. package/source/class/qx/test/data/controller/List.js +94 -426
  188. package/source/class/qx/test/data/controller/ListReverse.js +5 -20
  189. package/source/class/qx/test/data/controller/ListWithObjects.js +49 -225
  190. package/source/class/qx/test/data/controller/Object.js +54 -222
  191. package/source/class/qx/test/data/controller/Tree.js +195 -934
  192. package/source/class/qx/test/data/marshal/Json.js +74 -312
  193. package/source/class/qx/test/data/singlevalue/Array.js +55 -279
  194. package/source/class/qx/test/data/singlevalue/Async.js +173 -0
  195. package/source/class/qx/test/data/singlevalue/Deep.js +148 -327
  196. package/source/class/qx/test/data/singlevalue/Resolve.js +8 -28
  197. package/source/class/qx/test/data/singlevalue/Simple.js +124 -359
  198. package/source/class/qx/test/data/store/Json.js +86 -254
  199. package/source/class/qx/test/data/store/Jsonp.js +9 -29
  200. package/source/class/qx/test/data/store/Offline.js +2 -8
  201. package/source/class/qx/test/data/store/Rest.js +3 -3
  202. package/source/class/qx/test/dev/unit/Requirements.js +26 -10
  203. package/source/class/qx/test/event/GlobalError.js +2 -2
  204. package/source/class/qx/test/html/Iframe.js +1 -1
  205. package/source/class/qx/test/io/graphql/Client.js +2 -0
  206. package/source/class/qx/test/io/jsonrpc/Protocol.js +4 -2
  207. package/source/class/qx/test/io/request/MRequest.js +2 -8
  208. package/source/class/qx/test/io/request/Xhr.js +27 -117
  209. package/source/class/qx/test/lang/Function.js +6 -25
  210. package/source/class/qx/test/lang/Type.js +31 -13
  211. package/source/class/qx/test/locale/Date.js +173 -2
  212. package/source/class/qx/test/locale/Locale.js +23 -28
  213. package/source/class/qx/test/locale/Number.js +71 -0
  214. package/source/class/qx/test/log/Logger.js +7 -1
  215. package/source/class/qx/test/log/fixture/ClassA.js +2 -5
  216. package/source/class/qx/test/mobile/basic/Atom.js +3 -3
  217. package/source/class/qx/test/mobile/container/Scroll.js +4 -4
  218. package/source/class/qx/test/mobile/form/CheckBox.js +6 -12
  219. package/source/class/qx/test/performance/Property.js +5 -4
  220. package/source/class/qx/test/performance/widget/WidgetWithDecorator.js +2 -0
  221. package/source/class/qx/test/theme/Simple.js +34 -0
  222. package/source/class/qx/test/{MAppearance.js → theme/SimpleAppearance.js} +5 -4
  223. package/source/class/qx/test/{MDecoration.js → theme/SimpleDecoration.js} +6 -4
  224. package/source/class/qx/test/theme/manager/Color.js +23 -15
  225. package/source/class/qx/test/theme/manager/Decoration.js +23 -15
  226. package/source/class/qx/test/theme/manager/Font.js +23 -15
  227. package/source/class/qx/test/theme/manager/Icon.js +23 -15
  228. package/source/class/qx/test/theme/manager/Meta.js +33 -20
  229. package/source/class/qx/test/tool/__init__.js +3 -0
  230. package/source/class/qx/test/tool/cli/AbstractValue.js +274 -0
  231. package/source/class/qx/test/tool/cli/Argument.js +384 -0
  232. package/source/class/qx/test/tool/cli/Command.js +387 -0
  233. package/source/class/qx/test/tool/cli/Flag.js +413 -0
  234. package/source/class/qx/test/tool/cli/__init__.js +3 -0
  235. package/source/class/qx/test/ui/LayoutTestCase.js +1 -14
  236. package/source/class/qx/test/ui/basic/Label.js +106 -0
  237. package/source/class/qx/test/ui/core/Blocker.js +125 -3
  238. package/source/class/qx/test/ui/form/Form.js +106 -0
  239. package/source/class/qx/test/ui/form/FormManager.js +6 -5
  240. package/source/class/qx/test/ui/form/SplitButton.js +1 -1
  241. package/source/class/qx/test/ui/toolbar/OverflowHandling.js +13 -14
  242. package/source/class/qx/test/ui/toolbar/ToolBar.js +16 -16
  243. package/source/class/qx/test/ui/tree/TreeFolder.js +5 -7
  244. package/source/class/qx/test/ui/tree/virtual/AbstractTreeTest.js +2 -0
  245. package/source/class/qx/test/ui/tree/virtual/Tree.js +36 -0
  246. package/source/class/qx/test/util/DateFormat.js +1 -1
  247. package/source/class/qx/test/util/PropertyUtil.js +0 -36
  248. package/source/class/qx/theme/classic/Appearance.js +1 -1
  249. package/source/class/qx/theme/indigo/ColorDark.js +2 -0
  250. package/source/class/qx/theme/manager/Font.js +6 -1
  251. package/source/class/qx/theme/manager/Meta.js +2 -1
  252. package/source/class/qx/theme/simple/Appearance.js +31 -95
  253. package/source/class/qx/theme/simple/Decoration.js +0 -1
  254. package/source/class/qx/theme/tangible/Appearance.js +1 -1
  255. package/source/class/qx/tool/cli/AbstractCliApp.js +72 -0
  256. package/source/class/qx/tool/cli/AbstractValue.js +186 -0
  257. package/source/class/qx/tool/cli/Argument.js +155 -0
  258. package/source/class/qx/tool/cli/Command.js +518 -0
  259. package/source/class/qx/tool/cli/Flag.js +202 -0
  260. package/source/class/qx/tool/cli/Parser.js +39 -0
  261. package/source/class/qx/tool/cli/__init__.js +26 -1
  262. package/source/class/qx/tool/compiler/Analyser.js +41 -13
  263. package/source/class/qx/tool/compiler/ClassFile.js +37 -9
  264. package/source/class/qx/tool/compiler/Console.js +2 -0
  265. package/source/class/qx/tool/compiler/MetaExtraction.js +53 -33
  266. package/source/class/qx/tool/compiler/app/Library.js +1 -1
  267. package/source/class/qx/tool/compiler/app/WebFont.js +2 -0
  268. package/source/class/qx/tool/compiler/cli/Application.js +58 -0
  269. package/source/class/qx/tool/{cli/commands → compiler/cli}/Command.js +99 -45
  270. package/source/class/qx/tool/{cli → compiler/cli}/ConfigDb.js +7 -7
  271. package/source/class/qx/tool/compiler/cli/ConfigLoader.js +272 -0
  272. package/source/class/qx/tool/{cli → compiler/cli}/LibraryApplication.js +3 -3
  273. package/source/class/qx/tool/compiler/cli/RootCommand.js +63 -0
  274. package/source/class/qx/tool/{cli → compiler/cli}/Watch.js +49 -24
  275. package/source/class/qx/tool/compiler/cli/__init__.js +3 -0
  276. package/source/class/qx/tool/{cli → compiler/cli}/api/AbstractApi.js +2 -11
  277. package/source/class/qx/tool/{cli → compiler/cli}/api/CompilerApi.js +11 -10
  278. package/source/class/qx/tool/{cli → compiler/cli}/api/LibraryApi.js +13 -4
  279. package/source/class/qx/tool/{cli → compiler/cli}/api/Test.js +1 -1
  280. package/source/class/qx/tool/compiler/cli/commands/Add.js +49 -0
  281. package/source/class/qx/tool/{cli → compiler/cli}/commands/Clean.js +12 -25
  282. package/source/class/qx/tool/{cli → compiler/cli}/commands/Compile.js +524 -615
  283. package/source/class/qx/tool/{cli → compiler/cli}/commands/Config.js +22 -20
  284. package/source/class/qx/tool/{cli → compiler/cli}/commands/Create.js +77 -54
  285. package/source/class/qx/tool/{cli → compiler/cli}/commands/Deploy.js +45 -60
  286. package/source/class/qx/tool/{cli → compiler/cli}/commands/Es6ify.js +57 -41
  287. package/source/class/qx/tool/{cli → compiler/cli}/commands/ExportGlyphs.js +26 -7
  288. package/source/class/qx/tool/compiler/cli/commands/Lint.js +420 -0
  289. package/source/class/qx/tool/{cli → compiler/cli}/commands/Migrate.js +40 -20
  290. package/source/class/qx/tool/{cli → compiler/cli}/commands/Package.js +20 -32
  291. package/source/class/qx/tool/compiler/cli/commands/Pkg.js +36 -0
  292. package/source/class/qx/tool/compiler/cli/commands/Prettier.js +278 -0
  293. package/source/class/qx/tool/{cli → compiler/cli}/commands/Run.js +43 -39
  294. package/source/class/qx/tool/{cli → compiler/cli}/commands/Serve.js +63 -61
  295. package/source/class/qx/tool/{cli → compiler/cli}/commands/Test.js +49 -52
  296. package/source/class/qx/tool/{cli → compiler/cli}/commands/Typescript.js +51 -30
  297. package/source/class/qx/tool/{cli → compiler/cli}/commands/add/Class.js +54 -31
  298. package/source/class/qx/tool/{cli → compiler/cli}/commands/add/Script.js +56 -32
  299. package/source/class/qx/tool/{cli → compiler/cli}/commands/config/Delete.js +19 -13
  300. package/source/class/qx/tool/{cli → compiler/cli}/commands/config/Get.js +19 -13
  301. package/source/class/qx/tool/{cli → compiler/cli}/commands/config/List.js +20 -20
  302. package/source/class/qx/tool/{cli → compiler/cli}/commands/config/Set.js +28 -20
  303. package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Install.js +140 -75
  304. package/source/class/qx/tool/{cli → compiler/cli}/commands/package/List.js +119 -80
  305. package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Publish.js +194 -178
  306. package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Remove.js +18 -21
  307. package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Update.js +90 -69
  308. package/source/class/qx/tool/{cli → compiler/cli}/commands/package/Upgrade.js +67 -54
  309. package/source/class/qx/tool/compiler/makers/AbstractAppMaker.js +2 -1
  310. package/source/class/qx/tool/compiler/resources/Manager.js +2 -0
  311. package/source/class/qx/tool/compiler/resources/ScssConverter.js +1 -1
  312. package/source/class/qx/tool/compiler/resources/ScssFile.js +1 -1
  313. package/source/class/qx/tool/compiler/targets/Target.js +5 -10
  314. package/source/class/qx/tool/compiler/targets/TypeScriptWriter.js +6 -2
  315. package/source/class/qx/tool/compiler/targets/meta/ApplicationMeta.js +2 -4
  316. package/source/class/qx/tool/compiler/targets/meta/BootJs.js +2 -0
  317. package/source/class/qx/tool/compiler/targets/meta/PackageJavascript.js +2 -0
  318. package/source/class/qx/tool/config/Abstract.js +5 -5
  319. package/source/class/qx/tool/config/Lockfile.js +1 -1
  320. package/source/class/qx/tool/migration/BaseMigration.js +9 -7
  321. package/source/class/qx/tool/migration/M6_0_0.js +3 -3
  322. package/source/class/qx/tool/migration/M8_0_0.js +958 -0
  323. package/source/class/qx/tool/utils/Debounce.js +0 -1
  324. package/source/class/qx/tool/utils/Http.js +109 -21
  325. package/source/class/qx/tool/utils/LogManager.js +7 -0
  326. package/source/class/qx/tool/utils/Promisify.js +12 -1
  327. package/source/class/qx/tool/utils/QooxdooVersions.js +193 -0
  328. package/source/class/qx/tool/utils/Utils.js +8 -5
  329. package/source/class/qx/tool/utils/Website.js +9 -222
  330. package/source/class/qx/tool/utils/Zip.js +47 -0
  331. package/source/class/qx/tool/utils/files/Utils.js +3 -11
  332. package/source/class/qx/tool/utils/json/Tokenizer.js +5 -0
  333. package/source/class/qx/ui/basic/Atom.js +8 -8
  334. package/source/class/qx/ui/core/Blocker.js +17 -4
  335. package/source/class/qx/ui/core/DragDropCursor.js +2 -1
  336. package/source/class/qx/ui/core/EventHandler.js +13 -21
  337. package/source/class/qx/ui/core/LayoutItem.js +8 -31
  338. package/source/class/qx/ui/core/MExecutable.js +21 -43
  339. package/source/class/qx/ui/core/MNativeOverflow.js +4 -2
  340. package/source/class/qx/ui/core/Widget.js +50 -165
  341. package/source/class/qx/ui/core/scroll/IScrollBar.js +9 -3
  342. package/source/class/qx/ui/core/scroll/ScrollBar.js +7 -1
  343. package/source/class/qx/ui/core/scroll/ScrollPane.js +12 -4
  344. package/source/class/qx/ui/embed/Html.js +6 -2
  345. package/source/class/qx/ui/form/AbstractField.js +4 -12
  346. package/source/class/qx/ui/form/Button.js +6 -4
  347. package/source/class/qx/ui/form/CheckedSelectBox.js +8 -8
  348. package/source/class/qx/ui/form/FileSelectorButton.js +1 -1
  349. package/source/class/qx/ui/form/Form.js +3 -0
  350. package/source/class/qx/ui/form/IListItem.js +3 -1
  351. package/source/class/qx/ui/form/IRadioItem.js +3 -1
  352. package/source/class/qx/ui/form/MForm.js +3 -1
  353. package/source/class/qx/ui/form/Slider.js +6 -2
  354. package/source/class/qx/ui/form/SplitButton.js +5 -5
  355. package/source/class/qx/ui/form/TextField.js +1 -2
  356. package/source/class/qx/ui/form/validation/Manager.js +6 -2
  357. package/source/class/qx/ui/menubar/Button.js +1 -1
  358. package/source/class/qx/ui/mobile/basic/Atom.js +5 -5
  359. package/source/class/qx/ui/mobile/dialog/Menu.js +9 -31
  360. package/source/class/qx/ui/mobile/dialog/Popup.js +13 -1
  361. package/source/class/qx/ui/table/pane/FocusIndicator.js +5 -2
  362. package/source/class/qx/ui/table/pane/Scroller.js +11 -28
  363. package/source/class/qx/ui/table/selection/Model.js +1 -0
  364. package/source/class/qx/ui/toolbar/Button.js +1 -1
  365. package/source/class/qx/ui/toolbar/CheckBox.js +1 -1
  366. package/source/class/qx/ui/toolbar/FileSelectorButton.js +1 -2
  367. package/source/class/qx/ui/toolbar/Part.js +2 -2
  368. package/source/class/qx/ui/toolbar/PartContainer.js +2 -2
  369. package/source/class/qx/ui/toolbar/ToolBar.js +24 -49
  370. package/source/class/qx/ui/tree/VirtualTree.js +6 -4
  371. package/source/class/qx/ui/tree/core/AbstractItem.js +10 -17
  372. package/source/class/qx/ui/tree/core/IVirtualTree.js +4 -2
  373. package/source/class/qx/ui/tree/provider/IVirtualTreeProvider.js +20 -10
  374. package/source/class/qx/ui/treevirtual/SimpleTreeDataModel.js +4 -1
  375. package/source/class/qx/ui/virtual/cell/Cell.js +20 -48
  376. package/source/class/qx/ui/virtual/cell/WidgetCell.js +2 -4
  377. package/source/class/qx/ui/virtual/core/Axis.js +4 -0
  378. package/source/class/qx/ui/virtual/core/ILayer.js +14 -10
  379. package/source/class/qx/ui/virtual/core/Scroller.js +4 -4
  380. package/source/class/qx/ui/virtual/layer/WidgetCell.js +4 -0
  381. package/source/class/qx/ui/virtual/selection/Abstract.js +3 -0
  382. package/source/class/qx/ui/virtual/selection/MModel.js +1 -1
  383. package/source/class/qx/ui/window/IDesktop.js +6 -2
  384. package/source/class/qx/ui/window/IWindowManager.js +10 -4
  385. package/source/class/qx/ui/window/MDesktop.js +2 -1
  386. package/source/class/qx/ui/window/Manager.js +1 -1
  387. package/source/class/qx/ui/window/Window.js +6 -4
  388. package/source/class/qx/util/OOUtil.js +8 -9
  389. package/source/class/qx/util/PropertyUtil.js +34 -154
  390. package/source/class/qx/util/ResponseParser.js +2 -0
  391. package/source/class/qx/util/Serializer.js +69 -114
  392. package/source/class/qx/util/format/DateFormat.js +3 -2
  393. package/source/global.d.ts +4 -0
  394. package/source/resource/qx/tool/bin/download-assets +0 -2
  395. package/source/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-node.tmpl.js +1 -0
  396. package/{lib/resource/qx/tool → source/resource/qx/tool/compiler}/cli/templates/template_vars.js +12 -9
  397. package/{lib/resource/qx/tool → source/resource/qx/tool/compiler}/schema/Manifest-1-0-0.json +2 -2
  398. package/source/resource/qx/tool/{schema → compiler/schema}/Manifest-2-0-0.json +2 -2
  399. package/source/resource/qx/tool/{schema → compiler/schema}/compile-1-0-0.json +15 -3
  400. package/{lib/resource/qx/tool → source/resource/qx/tool/compiler}/schema/qooxdoo-1-0-0.json +1 -1
  401. package/source/resource/qx/tool/website/build/404.html +22 -22
  402. package/source/resource/qx/tool/website/build/about.html +23 -23
  403. package/source/resource/qx/tool/website/build/assets/common.js +30 -18
  404. package/source/resource/qx/tool/website/build/assets/custom.css +290 -0
  405. package/source/resource/qx/tool/website/build/assets/qxWeb.js +28 -0
  406. package/source/resource/qx/tool/website/build/diagnostics/dependson.html +30 -30
  407. package/source/resource/qx/tool/website/build/diagnostics/dependson.js +49 -40
  408. package/source/resource/qx/tool/website/build/diagnostics/requiredby.html +20 -23
  409. package/source/resource/qx/tool/website/build/diagnostics/requiredby.js +38 -31
  410. package/source/resource/qx/tool/website/build/index.html +24 -24
  411. package/source/resource/qx/tool/website/build/scripts/serve.js +63 -65
  412. package/source/resource/qx/tool/website/partials/footer.html +8 -13
  413. package/source/resource/qx/tool/website/partials/head.html +9 -7
  414. package/source/resource/qx/tool/website/partials/header.html +3 -3
  415. package/source/resource/qx/tool/website/src/assets/common.js +32 -0
  416. package/source/resource/qx/tool/website/src/assets/custom.css +290 -0
  417. package/source/resource/qx/tool/website/src/assets/qxWeb.js +28 -0
  418. package/source/resource/qx/tool/website/src/diagnostics/dependson.js +49 -40
  419. package/source/resource/qx/tool/website/src/diagnostics/requiredby.js +38 -31
  420. package/source/resource/qx/tool/website/src/index.html +2 -2
  421. package/source/resource/qx/tool/website/src/scripts/serve.js +63 -65
  422. package/lib/resource/qx/tool/bin/build-devtools +0 -13
  423. package/lib/resource/qx/tool/bin/build-website +0 -15
  424. package/lib/resource/qx/tool/bin/download-assets +0 -23
  425. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +0 -1
  426. package/lib/resource/qx/tool/website/build/assets/bootstrap.css +0 -7
  427. package/lib/resource/qx/tool/website/build/assets/bootstrap.min.css +0 -7
  428. package/lib/resource/qx/tool/website/build/assets/bootstrap.min.css.map +0 -1
  429. package/lib/resource/qx/tool/website/build/assets/jquery.js +0 -5453
  430. package/lib/resource/qx/tool/website/build/qooxdoo.css +0 -21
  431. package/lib/resource/qx/tool/website/sass/qooxdoo.css +0 -3
  432. package/lib/resource/qx/tool/website/sass/qooxdoo.css.map +0 -1
  433. package/lib/resource/qx/tool/website/src/assets/bootstrap.css +0 -7
  434. package/lib/resource/qx/tool/website/src/assets/bootstrap.min.css +0 -7
  435. package/lib/resource/qx/tool/website/src/assets/bootstrap.min.css.map +0 -1
  436. package/lib/resource/qx/tool/website/src/assets/jquery.js +0 -5453
  437. package/source/class/qx/core/Property.js +0 -2100
  438. package/source/class/qx/tool/cli/Application.js +0 -47
  439. package/source/class/qx/tool/cli/Cli.js +0 -713
  440. package/source/class/qx/tool/cli/commands/Add.js +0 -46
  441. package/source/class/qx/tool/cli/commands/Lint.js +0 -255
  442. package/source/class/qx/tool/cli/commands/Pkg.js +0 -56
  443. package/source/class/qx/tool/cli/commands/package/Migrate.js +0 -37
  444. package/source/class/qx/tool/compiler/app/Cldr.js +0 -725
  445. package/source/resource/qx/tool/bin/build-devtools +0 -13
  446. package/source/resource/qx/tool/bin/build-website +0 -15
  447. package/source/resource/qx/tool/website/build/assets/bootstrap.css +0 -7
  448. package/source/resource/qx/tool/website/build/assets/bootstrap.min.css +0 -7
  449. package/source/resource/qx/tool/website/build/assets/bootstrap.min.css.map +0 -1
  450. package/source/resource/qx/tool/website/build/assets/jquery.js +0 -5453
  451. package/source/resource/qx/tool/website/build/qooxdoo.css +0 -21
  452. package/source/resource/qx/tool/website/sass/qooxdoo.scss +0 -31
  453. package/source/resource/qx/tool/website/src/assets/bootstrap.css +0 -7
  454. package/source/resource/qx/tool/website/src/assets/bootstrap.min.css +0 -7
  455. package/source/resource/qx/tool/website/src/assets/bootstrap.min.css.map +0 -1
  456. package/source/resource/qx/tool/website/src/assets/jquery.js +0 -5453
  457. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/TypeScriptWriter-base_declaration.d.ts +0 -0
  458. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/default.tmpl.js +0 -0
  459. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/header.tmpl.js +0 -0
  460. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/interface.tmpl.js +0 -0
  461. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/mixin.tmpl.js +0 -0
  462. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/class/singleton.tmpl.js +0 -0
  463. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-browser.tmpl.js +0 -0
  464. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-rhino.tmpl.js +0 -0
  465. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/.gitignore.tmpl +0 -0
  466. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/Manifest.tmpl.json +0 -0
  467. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/compile.tmpl.json +0 -0
  468. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/readme.tmpl.md +0 -0
  469. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/index.tmpl.html +0 -0
  470. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/nojs.tmpl.html +0 -0
  471. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/Application.tmpl.js +0 -0
  472. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/__init__.tmpl.js +0 -0
  473. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js +0 -0
  474. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js +0 -0
  475. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js +0 -0
  476. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js +0 -0
  477. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js +0 -0
  478. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js +0 -0
  479. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/app.png +0 -0
  480. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/favicon.png +0 -0
  481. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/js_256x256.png +0 -0
  482. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/test.png +0 -0
  483. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/translation/readme.txt +0 -0
  484. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/.gitignore.tmpl +0 -0
  485. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/Manifest.tmpl.json +0 -0
  486. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/compile.tmpl.json +0 -0
  487. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/readme.tmpl.md +0 -0
  488. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/index.tmpl.html +0 -0
  489. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/nojs.tmpl.html +0 -0
  490. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/Application.tmpl.js +0 -0
  491. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js +0 -0
  492. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js +0 -0
  493. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js +0 -0
  494. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js +0 -0
  495. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/app.png +0 -0
  496. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl +0 -0
  497. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/favicon.png +0 -0
  498. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/js_256x256.png +0 -0
  499. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/theme/custom/css/custom.css +0 -0
  500. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/translation/readme.txt +0 -0
  501. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/.gitignore.tmpl +0 -0
  502. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/Manifest.tmpl.json +0 -0
  503. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/compile.tmpl.json +0 -0
  504. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/readme.tmpl.md +0 -0
  505. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/Button.tmpl.js +0 -0
  506. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/__init__.tmpl.js +0 -0
  507. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js +0 -0
  508. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/resource/custom/test.png +0 -0
  509. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js +0 -0
  510. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js +0 -0
  511. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js +0 -0
  512. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Decoration.tmpl.js +0 -0
  513. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js +0 -0
  514. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js +0 -0
  515. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/resource/custom/test.png +0 -0
  516. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/translation/readme.txt +0 -0
  517. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/.gitignore.tmpl +0 -0
  518. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/Manifest.tmpl.json +0 -0
  519. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/compile.tmpl.json +0 -0
  520. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/readme.tmpl.txt +0 -0
  521. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/Application.tmpl.js +0 -0
  522. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/__init__.tmpl.js +0 -0
  523. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js +0 -0
  524. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/resource/custom/.gitignore.tmpl +0 -0
  525. /package/lib/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/translation/readme.txt +0 -0
  526. /package/lib/resource/qx/tool/{loadsass.js → compiler/loadsass.js} +0 -0
  527. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/TypeScriptWriter-base_declaration.d.ts +0 -0
  528. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/default.tmpl.js +0 -0
  529. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/header.tmpl.js +0 -0
  530. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/interface.tmpl.js +0 -0
  531. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/mixin.tmpl.js +0 -0
  532. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/class/singleton.tmpl.js +0 -0
  533. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-browser.tmpl.js +0 -0
  534. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/loader/loader-rhino.tmpl.js +0 -0
  535. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/.gitignore.tmpl +0 -0
  536. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/Manifest.tmpl.json +0 -0
  537. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/compile.tmpl.json +0 -0
  538. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/readme.tmpl.md +0 -0
  539. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/index.tmpl.html +0 -0
  540. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/boot/nojs.tmpl.html +0 -0
  541. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/Application.tmpl.js +0 -0
  542. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/__init__.tmpl.js +0 -0
  543. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js +0 -0
  544. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js +0 -0
  545. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js +0 -0
  546. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js +0 -0
  547. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js +0 -0
  548. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js +0 -0
  549. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/app.png +0 -0
  550. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/favicon.png +0 -0
  551. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/js_256x256.png +0 -0
  552. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/resource/custom/test.png +0 -0
  553. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/desktop/source/translation/readme.txt +0 -0
  554. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/.gitignore.tmpl +0 -0
  555. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/Manifest.tmpl.json +0 -0
  556. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/compile.tmpl.json +0 -0
  557. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/readme.tmpl.md +0 -0
  558. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/index.tmpl.html +0 -0
  559. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/boot/nojs.tmpl.html +0 -0
  560. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/Application.tmpl.js +0 -0
  561. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js +0 -0
  562. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js +0 -0
  563. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js +0 -0
  564. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js +0 -0
  565. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/app.png +0 -0
  566. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl +0 -0
  567. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/favicon.png +0 -0
  568. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/resource/custom/js_256x256.png +0 -0
  569. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/theme/custom/scss/_styles.scss +0 -0
  570. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/theme/custom/scss/custom.scss +0 -0
  571. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/mobile/source/translation/readme.txt +0 -0
  572. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/.gitignore.tmpl +0 -0
  573. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/Manifest.tmpl.json +0 -0
  574. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/compile.tmpl.json +0 -0
  575. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/readme.tmpl.md +0 -0
  576. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/Button.tmpl.js +0 -0
  577. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/__init__.tmpl.js +0 -0
  578. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js +0 -0
  579. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/resource/custom/test.png +0 -0
  580. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js +0 -0
  581. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js +0 -0
  582. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js +0 -0
  583. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Decoration.tmpl.js +0 -0
  584. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js +0 -0
  585. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js +0 -0
  586. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/resource/custom/test.png +0 -0
  587. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/package/source/translation/readme.txt +0 -0
  588. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/.gitignore.tmpl +0 -0
  589. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/Manifest.tmpl.json +0 -0
  590. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/compile.tmpl.json +0 -0
  591. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/readme.tmpl.txt +0 -0
  592. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/Application.tmpl.js +0 -0
  593. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/__init__.tmpl.js +0 -0
  594. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js +0 -0
  595. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/resource/custom/.gitignore.tmpl +0 -0
  596. /package/source/resource/qx/tool/{cli → compiler/cli}/templates/skeleton/server/source/translation/readme.txt +0 -0
  597. /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
- { name: "a" },
637
- { name: "b" }
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
  });