@qooxdoo/framework 7.7.2 → 7.8.0

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 (59) hide show
  1. package/Manifest.json +1 -1
  2. package/lib/compiler/compile-info.json +63 -63
  3. package/lib/compiler/index.js +513 -353
  4. package/lib/resource/qx/tool/schema/compile-1-0-0.json +13 -0
  5. package/package.json +2 -2
  6. package/source/class/qx/bom/Label.js +82 -2
  7. package/source/class/qx/bom/webfonts/WebFont.js +1 -0
  8. package/source/class/qx/core/Environment.js +82 -1
  9. package/source/class/qx/data/controller/List.js +50 -21
  10. package/source/class/qx/data/controller/MSelection.js +45 -12
  11. package/source/class/qx/dev/unit/AsyncWrapper.js +8 -0
  12. package/source/class/qx/event/Manager.js +163 -124
  13. package/source/class/qx/io/ImageLoader.js +6 -3
  14. package/source/class/qx/io/exception/Transport.js +1 -0
  15. package/source/class/qx/io/jsonrpc/Client.js +64 -8
  16. package/source/class/qx/io/jsonrpc/protocol/Request.js +10 -6
  17. package/source/class/qx/test/bom/client/Pdfjs.js +4 -0
  18. package/source/class/qx/test/bom/element/AnimationJs.js +3 -0
  19. package/source/class/qx/test/bom/element/Style.js +1 -0
  20. package/source/class/qx/test/bom/media/MediaTestCase.js +6 -0
  21. package/source/class/qx/test/core/Environment.js +44 -0
  22. package/source/class/qx/test/io/MAssert.js +94 -0
  23. package/source/class/qx/test/io/TestMAssert.js +47 -0
  24. package/source/class/qx/test/io/jsonrpc/Client.js +79 -19
  25. package/source/class/qx/test/io/jsonrpc/PostMessageClient.js +152 -0
  26. package/source/class/qx/test/io/jsonrpc/Protocol.js +1 -5
  27. package/source/class/qx/test/ui/embed/Iframe.js +1 -1
  28. package/source/class/qx/test/ui/form/TextArea.js +4 -0
  29. package/source/class/qx/test/util/DeferredCall.js +6 -0
  30. package/source/class/qx/test/util/Function.js +2 -2
  31. package/source/class/qx/tool/cli/api/Test.js +22 -0
  32. package/source/class/qx/tool/cli/commands/Compile.js +17 -4
  33. package/source/class/qx/tool/cli/commands/Test.js +7 -1
  34. package/source/class/qx/tool/compiler/Analyser.js +7 -0
  35. package/source/class/qx/tool/compiler/ClassFile.js +3 -2
  36. package/source/class/qx/tool/compiler/MetaExtraction.js +0 -5
  37. package/source/class/qx/tool/compiler/targets/meta/Browserify.js +8 -2
  38. package/source/class/qx/ui/basic/Image.js +72 -8
  39. package/source/class/qx/ui/basic/Label.js +4 -6
  40. package/source/class/qx/ui/control/DateChooser.js +4 -6
  41. package/source/class/qx/ui/core/Blocker.js +4 -6
  42. package/source/class/qx/ui/core/LayoutItem.js +4 -6
  43. package/source/class/qx/ui/core/MPlacement.js +11 -0
  44. package/source/class/qx/ui/core/Widget.js +7 -5
  45. package/source/class/qx/ui/form/AbstractField.js +4 -6
  46. package/source/class/qx/ui/form/MForm.js +4 -6
  47. package/source/class/qx/ui/form/Spinner.js +4 -6
  48. package/source/class/qx/ui/form/renderer/AbstractRenderer.js +4 -6
  49. package/source/class/qx/ui/menu/AbstractButton.js +7 -11
  50. package/source/class/qx/ui/mobile/basic/Label.js +4 -6
  51. package/source/class/qx/ui/mobile/form/Label.js +4 -6
  52. package/source/class/qx/ui/mobile/list/List.js +4 -6
  53. package/source/class/qx/ui/progressive/renderer/table/Row.js +35 -7
  54. package/source/class/qx/ui/progressive/renderer/table/cell/Boolean.js +4 -6
  55. package/source/class/qx/ui/table/Table.js +4 -6
  56. package/source/class/qx/ui/table/cellrenderer/Abstract.js +4 -6
  57. package/source/class/qx/ui/table/cellrenderer/Boolean.js +4 -6
  58. package/source/class/qx/ui/table/rowrenderer/Default.js +4 -6
  59. package/source/resource/qx/tool/schema/compile-1-0-0.json +13 -0
