@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
@@ -0,0 +1,413 @@
1
+ /* ************************************************************************
2
+
3
+ qooxdoo - the new era of web development
4
+
5
+ http://qooxdoo.org
6
+
7
+ Copyright:
8
+ 2025 Henner Kollmann
9
+
10
+ License:
11
+ MIT: https://opensource.org/licenses/MIT
12
+ See the LICENSE file in the project's top-level directory for details.
13
+
14
+ Authors:
15
+ * Henner Kollmann (Henner.Kollmann@gmx.de, @hkollmann)
16
+
17
+ ************************************************************************ */
18
+
19
+ qx.Class.define("qx.test.tool.cli.Flag", {
20
+ extend: qx.dev.unit.TestCase,
21
+
22
+ members: {
23
+ testBasicFlagCreation() {
24
+ let flag = new qx.tool.cli.Flag("verbose");
25
+ this.assertEquals("verbose", flag.getName());
26
+ this.assertNull(flag.getShortCode());
27
+ this.assertNull(flag.getDescription());
28
+ this.assertNull(flag.getValue());
29
+ },
30
+
31
+ testFlagProperties() {
32
+ let flag = new qx.tool.cli.Flag("output-file");
33
+ flag.set({
34
+ type: "string",
35
+ shortCode: "o",
36
+ description: "Output file path",
37
+ value: "default.txt"
38
+ });
39
+
40
+ this.assertEquals("outputFile", flag.getName()); // transformed to camelCase
41
+ this.assertEquals("string", flag.getType());
42
+ this.assertEquals("o", flag.getShortCode());
43
+ this.assertEquals("Output file path", flag.getDescription());
44
+ this.assertEquals("default.txt", flag.getValue());
45
+ },
46
+
47
+ testBooleanFlag() {
48
+ let flag = new qx.tool.cli.Flag("verbose").set({
49
+ type: "boolean"
50
+ });
51
+
52
+ // Test parsing boolean flag without value (should default to true)
53
+ flag.parse("--verbose", () => null);
54
+ this.assertTrue(flag.getValue());
55
+ },
56
+
57
+ testBooleanFlagWithValue() {
58
+ let flag = new qx.tool.cli.Flag("debug").set({
59
+ type: "boolean"
60
+ });
61
+
62
+ // Test parsing boolean flag with explicit true value
63
+ flag.parse("--debug=true", () => null);
64
+ this.assertTrue(flag.getValue());
65
+
66
+ // Test parsing boolean flag with explicit false value
67
+ flag.setValue(null); // reset
68
+ flag.parse("--debug=false", () => null);
69
+ this.assertFalse(flag.getValue());
70
+
71
+ // Test parsing boolean flag with "yes" value
72
+ flag.setValue(null); // reset
73
+ flag.parse("--debug=yes", () => null);
74
+ this.assertTrue(flag.getValue());
75
+
76
+ // Test parsing boolean flag with "no" value
77
+ flag.setValue(null); // reset
78
+ flag.parse("--debug=no", () => null);
79
+ this.assertFalse(flag.getValue());
80
+ },
81
+
82
+ testBooleanFlagInvalidValue() {
83
+ let flag = new qx.tool.cli.Flag("debug").set({
84
+ type: "boolean"
85
+ });
86
+
87
+ this.assertException(() => {
88
+ flag.parse("--debug=invalid", () => null);
89
+ }, Error, /Invalid value.*expected nothing.*or the words true or false/);
90
+ },
91
+
92
+ testStringFlag() {
93
+ let flag = new qx.tool.cli.Flag("output").set({
94
+ type: "string"
95
+ });
96
+
97
+ let argIndex = 0;
98
+ let args = ["file.txt"];
99
+ function fnGetMore(index) {
100
+ return args[index] || null;
101
+ }
102
+
103
+ flag.parse("--output", fnGetMore);
104
+ this.assertEquals("file.txt", flag.getValue());
105
+ },
106
+
107
+ testStringFlagWithEquals() {
108
+ let flag = new qx.tool.cli.Flag("output").set({
109
+ type: "string"
110
+ });
111
+
112
+ flag.parse("--output=filename.txt", () => null);
113
+ this.assertEquals("filename.txt", flag.getValue());
114
+ },
115
+
116
+ testIntegerFlag() {
117
+ let flag = new qx.tool.cli.Flag("count").set({
118
+ type: "integer"
119
+ });
120
+
121
+ let args = ["42"];
122
+ function fnGetMore(index) {
123
+ return args[index] || null;
124
+ }
125
+
126
+ flag.parse("--count", fnGetMore);
127
+ this.assertEquals(42, flag.getValue());
128
+ this.assertEquals("number", typeof flag.getValue());
129
+ },
130
+
131
+ testIntegerFlagWithEquals() {
132
+ let flag = new qx.tool.cli.Flag("port").set({
133
+ type: "integer"
134
+ });
135
+
136
+ flag.parse("--port=8080", () => null);
137
+ this.assertEquals(8080, flag.getValue());
138
+ },
139
+
140
+ testIntegerFlagInvalid() {
141
+ let flag = new qx.tool.cli.Flag("count").set({
142
+ type: "integer"
143
+ });
144
+
145
+ this.assertException(() => {
146
+ flag.parse("--count=invalid", () => null);
147
+ }, Error, /Invalid value.*expected an integer/);
148
+ },
149
+
150
+ testFloatFlag() {
151
+ let flag = new qx.tool.cli.Flag("ratio").set({
152
+ type: "float"
153
+ });
154
+
155
+ let args = ["3.14"];
156
+ function fnGetMore(index) {
157
+ return args[index] || null;
158
+ }
159
+
160
+ flag.parse("--ratio", fnGetMore);
161
+ this.assertEquals(3.14, flag.getValue());
162
+ this.assertEquals("number", typeof flag.getValue());
163
+ },
164
+
165
+ testFloatFlagInvalid() {
166
+ let flag = new qx.tool.cli.Flag("ratio").set({
167
+ type: "float"
168
+ });
169
+
170
+ this.assertException(() => {
171
+ flag.parse("--ratio=invalid", () => null);
172
+ }, Error, /Invalid value.*expected a number/);
173
+ },
174
+
175
+ testArrayFlag() {
176
+ let flag = new qx.tool.cli.Flag("include").set({
177
+ type: "string",
178
+ array: true
179
+ });
180
+
181
+ let argIndex = 0;
182
+ let args = ["path1", "path2", "path3"];
183
+ function fnGetMore(index, rebase) {
184
+ if (rebase) {
185
+ argIndex += index;
186
+ return null;
187
+ }
188
+ return args[argIndex + index] || null;
189
+ }
190
+
191
+ flag.parse("--include", fnGetMore);
192
+ let values = flag.getValue();
193
+
194
+ this.assertTrue(qx.lang.Type.isArray(values));
195
+ this.assertEquals(3, values.length);
196
+ this.assertEquals("path1", values[0]);
197
+ this.assertEquals("path2", values[1]);
198
+ this.assertEquals("path3", values[2]);
199
+ },
200
+
201
+ testArrayFlagSingleValue() {
202
+ let flag = new qx.tool.cli.Flag("exclude").set({
203
+ type: "string",
204
+ array: true
205
+ });
206
+
207
+ let argIndex = 0;
208
+ let args = ["single"];
209
+ function fnGetMore(index, rebase) {
210
+ if (rebase) {
211
+ argIndex += index;
212
+ return null;
213
+ }
214
+ return args[argIndex + index] || null;
215
+ }
216
+
217
+ flag.parse("--exclude", fnGetMore);
218
+ let values = flag.getValue();
219
+
220
+ this.assertTrue(qx.lang.Type.isArray(values));
221
+ this.assertEquals(1, values.length);
222
+ this.assertEquals("single", values[0]);
223
+ },
224
+
225
+ testArrayFlagEmpty() {
226
+ let flag = new qx.tool.cli.Flag("tags").set({
227
+ type: "string",
228
+ array: true
229
+ });
230
+
231
+ this.assertException(() => {
232
+ flag.parse("--tags", () => null);
233
+ }, Error, /Invalid value.*expected at least one value/);
234
+ },
235
+
236
+ testFlagMatching() {
237
+ let flag = new qx.tool.cli.Flag("verbose-output").set({
238
+ shortCode: "v"
239
+ });
240
+
241
+ this.assertTrue(flag.is("--verbose-output"));
242
+ this.assertTrue(flag.is("--verboseOutput")); // camelCase
243
+ this.assertTrue(flag.is("-v"));
244
+ this.assertFalse(flag.is("--other"));
245
+ this.assertFalse(flag.is("-x"));
246
+ },
247
+
248
+ testFlagMatchingWithEquals() {
249
+ let flag = new qx.tool.cli.Flag("output");
250
+
251
+ this.assertTrue(flag.is("--output=file.txt"));
252
+ this.assertFalse(flag.is("--other=value"));
253
+ },
254
+
255
+ testUsageGeneration() {
256
+ let flag = new qx.tool.cli.Flag("verbose").set({
257
+ type: "boolean",
258
+ shortCode: "v",
259
+ description: "Enable verbose output",
260
+ value: false
261
+ });
262
+
263
+ let usage = flag.usage();
264
+
265
+ this.assertMatch(usage, /--verbose\|-v/);
266
+ this.assertMatch(usage, /Boolean/);
267
+ this.assertMatch(usage, /\[default: false\]/);
268
+ this.assertMatch(usage, /Enable verbose output/);
269
+ },
270
+
271
+ testUsageGenerationString() {
272
+ let flag = new qx.tool.cli.Flag("output").set({
273
+ type: "string",
274
+ shortCode: "o",
275
+ description: "Output file path"
276
+ });
277
+
278
+ let usage = flag.usage();
279
+
280
+ this.assertMatch(usage, /--output\|-o/);
281
+ this.assertMatch(usage, /\(String\)/);
282
+ this.assertMatch(usage, /-/); // No default value indicator
283
+ this.assertMatch(usage, /Output file path/);
284
+ },
285
+
286
+ testUsageGenerationArray() {
287
+ let flag = new qx.tool.cli.Flag("include").set({
288
+ type: "string",
289
+ array: true,
290
+ description: "Include paths"
291
+ });
292
+
293
+ let usage = flag.usage();
294
+
295
+ this.assertMatch(usage, /--include/);
296
+ this.assertMatch(usage, /\[String\]/); // Array notation
297
+ this.assertMatch(usage, /Include paths/);
298
+ },
299
+
300
+ testUsageGenerationEnum() {
301
+ let flag = new qx.tool.cli.Flag("level").set({
302
+ type: ["debug", "info", "warn", "error"],
303
+ description: "Log level"
304
+ });
305
+
306
+ let usage = flag.usage();
307
+
308
+ this.assertMatch(usage, /--level/);
309
+ this.assertMatch(usage, /\[debug,info,warn,error\]/);
310
+ this.assertMatch(usage, /Log level/);
311
+ },
312
+
313
+ testEnumFlagValueSelection() {
314
+ let flag = new qx.tool.cli.Flag("level").set({
315
+ type: ["debug", "info", "warn", "error"],
316
+ description: "Log level"
317
+ });
318
+
319
+ // Test valid values
320
+ flag.parse("--level=debug", () => null);
321
+ this.assertEquals("debug", flag.getValue());
322
+
323
+ flag.setValue(null);
324
+ flag.parse("--level=info", () => null);
325
+ this.assertEquals("info", flag.getValue());
326
+
327
+ flag.setValue(null);
328
+ flag.parse("--level=warn", () => null);
329
+ this.assertEquals("warn", flag.getValue());
330
+
331
+ flag.setValue(null);
332
+ flag.parse("--level=error", () => null);
333
+ this.assertEquals("error", flag.getValue());
334
+
335
+ // Test invalid value should throw error
336
+ this.assertException(() => {
337
+ flag.parse("--level=invalid", () => null);
338
+ }, Error);
339
+ },
340
+
341
+ testHyphenatedName() {
342
+ let flag = new qx.tool.cli.Flag("outputFile");
343
+ this.assertEquals("output-file", flag.getHyphenatedName());
344
+ },
345
+
346
+ testToString() {
347
+ let flag = new qx.tool.cli.Flag("verbose");
348
+ flag.setDescription("Enable verbose output");
349
+ this.assertEquals("verbose", flag.toString());
350
+
351
+ let flagNoName = new qx.tool.cli.Flag();
352
+ flagNoName.setDescription("Test description");
353
+ this.assertEquals("Test description", flagNoName.toString());
354
+ },
355
+
356
+ testParseWithMockGetMore() {
357
+ let flag = new qx.tool.cli.Flag("files").set({
358
+ type: "string",
359
+ array: true
360
+ });
361
+
362
+ let consumed = 0;
363
+ function mockGetMore(index, rebase) {
364
+ let values = ["file1.txt", "file2.txt", "--other-flag"];
365
+ if (rebase) {
366
+ consumed = index;
367
+ return null;
368
+ }
369
+ let value = values[index];
370
+ // Stop at next flag
371
+ if (value && value.startsWith("-")) {
372
+ return null;
373
+ }
374
+ return value || null;
375
+ }
376
+
377
+ flag.parse("--files", mockGetMore);
378
+ let result = flag.getValue();
379
+
380
+ this.assertTrue(qx.lang.Type.isArray(result));
381
+ this.assertEquals(2, result.length);
382
+ this.assertEquals("file1.txt", result[0]);
383
+ this.assertEquals("file2.txt", result[1]);
384
+ this.assertEquals(2, consumed); // Verify correct number of arguments were consumed
385
+ },
386
+
387
+ testArrayFlagWithCommaSeparatedValues() {
388
+ let flag = new qx.tool.cli.Flag("array").set({
389
+ type: "string",
390
+ array: true
391
+ });
392
+
393
+ let consumed = 0;
394
+ function mockGetMore(index, rebase) {
395
+ let values = ["additional-arg"];
396
+ if (rebase) {
397
+ consumed = index;
398
+ return null;
399
+ }
400
+ return values[index] || null;
401
+ }
402
+
403
+ flag.parse("--array=test,test2", mockGetMore);
404
+ let values = flag.getValue();
405
+
406
+ this.assertTrue(qx.lang.Type.isArray(values));
407
+ this.assertEquals(2, values.length);
408
+ this.assertEquals("test", values[0]);
409
+ this.assertEquals("test2", values[1]);
410
+ this.assertEquals(0, consumed); // Verify no additional arguments were consumed
411
+ }
412
+ }
413
+ });
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Test classes for the qx.tool.cli package
3
+ */
@@ -178,20 +178,7 @@ qx.Class.define("qx.test.ui.LayoutTestCase", {
178
178
  assertWidgetDispose(clazz, args, msg) {
179
179
  this.assertDestroy(
180
180
  function () {
181
- var argStr = [];
182
- for (var i = 0; i < args.length; i++) {
183
- argStr.push("qx.test.ui.LayoutTestCase.$$args" + "[" + i + "]");
184
- }
185
-
186
- qx.test.ui.LayoutTestCase.$$clazz = clazz;
187
- qx.test.ui.LayoutTestCase.$$args = args;
188
- var str =
189
- "new qx.test.ui.LayoutTestCase.$$clazz" +
190
- "(" +
191
- argStr.join(", ") +
192
- ");";
193
- var widget = eval(str);
194
-
181
+ var widget = new clazz(...args);
195
182
  this.getRoot().add(widget);
196
183
  this.flush();
197
184
 
@@ -264,6 +264,112 @@ qx.Class.define("qx.test.ui.basic.Label", {
264
264
  label.getContentElement().getValue(),
265
265
  "label must have the current locale set"
266
266
  );
267
+ },
268
+
269
+ /**
270
+ * Test for issue #9564: Translated string as property init value causes
271
+ * invalid calculation of label width.
272
+ *
273
+ * This test reproduces the issue where a LocalizedString created before
274
+ * translations are loaded (typical for property init values) causes the
275
+ * label to calculate its width based on the untranslated message ID
276
+ * instead of the actual translated text.
277
+ */
278
+ testTranslatedStringPropertyInitWidth() {
279
+ this.require(["qx.dynlocale"]);
280
+
281
+ var localeManager = qx.locale.Manager.getInstance();
282
+
283
+ // Save the current locale to restore it later
284
+ var originalLocale = localeManager.getLocale();
285
+
286
+ try {
287
+ // Set up a translation with a short message ID and a long translation
288
+ var shortMsgId = "ISSUE_9564_TEST_MESSAGE";
289
+ var longTranslation =
290
+ "This is a very long translated string that should be much wider than the message ID";
291
+
292
+ localeManager.setLocale("en");
293
+
294
+ // IMPORTANT: Create LocalizedString BEFORE the translation is loaded
295
+ // This simulates the typical scenario where tr() is called in a property init
296
+ var localizedStr = qx.locale.Manager.tr(shortMsgId);
297
+
298
+ // At this point, localizedStr contains the message ID as fallback text
299
+ // because the translation hasn't been loaded yet
300
+ this.assertEquals(
301
+ shortMsgId,
302
+ localizedStr.toString(),
303
+ "LocalizedString should contain message ID before translation is loaded"
304
+ );
305
+
306
+ // NOW load the translation (simulating translations loading after class definition)
307
+ localeManager.addTranslation("en", {
308
+ [shortMsgId]: longTranslation
309
+ });
310
+
311
+ // Create two labels for comparison
312
+ // Label 1: Uses the LocalizedString directly (simulates property init)
313
+ var labelWithLocalizedString = new qx.ui.basic.Label();
314
+ labelWithLocalizedString.setValue(localizedStr);
315
+
316
+ // Label 2: Uses the plain translated string for comparison
317
+ var labelWithPlainString = new qx.ui.basic.Label(longTranslation);
318
+
319
+ // Add both labels to the root
320
+ this.getRoot().add(labelWithLocalizedString);
321
+ this.getRoot().add(labelWithPlainString);
322
+
323
+ // Flush to ensure layout is calculated
324
+ this.flush();
325
+
326
+ // Trigger the changeLocale event to simulate the fix for issue #9564
327
+ // In a real application, this is automatically triggered by qx.bom.Lifecycle.onReady()
328
+ // but in the test context, we need to trigger it manually
329
+ localeManager.fireDataEvent("changeLocale", localeManager.getLocale());
330
+
331
+ // Flush again to apply the changes from the changeLocale event
332
+ this.flush();
333
+
334
+ // Both labels should display the same translated text
335
+ this.assertEquals(
336
+ longTranslation,
337
+ labelWithLocalizedString.getContentElement().getValue(),
338
+ "Label with LocalizedString should display the translated text"
339
+ );
340
+
341
+ this.assertEquals(
342
+ longTranslation,
343
+ labelWithPlainString.getContentElement().getValue(),
344
+ "Label with plain string should display the translated text"
345
+ );
346
+
347
+ // Get the bounds of both labels
348
+ var boundsWithLocalizedString =
349
+ labelWithLocalizedString.getBounds();
350
+ var boundsWithPlainString = labelWithPlainString.getBounds();
351
+
352
+ // Both labels should have the same width since they display the same text
353
+ // This is the core assertion for issue #9564
354
+ // In the buggy version, labelWithLocalizedString would have a width based on
355
+ // the short message ID, not the long translated text
356
+ this.assertEquals(
357
+ boundsWithPlainString.width,
358
+ boundsWithLocalizedString.width,
359
+ "Label with LocalizedString should have the same width as label with plain translated string. " +
360
+ "Expected: " +
361
+ boundsWithPlainString.width +
362
+ ", Actual: " +
363
+ boundsWithLocalizedString.width
364
+ );
365
+
366
+ // Clean up
367
+ labelWithLocalizedString.destroy();
368
+ labelWithPlainString.destroy();
369
+ } finally {
370
+ // Restore the original locale
371
+ localeManager.setLocale(originalLocale);
372
+ }
267
373
  }
268
374
  }
269
375
  });
@@ -168,7 +168,7 @@ qx.Class.define("qx.test.ui.core.Blocker", {
168
168
  );
169
169
 
170
170
  focusedWidget = qx.ui.core.Widget.getWidgetByElement(
171
- focusHandler.getFocus()
171
+ focusHandler.getFocusedElement()
172
172
  );
173
173
 
174
174
  this.assertFalse(
@@ -188,7 +188,7 @@ qx.Class.define("qx.test.ui.core.Blocker", {
188
188
  this.assertTrue(activeWidget === txt1, "text field 1 must be active");
189
189
 
190
190
  focusedWidget = qx.ui.core.Widget.getWidgetByElement(
191
- focusHandler.getFocus()
191
+ focusHandler.getFocusedElement()
192
192
  );
193
193
 
194
194
  this.assertTrue(focusedWidget === txt2, "text field 2 must be focused");
@@ -227,7 +227,8 @@ qx.Class.define("qx.test.ui.core.Blocker", {
227
227
  this.assertFalse(blockerElement.isIncluded(), "isIncluded()");
228
228
 
229
229
  // text field must not be focused
230
- widget = qx.ui.core.Widget.getWidgetByElement(focusHandler.getFocus());
230
+ widget =
231
+ qx.ui.core.Widget.getWidgetByElement(focusHandler.getFocusedElement());
231
232
  this.assertFalse(
232
233
  widget === txt,
233
234
  "text field must be focused, because it is destroyed"
@@ -235,6 +236,127 @@ qx.Class.define("qx.test.ui.core.Blocker", {
235
236
 
236
237
  txt.destroy();
237
238
  this.flush();
239
+ },
240
+
241
+ testBlockContent() {
242
+ // Create a container widget with specific position
243
+ var container = new qx.ui.container.Composite(new qx.ui.layout.Canvas());
244
+ this.getRoot().add(container, { left: 100, top: 50 });
245
+ container.setWidth(200);
246
+ container.setHeight(150);
247
+ this.flush();
248
+
249
+ // Create blocker for the container
250
+ var blocker = new qx.ui.core.Blocker(container);
251
+ var blockerElement = blocker.getBlockerElement();
252
+
253
+ // Block content
254
+ blocker.blockContent(10);
255
+ this.flush();
256
+
257
+ this.assertTrue(blocker.isBlocked(), "blocker should be blocked");
258
+ this.assertTrue(blockerElement.isIncluded(), "blocker element should be included");
259
+
260
+ // Verify blocker dimensions match container
261
+ var styles = blockerElement.getAllStyles();
262
+ this.assertEquals("200px", styles.width, "blocker width should match container width");
263
+ this.assertEquals("150px", styles.height, "blocker height should match container height");
264
+
265
+ // Verify blocker position is 0,0 (relative to container, not layout parent)
266
+ // This is the fix for issue #10411
267
+ this.assertEquals("0px", styles.left, "blocker left should be 0 when blocking content");
268
+ this.assertEquals("0px", styles.top, "blocker top should be 0 when blocking content");
269
+
270
+ // Cleanup
271
+ blocker.unblock();
272
+ blocker.dispose();
273
+ container.destroy();
274
+ this.flush();
275
+ },
276
+
277
+ testBlockContentPositioning() {
278
+ // Create a container at a non-zero position
279
+ var container = new qx.ui.container.Composite(new qx.ui.layout.Canvas());
280
+ this.getRoot().add(container, { left: 150, top: 100 });
281
+ container.setWidth(300);
282
+ container.setHeight(200);
283
+ this.flush();
284
+
285
+ var blocker = new qx.ui.core.Blocker(container);
286
+ var blockerElement = blocker.getBlockerElement();
287
+
288
+ // Block the content
289
+ blocker.blockContent(5);
290
+ this.flush();
291
+
292
+ var styles = blockerElement.getAllStyles();
293
+
294
+ // The blocker should be positioned at 0,0 relative to the container
295
+ // NOT at the container's position (150, 100)
296
+ this.assertEquals("0px", styles.left, "blocker should be at left: 0");
297
+ this.assertEquals("0px", styles.top, "blocker should be at top: 0");
298
+ this.assertEquals("300px", styles.width, "blocker width should match container");
299
+ this.assertEquals("200px", styles.height, "blocker height should match container");
300
+
301
+ // Cleanup
302
+ blocker.unblock();
303
+ blocker.dispose();
304
+ container.destroy();
305
+ this.flush();
306
+ },
307
+
308
+ testNormalBlockVsBlockContent() {
309
+ // Create two containers to compare normal block vs blockContent
310
+ var container1 = new qx.ui.container.Composite(new qx.ui.layout.Canvas());
311
+ var container2 = new qx.ui.container.Composite(new qx.ui.layout.Canvas());
312
+
313
+ this.getRoot().add(container1, { left: 50, top: 50 });
314
+ this.getRoot().add(container2, { left: 300, top: 50 });
315
+
316
+ container1.setWidth(100);
317
+ container1.setHeight(100);
318
+ container2.setWidth(100);
319
+ container2.setHeight(100);
320
+
321
+ this.flush();
322
+
323
+ var blocker1 = new qx.ui.core.Blocker(container1);
324
+ var blocker2 = new qx.ui.core.Blocker(container2);
325
+
326
+ // Normal block - blocker is added to layout parent
327
+ blocker1.block();
328
+ this.flush();
329
+
330
+ var styles1 = blocker1.getBlockerElement().getAllStyles();
331
+
332
+ // BlockContent - blocker is added to the widget itself
333
+ blocker2.blockContent(5);
334
+ this.flush();
335
+
336
+ var styles2 = blocker2.getBlockerElement().getAllStyles();
337
+
338
+ // Normal block: blocker positioned at container's position in layout parent
339
+ this.assertEquals("50px", styles1.left, "normal block uses container's left position");
340
+ this.assertEquals("50px", styles1.top, "normal block uses container's top position");
341
+
342
+ // BlockContent: blocker positioned at 0,0 relative to container
343
+ this.assertEquals("0px", styles2.left, "blockContent uses 0 for left position");
344
+ this.assertEquals("0px", styles2.top, "blockContent uses 0 for top position");
345
+
346
+ // Both should have same dimensions as their containers
347
+ this.assertEquals("100px", styles1.width);
348
+ this.assertEquals("100px", styles1.height);
349
+ this.assertEquals("100px", styles2.width);
350
+ this.assertEquals("100px", styles2.height);
351
+
352
+ // Cleanup
353
+ blocker1.unblock();
354
+ blocker2.unblock();
355
+ blocker1.dispose();
356
+ blocker2.dispose();
357
+ container1.destroy();
358
+ container2.destroy();
359
+ this.flush();
238
360
  }
239
361
  }
240
362
  });