@@ -125,8 +125,8 @@ if (typeof global !== "undefined") {
125
125
  "qx.promise.warnings": true,
126
126
  "qx.promise.longStackTraces": true,
127
127
  "qx.compiler": true,
128
- "qx.compiler.version": "7.7.2",
129
- "qx.version": null,
128
+ "qx.compiler.version": "7.8.0",
129
+ "qx.version": "7.8.0",
130
130
  "qx.compiler.targetType": "source",
131
131
  "qx.compiler.outputDir": "compiled/node/build/",
132
132
  "qx.target.privateArtifacts": false,
@@ -147,7 +147,7 @@ if (typeof global !== "undefined") {
147
147
  "qx"
148
148
  ].forEach(ns => qx.$$libraries[ns] = {
149
149
  sourceUri: qx.$$appRoot + ".",
150
- resourceUri: qx.$$appRoot + "../resource/"
150
+ resourceUri: qx.$$appRoot + "../resource"
151
151
  });
152
152
 
153
153
  var isDebug = qx.$$environment["qx.debugLoader"];
@@ -3105,7 +3105,8 @@ try {
3105
3105
  "qx.promise.warnings": true,
3106
3106
  "qx.promise.longStackTraces": true,
3107
3107
  "qx.command.bindEnabled": false,
3108
- "qx.headless": false
3108
+ "qx.headless": false,
3109
+ "qx.environment.allowRuntimeMutations": false
3109
3110
  },
3110
3111
  /**
3111
3112
  * The default accessor for the checks. It returns the value the current
@@ -3368,6 +3369,71 @@ try {
3368
3369
  getAsyncChecks() {
3369
3370
  return this._asyncChecks;
3370
3371
  },
3372
+ // mutation of environment settings at runtime
3373
+
3374
+ /**
3375
+ * Sets the environment setting for the given key to the given value. This deletes any check function
3376
+ * associated with this key.
3377
+ *
3378
+ * This method is only available if "qx.environment.allowRuntimeMutations" is set to true.
3379
+ *
3380
+ * @param key {String} The key of the environment setting to set.
3381
+ * @param value {var} The value to set the environment setting to. Must be a scalar value.
3382
+ */
3383
+ set: qx.Bootstrap.getEnvironmentSetting("qx.environment.allowRuntimeMutations") ? function (key, value) {
3384
+ if (key === undefined) {
3385
+ throw new TypeError("Key must be provided to set an environment setting.");
3386
+ }
3387
+ if (this.__P_66_3 === undefined) {
3388
+ qx.Bootstrap.warn("Modifying environment settings at runtime is enabled. This is a security risk and should not be done in production code.");
3389
+ this.__P_66_3 = Object.assign({}, this.__P_66_0);
3390
+ this.__P_66_4 = Object.assign({}, this._checks);
3391
+ }
3392
+ this.__P_66_0[key] = value;
3393
+ delete this._checks[key];
3394
+ delete this._checksMap[key];
3395
+ } : undefined,
3396
+ /**
3397
+ * Removes the environment setting for the given key, and any check function associated with it.
3398
+ * This method is only available if "qx.environment.allowRuntimeMutations" is set to true.
3399
+ *
3400
+ * @param key {String} The key of the environment setting to remove.
3401
+ */
3402
+ remove: qx.Bootstrap.getEnvironmentSetting("qx.environment.allowRuntimeMutations") ? function (key) {
3403
+ if (key === undefined) {
3404
+ throw new TypeError("Key must be provided to remove an environment setting.");
3405
+ }
3406
+ if (this.__P_66_3 === undefined || this.__P_66_3[key] === undefined) {
3407
+ throw new TypeError(`Environment setting "${key}" does not exist.`);
3408
+ }
3409
+ delete this.__P_66_0[key];
3410
+ delete this._checks[key];
3411
+ delete this._checksMap[key];
3412
+ } : undefined,
3413
+ /**
3414
+ * Resets the environment settings to their original values. If a key is provided, only that key is reset.
3415
+ * This method is only available if "qx.environment.allowRuntimeMutations" is set to true.
3416
+ *
3417
+ * @param key {String?} The key of the environment setting to reset. If not provided, all settings are reset.
3418
+ */
3419
+ reset: qx.Bootstrap.getEnvironmentSetting("qx.environment.allowRuntimeMutations") ? function (key) {
3420
+ if (this.__P_66_3 === undefined) {
3421
+ // no backup available, nothing to reset
3422
+ return;
3423
+ }
3424
+ if (key !== undefined && this.__P_66_3[key] === undefined) {
3425
+ throw new TypeError(`Environment setting "${key}" does not exist.`);
3426
+ }
3427
+ if (key === undefined) {
3428
+ // reset all keys
3429
+ this.__P_66_0 = Object.assign({}, this.__P_66_3);
3430
+ this._checks = Object.assign({}, this.__P_66_4);
3431
+ return;
3432
+ }
3433
+ // only reset the particular key
3434
+ this.__P_66_0[key] = this.__P_66_3[key];
3435
+ this._checks[key] = this.__P_66_4[key];
3436
+ } : undefined,
3371
3437
  /**
3372
3438
  * Initializer for the default values of the framework settings.
3373
3439
  */
@@ -3384,7 +3450,7 @@ try {
3384
3450
  /**
3385
3451
  * Import checks from global qx.$$environment into the Environment class.
3386
3452
  */
3387
- __P_66_3() {
3453
+ __P_66_5() {
3388
3454
  // import the environment map
3389
3455
  if (qx && qx.$$environment) {
3390
3456
  for (var key in qx.$$environment) {
@@ -3397,7 +3463,7 @@ try {
3397
3463
  * Checks the URL for environment settings and imports these into the
3398
3464
  * Environment class.
3399
3465
  */
3400
- __P_66_4() {
3466
+ __P_66_6() {
3401
3467
  if (window.document && window.document.location) {
3402
3468
  var urlChecks = window.document.location.search.slice(1).split("&");
3403
3469
  for (var i = 0; i < urlChecks.length; i++) {
@@ -3436,11 +3502,21 @@ try {
3436
3502
  // create default values for the environment class
3437
3503
  statics._initDefaultQxValues();
3438
3504
  // load the checks from the generator
3439
- statics.__P_66_3();
3505
+ statics.__P_66_5();
3440
3506
  // load the checks from the url
3441
3507
  if (statics.get("qx.allowUrlSettings") === true) {
3442
- statics.__P_66_4();
3508
+ statics.__P_66_6();
3443
3509
  }
3510
+ },
3511
+ environment: {
3512
+ /**
3513
+ * By setting this key to true, the environment variables can be mutated at runtime, using the {@link #set} method,
3514
+ * which is otherwise not available. This is only useful for testing and debugging purposes. We strongly advise
3515
+ * against enabling this in production code. You have been warned.
3516
+ * Note: This enviroment key declaration is only for documentation purposes and is not used during bootstrapping, so
3517
+ * changing the value here will have no effect.
3518
+ */
3519
+ "qx.environment.allowRuntimeMutations": false
3444
3520
  }
3445
3521
  });
3446
3522
  qx.core.Environment.$$dbClassInfo = $$dbClassInfo;
@@ -12191,7 +12267,7 @@ try {
12191
12267
  }
12192
12268
 
12193
12269
  // Registry for event listeners
12194
- this.__P_174_3 = {};
12270
+ this.__P_174_3 = new Map();
12195
12271
 
12196
12272
  // The handler and dispatcher instances
12197
12273
  this.__P_174_4 = {};
@@ -12364,23 +12440,69 @@ try {
12364
12440
  */
12365
12441
  getListeners(target, type, capture) {
12366
12442
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12367
- var targetMap = this.__P_174_3[targetKey];
12443
+ var targetMap = this.__P_174_3.get(targetKey);
12368
12444
  if (!targetMap) {
12369
12445
  return null;
12370
12446
  }
12371
12447
  var entryKey = type + (capture ? "|capture" : "|bubble");
12372
- var entryList = targetMap[entryKey];
12373
- return entryList ? entryList.concat() : null;
12448
+ var entryMap = targetMap.get(entryKey);
12449
+ if (entryMap && entryMap.size > 0) {
12450
+ var listeners = [...entryMap.values()];
12451
+ return new Proxy(listeners, {
12452
+ deleteProperty(target, property) {
12453
+ if (property !== "length") {
12454
+ var listener = target[property];
12455
+ entryMap.delete(listener.unique);
12456
+ }
12457
+ delete target[property];
12458
+ return true;
12459
+ },
12460
+ set(target, property, value, receiver) {
12461
+ if (property !== "length") {
12462
+ if (!value.unique) {
12463
+ throw new Error("Cannot store a listener without a unique id. Use addListener()");
12464
+ }
12465
+ entryMap[value.unique] = value;
12466
+ }
12467
+ target[property] = value;
12468
+ return true;
12469
+ }
12470
+ });
12471
+ }
12472
+ return null;
12374
12473
  },
12375
12474
  /**
12376
12475
  * Returns all registered listeners.
12377
12476
  *
12378
12477
  * @internal
12379
12478
  *
12380
- * @return {Map} All registered listeners. The key is the hash code form an object.
12479
+ * @return {Object} All registered listeners. The key is the hash code for an object.
12381
12480
  */
12382
12481
  getAllListeners() {
12383
- return this.__P_174_3;
12482
+ return Object.fromEntries(this.__P_174_3.entries().map(([targetKey, targetMap]) => [targetKey, Object.fromEntries(targetMap.entries().map(([entryKey, entryMap]) => {
12483
+ var listeners = [...entryMap.values()];
12484
+ var proxy = new Proxy(listeners, {
12485
+ deleteProperty(target, property) {
12486
+ if (property !== "length") {
12487
+ var listener = target[property];
12488
+ entryMap.delete(listener.unique);
12489
+ }
12490
+ delete target[property];
12491
+ return true;
12492
+ },
12493
+ set(target, property, value, receiver) {
12494
+ if (property !== "length") {
12495
+ if (!value.unique) {
12496
+ throw new Error("Cannot store a listener without a unique id. Use addListener()");
12497
+ }
12498
+ entryMap[value.unique] = value;
12499
+ }
12500
+ target[property] = value;
12501
+ return true;
12502
+ }
12503
+ });
12504
+ return [entryKey, proxy];
12505
+ }))]));
12384
12506
  },
12385
12507
  /**
12386
12508
  * Returns a serialized array of all events attached on the given target.
@@ -12391,24 +12513,20 @@ try {
12391
12513
  */
12392
12514
  serializeListeners(target) {
12393
12515
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12394
- var targetMap = this.__P_174_3[targetKey];
12516
+ var targetMap = this.__P_174_3.get(targetKey);
12395
12517
  var result = [];
12396
12518
  if (targetMap) {
12397
- var indexOf, type, capture, entryList, entry;
12398
- for (var entryKey in targetMap) {
12519
+ var indexOf, type, capture;
12520
+ for (const [entryKey, entryMap] of targetMap) {
12399
12521
  indexOf = entryKey.indexOf("|");
12400
12522
  type = entryKey.substring(0, indexOf);
12401
- capture = entryKey.charAt(indexOf + 1) == "c";
12402
- entryList = targetMap[entryKey];
12403
- for (var i = 0, l = entryList.length; i < l; i++) {
12404
- entry = entryList[i];
12405
- result.push({
12406
- self: entry.context,
12407
- handler: entry.handler,
12408
- type: type,
12409
- capture: capture
12410
- });
12411
- }
12523
+ capture = entryKey.charAt(indexOf + 1) === "c";
12524
+ result = result.concat([...entryMap.values().map(entry => ({
12525
+ self: entry.context,
12526
+ handler: entry.handler,
12527
+ type: type,
12528
+ capture: capture
12529
+ }))]);
12412
12530
  }
12413
12531
  }
12414
12532
  return result;
@@ -12428,14 +12546,14 @@ try {
12428
12546
  */
12429
12547
  toggleAttachedEvents(target, enable) {
12430
12548
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12431
- var targetMap = this.__P_174_3[targetKey];
12549
+ var targetMap = this.__P_174_3.get(targetKey);
12432
12550
  if (targetMap) {
12433
- var indexOf, type, capture, entryList;
12434
- for (var entryKey in targetMap) {
12551
+ var indexOf, type, capture;
12552
+ for (const entryKey of targetMap.keys()) {
12435
12553
  indexOf = entryKey.indexOf("|");
12436
12554
  type = entryKey.substring(0, indexOf);
12437
12555
  capture = entryKey.charCodeAt(indexOf + 1) === 99; // checking for character "c".
12438
- entryList = targetMap[entryKey];
12556
+
12439
12557
  if (enable) {
12440
12558
  this.__P_174_12(target, type, capture);
12441
12559
  } else {
@@ -12456,13 +12574,13 @@ try {
12456
12574
  */
12457
12575
  hasListener(target, type, capture) {
12458
12576
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12459
- var targetMap = this.__P_174_3[targetKey];
12577
+ var targetMap = this.__P_174_3.get(targetKey);
12460
12578
  if (!targetMap) {
12461
12579
  return false;
12462
12580
  }
12463
12581
  var entryKey = type + (capture ? "|capture" : "|bubble");
12464
- var entryList = targetMap[entryKey];
12465
- return !!(entryList && entryList.length > 0);
12582
+ var entryMap = targetMap.get(entryKey);
12583
+ return Boolean(entryMap && entryMap.size > 0);
12466
12584
  },
12467
12585
  /**
12468
12586
  * Imports a list of event listeners at once. This only
@@ -12481,26 +12599,32 @@ try {
12481
12599
  */
12482
12600
  importListeners(target, list) {
12483
12601
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12484
- var targetMap = this.__P_174_3[targetKey] = {};
12485
- var clazz = qx.event.Manager;
12602
+ var targetMap = this.__P_174_3.get(targetKey);
12603
+ if (!targetMap) {
12604
+ targetMap = new Map();
12605
+ this.__P_174_3.set(targetKey, targetMap);
12606
+ }
12486
12607
  for (var listKey in list) {
12487
12608
  var item = list[listKey];
12488
12609
  var entryKey = item.type + (item.capture ? "|capture" : "|bubble");
12489
- var entryList = targetMap[entryKey];
12490
- if (!entryList) {
12491
- entryList = targetMap[entryKey] = [];
12492
-
12610
+ var entryMap = targetMap.get(entryKey);
12611
+ if (!entryMap) {
12612
+ entryMap = new Map();
12613
+ targetMap.set(entryKey, entryMap);
12614
+ }
12615
+ if (entryMap.size === 0) {
12493
12616
  // This is the first event listener for this type and target
12494
12617
  // Inform the event handler about the new event
12495
12618
  // they perform the event registration at DOM level if needed
12496
12619
  this.__P_174_12(target, item.type, item.capture);
12497
12620
  }
12498
12621
 
12499
- // Append listener to list
12500
- entryList.push({
12622
+ // Add listener to map
12623
+ var unique = item.unique || qx.event.Manager.getNextUniqueId();
12624
+ entryMap.set(unique, {
12501
12625
  handler: item.listener,
12502
12626
  context: item.self,
12503
- unique: item.unique || clazz.__P_174_9++ + ""
12627
+ unique: unique
12504
12628
  });
12505
12629
  }
12506
12630
  },
@@ -12526,37 +12650,37 @@ try {
12526
12650
  */
12527
12651
  addListener(target, type, listener, self, capture) {
12528
12652
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12529
- var targetMap = this.__P_174_3[targetKey];
12653
+ var targetMap = this.__P_174_3.get(targetKey);
12530
12654
  if (!targetMap) {
12531
- targetMap = this.__P_174_3[targetKey] = {};
12655
+ targetMap = new Map();
12656
+ this.__P_174_3.set(targetKey, targetMap);
12532
12657
  }
12533
12658
  var entryKey = type + (capture ? "|capture" : "|bubble");
12534
- var entryList = targetMap[entryKey];
12535
- if (!entryList) {
12536
- entryList = targetMap[entryKey] = [];
12537
- }
12538
-
12539
- // This is the first event listener for this type and target
12540
- // Inform the event handler about the new event
12541
- // they perform the event registration at DOM level if needed
12542
- if (entryList.length === 0) {
12659
+ var entryMap = targetMap.get(entryKey);
12660
+ if (!entryMap) {
12661
+ entryMap = new Map();
12662
+ targetMap.set(entryKey, entryMap);
12663
+ }
12664
+ if (entryMap.size === 0) {
12665
+ // This is the first event listener for this type and target
12666
+ // Inform the event handler about the new event
12667
+ // they perform the event registration at DOM level if needed
12543
12668
  this.__P_174_12(target, type, capture);
12544
12669
  }
12545
12670
 
12546
- // Append listener to list
12547
- var unique = qx.event.Manager.__P_174_9++ + "";
12548
- var entry = {
12671
+ // Add listener to map
12672
+ var unique = qx.event.Manager.getNextUniqueId();
12673
+ entryMap.set(unique, {
12549
12674
  handler: listener,
12550
12675
  context: self,
12551
12676
  unique: unique
12552
- };
12553
- entryList.push(entry);
12677
+ });
12554
12678
  return entryKey + "|" + unique;
12555
12679
  },
12556
12680
  /**
12557
12681
  * Get the event handler class matching the given event target and type
12558
12682
  *
12559
- * @param target {var} The event target
12683
+ * @param target {Object} The event target
12560
12684
  * @param type {String} The event type
12561
12685
  * @return {qx.event.IEventHandler|null} The best matching event handler or
12562
12686
  * <code>null</code>.
@@ -12661,28 +12785,25 @@ try {
12661
12785
  */
12662
12786
  removeListener(target, type, listener, self, capture) {
12663
12787
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12664
- var targetMap = this.__P_174_3[targetKey];
12788
+ var targetMap = this.__P_174_3.get(targetKey);
12665
12789
  if (!targetMap) {
12666
12790
  return false;
12667
12791
  }
12668
12792
  var entryKey = type + (capture ? "|capture" : "|bubble");
12669
- var entryList = targetMap[entryKey];
12670
- if (!entryList) {
12793
+ var entryMap = targetMap.get(entryKey);
12794
+ if (!entryMap) {
12671
12795
  return false;
12672
12796
  }
12673
- var entry;
12674
- for (var i = 0, l = entryList.length; i < l; i++) {
12675
- entry = entryList[i];
12676
- if (entry.handler === listener && entry.context === self) {
12677
- qx.lang.Array.removeAt(entryList, i);
12678
- this.__P_174_14(entry.unique);
12679
- if (entryList.length == 0) {
12680
- this.__P_174_13(target, type, capture);
12681
- }
12682
- return true;
12797
+ var deleted = false;
12798
+ for (const [entryKey, entry] of entryMap.entries().filter(([eK, e]) => e.handler === listener && e.context === self)) {
12799
+ deleted = true;
12800
+ entryMap.delete(entryKey);
12801
+ this.__P_174_14(entryKey);
12802
+ if (entryMap.size === 0) {
12803
+ this.__P_174_13(target, type, capture);
12683
12804
  }
12684
12805
  }
12685
- return false;
12806
+ return deleted;
12686
12807
  },
12687
12808
  /**
12688
12809
  * Removes an event listener from an event target by an ID returned by
@@ -12695,29 +12816,26 @@ try {
12695
12816
  removeListenerById(target, id) {
12696
12817
  var split = id.split("|");
12697
12818
  var type = split[0];
12698
- var capture = split[1].charCodeAt(0) == 99; // detect leading "c"
12819
+ var capture = split[1].charCodeAt(0) === 99; // detect leading "c"
12699
12820
  var unique = split[2];
12700
12821
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12701
- var targetMap = this.__P_174_3[targetKey];
12822
+ var targetMap = this.__P_174_3.get(targetKey);
12702
12823
  if (!targetMap) {
12703
12824
  return false;
12704
12825
  }
12705
12826
  var entryKey = type + (capture ? "|capture" : "|bubble");
12706
- var entryList = targetMap[entryKey];
12707
- if (!entryList) {
12827
+ var entryMap = targetMap.get(entryKey);
12828
+ if (!entryMap) {
12708
12829
  return false;
12709
12830
  }
12710
- var entry;
12711
- for (var i = 0, l = entryList.length; i < l; i++) {
12712
- entry = entryList[i];
12713
- if (entry.unique === unique) {
12714
- qx.lang.Array.removeAt(entryList, i);
12715
- this.__P_174_14(entry.unique);
12716
- if (entryList.length == 0) {
12717
- this.__P_174_13(target, type, capture);
12718
- }
12719
- return true;
12831
+ var entry = entryMap.get(unique);
12832
+ if (entry) {
12833
+ entryMap.delete(unique);
12834
+ this.__P_174_14(entry.unique);
12835
+ if (entryMap.size === 0) {
12836
+ this.__P_174_13(target, type, capture);
12720
12837
  }
12838
+ return true;
12721
12839
  }
12722
12840
  return false;
12723
12841
  },
@@ -12729,26 +12847,27 @@ try {
12729
12847
  */
12730
12848
  removeAllListeners(target) {
12731
12849
  var targetKey = target.$$hash || qx.core.ObjectRegistry.toHashCode(target);
12732
- var targetMap = this.__P_174_3[targetKey];
12850
+ var targetMap = this.__P_174_3.get(targetKey);
12733
12851
  if (!targetMap) {
12734
12852
  return false;
12735
12853
  }
12736
12854
 
12737
12855
  // Deregister from event handlers
12738
12856
  var split, type, capture;
12739
- for (var entryKey in targetMap) {
12740
- if (targetMap[entryKey].length > 0) {
12857
+ for (const [entryKey, entryMap] of targetMap) {
12858
+ if (entryMap && entryMap.size > 0) {
12741
12859
  // This is quite expensive, see bug #1283
12742
12860
  split = entryKey.split("|");
12743
- targetMap[entryKey].forEach(function (entry) {
12744
- this.__P_174_14(entry.unique);
12745
- }, this);
12861
+ for (const uniqueKey of entryMap.keys()) {
12862
+ this.__P_174_14(uniqueKey);
12863
+ }
12864
+ entryMap.clear();
12746
12865
  type = split[0];
12747
12866
  capture = split[1] === "capture";
12748
12867
  this.__P_174_13(target, type, capture);
12749
12868
  }
12750
12869
  }
12751
- delete this.__P_174_3[targetKey];
12870
+ this.__P_174_3.delete(targetKey);
12752
12871
  return true;
12753
12872
  },
12754
12873
  /**
@@ -12761,7 +12880,7 @@ try {
12761
12880
  * @internal
12762
12881
  */
12763
12882
  deleteAllListeners(targetKey) {
12764
- delete this.__P_174_3[targetKey];
12883
+ this.__P_174_3.delete(targetKey);
12765
12884
  },
12766
12885
  /**
12767
12886
  * This method is called each time the an event listener for one of the
@@ -12877,7 +12996,7 @@ try {
12877
12996
  /**
12878
12997
  * Add event to blacklist.
12879
12998
  *
12880
- * @param uid {number} unique event id
12999
+ * @param uid {String} unique event id
12881
13000
  */
12882
13001
  __P_174_14(uid) {
12883
13002
  if (this.__P_174_8 === null) {
@@ -12889,7 +13008,7 @@ try {
12889
13008
  /**
12890
13009
  * Check if the event with the given id has been removed and is therefore blacklisted for event handling
12891
13010
  *
12892
- * @param uid {number} unique event id
13011
+ * @param uid {String} unique event id
12893
13012
  * @return {boolean}
12894
13013
  */
12895
13014
  isBlacklisted(uid) {
@@ -32839,7 +32958,7 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
32839
32958
  * @return {String}
32840
32959
  */
32841
32960
  getCompilerVersion() {
32842
- return "7.7.2";
32961
+ return "7.8.0";
32843
32962
  },
32844
32963
  /**
32845
32964
  * Returns the qooxdoo version used in the application in the current or given
@@ -40918,6 +41037,19 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
40918
41037
  }
40919
41038
  };
40920
41039
  qx.Bootstrap.executePendingDefers($$dbClassInfo);
41040
+ /* ************************************************************************
41041
+
41042
+ qooxdoo - the new era of web development
41043
+
41044
+ http://qooxdoo.org
41045
+
41046
+ Copyright:
41047
+ 2020 Henner Kollmann
41048
+
41049
+ License:
41050
+ MIT: https://opensource.org/licenses/MIT
41051
+ See the LICENSE file in the project"s top-level directory for details.
41052
+ ************************************************************************ */
40921
41053
  /**
40922
41054
  * This is used to add an test case for qx test
40923
41055
  */
@@ -40963,6 +41095,14 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
40963
41095
  nullable: false,
40964
41096
  init: true
40965
41097
  },
41098
+ /**
41099
+ * If this special test fails exit process
41100
+ */
41101
+ failFast: {
41102
+ check: "Boolean",
41103
+ nullable: false,
41104
+ init: false
41105
+ },
40966
41106
  /**
40967
41107
  * The test function called by qx test
40968
41108
  *
@@ -42185,6 +42325,14 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
42185
42325
  if (data.environment) {
42186
42326
  maker.setEnvironment(data.environment);
42187
42327
  }
42328
+
42329
+ /*
42330
+ Libraries have to be added first because there is qx library
42331
+ which includes a framework version
42332
+ */
42333
+ for (let library of librariesArray) {
42334
+ maker.getAnalyser().addLibrary(library);
42335
+ }
42188
42336
  let targetEnvironment = {
42189
42337
  "qx.version": maker.getAnalyser().getQooxdooVersion(),
42190
42338
  "qx.compiler.targetType": target.getType(),
@@ -42221,6 +42369,10 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
42221
42369
  babelConfig.options = babelConfig.options || {};
42222
42370
  qx.lang.Object.mergeWith(babelConfig.options, targetConfig.babelOptions || {});
42223
42371
  maker.getAnalyser().setBabelConfig(babelConfig);
42372
+ let browserifyConfig = qx.lang.Object.clone(data.browserify || {}, true);
42373
+ browserifyConfig.options = browserifyConfig.options || {};
42374
+ qx.lang.Object.mergeWith(browserifyConfig.options, targetConfig.browserifyOptions || {});
42375
+ maker.getAnalyser().setBrowserifyConfig(browserifyConfig);
42224
42376
  var addCreatedAt = targetConfig["addCreatedAt"] || t.argv["addCreatedAt"];
42225
42377
  if (addCreatedAt) {
42226
42378
  maker.getAnalyser().setAddCreatedAt(true);
@@ -42229,9 +42381,6 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
42229
42381
  if (verboseCreatedAt) {
42230
42382
  maker.getAnalyser().setVerboseCreatedAt(true);
42231
42383
  }
42232
- for (let library of librariesArray) {
42233
- maker.getAnalyser().addLibrary(library);
42234
- }
42235
42384
  let allApplicationTypes = {};
42236
42385
  appConfigs.forEach(appConfig => {
42237
42386
  var app = appConfig.app = new qx.tool.compiler.app.Application(appConfig["class"]);
@@ -48155,9 +48304,9 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
48155
48304
  },
48156
48305
  CallExpression(path) {
48157
48306
  const name = collapseMemberExpression(path.node.callee);
48158
- if ((name === "qx.core.Environment.select" || name === "qx.core.Environment.get") && types.isLiteral(path.node.arguments[0])) {
48307
+ const env = t.__P_21_0.getEnvironment();
48308
+ if (env["qx.environment.allowRuntimeMutations"] !== true && (name === "qx.core.Environment.select" || name === "qx.core.Environment.get") && types.isLiteral(path.node.arguments[0])) {
48159
48309
  const arg = path.node.arguments[0];
48160
- const env = t.__P_21_0.getEnvironment();
48161
48310
  const envValue = env[arg.value];
48162
48311
  if (envValue !== undefined) {
48163
48312
  if (name === "qx.core.Environment.get") {
@@ -50820,6 +50969,7 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
50820
50969
  "require": true
50821
50970
  },
50822
50971
  "qx.tool.utils.files.Utils": {},
50972
+ "qx.lang.Object": {},
50823
50973
  "qx.tool.compiler.Console": {}
50824
50974
  }
50825
50975
  };
@@ -50963,12 +51113,15 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
50963
51113
  // Make them equivalent.
50964
51114
  builtins.process = builtins._process;
50965
51115
  return new Promise((resolve, reject) => {
50966
- let b = browserify([], {
51116
+ var _this$getAppMeta$getA;
51117
+ const options = {
50967
51118
  builtins: builtins,
50968
51119
  ignoreMissing: true,
50969
51120
  insertGlobals: true,
50970
51121
  detectGlobals: true
50971
- });
51122
+ };
51123
+ qx.lang.Object.mergeWith(options, ((_this$getAppMeta$getA = this.getAppMeta().getAnalyser().getBrowserifyConfig()) === null || _this$getAppMeta$getA === void 0 ? void 0 : _this$getAppMeta$getA.options) || {}, false);
51124
+ let b = browserify([], options);
50972
51125
  b._mdeps.on("missing", (id, parent) => {
50973
51126
  let message = [];
50974
51127
  message.push(`ERROR: could not locate require()d module: "${id}"`);
@@ -51797,11 +51950,6 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
51797
51950
  }
51798
51951
  const babelCore = require("@babel/core");
51799
51952
  let src = await fs.promises.readFile(classFilename, "utf8");
51800
- let babelConfig = {
51801
- options: {
51802
- modules: false
51803
- }
51804
- };
51805
51953
  let plugins = [require("@babel/plugin-syntax-jsx"), this.__P_25_1()];
51806
51954
  var config = {
51807
51955
  ast: true,
@@ -53147,6 +53295,12 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
53147
53295
  nullable: true,
53148
53296
  check: "Object"
53149
53297
  },
53298
+ /** configuration of browserify */
53299
+ browserifyConfig: {
53300
+ init: null,
53301
+ nullable: true,
53302
+ check: "Object"
53303
+ },
53150
53304
  /** list of global ignores */
53151
53305
  ignores: {
53152
53306
  init: [],
@@ -59259,7 +59413,7 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
59259
59413
  let exitCode = evt.getData();
59260
59414
  // overwrite error code only in case of errors
59261
59415
  if (exitCode !== 0 && argv.failFast) {
59262
- process.exit(exitCode);
59416
+ process.exit(Math.min(255, exitCode));
59263
59417
  }
59264
59418
  });
59265
59419
  },
@@ -59306,6 +59460,9 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
59306
59460
  }
59307
59461
  // overwrite error code only in case of errors
59308
59462
  if (exitCode !== 0) {
59463
+ if (test.getFailFast()) {
59464
+ this.argv.failFast = true;
59465
+ }
59309
59466
  this.setExitCode(exitCode);
59310
59467
  }
59311
59468
  });
@@ -59333,6 +59490,9 @@ Framework: v${await this.getQxVersion()} in ${await this.getQxPath()}`);
59333
59490
  });
59334
59491
  this.addListener("afterStart", async () => {
59335
59492
  qx.tool.compiler.Console.info(`Running unit tests`);
59493
+ if (this.argv.verbose) {
59494
+ console.log(this.argv);
59495
+ }
59336
59496
  await this.fireDataEventAsync("runTests", this);
59337
59497
  if (this.getCompilerApi() && typeof this.getCompilerApi().beforeTests == "function") {
59338
59498
  await this.getCompilerApi().beforeTests(this);
@@ -66923,30 +67083,6 @@ qx.$$packageData['0'] = {
66923
67083
  }
66924
67084
  },
66925
67085
  "resources": {
66926
- "qx/decoration/Simple/checkbox/checked-disabled.png": [
66927
- 6,
66928
- 6,
66929
- "png",
66930
- "qx"
66931
- ],
66932
- "qx/decoration/Simple/checkbox/checked.png": [
66933
- 6,
66934
- 6,
66935
- "png",
66936
- "qx"
66937
- ],
66938
- "qx/decoration/Simple/checkbox/undetermined-disabled.png": [
66939
- 6,
66940
- 2,
66941
- "png",
66942
- "qx"
66943
- ],
66944
- "qx/decoration/Simple/checkbox/undetermined.png": [
66945
- 6,
66946
- 2,
66947
- "png",
66948
- "qx"
66949
- ],
66950
67086
  "qx/decoration/Simple/arrows/down-invert.gif": [
66951
67087
  7,
66952
67088
  4,
@@ -67019,6 +67155,30 @@ qx.$$packageData['0'] = {
67019
67155
  "gif",
67020
67156
  "qx"
67021
67157
  ],
67158
+ "qx/decoration/Simple/checkbox/checked-disabled.png": [
67159
+ 6,
67160
+ 6,
67161
+ "png",
67162
+ "qx"
67163
+ ],
67164
+ "qx/decoration/Simple/checkbox/checked.png": [
67165
+ 6,
67166
+ 6,
67167
+ "png",
67168
+ "qx"
67169
+ ],
67170
+ "qx/decoration/Simple/checkbox/undetermined-disabled.png": [
67171
+ 6,
67172
+ 2,
67173
+ "png",
67174
+ "qx"
67175
+ ],
67176
+ "qx/decoration/Simple/checkbox/undetermined.png": [
67177
+ 6,
67178
+ 2,
67179
+ "png",
67180
+ "qx"
67181
+ ],
67022
67182
  "qx/decoration/Simple/colorselector/brightness-field.png": [
67023
67183
  19,
67024
67184
  256,
@@ -67043,27 +67203,27 @@ qx.$$packageData['0'] = {
67043
67203
  "gif",
67044
67204
  "qx"
67045
67205
  ],
67046
- "qx/decoration/Simple/cursors/alias.gif": [
67047
- 19,
67048
- 15,
67206
+ "qx/decoration/Simple/menu/checkbox-invert.gif": [
67207
+ 16,
67208
+ 7,
67049
67209
  "gif",
67050
67210
  "qx"
67051
67211
  ],
67052
- "qx/decoration/Simple/cursors/copy.gif": [
67053
- 19,
67054
- 15,
67212
+ "qx/decoration/Simple/menu/checkbox.gif": [
67213
+ 16,
67214
+ 7,
67055
67215
  "gif",
67056
67216
  "qx"
67057
67217
  ],
67058
- "qx/decoration/Simple/cursors/move.gif": [
67059
- 13,
67060
- 9,
67218
+ "qx/decoration/Simple/menu/radiobutton-invert.gif": [
67219
+ 16,
67220
+ 5,
67061
67221
  "gif",
67062
67222
  "qx"
67063
67223
  ],
67064
- "qx/decoration/Simple/cursors/nodrop.gif": [
67065
- 20,
67066
- 20,
67224
+ "qx/decoration/Simple/menu/radiobutton.gif": [
67225
+ 16,
67226
+ 5,
67067
67227
  "gif",
67068
67228
  "qx"
67069
67229
  ],
@@ -67097,72 +67257,6 @@ qx.$$packageData['0'] = {
67097
67257
  "gif",
67098
67258
  "qx"
67099
67259
  ],
67100
- "qx/decoration/Simple/table/ascending-invert.png": [
67101
- 10,
67102
- 10,
67103
- "png",
67104
- "qx"
67105
- ],
67106
- "qx/decoration/Simple/table/ascending.png": [
67107
- 10,
67108
- 10,
67109
- "png",
67110
- "qx"
67111
- ],
67112
- "qx/decoration/Simple/table/boolean-false.png": [
67113
- 11,
67114
- 11,
67115
- "png",
67116
- "qx"
67117
- ],
67118
- "qx/decoration/Simple/table/descending-invert.png": [
67119
- 10,
67120
- 10,
67121
- "png",
67122
- "qx"
67123
- ],
67124
- "qx/decoration/Simple/table/boolean-true.png": [
67125
- 11,
67126
- 11,
67127
- "png",
67128
- "qx"
67129
- ],
67130
- "qx/decoration/Simple/table/descending.png": [
67131
- 10,
67132
- 10,
67133
- "png",
67134
- "qx"
67135
- ],
67136
- "qx/decoration/Simple/table/select-column-order.png": [
67137
- 10,
67138
- 9,
67139
- "png",
67140
- "qx"
67141
- ],
67142
- "qx/decoration/Simple/menu/checkbox-invert.gif": [
67143
- 16,
67144
- 7,
67145
- "gif",
67146
- "qx"
67147
- ],
67148
- "qx/decoration/Simple/menu/checkbox.gif": [
67149
- 16,
67150
- 7,
67151
- "gif",
67152
- "qx"
67153
- ],
67154
- "qx/decoration/Simple/menu/radiobutton-invert.gif": [
67155
- 16,
67156
- 5,
67157
- "gif",
67158
- "qx"
67159
- ],
67160
- "qx/decoration/Simple/menu/radiobutton.gif": [
67161
- 16,
67162
- 5,
67163
- "gif",
67164
- "qx"
67165
- ],
67166
67260
  "qx/decoration/Simple/window/close-white.gif": [
67167
67261
  10,
67168
67262
  9,
@@ -67229,13 +67323,13 @@ qx.$$packageData['0'] = {
67229
67323
  "gif",
67230
67324
  "qx"
67231
67325
  ],
67232
- "qx/decoration/Simple/treevirtual/end.gif": [
67326
+ "qx/decoration/Simple/treevirtual/end_minus.gif": [
67233
67327
  19,
67234
67328
  16,
67235
67329
  "gif",
67236
67330
  "qx"
67237
67331
  ],
67238
- "qx/decoration/Simple/treevirtual/end_minus.gif": [
67332
+ "qx/decoration/Simple/treevirtual/end.gif": [
67239
67333
  19,
67240
67334
  16,
67241
67335
  "gif",
@@ -67271,18 +67365,84 @@ qx.$$packageData['0'] = {
67271
67365
  "gif",
67272
67366
  "qx"
67273
67367
  ],
67274
- "qx/decoration/Simple/treevirtual/start_minus.gif": [
67368
+ "qx/decoration/Simple/treevirtual/start_plus.gif": [
67275
67369
  19,
67276
67370
  16,
67277
67371
  "gif",
67278
67372
  "qx"
67279
67373
  ],
67280
- "qx/decoration/Simple/treevirtual/start_plus.gif": [
67374
+ "qx/decoration/Simple/treevirtual/start_minus.gif": [
67281
67375
  19,
67282
67376
  16,
67283
67377
  "gif",
67284
67378
  "qx"
67285
67379
  ],
67380
+ "qx/decoration/Simple/cursors/alias.gif": [
67381
+ 19,
67382
+ 15,
67383
+ "gif",
67384
+ "qx"
67385
+ ],
67386
+ "qx/decoration/Simple/cursors/copy.gif": [
67387
+ 19,
67388
+ 15,
67389
+ "gif",
67390
+ "qx"
67391
+ ],
67392
+ "qx/decoration/Simple/cursors/move.gif": [
67393
+ 13,
67394
+ 9,
67395
+ "gif",
67396
+ "qx"
67397
+ ],
67398
+ "qx/decoration/Simple/cursors/nodrop.gif": [
67399
+ 20,
67400
+ 20,
67401
+ "gif",
67402
+ "qx"
67403
+ ],
67404
+ "qx/decoration/Simple/table/ascending-invert.png": [
67405
+ 10,
67406
+ 10,
67407
+ "png",
67408
+ "qx"
67409
+ ],
67410
+ "qx/decoration/Simple/table/ascending.png": [
67411
+ 10,
67412
+ 10,
67413
+ "png",
67414
+ "qx"
67415
+ ],
67416
+ "qx/decoration/Simple/table/boolean-false.png": [
67417
+ 11,
67418
+ 11,
67419
+ "png",
67420
+ "qx"
67421
+ ],
67422
+ "qx/decoration/Simple/table/boolean-true.png": [
67423
+ 11,
67424
+ 11,
67425
+ "png",
67426
+ "qx"
67427
+ ],
67428
+ "qx/decoration/Simple/table/descending-invert.png": [
67429
+ 10,
67430
+ 10,
67431
+ "png",
67432
+ "qx"
67433
+ ],
67434
+ "qx/decoration/Simple/table/descending.png": [
67435
+ 10,
67436
+ 10,
67437
+ "png",
67438
+ "qx"
67439
+ ],
67440
+ "qx/decoration/Simple/table/select-column-order.png": [
67441
+ 10,
67442
+ 9,
67443
+ "png",
67444
+ "qx"
67445
+ ],
67286
67446
  "qx/static/blank.png": [
67287
67447
  1,
67288
67448
  1,
@@ -67325,13 +67485,13 @@ qx.$$packageData['0'] = {
67325
67485
  "json",
67326
67486
  "qx"
67327
67487
  ],
67328
- "qx/tool/schema/qooxdoo-1-0-0.json": [
67488
+ "qx/tool/schema/Manifest-2-0-0.json": [
67329
67489
  null,
67330
67490
  null,
67331
67491
  "json",
67332
67492
  "qx"
67333
67493
  ],
67334
- "qx/tool/schema/Manifest-2-0-0.json": [
67494
+ "qx/tool/schema/qooxdoo-1-0-0.json": [
67335
67495
  null,
67336
67496
  null,
67337
67497
  "json",
@@ -67355,6 +67515,18 @@ qx.$$packageData['0'] = {
67355
67515
  "ts",
67356
67516
  "qx"
67357
67517
  ],
67518
+ "qx/tool/website/layouts/default.dot": [
67519
+ null,
67520
+ null,
67521
+ "dot",
67522
+ "qx"
67523
+ ],
67524
+ "qx/tool/website/sass/qooxdoo.scss": [
67525
+ null,
67526
+ null,
67527
+ "scss",
67528
+ "qx"
67529
+ ],
67358
67530
  "qx/tool/website/build/404.html": [
67359
67531
  null,
67360
67532
  null,
@@ -67379,16 +67551,22 @@ qx.$$packageData['0'] = {
67379
67551
  "css",
67380
67552
  "qx"
67381
67553
  ],
67382
- "qx/tool/website/layouts/default.dot": [
67554
+ "qx/tool/website/src/404.html": [
67383
67555
  null,
67384
67556
  null,
67385
- "dot",
67557
+ "html",
67386
67558
  "qx"
67387
67559
  ],
67388
- "qx/tool/website/sass/qooxdoo.scss": [
67560
+ "qx/tool/website/src/about.md": [
67389
67561
  null,
67390
67562
  null,
67391
- "scss",
67563
+ "md",
67564
+ "qx"
67565
+ ],
67566
+ "qx/tool/website/src/index.html": [
67567
+ null,
67568
+ null,
67569
+ "html",
67392
67570
  "qx"
67393
67571
  ],
67394
67572
  "qx/tool/website/partials/footer.html": [
@@ -67433,24 +67611,6 @@ qx.$$packageData['0'] = {
67433
67611
  "svg",
67434
67612
  "qx"
67435
67613
  ],
67436
- "qx/tool/website/src/404.html": [
67437
- null,
67438
- null,
67439
- "html",
67440
- "qx"
67441
- ],
67442
- "qx/tool/website/src/about.md": [
67443
- null,
67444
- null,
67445
- "md",
67446
- "qx"
67447
- ],
67448
- "qx/tool/website/src/index.html": [
67449
- null,
67450
- null,
67451
- "html",
67452
- "qx"
67453
- ],
67454
67614
  "qx/tool/cli/templates/class/default.tmpl.js": [
67455
67615
  null,
67456
67616
  null,
@@ -67469,13 +67629,13 @@ qx.$$packageData['0'] = {
67469
67629
  "js",
67470
67630
  "qx"
67471
67631
  ],
67472
- "qx/tool/cli/templates/class/singleton.tmpl.js": [
67632
+ "qx/tool/cli/templates/class/mixin.tmpl.js": [
67473
67633
  null,
67474
67634
  null,
67475
67635
  "js",
67476
67636
  "qx"
67477
67637
  ],
67478
- "qx/tool/cli/templates/class/mixin.tmpl.js": [
67638
+ "qx/tool/cli/templates/class/singleton.tmpl.js": [
67479
67639
  null,
67480
67640
  null,
67481
67641
  "js",
@@ -67547,30 +67707,24 @@ qx.$$packageData['0'] = {
67547
67707
  "js",
67548
67708
  "qx"
67549
67709
  ],
67550
- "qx/tool/website/build/assets/jquery.js": [
67551
- null,
67552
- null,
67553
- "js",
67554
- "qx"
67555
- ],
67556
67710
  "qx/tool/website/build/assets/logo.svg": [
67557
67711
  512,
67558
67712
  145,
67559
67713
  "svg",
67560
67714
  "qx"
67561
67715
  ],
67716
+ "qx/tool/website/build/assets/jquery.js": [
67717
+ null,
67718
+ null,
67719
+ "js",
67720
+ "qx"
67721
+ ],
67562
67722
  "qx/tool/website/build/assets/qx-api.png": [
67563
67723
  1144,
67564
67724
  640,
67565
67725
  "png",
67566
67726
  "qx"
67567
67727
  ],
67568
- "qx/tool/website/build/assets/qx-ide.png": [
67569
- 3183,
67570
- 1752,
67571
- "png",
67572
- "qx"
67573
- ],
67574
67728
  "qx/tool/website/build/assets/qx-oo.png": [
67575
67729
  870,
67576
67730
  502,
@@ -67583,6 +67737,12 @@ qx.$$packageData['0'] = {
67583
67737
  "svg",
67584
67738
  "qx"
67585
67739
  ],
67740
+ "qx/tool/website/build/assets/qx-ide.png": [
67741
+ 3183,
67742
+ 1752,
67743
+ "png",
67744
+ "qx"
67745
+ ],
67586
67746
  "qx/tool/website/build/diagnostics/dependson.html": [
67587
67747
  null,
67588
67748
  null,
@@ -67643,6 +67803,12 @@ qx.$$packageData['0'] = {
67643
67803
  "map",
67644
67804
  "qx"
67645
67805
  ],
67806
+ "qx/tool/website/src/assets/favicon.png": [
67807
+ 32,
67808
+ 32,
67809
+ "png",
67810
+ "qx"
67811
+ ],
67646
67812
  "qx/tool/website/src/assets/buttons.js": [
67647
67813
  null,
67648
67814
  null,
@@ -67655,12 +67821,6 @@ qx.$$packageData['0'] = {
67655
67821
  "js",
67656
67822
  "qx"
67657
67823
  ],
67658
- "qx/tool/website/src/assets/favicon.png": [
67659
- 32,
67660
- 32,
67661
- "png",
67662
- "qx"
67663
- ],
67664
67824
  "qx/tool/website/src/assets/jquery.js": [
67665
67825
  null,
67666
67826
  null,
@@ -67673,18 +67833,18 @@ qx.$$packageData['0'] = {
67673
67833
  "svg",
67674
67834
  "qx"
67675
67835
  ],
67676
- "qx/tool/website/src/assets/qx-ide.png": [
67677
- 3183,
67678
- 1752,
67679
- "png",
67680
- "qx"
67681
- ],
67682
67836
  "qx/tool/website/src/assets/qx-api.png": [
67683
67837
  1144,
67684
67838
  640,
67685
67839
  "png",
67686
67840
  "qx"
67687
67841
  ],
67842
+ "qx/tool/website/src/assets/qx-ide.png": [
67843
+ 3183,
67844
+ 1752,
67845
+ "png",
67846
+ "qx"
67847
+ ],
67688
67848
  "qx/tool/website/src/assets/qx-oo.png": [
67689
67849
  870,
67690
67850
  502,
@@ -67727,121 +67887,127 @@ qx.$$packageData['0'] = {
67727
67887
  "js",
67728
67888
  "qx"
67729
67889
  ],
67730
- "qx/tool/cli/templates/skeleton/desktop/.gitignore.tmpl": [
67890
+ "qx/tool/cli/templates/skeleton/mobile/compile.tmpl.json": [
67731
67891
  null,
67732
67892
  null,
67733
- "tmpl",
67893
+ "json",
67734
67894
  "qx"
67735
67895
  ],
67736
- "qx/tool/cli/templates/skeleton/desktop/compile.tmpl.json": [
67896
+ "qx/tool/cli/templates/skeleton/mobile/.gitignore.tmpl": [
67737
67897
  null,
67738
67898
  null,
67739
- "json",
67899
+ "tmpl",
67740
67900
  "qx"
67741
67901
  ],
67742
- "qx/tool/cli/templates/skeleton/desktop/Manifest.tmpl.json": [
67902
+ "qx/tool/cli/templates/skeleton/mobile/Manifest.tmpl.json": [
67743
67903
  null,
67744
67904
  null,
67745
67905
  "json",
67746
67906
  "qx"
67747
67907
  ],
67748
- "qx/tool/cli/templates/skeleton/desktop/readme.tmpl.md": [
67908
+ "qx/tool/cli/templates/skeleton/mobile/readme.tmpl.md": [
67749
67909
  null,
67750
67910
  null,
67751
67911
  "md",
67752
67912
  "qx"
67753
67913
  ],
67754
- "qx/tool/cli/templates/skeleton/mobile/.gitignore.tmpl": [
67914
+ "qx/tool/cli/templates/skeleton/desktop/compile.tmpl.json": [
67755
67915
  null,
67756
67916
  null,
67757
- "tmpl",
67917
+ "json",
67758
67918
  "qx"
67759
67919
  ],
67760
- "qx/tool/cli/templates/skeleton/mobile/Manifest.tmpl.json": [
67920
+ "qx/tool/cli/templates/skeleton/desktop/Manifest.tmpl.json": [
67761
67921
  null,
67762
67922
  null,
67763
67923
  "json",
67764
67924
  "qx"
67765
67925
  ],
67766
- "qx/tool/cli/templates/skeleton/mobile/compile.tmpl.json": [
67926
+ "qx/tool/cli/templates/skeleton/desktop/.gitignore.tmpl": [
67767
67927
  null,
67768
67928
  null,
67769
- "json",
67929
+ "tmpl",
67770
67930
  "qx"
67771
67931
  ],
67772
- "qx/tool/cli/templates/skeleton/mobile/readme.tmpl.md": [
67932
+ "qx/tool/cli/templates/skeleton/desktop/readme.tmpl.md": [
67773
67933
  null,
67774
67934
  null,
67775
67935
  "md",
67776
67936
  "qx"
67777
67937
  ],
67778
- "qx/tool/cli/templates/skeleton/server/.gitignore.tmpl": [
67938
+ "qx/tool/cli/templates/skeleton/package/.gitignore.tmpl": [
67779
67939
  null,
67780
67940
  null,
67781
67941
  "tmpl",
67782
67942
  "qx"
67783
67943
  ],
67784
- "qx/tool/cli/templates/skeleton/server/compile.tmpl.json": [
67944
+ "qx/tool/cli/templates/skeleton/package/compile.tmpl.json": [
67785
67945
  null,
67786
67946
  null,
67787
67947
  "json",
67788
67948
  "qx"
67789
67949
  ],
67790
- "qx/tool/cli/templates/skeleton/server/Manifest.tmpl.json": [
67950
+ "qx/tool/cli/templates/skeleton/package/readme.tmpl.md": [
67791
67951
  null,
67792
67952
  null,
67793
- "json",
67953
+ "md",
67794
67954
  "qx"
67795
67955
  ],
67796
- "qx/tool/cli/templates/skeleton/server/readme.tmpl.txt": [
67956
+ "qx/tool/cli/templates/skeleton/package/Manifest.tmpl.json": [
67797
67957
  null,
67798
67958
  null,
67799
- "txt",
67959
+ "json",
67800
67960
  "qx"
67801
67961
  ],
67802
- "qx/tool/cli/templates/skeleton/package/.gitignore.tmpl": [
67962
+ "qx/tool/cli/templates/skeleton/server/.gitignore.tmpl": [
67803
67963
  null,
67804
67964
  null,
67805
67965
  "tmpl",
67806
67966
  "qx"
67807
67967
  ],
67808
- "qx/tool/cli/templates/skeleton/package/compile.tmpl.json": [
67968
+ "qx/tool/cli/templates/skeleton/server/Manifest.tmpl.json": [
67809
67969
  null,
67810
67970
  null,
67811
67971
  "json",
67812
67972
  "qx"
67813
67973
  ],
67814
- "qx/tool/cli/templates/skeleton/package/Manifest.tmpl.json": [
67974
+ "qx/tool/cli/templates/skeleton/server/compile.tmpl.json": [
67815
67975
  null,
67816
67976
  null,
67817
67977
  "json",
67818
67978
  "qx"
67819
67979
  ],
67820
- "qx/tool/cli/templates/skeleton/package/readme.tmpl.md": [
67980
+ "qx/tool/cli/templates/skeleton/server/readme.tmpl.txt": [
67821
67981
  null,
67822
67982
  null,
67823
- "md",
67983
+ "txt",
67824
67984
  "qx"
67825
67985
  ],
67826
- "qx/tool/cli/templates/skeleton/desktop/source/boot/index.tmpl.html": [
67986
+ "qx/tool/cli/templates/skeleton/mobile/source/boot/nojs.tmpl.html": [
67827
67987
  null,
67828
67988
  null,
67829
67989
  "html",
67830
67990
  "qx"
67831
67991
  ],
67832
- "qx/tool/cli/templates/skeleton/desktop/source/boot/nojs.tmpl.html": [
67992
+ "qx/tool/cli/templates/skeleton/mobile/source/boot/index.tmpl.html": [
67833
67993
  null,
67834
67994
  null,
67835
67995
  "html",
67836
67996
  "qx"
67837
67997
  ],
67838
- "qx/tool/cli/templates/skeleton/mobile/source/boot/nojs.tmpl.html": [
67998
+ "qx/tool/cli/templates/skeleton/mobile/source/translation/readme.txt": [
67999
+ null,
68000
+ null,
68001
+ "txt",
68002
+ "qx"
68003
+ ],
68004
+ "qx/tool/cli/templates/skeleton/desktop/source/boot/index.tmpl.html": [
67839
68005
  null,
67840
68006
  null,
67841
68007
  "html",
67842
68008
  "qx"
67843
68009
  ],
67844
- "qx/tool/cli/templates/skeleton/mobile/source/boot/index.tmpl.html": [
68010
+ "qx/tool/cli/templates/skeleton/desktop/source/boot/nojs.tmpl.html": [
67845
68011
  null,
67846
68012
  null,
67847
68013
  "html",
@@ -67853,7 +68019,7 @@ qx.$$packageData['0'] = {
67853
68019
  "txt",
67854
68020
  "qx"
67855
68021
  ],
67856
- "qx/tool/cli/templates/skeleton/mobile/source/translation/readme.txt": [
68022
+ "qx/tool/cli/templates/skeleton/package/source/translation/readme.txt": [
67857
68023
  null,
67858
68024
  null,
67859
68025
  "txt",
@@ -67865,78 +68031,78 @@ qx.$$packageData['0'] = {
67865
68031
  "txt",
67866
68032
  "qx"
67867
68033
  ],
67868
- "qx/tool/cli/templates/skeleton/package/source/translation/readme.txt": [
68034
+ "qx/tool/cli/templates/skeleton/mobile/source/class/custom/Application.tmpl.js": [
67869
68035
  null,
67870
68036
  null,
67871
- "txt",
68037
+ "js",
67872
68038
  "qx"
67873
68039
  ],
67874
- "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/app.png": [
68040
+ "qx/tool/cli/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js": [
68041
+ null,
68042
+ null,
68043
+ "js",
68044
+ "qx"
68045
+ ],
68046
+ "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/app.png": [
67875
68047
  180,
67876
68048
  180,
67877
68049
  "png",
67878
68050
  "qx"
67879
68051
  ],
67880
- "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/favicon.png": [
68052
+ "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/favicon.png": [
67881
68053
  32,
67882
68054
  32,
67883
68055
  "png",
67884
68056
  "qx"
67885
68057
  ],
67886
- "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/js_256x256.png": [
68058
+ "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/js_256x256.png": [
67887
68059
  256,
67888
68060
  256,
67889
68061
  "png",
67890
68062
  "qx"
67891
68063
  ],
67892
- "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/test.png": [
67893
- 32,
67894
- 32,
67895
- "png",
67896
- "qx"
67897
- ],
67898
68064
  "qx/tool/cli/templates/skeleton/desktop/source/class/custom/Application.tmpl.js": [
67899
68065
  null,
67900
68066
  null,
67901
68067
  "js",
67902
68068
  "qx"
67903
68069
  ],
67904
- "qx/tool/cli/templates/skeleton/mobile/source/class/custom/Application.tmpl.js": [
67905
- null,
67906
- null,
67907
- "js",
67908
- "qx"
67909
- ],
67910
68070
  "qx/tool/cli/templates/skeleton/desktop/source/class/custom/__init__.tmpl.js": [
67911
68071
  null,
67912
68072
  null,
67913
68073
  "js",
67914
68074
  "qx"
67915
68075
  ],
67916
- "qx/tool/cli/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js": [
67917
- null,
67918
- null,
67919
- "js",
67920
- "qx"
67921
- ],
67922
- "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/app.png": [
68076
+ "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/app.png": [
67923
68077
  180,
67924
68078
  180,
67925
68079
  "png",
67926
68080
  "qx"
67927
68081
  ],
67928
- "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/favicon.png": [
68082
+ "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/favicon.png": [
67929
68083
  32,
67930
68084
  32,
67931
68085
  "png",
67932
68086
  "qx"
67933
68087
  ],
67934
- "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/js_256x256.png": [
68088
+ "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/js_256x256.png": [
67935
68089
  256,
67936
68090
  256,
67937
68091
  "png",
67938
68092
  "qx"
67939
68093
  ],
68094
+ "qx/tool/cli/templates/skeleton/desktop/source/resource/custom/test.png": [
68095
+ 32,
68096
+ 32,
68097
+ "png",
68098
+ "qx"
68099
+ ],
68100
+ "qx/tool/cli/templates/skeleton/package/source/resource/custom/test.png": [
68101
+ 32,
68102
+ 32,
68103
+ "png",
68104
+ "qx"
68105
+ ],
67940
68106
  "qx/tool/cli/templates/skeleton/server/source/class/custom/Application.tmpl.js": [
67941
68107
  null,
67942
68108
  null,
@@ -67967,88 +68133,82 @@ qx.$$packageData['0'] = {
67967
68133
  "js",
67968
68134
  "qx"
67969
68135
  ],
67970
- "qx/tool/cli/templates/skeleton/package/source/resource/custom/test.png": [
67971
- 32,
67972
- 32,
67973
- "png",
67974
- "qx"
67975
- ],
67976
- "qx/tool/cli/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js": [
68136
+ "qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js": [
67977
68137
  null,
67978
68138
  null,
67979
68139
  "js",
67980
68140
  "qx"
67981
68141
  ],
67982
- "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js": [
68142
+ "qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js": [
67983
68143
  null,
67984
68144
  null,
67985
68145
  "js",
67986
68146
  "qx"
67987
68147
  ],
67988
- "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js": [
68148
+ "qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js": [
67989
68149
  null,
67990
68150
  null,
67991
68151
  "js",
67992
68152
  "qx"
67993
68153
  ],
67994
- "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js": [
68154
+ "qx/tool/cli/templates/skeleton/mobile/source/theme/custom/scss/custom.scss": [
67995
68155
  null,
67996
68156
  null,
67997
- "js",
68157
+ "scss",
67998
68158
  "qx"
67999
68159
  ],
68000
- "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js": [
68160
+ "qx/tool/cli/templates/skeleton/mobile/source/theme/custom/scss/_styles.scss": [
68001
68161
  null,
68002
68162
  null,
68003
- "js",
68163
+ "scss",
68004
68164
  "qx"
68005
68165
  ],
68006
- "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js": [
68166
+ "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl": [
68007
68167
  null,
68008
68168
  null,
68009
- "js",
68169
+ "tmpl",
68010
68170
  "qx"
68011
68171
  ],
68012
- "qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js": [
68172
+ "qx/tool/cli/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js": [
68013
68173
  null,
68014
68174
  null,
68015
68175
  "js",
68016
68176
  "qx"
68017
68177
  ],
68018
- "qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js": [
68178
+ "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js": [
68019
68179
  null,
68020
68180
  null,
68021
68181
  "js",
68022
68182
  "qx"
68023
68183
  ],
68024
- "qx/tool/cli/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js": [
68184
+ "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js": [
68025
68185
  null,
68026
68186
  null,
68027
68187
  "js",
68028
68188
  "qx"
68029
68189
  ],
68030
- "qx/tool/cli/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl": [
68190
+ "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js": [
68031
68191
  null,
68032
68192
  null,
68033
- "tmpl",
68193
+ "js",
68034
68194
  "qx"
68035
68195
  ],
68036
- "qx/tool/cli/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js": [
68196
+ "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js": [
68037
68197
  null,
68038
68198
  null,
68039
68199
  "js",
68040
68200
  "qx"
68041
68201
  ],
68042
- "qx/tool/cli/templates/skeleton/mobile/source/theme/custom/scss/custom.scss": [
68202
+ "qx/tool/cli/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js": [
68043
68203
  null,
68044
68204
  null,
68045
- "scss",
68205
+ "js",
68046
68206
  "qx"
68047
68207
  ],
68048
- "qx/tool/cli/templates/skeleton/mobile/source/theme/custom/scss/_styles.scss": [
68208
+ "qx/tool/cli/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js": [
68049
68209
  null,
68050
68210
  null,
68051
- "scss",
68211
+ "js",
68052
68212
  "qx"
68053
68213
  ],
68054
68214
  "qx/tool/cli/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js": [
@@ -68057,19 +68217,19 @@ qx.$$packageData['0'] = {
68057
68217
  "js",
68058
68218
  "qx"
68059
68219
  ],
68060
- "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js": [
68220
+ "qx/tool/cli/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js": [
68061
68221
  null,
68062
68222
  null,
68063
68223
  "js",
68064
68224
  "qx"
68065
68225
  ],
68066
- "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js": [
68226
+ "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js": [
68067
68227
  null,
68068
68228
  null,
68069
68229
  "js",
68070
68230
  "qx"
68071
68231
  ],
68072
- "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js": [
68232
+ "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js": [
68073
68233
  null,
68074
68234
  null,
68075
68235
  "js",
@@ -68081,13 +68241,13 @@ qx.$$packageData['0'] = {
68081
68241
  "js",
68082
68242
  "qx"
68083
68243
  ],
68084
- "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js": [
68244
+ "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js": [
68085
68245
  null,
68086
68246
  null,
68087
68247
  "js",
68088
68248
  "qx"
68089
68249
  ],
68090
- "qx/tool/cli/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js": [
68250
+ "qx/tool/cli/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js": [
68091
68251
  null,
68092
68252
  null,
68093
68253
  "js",