@qooxdoo/framework 8.0.0-beta.2 → 8.0.0-beta.3

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 (29) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/Manifest.json +1 -1
  3. package/lib/compiler/compile-info.json +42 -43
  4. package/lib/compiler/index.js +555 -645
  5. package/package.json +1 -1
  6. package/source/class/qx/Class.js +23 -4
  7. package/source/class/qx/Mixin.js +15 -6
  8. package/source/class/qx/core/check/AbstractCheck.js +5 -1
  9. package/source/class/qx/core/check/CheckFactory.js +6 -0
  10. package/source/class/qx/core/check/DynamicTypeCheck.js +5 -0
  11. package/source/class/qx/core/property/ExplicitPropertyStorage.js +7 -19
  12. package/source/class/qx/core/property/IPropertyStorage.js +2 -21
  13. package/source/class/qx/core/property/Property.js +96 -72
  14. package/source/class/qx/core/property/SimplePropertyStorage.js +2 -18
  15. package/source/class/qx/data/MBinding.js +1 -1
  16. package/source/class/qx/data/SingleValueBinding.js +58 -100
  17. package/source/class/qx/data/binding/AbstractSegment.js +15 -10
  18. package/source/class/qx/data/binding/PropNameSegment.js +34 -11
  19. package/source/class/qx/test/Mixin.js +219 -0
  20. package/source/class/qx/test/Promise.js +10 -11
  21. package/source/class/qx/test/core/Property.js +22 -16
  22. package/source/class/qx/test/data/singlevalue/Async.js +17 -4
  23. package/source/class/qx/test/performance/Property.js +0 -1
  24. package/source/class/qx/test/ui/core/SingleSelectionManager.js +150 -0
  25. package/source/class/qx/tool/compiler/cli/api/CompilerApi.js +1 -2
  26. package/source/class/qx/ui/core/SingleSelectionManager.js +4 -4
  27. package/source/class/qx/ui/form/validation/Manager.js +1 -1
  28. package/source/resource/qx/decoration/Modern/table/boolean-false.png +0 -0
  29. package/source/resource/qx/decoration/Modern/table/boolean-true.png +0 -0
@@ -126,9 +126,9 @@ if (typeof global !== "undefined") {
126
126
  "qx.promise.warnings": true,
127
127
  "qx.promise.longStackTraces": true,
128
128
  "qx.compiler": true,
129
- "qx.compiler.version": "8.0.0-beta.2",
129
+ "qx.compiler.version": "8.0.0-beta.3",
130
130
  "qx.Promise.useNativePromise": true,
131
- "qx.version": "8.0.0-beta.2",
131
+ "qx.version": "8.0.0-beta.3",
132
132
  "qx.compiler.targetType": "source",
133
133
  "qx.compiler.outputDir": "compiled/node/build/",
134
134
  "qx.target.privateArtifacts": false,
@@ -5277,18 +5277,16 @@ try {
5277
5277
  "qx.core.property.Property.inheritableDefaultIsNull": false,
5278
5278
  /**
5279
5279
  * If set to true, then properties with init values will have their apply method called during construction.
5280
- * Default is false to maintain backward compatibility with v7 behavior.
5281
- */
5282
- "qx.core.property.Property.applyDuringConstruct": false,
5283
- //TODO should this be true?
5284
-
5280
+ * You should only set this to false if you have a lot of legacy code which would take too much time/effort to modify to work with the new behavior.
5281
+ */
5282
+ "qx.core.property.Property.applyDuringConstruct": true,
5285
5283
  /**
5286
5284
  * Only relevant when applyDuringConstruct is true.
5287
5285
  * This contains regexes matching classnames which are excluded from the auto apply behaviour.
5288
5286
  * They refer to concrete classes only, not the superclasses.
5289
5287
  *
5290
- * Currently (2025-12-03), only "qx." classes are excluded because enabling applyDuringConstruct
5291
- * would create problems which are difficult to fix.
5288
+ * Currently (2025-DEC-03), only "qx." classes are excluded because enabling applyDuringConstruct
5289
+ * would create problems which are too difficult and time-consuming to fix.
5292
5290
  *
5293
5291
  * @type {Array<RegExp | string>}
5294
5292
  */
@@ -5403,10 +5401,11 @@ try {
5403
5401
 
5404
5402
  // Figure out the storage implementation
5405
5403
  if (def.storage) {
5404
+ //if it's an object, use it directly as storage
5406
5405
  if (qx.Class.hasInterface(def.storage.constructor, qx.core.property.IPropertyStorage)) {
5407
5406
  this.__storage__P_89_6 = def.storage;
5408
5407
  } else {
5409
- this.__storage__P_89_6 = new def.storage();
5408
+ this.__storage__P_89_6 = qx.core.property.PropertyStorageFactory.getStorage(def.storage);
5410
5409
  }
5411
5410
  } else {
5412
5411
  if (def.immutable == "replace") {
@@ -5415,13 +5414,13 @@ try {
5415
5414
  } else if (def.check == "Object") {
5416
5415
  this.__storage__P_89_6 = qx.core.property.PropertyStorageFactory.getStorage(qx.core.property.ImmutableObjectStorage);
5417
5416
  } else if (def.check == "qx.data.Array") {
5418
- this.__storage__P_89_6 = qx.core.property.PropertyStorageFactory.getStorage(qx.core.property.ImmutableDataArrayStorage);
5417
+ this.__storage__P_89_6 = qx.core.property.PropertyStorageFactory.getStorage(qx.core.property.ImmutableDataArrayStorage); //cbh
5419
5418
  } else {
5420
5419
  throw new Error(`${this}: ` + "only `check : 'Array'` and `check : 'Object'` " + "properties may have `immutable : 'replace'`.");
5421
5420
  }
5422
5421
  } else {
5423
5422
  if (typeof def.get == "function" || typeof def.getAsync == "function") {
5424
- this.__storage__P_89_6 = new qx.core.property.ExplicitPropertyStorage(this, this.__clazz__P_89_1);
5423
+ this.__storage__P_89_6 = new qx.core.property.ExplicitPropertyStorage(this);
5425
5424
  } else {
5426
5425
  this.__storage__P_89_6 = qx.core.property.PropertyStorageFactory.getStorage(qx.core.property.SimplePropertyStorage);
5427
5426
  }
@@ -5674,6 +5673,11 @@ try {
5674
5673
  return self.resetAsync(this);
5675
5674
  });
5676
5675
  }
5676
+ if (this.__pseudoProperty__P_89_3) {
5677
+ this.__supportsGetAsync__P_89_18 = this.__clazz__P_89_1.prototype["get" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0) + "Async"] !== undefined;
5678
+ } else {
5679
+ this.__supportsGetAsync__P_89_18 = this.__storage__P_89_6.supportsGetAsync();
5680
+ }
5677
5681
  },
5678
5682
  /**
5679
5683
  * Returns an object for tracking state of the property, per object instance (ie not per class)
@@ -5711,18 +5715,18 @@ try {
5711
5715
  if (!this.isReadOnly()) {
5712
5716
  this.__storage__P_89_6.set(thisObj, this, value);
5713
5717
  }
5714
- this.__setMutating__P_89_18(thisObj, true);
5718
+ this.__setMutating__P_89_19(thisObj, true);
5715
5719
  thisObj["$$init_" + this.__propertyName__P_89_0] = value;
5716
5720
  try {
5717
5721
  if (this.__apply__P_89_9) {
5718
- this.__callFunction__P_89_19(thisObj, this.__apply__P_89_9, value, undefined, this.__propertyName__P_89_0);
5722
+ this.__callFunction__P_89_20(thisObj, this.__apply__P_89_9, value, undefined, this.__propertyName__P_89_0);
5719
5723
  }
5720
5724
  if (this.__eventName__P_89_11 && qx.event.Registration.hasListener(thisObj, this.__eventName__P_89_11)) {
5721
5725
  thisObj.fireDataEvent(this.__eventName__P_89_11, value, undefined);
5722
5726
  }
5723
- this.__applyValueToInheritedChildren__P_89_20(thisObj);
5727
+ this.__applyValueToInheritedChildren__P_89_21(thisObj);
5724
5728
  } finally {
5725
- this.__setMutating__P_89_18(thisObj, false);
5729
+ this.__setMutating__P_89_19(thisObj, false);
5726
5730
  }
5727
5731
  },
5728
5732
  /**
@@ -5757,9 +5761,9 @@ try {
5757
5761
  */
5758
5762
  get(thisObj) {
5759
5763
  if (this.__pseudoProperty__P_89_3) {
5760
- return this.__callFunction__P_89_19(thisObj, "get" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0));
5764
+ return this.__callFunction__P_89_20(thisObj, "get" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0));
5761
5765
  }
5762
- return this.__getImpl__P_89_21(thisObj, false);
5766
+ return this.__getImpl__P_89_22(thisObj, false);
5763
5767
  },
5764
5768
  /**
5765
5769
  * Gets a property value; if not initialized and the property is async, it will
@@ -5771,9 +5775,9 @@ try {
5771
5775
  */
5772
5776
  async getAsync(thisObj) {
5773
5777
  if (this.__pseudoProperty__P_89_3) {
5774
- return this.__callFunction__P_89_19(thisObj, "get" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0) + "Async");
5778
+ return this.__callFunction__P_89_20(thisObj, "get" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0) + "Async");
5775
5779
  }
5776
- return this.__getAsyncImpl__P_89_22(thisObj, false);
5780
+ return this.__getAsyncImpl__P_89_23(thisObj, false);
5777
5781
  },
5778
5782
  /**
5779
5783
  * Gets a property value; if not initialized, it will return undefined
@@ -5783,9 +5787,9 @@ try {
5783
5787
  */
5784
5788
  getSafe(thisObj, async = false) {
5785
5789
  if (async) {
5786
- return this.__getAsyncImpl__P_89_22(thisObj, true);
5790
+ return this.__getAsyncImpl__P_89_23(thisObj, true);
5787
5791
  }
5788
- return this.__getImpl__P_89_21(thisObj, true);
5792
+ return this.__getImpl__P_89_22(thisObj, true);
5789
5793
  },
5790
5794
  /**
5791
5795
  * Gets the themed value, if there is one
@@ -5817,9 +5821,9 @@ try {
5817
5821
  */
5818
5822
  set(thisObj, value) {
5819
5823
  if (this.__pseudoProperty__P_89_3) {
5820
- this.__callFunction__P_89_19(thisObj, "set" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0), value);
5824
+ this.__callFunction__P_89_20(thisObj, "set" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0), value);
5821
5825
  } else {
5822
- this.__setImpl__P_89_23(thisObj, value, "user", "set");
5826
+ this.__setImpl__P_89_24(thisObj, value, "user", "set");
5823
5827
  }
5824
5828
  },
5825
5829
  /**
@@ -5831,9 +5835,9 @@ try {
5831
5835
  */
5832
5836
  async setAsync(thisObj, value) {
5833
5837
  if (this.__pseudoProperty__P_89_3) {
5834
- this.__callFunction__P_89_19(thisObj, "set" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0) + "Async", value);
5838
+ this.__callFunction__P_89_20(thisObj, "set" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0) + "Async", value);
5835
5839
  } else {
5836
- return this.__setAsyncImpl__P_89_24(thisObj, value, "user", "set");
5840
+ return this.__setAsyncImpl__P_89_25(thisObj, value, "user", "set");
5837
5841
  }
5838
5842
  },
5839
5843
  /**
@@ -5844,7 +5848,7 @@ try {
5844
5848
  * @param {*} value
5845
5849
  */
5846
5850
  setThemed(thisObj, value) {
5847
- this.__setImpl__P_89_23(thisObj, value, "themed", "set");
5851
+ this.__setImpl__P_89_24(thisObj, value, "themed", "set");
5848
5852
  },
5849
5853
  /**
5850
5854
  * Resets a property value
@@ -5853,10 +5857,10 @@ try {
5853
5857
  */
5854
5858
  reset(thisObj) {
5855
5859
  if (this.__pseudoProperty__P_89_3) {
5856
- this.__callFunction__P_89_19(thisObj, "reset" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0));
5860
+ this.__callFunction__P_89_20(thisObj, "reset" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0));
5857
5861
  } else {
5858
5862
  let value = this.getInitValue(thisObj);
5859
- this.__setImpl__P_89_23(thisObj, value, "user", "reset");
5863
+ this.__setImpl__P_89_24(thisObj, value, "user", "reset");
5860
5864
  }
5861
5865
  },
5862
5866
  /**
@@ -5866,10 +5870,10 @@ try {
5866
5870
  */
5867
5871
  resetAsync(thisObj) {
5868
5872
  if (this.__pseudoProperty__P_89_3) {
5869
- return this.__callFunction__P_89_19(thisObj, "reset" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0) + "Async");
5873
+ return this.__callFunction__P_89_20(thisObj, "reset" + qx.Bootstrap.firstUp(this.__propertyName__P_89_0) + "Async");
5870
5874
  } else {
5871
5875
  let value = this.getInitValue(thisObj);
5872
- return this.__setAsyncImpl__P_89_24(thisObj, value, "user", "reset");
5876
+ return this.__setAsyncImpl__P_89_25(thisObj, value, "user", "reset");
5873
5877
  }
5874
5878
  },
5875
5879
  /**
@@ -5879,7 +5883,7 @@ try {
5879
5883
  * @param {qx.core.Object} thisObj
5880
5884
  */
5881
5885
  resetThemed(thisObj) {
5882
- this.__setImpl__P_89_23(thisObj, undefined, "themed", "reset");
5886
+ this.__setImpl__P_89_24(thisObj, undefined, "themed", "reset");
5883
5887
  },
5884
5888
  /**
5885
5889
  * Detects whether the object is using a theme value or has been overridden by a user value
@@ -5930,40 +5934,66 @@ try {
5930
5934
  * @param {"user" | "themed"} scope
5931
5935
  * @param {"set" | "reset" | "init"} method
5932
5936
  */
5933
- __setImpl__P_89_23(thisObj, value, scope, method) {
5937
+ __setImpl__P_89_24(thisObj, value, scope, method) {
5938
+ //store the old value
5939
+ let oldValue = this.__getImpl__P_89_22(thisObj, true);
5934
5940
  let state = this.getPropertyState(thisObj);
5941
+
5942
+ //validate and transform the value
5935
5943
  if (this.__validate__P_89_8) {
5936
- this.__callFunction__P_89_19(thisObj, this.__validate__P_89_8, value, this);
5944
+ this.__callFunction__P_89_20(thisObj, this.__validate__P_89_8, value, this);
5937
5945
  }
5938
- let oldValue = this.__getImpl__P_89_21(thisObj, true);
5939
5946
  if (this.__transform__P_89_10) {
5940
- value = this.__callFunction__P_89_19(thisObj, this.__transform__P_89_10, value, oldValue, this.__propertyName__P_89_0);
5947
+ value = this.__callFunction__P_89_20(thisObj, this.__transform__P_89_10, value, oldValue, this.__propertyName__P_89_0);
5948
+ }
5949
+
5950
+ //perform additional checks if promise
5951
+ let check = this.getCheck();
5952
+ //use check for validation and coercion if necessary,
5953
+ //but only if not resetting
5954
+ if (!(value === "inherit" && this.isInheritable()) && method !== "reset" && check) {
5955
+ if (!(value === null && oldValue === null) && !check.matches(value, thisObj)) {
5956
+ let coerced = check.coerce(value, thisObj);
5957
+ if (qx.lang.Type.isPromise(value) || coerced === null || !check.matches(coerced, thisObj)) {
5958
+ throw new Error("Invalid value for property " + this + ": " + value);
5959
+ }
5960
+ value = coerced;
5961
+ }
5941
5962
  }
5963
+
5964
+ //Modify the value in the underlying storage
5942
5965
  if (method == "reset") {
5943
5966
  if (scope == "user") {
5944
- this.__storage__P_89_6.reset(thisObj, this, value);
5967
+ this.__storage__P_89_6.set(thisObj, this, value);
5945
5968
  } else if (scope == "themed") {
5946
5969
  if (value === undefined) {
5947
5970
  delete state.themeValue;
5948
5971
  }
5949
5972
  }
5950
- value = this.__getImpl__P_89_21(thisObj, true);
5951
- }
5952
- if (this.isInheritable()) {
5953
- if (value === "inherit") {
5954
- value = state.inheritedValue;
5955
- }
5956
- }
5957
- let check = this.getCheck();
5958
- if (method !== "reset" && check) {
5959
- if (!(value === null && oldValue === null) && !check.matches(value, thisObj)) {
5960
- let coerced = check.coerce(value, thisObj);
5961
- if (qx.lang.Type.isPromise(value) || coerced === null || !check.matches(coerced, thisObj)) {
5962
- throw new Error("Invalid value for property " + this + ": " + value);
5973
+ value = this.__getImpl__P_89_22(thisObj, true);
5974
+ } else {
5975
+ if (scope == "user") {
5976
+ // Always set the value to the storage if it is a user value; this is because themable properties
5977
+ // might be equal now, but if the theme value changes, the user's override needs to remain.
5978
+ if (method == "set" || method == "init") {
5979
+ this.__storage__P_89_6.set(thisObj, this, value);
5980
+ }
5981
+ } else if (scope == "themed") {
5982
+ if (value !== undefined) {
5983
+ state.themeValue = value;
5984
+ value = this.__getImpl__P_89_22(thisObj);
5963
5985
  }
5964
- value = coerced;
5965
5986
  }
5966
5987
  }
5988
+
5989
+ // If the value is "inherit" and the property is inheritable, we need to calculate the inherited value
5990
+ if (this.isInheritable() && value === "inherit") {
5991
+ value = state.inheritedValue;
5992
+ }
5993
+
5994
+ //the final value has now been deternined.
5995
+ //If it's not equal to the old value or state.applyMethodCalled was not set,
5996
+ //we call apply and fire event
5967
5997
  let isEqual = this.isEqual(thisObj, value, oldValue);
5968
5998
  if (!isEqual && this.isMutating(thisObj)) {
5969
5999
  this.warn("Property " + this + " is currently mutating");
@@ -5980,26 +6010,12 @@ try {
5980
6010
  if (!shouldApply) {
5981
6011
  return;
5982
6012
  }
5983
- this.__setMutating__P_89_18(thisObj, true);
5984
- if (scope == "user") {
5985
- // Always set the value to the storage if it is a user value; this is because themable properties
5986
- // might be equal now, but if the theme value changes, the user's override needs to remain.
5987
- if (method == "set" || method == "init") {
5988
- this.__storage__P_89_6.set(thisObj, this, value);
5989
- }
5990
- } else if (scope == "themed") {
5991
- if (method != "reset") {
5992
- if (value !== undefined) {
5993
- state.themeValue = value;
5994
- value = this.get(thisObj);
5995
- }
5996
- }
5997
- }
6013
+ this.__setMutating__P_89_19(thisObj, true);
5998
6014
  if (value === undefined) {
5999
6015
  value = null;
6000
6016
  }
6001
6017
  if (this.__apply__P_89_9) {
6002
- let out = this.__callFunction__P_89_19(thisObj, this.__apply__P_89_9, value, oldValue, this.__propertyName__P_89_0);
6018
+ let out = this.__callFunction__P_89_20(thisObj, this.__apply__P_89_9, value, oldValue, this.__propertyName__P_89_0);
6003
6019
  if (qx.lang.Type.isPromise(out)) {
6004
6020
  this.warn("Apply function for property " + this + " returned a Promise, but the property was set synchronously. The promise will be ignored.");
6005
6021
  }
@@ -6008,9 +6024,9 @@ try {
6008
6024
  thisObj.fireDataEvent(this.__eventName__P_89_11, value, oldValue);
6009
6025
  }
6010
6026
  if (this.isInheritable()) {
6011
- this.__applyValueToInheritedChildren__P_89_20(thisObj);
6027
+ this.__applyValueToInheritedChildren__P_89_21(thisObj);
6012
6028
  }
6013
- this.__setMutating__P_89_18(thisObj, false);
6029
+ this.__setMutating__P_89_19(thisObj, false);
6014
6030
  },
6015
6031
  /**
6016
6032
  * Sets the actual value of the property, asynchronously.
@@ -6020,18 +6036,21 @@ try {
6020
6036
  * @param {"user" | "themed"} scope
6021
6037
  * @param {"set" | "reset" | "init"} method
6022
6038
  */
6023
- async __setAsyncImpl__P_89_24(thisObj, value, scope, method) {
6039
+ async __setAsyncImpl__P_89_25(thisObj, value, scope, method) {
6024
6040
  let state = this.getPropertyState(thisObj);
6041
+
6042
+ //store the old value
6043
+ //we get it synchronously here because if this property supports async get,
6044
+ //we may not always want to fetch the value asynchronously
6045
+ //this means the apply method will be called with undefined as oldValue
6046
+ let oldValue = this.__getImpl__P_89_22(thisObj, true);
6047
+
6048
+ //validate and transform the value
6025
6049
  if (this.__validate__P_89_8) {
6026
- this.__callFunction__P_89_19(thisObj, this.__validate__P_89_8, value, this);
6050
+ this.__callFunction__P_89_20(thisObj, this.__validate__P_89_8, value, this);
6027
6051
  }
6028
- let oldValue = await this.__getAsyncImpl__P_89_22(thisObj, true);
6029
6052
  if (this.__transform__P_89_10) {
6030
- value = this.__callFunction__P_89_19(thisObj, this.__transform__P_89_10, value, oldValue, this.__propertyName__P_89_0);
6031
- }
6032
- if (method == "reset") {
6033
- this.__storage__P_89_6.reset(thisObj, this, value);
6034
- value = await this.__getAsyncImpl__P_89_22(thisObj, true);
6053
+ value = this.__callFunction__P_89_20(thisObj, this.__transform__P_89_10, value, oldValue, this.__propertyName__P_89_0);
6035
6054
  }
6036
6055
  let check = this.getCheck();
6037
6056
  if (method !== "reset" && check) {
@@ -6043,6 +6062,20 @@ try {
6043
6062
  value = coerced;
6044
6063
  }
6045
6064
  }
6065
+
6066
+ //Actually modify the underlying storage
6067
+ if (method == "reset") {
6068
+ this.__storage__P_89_6.set(thisObj, this, value);
6069
+ value = this.__getImpl__P_89_22(thisObj, true);
6070
+ } else {
6071
+ if (scope == "user") {
6072
+ // Always set the value to the storage if it is a user value; this is because themable properties
6073
+ // might be equal now, but if the theme value changes, the user's override needs to remain.
6074
+ if (method == "set" || method == "init") {
6075
+ this.__storage__P_89_6.set(thisObj, this, value);
6076
+ }
6077
+ }
6078
+ }
6046
6079
  let isEqual = this.isEqual(thisObj, value, oldValue);
6047
6080
  if (!isEqual && this.isMutating(thisObj)) {
6048
6081
  this.warn("Property " + this + " is currently mutating");
@@ -6061,24 +6094,17 @@ try {
6061
6094
  }
6062
6095
  let resolve;
6063
6096
  let promise = new Promise(r => resolve = r);
6064
- this.__setMutating__P_89_18(thisObj, promise);
6065
- if (scope == "user") {
6066
- // Always set the value to the storage if it is a user value; this is because themable properties
6067
- // might be equal now, but if the theme value changes, the user's override needs to remain.
6068
- if (method == "set" || method == "init") {
6069
- this.__storage__P_89_6.set(thisObj, this, value);
6070
- }
6071
- }
6097
+ this.__setMutating__P_89_19(thisObj, promise);
6072
6098
  if (value === undefined) {
6073
6099
  value = null;
6074
6100
  }
6075
6101
  if (this.__apply__P_89_9) {
6076
- await this.__callFunction__P_89_19(thisObj, this.__apply__P_89_9, value, oldValue, this.__propertyName__P_89_0);
6102
+ await this.__callFunction__P_89_20(thisObj, this.__apply__P_89_9, value, oldValue, this.__propertyName__P_89_0);
6077
6103
  }
6078
6104
  if (this.__eventName__P_89_11 && qx.event.Registration.hasListener(thisObj, this.__eventName__P_89_11)) {
6079
6105
  await thisObj.fireDataEventAsync(this.__eventName__P_89_11, value, oldValue);
6080
6106
  }
6081
- this.__setMutating__P_89_18(thisObj, false);
6107
+ this.__setMutating__P_89_19(thisObj, false);
6082
6108
  resolve();
6083
6109
  },
6084
6110
  /**
@@ -6087,14 +6113,12 @@ try {
6087
6113
  * @param {boolean} safe Whether to throw exceptions if the property is not initialized
6088
6114
  * @returns {*}
6089
6115
  */
6090
- __getImpl__P_89_21(thisObj, safe) {
6116
+ __getImpl__P_89_22(thisObj, safe) {
6091
6117
  var _this$__definition__P4, _this$__definition__P5, _this$__check__P_89_;
6092
6118
  const getRaw = () => {
6093
6119
  let value = this.__storage__P_89_6.get(thisObj, this);
6094
6120
  if (value !== undefined) {
6095
6121
  return value;
6096
- } else if (this.isAsync()) {
6097
- return undefined;
6098
6122
  }
6099
6123
  let state = this.getPropertyState(thisObj);
6100
6124
  value = state.themeValue;
@@ -6116,7 +6140,7 @@ try {
6116
6140
  }
6117
6141
  if (value !== undefined) {
6118
6142
  return value;
6119
- } else if (this.isAsync()) {
6143
+ } else if (this.__supportsGetAsync__P_89_18) {
6120
6144
  if (!safe) {
6121
6145
  throw new Error("Property " + this + " has not been initialized - try using getAsync() instead");
6122
6146
  } else {
@@ -6141,18 +6165,20 @@ try {
6141
6165
  * @param {boolean} safe Whether to throw exceptions if the property is not initialized
6142
6166
  * @returns {Promise<*>}
6143
6167
  */
6144
- async __getAsyncImpl__P_89_22(thisObj, safe) {
6168
+ async __getAsyncImpl__P_89_23(thisObj, safe) {
6145
6169
  var _this$__definition__P6, _this$__definition__P7, _this$__check__P_89_2;
6146
6170
  const getRaw = async () => {
6147
6171
  let value = this.__storage__P_89_6.get(thisObj, this);
6148
6172
  if (value !== undefined) {
6149
6173
  return value;
6150
6174
  }
6151
- value = await this.__storage__P_89_6.getAsync(thisObj, this);
6175
+ value = this.getInitValue(thisObj);
6152
6176
  if (value !== undefined) {
6153
6177
  return value;
6154
6178
  }
6155
- return this.getInitValue(thisObj);
6179
+ if (this.__supportsGetAsync__P_89_18) {
6180
+ return await this.__storage__P_89_6.getAsync(thisObj, this);
6181
+ }
6156
6182
  };
6157
6183
  let value = await getRaw();
6158
6184
  if (value !== undefined) {
@@ -6173,7 +6199,7 @@ try {
6173
6199
  *
6174
6200
  * @param {qx.core.Object} thisObj
6175
6201
  */
6176
- __applyValueToInheritedChildren__P_89_20(thisObj) {
6202
+ __applyValueToInheritedChildren__P_89_21(thisObj) {
6177
6203
  if (typeof thisObj._getChildren == "function") {
6178
6204
  for (let child of thisObj._getChildren()) {
6179
6205
  let property = child.constructor.prototype.$$allProperties[this.__propertyName__P_89_0];
@@ -6193,7 +6219,7 @@ try {
6193
6219
  if (!this.isInheritable()) {
6194
6220
  throw new Error(`${this} is not inheritable`);
6195
6221
  }
6196
- let oldValue = this.__getImpl__P_89_21(thisObj, true);
6222
+ let oldValue = this.__getImpl__P_89_22(thisObj, true);
6197
6223
  const computeInherited = () => {
6198
6224
  let layoutParent = typeof thisObj.getLayoutParent == "function" ? thisObj.getLayoutParent() : undefined;
6199
6225
  if (!layoutParent) {
@@ -6203,7 +6229,7 @@ try {
6203
6229
  if (!layoutParentProperty) {
6204
6230
  return;
6205
6231
  }
6206
- let value = layoutParentProperty.__getImpl__P_89_21(layoutParent, true);
6232
+ let value = layoutParentProperty.__getImpl__P_89_22(layoutParent, true);
6207
6233
  return value;
6208
6234
  };
6209
6235
  let inherited = computeInherited();
@@ -6215,23 +6241,23 @@ try {
6215
6241
  } else {
6216
6242
  delete state.inheritedValue;
6217
6243
  }
6218
- let value = this.__getImpl__P_89_21(thisObj, true);
6244
+ let value = this.__getImpl__P_89_22(thisObj, true);
6219
6245
  //
6220
6246
  let shouldApply = value !== oldValue || value !== undefined && !state.initMethodCalled;
6221
6247
  state.initMethodCalled = true;
6222
6248
  if (shouldApply) {
6223
6249
  if (!this.isEqual(thisObj, value, oldValue)) {
6224
- this.__setMutating__P_89_18(thisObj, true);
6250
+ this.__setMutating__P_89_19(thisObj, true);
6225
6251
  try {
6226
6252
  if (this.__apply__P_89_9) {
6227
- this.__callFunction__P_89_19(thisObj, this.__apply__P_89_9, value, oldValue, this.__propertyName__P_89_0);
6253
+ this.__callFunction__P_89_20(thisObj, this.__apply__P_89_9, value, oldValue, this.__propertyName__P_89_0);
6228
6254
  }
6229
6255
  if (this.__eventName__P_89_11 && qx.event.Registration.hasListener(thisObj, this.__eventName__P_89_11)) {
6230
6256
  thisObj.fireDataEvent(this.__eventName__P_89_11, value, oldValue);
6231
6257
  }
6232
- this.__applyValueToInheritedChildren__P_89_20(thisObj);
6258
+ this.__applyValueToInheritedChildren__P_89_21(thisObj);
6233
6259
  } finally {
6234
- this.__setMutating__P_89_18(thisObj, false);
6260
+ this.__setMutating__P_89_19(thisObj, false);
6235
6261
  }
6236
6262
  }
6237
6263
  }
@@ -6252,7 +6278,7 @@ try {
6252
6278
  * @param {qx.core.Object} thisObj
6253
6279
  * @param {Boolean} mutating
6254
6280
  */
6255
- __setMutating__P_89_18(thisObj, mutating) {
6281
+ __setMutating__P_89_19(thisObj, mutating) {
6256
6282
  let state = this.getPropertyState(thisObj);
6257
6283
  if (mutating) {
6258
6284
  if (state.mutatingCount === undefined) {
@@ -6320,7 +6346,7 @@ try {
6320
6346
  * @param {...any} args
6321
6347
  * @returns
6322
6348
  */
6323
- __callFunction__P_89_19(thisObj, fn, ...args) {
6349
+ __callFunction__P_89_20(thisObj, fn, ...args) {
6324
6350
  if (typeof fn == "string") {
6325
6351
  return thisObj[fn].call(thisObj, ...args);
6326
6352
  }
@@ -6360,23 +6386,23 @@ try {
6360
6386
  */
6361
6387
  promiseReady(thisObj) {},
6362
6388
  /**
6363
- * Whether the property is initialized
6389
+ * Whether the property has a defined value stored locally,
6390
+ * meaning we can safely get it synchronously
6364
6391
  *
6365
6392
  * @param {qx.core.Object} thisObj the object on which the property is defined
6366
6393
  * @return {Boolean}
6367
6394
  */
6368
- isInitialized(thisObj) {
6369
- let value = this.__getImpl__P_89_21(thisObj, true);
6395
+ hasLocalValue(thisObj) {
6396
+ let value = this.__getImpl__P_89_22(thisObj, true);
6370
6397
  return value !== undefined;
6371
6398
  },
6372
6399
  /**
6373
- * Whether the property supports async
6400
+ * Whether the property supports getting asynchronously from the underlying storage
6374
6401
  *
6375
6402
  * @return {Boolean}
6376
6403
  */
6377
- isAsync() {
6378
- var _this$__definition__P8;
6379
- return !!((_this$__definition__P8 = this.__definition__P_89_5) !== null && _this$__definition__P8 !== void 0 && _this$__definition__P8.async);
6404
+ supportsGetAsync() {
6405
+ return this.__supportsGetAsync__P_89_18;
6380
6406
  },
6381
6407
  /**
6382
6408
  * Whether the property is themable
@@ -6384,8 +6410,8 @@ try {
6384
6410
  * @return {Boolean}
6385
6411
  */
6386
6412
  isThemeable() {
6387
- var _this$__definition__P9;
6388
- return !!((_this$__definition__P9 = this.__definition__P_89_5) !== null && _this$__definition__P9 !== void 0 && _this$__definition__P9.themeable);
6413
+ var _this$__definition__P8;
6414
+ return !!((_this$__definition__P8 = this.__definition__P_89_5) !== null && _this$__definition__P8 !== void 0 && _this$__definition__P8.themeable);
6389
6415
  },
6390
6416
  /**
6391
6417
  * Whether the property is inheritable
@@ -6538,23 +6564,6 @@ try {
6538
6564
  * @param {*} value
6539
6565
  */
6540
6566
  set(thisObj, property, value) {},
6541
- /**
6542
- * Sets a value asynchronously
6543
- *
6544
- * @param {qx.core.Object} thisObj
6545
- * @param {qx.core.propety.IProperty} property the property to set the value of
6546
- * @param {*} value
6547
- */
6548
- async setAsync(thisObj, property, value) {},
6549
- /**
6550
- * Called when the property is reset; for standard properties, this just passes through to
6551
- * `set`, but pseudo properties may need to call the implemented `reset` method
6552
- *
6553
- * @param {qx.core.Object} thisObj
6554
- * @param {qx.core.propety.IProperty} property the property to set the value of
6555
- * @param {*} value
6556
- */
6557
- reset(thisObj, property, value) {},
6558
6567
  /**
6559
6568
  * Deletes the value
6560
6569
  *
@@ -6563,9 +6572,9 @@ try {
6563
6572
  */
6564
6573
  dereference(thisObj, property) {},
6565
6574
  /**
6566
- * Returns whether the storage supports asynchronous backing, ie the getter could be async
6575
+ * Returns whether the storage supports asynchronous getting.
6567
6576
  */
6568
- isAsyncStorage() {}
6577
+ supportsGetAsync() {}
6569
6578
  }
6570
6579
  });
6571
6580
  qx.core.property.IPropertyStorage.$$dbClassInfo = $$dbClassInfo;
@@ -6580,8 +6589,7 @@ try {
6580
6589
  },
6581
6590
  "qx.core.property.IPropertyStorage": {
6582
6591
  "require": true
6583
- },
6584
- "qx.Promise": {}
6592
+ }
6585
6593
  }
6586
6594
  };
6587
6595
  qx.Bootstrap.executePendingDefers($$dbClassInfo);
@@ -6623,7 +6631,7 @@ try {
6623
6631
  * @Override
6624
6632
  */
6625
6633
  async getAsync(thisObj, property) {
6626
- return this.get(thisObj, property);
6634
+ // nothing
6627
6635
  },
6628
6636
  /**
6629
6637
  * @Override
@@ -6636,20 +6644,6 @@ try {
6636
6644
  }
6637
6645
  data.value = value;
6638
6646
  },
6639
- /**
6640
- * @Override
6641
- */
6642
- async setAsync(thisObj, property, value) {
6643
- return qx.Promise.resolve(value).then(value => {
6644
- this.set(thisObj, property, value);
6645
- });
6646
- },
6647
- /**
6648
- * @Override
6649
- */
6650
- reset(thisObj, property, value) {
6651
- this.set(thisObj, property, value);
6652
- },
6653
6647
  /**
6654
6648
  * @Override
6655
6649
  */
@@ -6659,7 +6653,7 @@ try {
6659
6653
  /**
6660
6654
  * @Override
6661
6655
  */
6662
- isAsyncStorage() {
6656
+ supportsGetAsync() {
6663
6657
  return false;
6664
6658
  },
6665
6659
  /**
@@ -6875,12 +6869,16 @@ try {
6875
6869
  qx.Bootstrap.define("qx.core.check.AbstractCheck", {
6876
6870
  extend: Object,
6877
6871
  implement: qx.core.check.ICheck,
6872
+ /**
6873
+ *
6874
+ * @param {boolean} nullable
6875
+ */
6878
6876
  construct(nullable) {
6879
6877
  Object.constructor.call(this);
6880
6878
  this.__nullable__P_80_0 = !!nullable;
6881
6879
  },
6882
6880
  members: {
6883
- /** @type{Boolean} whether null is allowed */
6881
+ /** @type {Boolean} whether null is allowed */
6884
6882
  __nullable__P_80_0: null,
6885
6883
  /**
6886
6884
  * @override
@@ -6995,6 +6993,11 @@ try {
6995
6993
  */
6996
6994
  qx.Bootstrap.define("qx.core.check.DynamicTypeCheck", {
6997
6995
  extend: qx.core.check.AbstractCheck,
6996
+ /**
6997
+ *
6998
+ * @param {string} typename
6999
+ * @param {boolean} nullable
7000
+ */
6998
7001
  construct(typename, nullable) {
6999
7002
  qx.core.check.AbstractCheck.constructor.call(this, nullable);
7000
7003
  this.__typename__P_83_0 = typename;
@@ -8668,6 +8671,11 @@ try {
8668
8671
  expr = expr.replace(/<.*>/g, ""); // remove generics
8669
8672
 
8670
8673
  let checkname = expr;
8674
+ if (checkname.includes("||")) {
8675
+ //For now, if the typename contains ||, we just accept it.
8676
+ //That's what it was like in version 7
8677
+ return new qx.core.check.Any();
8678
+ }
8671
8679
  if (checkname.endsWith("?")) {
8672
8680
  checkname = checkname.substring(0, checkname.length - 1);
8673
8681
  nullable = true;
@@ -9163,8 +9171,6 @@ try {
9163
9171
  // Array, String, Function
9164
9172
  transform: null,
9165
9173
  // String, Function
9166
- async: "boolean",
9167
- // Boolean
9168
9174
  deferredInit: "boolean",
9169
9175
  // Boolean
9170
9176
  validate: ["string", "function"],
@@ -9801,10 +9807,18 @@ try {
9801
9807
  * @param members {Map}
9802
9808
  * The map of members to attach
9803
9809
  *
9810
+ * @param events {Map?}
9811
+ * The map of events declared by the mixin (used for member validation)
9812
+ *
9804
9813
  * @param patch {Boolean ? false}
9805
9814
  * Enable patching
9815
+ *
9816
+ * @param mixin {qx.Mixin?}
9817
+ * The mixin being applied, if any. Used to store per-mixin-per-class base
9818
+ * method references so that super calls resolve correctly when the same
9819
+ * mixin is included in multiple classes.
9806
9820
  */
9807
- addMembers(clazz, members, events, patch) {
9821
+ addMembers(clazz, members, events, patch, mixin) {
9808
9822
  let proto = clazz.prototype;
9809
9823
  let classOwnMembers = {}; // Track class members to restore after mixin addition
9810
9824
 
@@ -9838,6 +9852,18 @@ try {
9838
9852
  member.self = clazz;
9839
9853
  }
9840
9854
  member.base = clazz.prototype[key];
9855
+ // Fix: per-mixin-per-class storage to prevent clobbering when the same mixin
9856
+ // is included/patched into multiple classes, or when multiple mixins override
9857
+ // the same method in the same class.
9858
+ if (mixin) {
9859
+ if (!clazz.$mixinBases) {
9860
+ clazz.$mixinBases = new Map();
9861
+ }
9862
+ if (!clazz.$mixinBases.has(mixin)) {
9863
+ clazz.$mixinBases.set(mixin, {});
9864
+ }
9865
+ clazz.$mixinBases.get(mixin)[key] = clazz.prototype[key];
9866
+ }
9841
9867
  }
9842
9868
 
9843
9869
  // Create the storage for this member
@@ -10010,7 +10036,7 @@ try {
10010
10036
 
10011
10037
  // Attach members
10012
10038
  if (entry.$$members) {
10013
- qx.Class.addMembers(clazz, entry.$$members, entry.$$events, patch);
10039
+ qx.Class.addMembers(clazz, entry.$$members, entry.$$events, patch, entry);
10014
10040
  }
10015
10041
 
10016
10042
  // Attach properties
@@ -10614,7 +10640,7 @@ try {
10614
10640
  */
10615
10641
  isPropertyInitialized(object, name) {
10616
10642
  let property = object.constructor.prototype.$$allProperties[name];
10617
- return !!(property && property.isInitialized(object));
10643
+ return !!(property && property.hasLocalValue(object));
10618
10644
  },
10619
10645
  /**
10620
10646
  * Returns the event type of the given event. Returns null if
@@ -10997,7 +11023,7 @@ try {
10997
11023
  // implementation is the first mixin's method
10998
11024
  for (var i = mixedInIndex - 1; i > -1; i--) {
10999
11025
  var peerMixin = mixedInAt.$$flatIncludes[i];
11000
- if (peerMixin.$$members[methodName]) {
11026
+ if (peerMixin.$$members && peerMixin.$$members[methodName]) {
11001
11027
  fn = peerMixin.$$members[methodName];
11002
11028
  break;
11003
11029
  }
@@ -11005,12 +11031,22 @@ try {
11005
11031
 
11006
11032
  // Try looking in the class itself
11007
11033
  if (!fn && mixedInAt.prototype[methodName]) {
11008
- fn = mixedInAt.prototype[methodName];
11009
- for (let i = 0; i < mixedInAt.$$flatIncludes.length; i++) {
11010
- if (!mixedInAt.$$flatIncludes[i].$$members[methodName]) {
11011
- continue;
11034
+ // Use per-mixin-per-class storage to avoid clobbering when the same mixin
11035
+ // is included in multiple classes or when multiple mixins override the same method
11036
+ if (mixedInAt.$mixinBases && mixedInAt.$mixinBases.has(mixin)) {
11037
+ var _mixedInAt$$mixinBase;
11038
+ fn = (_mixedInAt$$mixinBase = mixedInAt.$mixinBases.get(mixin)[methodName]) !== null && _mixedInAt$$mixinBase !== void 0 ? _mixedInAt$$mixinBase : null;
11039
+ }
11040
+ if (!fn) {
11041
+ // Fallback: traverse .base chain (works for patch=true since each patch
11042
+ // creates a unique wrapper function with its own .base property)
11043
+ fn = mixedInAt.prototype[methodName];
11044
+ for (let i = 0; i < mixedInAt.$$flatIncludes.length; i++) {
11045
+ if (!mixedInAt.$$flatIncludes[i].$$members || !mixedInAt.$$flatIncludes[i].$$members[methodName]) {
11046
+ continue;
11047
+ }
11048
+ fn = fn.base;
11012
11049
  }
11013
- fn = fn.base;
11014
11050
  }
11015
11051
  }
11016
11052
 
@@ -11226,7 +11262,10 @@ try {
11226
11262
  */
11227
11263
  bindAsync: qx.core.Environment.select("qx.promise", {
11228
11264
  true(sourcePropertyChain, targetObject, targetProperty, options) {
11229
- var binding = qx.data.SingleValueBinding.bind(this, sourcePropertyChain, targetObject, targetProperty || "value", options);
11265
+ var binding = qx.data.SingleValueBinding.bind(this, sourcePropertyChain, targetObject, targetProperty || "value", {
11266
+ ...options,
11267
+ async: true
11268
+ });
11230
11269
  return binding.getInitPromise().then(() => binding);
11231
11270
  },
11232
11271
  false(sourcePropertyChain, targetObject, targetProperty, options) {
@@ -20273,16 +20312,10 @@ try {
20273
20312
  implement: qx.core.property.IPropertyStorage,
20274
20313
  /**
20275
20314
  * @param {qx.core.property.Property} property
20276
- * @param {Function} clazz Qooxdoo class which the property relates to
20277
20315
  */
20278
- construct(property, clazz) {
20316
+ construct(property) {
20279
20317
  Object.constructor.call(this);
20280
- let def = property.getDefinition();
20281
20318
  this.__property__P_87_0 = property;
20282
- this.__get__P_87_1 = def.get;
20283
- this.__getAsync__P_87_2 = def.getAsync || def.get;
20284
- this.__set__P_87_3 = def.set;
20285
- this.__setAsync__P_87_4 = def.setAsync || def.set;
20286
20319
  },
20287
20320
  members: {
20288
20321
  /**
@@ -20293,25 +20326,19 @@ try {
20293
20326
  * @Override
20294
20327
  */
20295
20328
  get(thisObj, property) {
20296
- return this.__get__P_87_1.call(thisObj, property, thisObj);
20329
+ return this.__property__P_87_0.getDefinition().get.call(thisObj, property, thisObj);
20297
20330
  },
20298
20331
  /**
20299
20332
  * @Override
20300
20333
  */
20301
20334
  getAsync(thisObj, property) {
20302
- return this.__getAsync__P_87_2.call(thisObj, property, thisObj);
20335
+ return this.__property__P_87_0.getDefinition().getAsync.call(thisObj, property, thisObj);
20303
20336
  },
20304
20337
  /**
20305
20338
  * @Override
20306
20339
  */
20307
20340
  set(thisObj, property, value) {
20308
- this.__set__P_87_3.call(thisObj, value, property, thisObj);
20309
- },
20310
- /**
20311
- * @Override
20312
- */
20313
- setAsync(thisObj, property, value) {
20314
- return this.__setAsync__P_87_4.call(thisObj, property, value);
20341
+ this.__property__P_87_0.getDefinition().set.call(thisObj, value, property, thisObj);
20315
20342
  },
20316
20343
  /**
20317
20344
  * @Override
@@ -20322,8 +20349,8 @@ try {
20322
20349
  /**
20323
20350
  * @Override
20324
20351
  */
20325
- isAsyncStorage() {
20326
- return this.__property__P_87_0.isAsync();
20352
+ supportsGetAsync() {
20353
+ return !!this.__property__P_87_0.getDefinition().getAsync;
20327
20354
  }
20328
20355
  }
20329
20356
  });
@@ -25663,8 +25690,6 @@ try {
25663
25690
  "qx.Promise": {},
25664
25691
  "qx.core.Assert": {},
25665
25692
  "qx.log.Logger": {},
25666
- "qx.util.PropertyUtil": {},
25667
- "qx.lang.String": {},
25668
25693
  "qx.data.binding.PropNameSegment": {},
25669
25694
  "qx.data.binding.ArrayIndexSegment": {}
25670
25695
  }
@@ -25768,6 +25793,12 @@ try {
25768
25793
  * be called if the set of the value fails.
25769
25794
  * @property {string} ignoreConverter A string which will be matched using the current
25770
25795
  * property chain. If it matches, the converter will not be called.
25796
+ * @property {boolean} async If true, the following will happen:
25797
+ * - The binding's init promise (returned by `getInitPromise`) will resolve only after the initial value has been set on the target.
25798
+ * If any properties in the source and target chains have async getters,
25799
+ * the initial set may happen on a later tick.
25800
+ * - The binding will call setAsync on the target value instead of the synchronous `set` and the init promise will resolve after the initial setAsync call has resolved.
25801
+ *
25771
25802
  *
25772
25803
  *
25773
25804
  * @callback converter
@@ -25797,6 +25828,7 @@ try {
25797
25828
  throw new Error("SourcePath and targetPath must be specified");
25798
25829
  }
25799
25830
  this.__options__P_93_0 = options !== null && options !== void 0 ? options : {};
25831
+ this.__async__P_93_1 = !!this.__options__P_93_0.async;
25800
25832
  let tracker = {};
25801
25833
  const Utils = qx.event.Utils;
25802
25834
  this.setSourcePath(sourcePath);
@@ -25805,13 +25837,13 @@ try {
25805
25837
  Utils.then(tracker, () => target && this.setTarget(target));
25806
25838
  },
25807
25839
  destruct() {
25808
- if (this.__sourceSegments__P_93_1) {
25809
- this.__sourceSegments__P_93_1.forEach(segment => segment.dispose());
25810
- this.__sourceSegments__P_93_1 = null;
25840
+ if (this.__sourceSegments__P_93_2) {
25841
+ this.__sourceSegments__P_93_2.forEach(segment => segment.dispose());
25842
+ this.__sourceSegments__P_93_2 = null;
25811
25843
  }
25812
- if (this.__targetSegments__P_93_2) {
25813
- this.__targetSegments__P_93_2.forEach(segment => segment.dispose());
25814
- this.__targetSegments__P_93_2 = null;
25844
+ if (this.__targetSegments__P_93_3) {
25845
+ this.__targetSegments__P_93_3.forEach(segment => segment.dispose());
25846
+ this.__targetSegments__P_93_3 = null;
25815
25847
  }
25816
25848
  this.setSource(null);
25817
25849
  this.setTarget(null);
@@ -25835,49 +25867,60 @@ try {
25835
25867
  }
25836
25868
  },
25837
25869
  members: {
25870
+ /**
25871
+ * Whether this binding is asynchronous
25872
+ */
25873
+ __async__P_93_1: false,
25838
25874
  /**
25839
25875
  * @type {*}
25840
25876
  */
25841
- __value__P_93_3: undefined,
25877
+ __value__P_93_4: undefined,
25842
25878
  /**
25843
25879
  * @type {qx.core.Object}
25844
25880
  */
25845
- __source__P_93_4: null,
25881
+ __source__P_93_5: null,
25846
25882
  /**
25847
25883
  * @type {BindingRecord?}
25848
25884
  */
25849
- __record__P_93_5: null,
25885
+ __record__P_93_6: null,
25850
25886
  /**
25851
25887
  * @type {qx.core.Object}
25852
25888
  */
25853
- __target__P_93_6: null,
25889
+ __target__P_93_7: null,
25854
25890
  /** @type {Promise} initialisation promise */
25855
- __initPromise__P_93_7: null,
25891
+ __initPromise__P_93_8: null,
25856
25892
  /** @type {qx.data.binding.AbstractSegment[]?} list of segments of the source path */
25857
- __sourceSegments__P_93_1: null,
25893
+ __sourceSegments__P_93_2: null,
25858
25894
  /** @type {qx.data.binding.AbstractSegment[]?} list of segments of the target path */
25859
- __targetSegments__P_93_2: null,
25895
+ __targetSegments__P_93_3: null,
25860
25896
  /**
25861
25897
  * @type {BindingOptions}
25862
25898
  */
25863
25899
  __options__P_93_0: null,
25900
+ /**
25901
+ *
25902
+ * @returns {boolean}
25903
+ */
25904
+ isAsync() {
25905
+ return this.__async__P_93_1;
25906
+ },
25864
25907
  /**
25865
25908
  * Promises/A+ thenable compliance, this means that you can await the binding for initialisation
25866
25909
  * https://promisesaplus.com/
25867
25910
  * @returns {Promise} the promise
25868
25911
  */
25869
25912
  then(onFulfilled, onRejected) {
25870
- return Promise.resolve(this.__initPromise__P_93_7).then(onFulfilled, onRejected);
25913
+ return Promise.resolve(this.__initPromise__P_93_8).then(onFulfilled, onRejected);
25871
25914
  },
25872
25915
  /**
25873
25916
  *
25874
25917
  * @returns {BindingRecord} The representation of this binding as record.
25875
25918
  */
25876
25919
  asRecord() {
25877
- if (!this.__record__P_93_5) {
25878
- this.__record__P_93_5 = [this, this.getSource(), this.getSourcePath(), this.getTarget(), this.getTargetPath()];
25920
+ if (!this.__record__P_93_6) {
25921
+ this.__record__P_93_6 = [this, this.getSource(), this.getSourcePath(), this.getTarget(), this.getTargetPath()];
25879
25922
  }
25880
- return this.__record__P_93_5;
25923
+ return this.__record__P_93_6;
25881
25924
  },
25882
25925
  /**
25883
25926
  * @override
@@ -25890,7 +25933,7 @@ try {
25890
25933
  * @returns {Promise} A promise which resolves when the initial value has been copied over from source to target
25891
25934
  */
25892
25935
  getInitPromise() {
25893
- return this.__initPromise__P_93_7;
25936
+ return this.__initPromise__P_93_8;
25894
25937
  },
25895
25938
  /**
25896
25939
  * Apply for `sourcePath`
@@ -25899,9 +25942,9 @@ try {
25899
25942
  if (oldValue) {
25900
25943
  throw new Error("Cannot change sourcePath after binding has been created");
25901
25944
  }
25902
- this.__record__P_93_5 = null; // invalidate record representation cache
25903
- this.__sourceSegments__P_93_1 = qx.data.SingleValueBinding.__parseSegments__P_93_8(this, value);
25904
- let lastSegment = this.__sourceSegments__P_93_1.at(-1);
25945
+ this.__record__P_93_6 = null; // invalidate record representation cache
25946
+ this.__sourceSegments__P_93_2 = qx.data.SingleValueBinding.__parseSegments__P_93_9(this, value);
25947
+ let lastSegment = this.__sourceSegments__P_93_2.at(-1);
25905
25948
  lastSegment.setOutputReceiver(this);
25906
25949
  },
25907
25950
  /**
@@ -25915,36 +25958,36 @@ try {
25915
25958
  */
25916
25959
  setSource(value) {
25917
25960
  const SingleValueBinding = qx.data.SingleValueBinding;
25918
- if (this.__source__P_93_4 === value) {
25961
+ if (this.__source__P_93_5 === value) {
25919
25962
  return;
25920
25963
  }
25921
- this.__record__P_93_5 = null; // invalidate record representation cache
25922
- let oldValue = this.__source__P_93_4;
25923
- this.__source__P_93_4 = value;
25924
- this.__initPromise__P_93_7 = null; // reset the init promise, as the source has changed
25964
+ this.__record__P_93_6 = null; // invalidate record representation cache
25965
+ let oldValue = this.__source__P_93_5;
25966
+ this.__source__P_93_5 = value;
25967
+ this.__initPromise__P_93_8 = null; // reset the init promise, as the source has changed
25925
25968
 
25926
25969
  if (oldValue) {
25927
25970
  //Delete old source's bindings if there was one
25928
- delete SingleValueBinding.__bindingsBySource__P_93_9[oldValue.toHashCode()][this.toHashCode()];
25929
- if (qx.lang.Object.isEmpty(SingleValueBinding.__bindingsBySource__P_93_9[oldValue.toHashCode()])) {
25930
- delete SingleValueBinding.__bindingsBySource__P_93_9[oldValue.toHashCode()];
25971
+ delete SingleValueBinding.__bindingsBySource__P_93_10[oldValue.toHashCode()][this.toHashCode()];
25972
+ if (qx.lang.Object.isEmpty(SingleValueBinding.__bindingsBySource__P_93_10[oldValue.toHashCode()])) {
25973
+ delete SingleValueBinding.__bindingsBySource__P_93_10[oldValue.toHashCode()];
25931
25974
  }
25932
25975
  }
25933
25976
  if (value) {
25934
25977
  var _SingleValueBinding$_, _value$toHashCode, _SingleValueBinding$_2;
25935
25978
  //Store the binding
25936
- (_SingleValueBinding$_2 = (_SingleValueBinding$_ = SingleValueBinding.__bindingsBySource__P_93_9)[_value$toHashCode = value.toHashCode()]) !== null && _SingleValueBinding$_2 !== void 0 ? _SingleValueBinding$_2 : _SingleValueBinding$_[_value$toHashCode] = {};
25937
- SingleValueBinding.__bindingsBySource__P_93_9[value.toHashCode()][this.toHashCode()] = this;
25979
+ (_SingleValueBinding$_2 = (_SingleValueBinding$_ = SingleValueBinding.__bindingsBySource__P_93_10)[_value$toHashCode = value.toHashCode()]) !== null && _SingleValueBinding$_2 !== void 0 ? _SingleValueBinding$_2 : _SingleValueBinding$_[_value$toHashCode] = {};
25980
+ SingleValueBinding.__bindingsBySource__P_93_10[value.toHashCode()][this.toHashCode()] = this;
25938
25981
 
25939
25982
  //Set the input on the first segment of the source path
25940
- let out = this.__sourceSegments__P_93_1[0].setInput(value);
25983
+ let out = this.__sourceSegments__P_93_2[0].setInput(value);
25941
25984
  const cb = () => {};
25942
25985
  if (qx.Promise.isPromise(out)) {
25943
25986
  out = out.then(cb);
25944
25987
  } else {
25945
25988
  out = cb();
25946
25989
  }
25947
- this.__initPromise__P_93_7 = Promise.resolve(out);
25990
+ this.__initPromise__P_93_8 = Promise.resolve(out);
25948
25991
  return out;
25949
25992
  }
25950
25993
  },
@@ -25952,7 +25995,7 @@ try {
25952
25995
  * @returns {qx.core.Object} the source object
25953
25996
  */
25954
25997
  getSource() {
25955
- return this.__source__P_93_4;
25998
+ return this.__source__P_93_5;
25956
25999
  },
25957
26000
  /**
25958
26001
  * Apply for `targetPath`
@@ -25961,9 +26004,9 @@ try {
25961
26004
  if (oldValue) {
25962
26005
  throw new Error("Cannot change targetPath after binding has been created");
25963
26006
  }
25964
- this.__record__P_93_5 = null; // invalidate record representation cache
25965
- this.__targetSegments__P_93_2 = qx.data.SingleValueBinding.__parseSegments__P_93_8(this, value);
25966
- this.__targetSegments__P_93_2.at(-1).addListener("changeInput", this.__updateTarget__P_93_10, this);
26007
+ this.__record__P_93_6 = null; // invalidate record representation cache
26008
+ this.__targetSegments__P_93_3 = qx.data.SingleValueBinding.__parseSegments__P_93_9(this, value);
26009
+ this.__targetSegments__P_93_3.at(-1).setChangeInputCallback(() => this.__updateTarget__P_93_11());
25967
26010
  },
25968
26011
  /**
25969
26012
  * Sets the target object of this binding.
@@ -25975,27 +26018,27 @@ try {
25975
26018
  * If everything was synchronous, then this will return null.
25976
26019
  */
25977
26020
  setTarget(value) {
25978
- if (this.__target__P_93_6 === value) {
26021
+ if (this.__target__P_93_7 === value) {
25979
26022
  return;
25980
26023
  }
25981
- this.__record__P_93_5 = null; // invalidate record representation cache
25982
- this.__initPromise__P_93_7 = null; // reset the init promise, as the target has changed
25983
- let oldValue = this.__target__P_93_6;
25984
- this.__target__P_93_6 = value;
26024
+ this.__record__P_93_6 = null; // invalidate record representation cache
26025
+ this.__initPromise__P_93_8 = null; // reset the init promise, as the target has changed
26026
+ let oldValue = this.__target__P_93_7;
26027
+ this.__target__P_93_7 = value;
25985
26028
  const SingleValueBinding = qx.data.SingleValueBinding;
25986
26029
  if (oldValue) {
25987
- delete SingleValueBinding.__bindingsByTarget__P_93_11[oldValue.toHashCode()][this.toHashCode()];
25988
- if (qx.lang.Object.isEmpty(SingleValueBinding.__bindingsByTarget__P_93_11[oldValue.toHashCode()])) {
25989
- delete SingleValueBinding.__bindingsByTarget__P_93_11[oldValue.toHashCode()];
26030
+ delete SingleValueBinding.__bindingsByTarget__P_93_12[oldValue.toHashCode()][this.toHashCode()];
26031
+ if (qx.lang.Object.isEmpty(SingleValueBinding.__bindingsByTarget__P_93_12[oldValue.toHashCode()])) {
26032
+ delete SingleValueBinding.__bindingsByTarget__P_93_12[oldValue.toHashCode()];
25990
26033
  }
25991
26034
  }
25992
26035
  if (value) {
25993
26036
  var _SingleValueBinding$_3, _value$toHashCode2, _SingleValueBinding$_4;
25994
26037
  const SingleValueBinding = qx.data.SingleValueBinding;
25995
- (_SingleValueBinding$_4 = (_SingleValueBinding$_3 = SingleValueBinding.__bindingsByTarget__P_93_11)[_value$toHashCode2 = value.toHashCode()]) !== null && _SingleValueBinding$_4 !== void 0 ? _SingleValueBinding$_4 : _SingleValueBinding$_3[_value$toHashCode2] = {};
25996
- SingleValueBinding.__bindingsByTarget__P_93_11[value.toHashCode()][this.toHashCode()] = this;
25997
- let out = this.__targetSegments__P_93_2[0].setInput(value);
25998
- this.__initPromise__P_93_7 = Promise.resolve(out);
26038
+ (_SingleValueBinding$_4 = (_SingleValueBinding$_3 = SingleValueBinding.__bindingsByTarget__P_93_12)[_value$toHashCode2 = value.toHashCode()]) !== null && _SingleValueBinding$_4 !== void 0 ? _SingleValueBinding$_4 : _SingleValueBinding$_3[_value$toHashCode2] = {};
26039
+ SingleValueBinding.__bindingsByTarget__P_93_12[value.toHashCode()][this.toHashCode()] = this;
26040
+ let out = this.__targetSegments__P_93_3[0].setInput(value);
26041
+ this.__initPromise__P_93_8 = Promise.resolve(out);
25999
26042
  return out;
26000
26043
  }
26001
26044
  },
@@ -26004,7 +26047,7 @@ try {
26004
26047
  * @returns {qx.core.Object} the target object
26005
26048
  */
26006
26049
  getTarget() {
26007
- return this.__target__P_93_6;
26050
+ return this.__target__P_93_7;
26008
26051
  },
26009
26052
  /**
26010
26053
  * This method should not be called directly.
@@ -26014,42 +26057,42 @@ try {
26014
26057
  * @param {*} input
26015
26058
  */
26016
26059
  setInput(input) {
26017
- return this.__setValue__P_93_12(input);
26060
+ return this.__setValue__P_93_13(input);
26018
26061
  },
26019
26062
  /**
26020
26063
  *
26021
26064
  * @param {*} value The final value obtained from the sourcePath
26022
26065
  * @returns {Promise?} A promise if setting the target is asynchronous, otherwise null
26023
26066
  */
26024
- __setValue__P_93_12(value) {
26025
- if (this.__value__P_93_3 === value) {
26067
+ __setValue__P_93_13(value) {
26068
+ if (this.__value__P_93_4 === value) {
26026
26069
  return null; // no change
26027
26070
  }
26028
- this.__value__P_93_3 = value;
26029
- return this.__updateTarget__P_93_10();
26071
+ this.__value__P_93_4 = value;
26072
+ return this.__updateTarget__P_93_11();
26030
26073
  },
26031
26074
  /**
26032
26075
  *
26033
26076
  * @returns {*} the value that was set by the sourcePath
26034
26077
  */
26035
26078
  getValue() {
26036
- return this.__value__P_93_3;
26079
+ return this.__value__P_93_4;
26037
26080
  },
26038
26081
  /**
26039
26082
  * Updates the target with the current value
26040
26083
  */
26041
- __updateTarget__P_93_10() {
26042
- if (this.__targetSegments__P_93_2) {
26084
+ __updateTarget__P_93_11() {
26085
+ if (this.__targetSegments__P_93_3) {
26043
26086
  //We need to make sure the target segments are up to date
26044
26087
  //because the listeners may trigger after this point.
26045
26088
  //This is important in bidirectional bindings.
26046
- for (let segment of this.__targetSegments__P_93_2) {
26089
+ for (let segment of this.__targetSegments__P_93_3) {
26047
26090
  if (segment.getOutputReceiver()) {
26048
26091
  segment.updateOutput();
26049
26092
  }
26050
26093
  }
26051
26094
  }
26052
- let lastSegment = this.__targetSegments__P_93_2.at(-1);
26095
+ let lastSegment = this.__targetSegments__P_93_3.at(-1);
26053
26096
  if (this.getTarget() && this.getSource()) {
26054
26097
  let value = this.getValue();
26055
26098
  let ignoreConverter = false;
@@ -26087,9 +26130,9 @@ try {
26087
26130
  },
26088
26131
  statics: {
26089
26132
  /** @type {Object<String,Object<String,Binding>>} map of maps, outer map is indexed by object hash, inner is indexed by binding hash */
26090
- __bindingsBySource__P_93_9: {},
26133
+ __bindingsBySource__P_93_10: {},
26091
26134
  /** @type {Object<String,Object<String,Binding>>} map of maps, outer map is indexed by object hash, inner is indexed by binding hash */
26092
- __bindingsByTarget__P_93_11: {},
26135
+ __bindingsByTarget__P_93_12: {},
26093
26136
  /**
26094
26137
  * @see {qx.data.SingleValueBinding#construct}
26095
26138
  */
@@ -26159,7 +26202,7 @@ try {
26159
26202
  let model = typeof targetObject.getModel == "function" ? targetObject.getModel() : null;
26160
26203
  value = options.converter(value, model, sourceObject, targetObject);
26161
26204
  }
26162
- return this.__setTargetValue__P_93_13(targetObject, targetPropertyChain, value);
26205
+ return this.__setTargetValue__P_93_14(targetObject, targetPropertyChain, value);
26163
26206
  },
26164
26207
  /**
26165
26208
  * Sets the given value to the given target after resolving the
@@ -26171,34 +26214,14 @@ try {
26171
26214
  * separated with a dot.
26172
26215
  * @param value {var} The value to set.
26173
26216
  */
26174
- __setTargetValue__P_93_13(targetObject, targetPropertyChain, value) {
26175
- let segments = qx.data.SingleValueBinding.__parseSegments__P_93_8(null, targetPropertyChain);
26217
+ __setTargetValue__P_93_14(targetObject, targetPropertyChain, value) {
26218
+ let segments = qx.data.SingleValueBinding.__parseSegments__P_93_9(null, targetPropertyChain);
26176
26219
  let lastSegment = segments[segments.length - 1];
26177
26220
  segments[0].setInput(targetObject);
26178
26221
  let out = lastSegment.setTargetValue(value);
26179
26222
  segments.forEach(segment => segment.dispose());
26180
26223
  return out;
26181
26224
  },
26182
- /**
26183
- * Splits a property path into segments.
26184
- * @param {string} path
26185
- * @returns {string[]} an array of segments, split by dot and square brackets.
26186
- * For example, splitSegments(`a.b[0].c`) will return `["a", "b", "[0]", "c"]`
26187
- */
26188
- splitSegments(path) {
26189
- let out = [];
26190
- for (let dotSplit of path.split(".")) {
26191
- let bracketSplits = dotSplit.split("[");
26192
- for (let i = 0; i < bracketSplits.length; i++) {
26193
- let bracketSplit = bracketSplits[i];
26194
- if (i > 0) {
26195
- bracketSplit = "[" + bracketSplit;
26196
- }
26197
- out.push(bracketSplit);
26198
- }
26199
- }
26200
- return out.filter(s => s.length > 0);
26201
- },
26202
26225
  /**
26203
26226
  * Finds all bindings for an object, as either a source or target
26204
26227
  *
@@ -26209,8 +26232,8 @@ try {
26209
26232
  var _SingleValueBinding$_5, _SingleValueBinding$_6;
26210
26233
  const SingleValueBinding = qx.data.SingleValueBinding;
26211
26234
  let allBindings = {
26212
- ...((_SingleValueBinding$_5 = SingleValueBinding.__bindingsBySource__P_93_9[object.toHashCode()]) !== null && _SingleValueBinding$_5 !== void 0 ? _SingleValueBinding$_5 : {}),
26213
- ...((_SingleValueBinding$_6 = SingleValueBinding.__bindingsByTarget__P_93_11[object.toHashCode()]) !== null && _SingleValueBinding$_6 !== void 0 ? _SingleValueBinding$_6 : {})
26235
+ ...((_SingleValueBinding$_5 = SingleValueBinding.__bindingsBySource__P_93_10[object.toHashCode()]) !== null && _SingleValueBinding$_5 !== void 0 ? _SingleValueBinding$_5 : {}),
26236
+ ...((_SingleValueBinding$_6 = SingleValueBinding.__bindingsByTarget__P_93_12[object.toHashCode()]) !== null && _SingleValueBinding$_6 !== void 0 ? _SingleValueBinding$_6 : {})
26214
26237
  };
26215
26238
  return Object.values(allBindings).map(binding => binding.asRecord());
26216
26239
  },
@@ -26226,7 +26249,7 @@ try {
26226
26249
  * Stores the binding ID, source object, source path, target object and target path respectively.
26227
26250
  */
26228
26251
  getAllBindings() {
26229
- let bindings = qx.data.SingleValueBinding.__bindingsBySource__P_93_9;
26252
+ let bindings = qx.data.SingleValueBinding.__bindingsBySource__P_93_10;
26230
26253
  let result = {};
26231
26254
  for (let [objectHash, objectBindings] of Object.entries(bindings)) {
26232
26255
  let objectBindingsArray = [];
@@ -26251,7 +26274,7 @@ try {
26251
26274
  */
26252
26275
  removeRelatedBindings(object, relatedObject) {
26253
26276
  const SingleValueBinding = qx.data.SingleValueBinding;
26254
- let bySourceObject = SingleValueBinding.__bindingsBySource__P_93_9[object.toHashCode()];
26277
+ let bySourceObject = SingleValueBinding.__bindingsBySource__P_93_10[object.toHashCode()];
26255
26278
  if (bySourceObject) {
26256
26279
  Object.values(bySourceObject).forEach(binding => {
26257
26280
  if (binding.getTarget() === relatedObject) {
@@ -26259,7 +26282,7 @@ try {
26259
26282
  }
26260
26283
  });
26261
26284
  }
26262
- let byRelatedObject = SingleValueBinding.__bindingsBySource__P_93_9[relatedObject.toHashCode()];
26285
+ let byRelatedObject = SingleValueBinding.__bindingsBySource__P_93_10[relatedObject.toHashCode()];
26263
26286
  if (byRelatedObject) {
26264
26287
  Object.values(byRelatedObject).forEach(binding => {
26265
26288
  if (binding.getTarget() === object) {
@@ -26268,67 +26291,6 @@ try {
26268
26291
  });
26269
26292
  }
26270
26293
  },
26271
- /**
26272
- * Helper method that sets a value for a named property
26273
- *
26274
- * @param {qx.core.Object} target object to have a property set
26275
- * @param {String} propertyName the name of the property
26276
- * @param {Object?} value the value to set
26277
- */
26278
- set(target, propertyName, value) {
26279
- let prop = qx.util.PropertyUtil.getProperty(target.constructor, propertyName);
26280
- if (!prop) {
26281
- let setFuncName = "set" + qx.lang.String.firstUp(propertyName);
26282
- if (typeof target[setFuncName] == "function") {
26283
- return target[setFuncName](value);
26284
- } else {
26285
- throw new Error(`Property ${propertyName} not found on ${target.classname}`);
26286
- }
26287
- }
26288
- if (prop.isAsync()) {
26289
- return prop.setAsync(target, value);
26290
- } else {
26291
- return prop.set(target, value);
26292
- }
26293
- },
26294
- /**
26295
- * Helper method to get a value of a named property
26296
- *
26297
- * @param {qx.core.Object} target object to have a property get
26298
- * @param {String} propertyName the name of the property
26299
- * @returns {Object?} the property value
26300
- */
26301
- get(target, propertyName) {
26302
- let prop = qx.util.PropertyUtil.getProperty(target.constructor, propertyName);
26303
- if (prop.isAsync()) {
26304
- return prop.getAsync(target);
26305
- } else {
26306
- return prop.get(target);
26307
- }
26308
- },
26309
- /**
26310
- * Helper method that resets a named property
26311
- *
26312
- * @param {qx.core.Object} target object to have a property set
26313
- * @param {String} propertyName the name of the property
26314
-
26315
- */
26316
- reset(target, propertyName) {
26317
- let prop = qx.util.PropertyUtil.getProperty(target.constructor, propertyName);
26318
- if (!prop) {
26319
- let setFuncName = "reset" + qx.lang.String.firstUp(propertyName);
26320
- if (typeof target[setFuncName] == "function") {
26321
- return target[setFuncName]();
26322
- } else {
26323
- throw new Error(`Property ${propertyName} not found on ${target.classname}`);
26324
- }
26325
- }
26326
- if (prop.isAsync()) {
26327
- return prop.resetAsync(target);
26328
- } else {
26329
- return prop.reset(target);
26330
- }
26331
- },
26332
26294
  /**
26333
26295
  *
26334
26296
  * Internal helper for getting the current set value at the property chain.
@@ -26339,7 +26301,7 @@ try {
26339
26301
  * @return {var?undefined} Returns the set value if defined.
26340
26302
  */
26341
26303
  resolvePropertyChain(object, propertyChain) {
26342
- let segments = qx.data.SingleValueBinding.__parseSegments__P_93_8(null, propertyChain);
26304
+ let segments = qx.data.SingleValueBinding.__parseSegments__P_93_9(null, propertyChain);
26343
26305
  let out;
26344
26306
  let receiver = {
26345
26307
  setInput(value) {
@@ -26369,24 +26331,50 @@ try {
26369
26331
  * @param {String} path the path to parse
26370
26332
  * @return {qx.data.binding.AbstractSegment[]?} the new array of segments
26371
26333
  */
26372
- __parseSegments__P_93_8(binding, path) {
26373
- let segsStrings = qx.data.SingleValueBinding.splitSegments(path);
26334
+ __parseSegments__P_93_9(binding, path) {
26335
+ let segsStrings = this.__splitSegments__P_93_15(path);
26336
+ //should be let segsStrings = path.split(/\.|(?=\[)|(?<=\])/g);// split by dot or square brackets, but keep the brackets as part of the segments
26337
+ //but this breaks our Rhino because it's really old
26338
+ //TODO update Rhino
26339
+
26374
26340
  let segments = [];
26375
- for (let seg of segsStrings) {
26341
+ let previous;
26342
+ for (let segStr of segsStrings) {
26343
+ let seg;
26376
26344
  //if it's an array index:
26377
- if (seg.startsWith("[")) {
26378
- segments.push(new qx.data.binding.ArrayIndexSegment(binding, seg));
26345
+ if (segStr.startsWith("[")) {
26346
+ seg = new qx.data.binding.ArrayIndexSegment(binding, segStr);
26379
26347
  } else {
26380
26348
  //otherwise, it's a normal path
26381
- segments.push(new qx.data.binding.PropNameSegment(binding, seg));
26349
+ seg = new qx.data.binding.PropNameSegment(binding, segStr);
26382
26350
  }
26383
- }
26384
- segments.forEach((seg, index) => {
26385
- if (index < segments.length - 1) {
26386
- seg.setOutputReceiver(segments[index + 1]);
26351
+ if (previous) {
26352
+ previous.setOutputReceiver(seg);
26387
26353
  }
26388
- });
26354
+ previous = seg;
26355
+ segments.push(seg);
26356
+ }
26389
26357
  return segments;
26358
+ },
26359
+ /**
26360
+ * Splits a property path into segments.
26361
+ * @param {string} path
26362
+ * @returns {string[]} an array of segments, split by dot and square brackets.
26363
+ * For example, splitSegments(`a.b[0].c`) will return `["a", "b", "[0]", "c"]`
26364
+ */
26365
+ __splitSegments__P_93_15(path) {
26366
+ let out = [];
26367
+ for (let dotSplit of path.split(".")) {
26368
+ let bracketSplits = dotSplit.split("[");
26369
+ for (let i = 0; i < bracketSplits.length; i++) {
26370
+ let bracketSplit = bracketSplits[i];
26371
+ if (i > 0) {
26372
+ bracketSplit = "[" + bracketSplit;
26373
+ }
26374
+ out.push(bracketSplit);
26375
+ }
26376
+ }
26377
+ return out.filter(s => s.length > 0);
26390
26378
  }
26391
26379
  }
26392
26380
  });
@@ -32399,103 +32387,6 @@ try {
32399
32387
  qx.bom.webfonts.WebFont.$$dbClassInfo = $$dbClassInfo;
32400
32388
  })();
32401
32389
 
32402
- (function () {
32403
- var $$dbClassInfo = {
32404
- "dependsOn": {
32405
- "qx.Class": {
32406
- "usage": "dynamic",
32407
- "require": true
32408
- },
32409
- "qx.core.Object": {}
32410
- }
32411
- };
32412
- qx.Bootstrap.executePendingDefers($$dbClassInfo);
32413
- /* ************************************************************************
32414
-
32415
- qooxdoo - the new era of web development
32416
-
32417
- http://qooxdoo.org
32418
-
32419
- Copyright:
32420
- 2009 1&1 Internet AG, Germany, http://www.1und1.de
32421
-
32422
- License:
32423
- MIT: https://opensource.org/licenses/MIT
32424
- See the LICENSE file in the project's top-level directory for details.
32425
-
32426
- Authors:
32427
- * Fabian Jakobs (fjakobs)
32428
-
32429
- ************************************************************************ */
32430
-
32431
- /**
32432
- * A helper class for accessing the property system directly.
32433
- *
32434
- * This class is rather to be used internally. For all regular usage of the
32435
- * property system the default API should be sufficient.
32436
- *
32437
- * Prior to v8, this class included methods to get/set the user, theme, and init values
32438
- * of properties independently - this methods circumvented the normal operation of the
32439
- * property mechanism. It could be argued that the `get` methods are alloweed, and
32440
- * in some cases can be replicated via the property system, but their meaning was different,
32441
- * ie even `getUserValue` would not return the value of the property, but the value set
32442
- * by a user and not overridden by a theme. For this reason, the `get` methods are not
32443
- * truely compatible and anyone using those methods should think again about exactly what
32444
- * they are trying to achieve, and probably revise their process.
32445
- *
32446
- * As it stands, any use of this class needs to be reviewed from v8 onwards because the
32447
- * `getProperties`/`getAllProperties` methods return instances of `qx.core.property.Property`
32448
- * and not the old POJO.
32449
- */
32450
- qx.Class.define("qx.util.PropertyUtil", {
32451
- statics: {
32452
- /**
32453
- * Get the property map of the given class
32454
- *
32455
- * @param clazz {qx.Class|qx.core.Object} a qooxdoo class
32456
- * @return {Object<String,qx.core.property.Property>} A properties map as defined in {@link qx.Class#define}
32457
- * including the properties of included mixins and not including refined
32458
- * properties.
32459
- */
32460
- getProperties(clazz) {
32461
- if (clazz instanceof qx.core.Object) {
32462
- clazz = clazz.constructor;
32463
- }
32464
- return clazz.prototype.$$properties;
32465
- },
32466
- /**
32467
- * Get the property map of the given class including the properties of all
32468
- * superclasses
32469
- *
32470
- * @param clazz {qx.Class|qx.core.Object} a qooxdoo class
32471
- * @return {Object<String,qx.core.property.Property>} The properties map as defined in {@link qx.Class#define}
32472
- * including the properties of included mixins of the current class and
32473
- * all superclasses.
32474
- */
32475
- getAllProperties(clazz) {
32476
- if (clazz instanceof qx.core.Object) {
32477
- clazz = clazz.constructor;
32478
- }
32479
- return clazz.prototype.$$allProperties;
32480
- },
32481
- /**
32482
- * Returns the property object for a givemn property
32483
- *
32484
- * @param {qx.Class|qx.core.Object} clazz
32485
- * @param {String} propertyName
32486
- * @returns {qx.core.property.Property}
32487
- */
32488
- getProperty(clazz, propertyName) {
32489
- if (clazz instanceof qx.core.Object) {
32490
- clazz = clazz.constructor;
32491
- }
32492
- return clazz.prototype.$$allProperties[propertyName] || null;
32493
- }
32494
- }
32495
- });
32496
- qx.util.PropertyUtil.$$dbClassInfo = $$dbClassInfo;
32497
- })();
32498
-
32499
32390
  (function () {
32500
32391
  var $$dbClassInfo = {
32501
32392
  "dependsOn": {
@@ -32560,14 +32451,12 @@ try {
32560
32451
  event: "changeEventName"
32561
32452
  }
32562
32453
  },
32563
- /**
32564
- * Fired when this segment's input changed, and it has been received and fully processed by the next segments in the chain,
32565
- * i.e. any async set/get operations have completed.
32566
- */
32567
- events: {
32568
- changeInput: "qx.event.type.Data"
32569
- },
32570
32454
  members: {
32455
+ /**
32456
+ * Called when this segment's input changed, and it has been received and fully processed by the next segments in the chain,
32457
+ * i.e. any async set/get operations have completed.
32458
+ */
32459
+ __changeInputCallback__P_94_1: () => {},
32571
32460
  /**
32572
32461
  * @type {qx.data.SingleValueBinding}
32573
32462
  */
@@ -32575,11 +32464,18 @@ try {
32575
32464
  /**
32576
32465
  * @type {qx.core.Object}
32577
32466
  */
32578
- __input__P_94_1: undefined,
32467
+ __input__P_94_2: undefined,
32579
32468
  /**
32580
32469
  * @type {qx.data.binding.IInputReceiver}
32581
32470
  */
32582
- __outputReceiver__P_94_2: null,
32471
+ __outputReceiver__P_94_3: null,
32472
+ /**
32473
+ *
32474
+ * @param {Function} callback
32475
+ */
32476
+ setChangeInputCallback(callback) {
32477
+ this.__changeInputCallback__P_94_1 = callback;
32478
+ },
32583
32479
  /**
32584
32480
  *
32585
32481
  * @returns {qx.data.SingleValueBinding} the binding that this segment belongs to. Useful for debugging purposes.
@@ -32596,14 +32492,14 @@ try {
32596
32492
  * @param {qx.data.binding.IInputReceiver} segment
32597
32493
  */
32598
32494
  setOutputReceiver(segment) {
32599
- this.__outputReceiver__P_94_2 = segment;
32495
+ this.__outputReceiver__P_94_3 = segment;
32600
32496
  },
32601
32497
  /**
32602
32498
  *
32603
32499
  * @returns {qx.data.binding.IInputReceiver} the object which is meant to receive the output of this segment
32604
32500
  */
32605
32501
  getOutputReceiver() {
32606
- return this.__outputReceiver__P_94_2;
32502
+ return this.__outputReceiver__P_94_3;
32607
32503
  },
32608
32504
  /**
32609
32505
  * @override
@@ -32619,16 +32515,16 @@ try {
32619
32515
  * If it's synchronous, it returns null.
32620
32516
  */
32621
32517
  setInput(value) {
32622
- if (value === this.__input__P_94_1) {
32518
+ if (value === this.__input__P_94_2) {
32623
32519
  return null; // no change
32624
32520
  }
32625
- let old = this.__input__P_94_1;
32626
- this.__input__P_94_1 = value;
32521
+ let old = this.__input__P_94_2;
32522
+ this.__input__P_94_2 = value;
32627
32523
  let out = this._applyInput(value, old);
32628
32524
  if (qx.lang.Type.isPromise(out)) {
32629
- return out.then(() => this.fireDataEvent("changeInput", value, old));
32525
+ return out.then(() => this.__changeInputCallback__P_94_1(value, old));
32630
32526
  } else {
32631
- return this.fireDataEvent("changeInput", value, old);
32527
+ return this.__changeInputCallback__P_94_1(value, old);
32632
32528
  }
32633
32529
  },
32634
32530
  /**
@@ -32636,7 +32532,7 @@ try {
32636
32532
  * @returns {qx.core.Object} the input value that this segment is currently using
32637
32533
  */
32638
32534
  getInput() {
32639
- return this.__input__P_94_1;
32535
+ return this.__input__P_94_2;
32640
32536
  },
32641
32537
  /**
32642
32538
  * @abstract
@@ -32663,10 +32559,10 @@ try {
32663
32559
  * If it's synchronous, it returns null.
32664
32560
  */
32665
32561
  _setOutput(output) {
32666
- if (!this.__outputReceiver__P_94_2) {
32562
+ if (!this.__outputReceiver__P_94_3) {
32667
32563
  throw new Error("No output receiver set");
32668
32564
  }
32669
- return this.__outputReceiver__P_94_2.setInput(output);
32565
+ return this.__outputReceiver__P_94_3.setInput(output);
32670
32566
  },
32671
32567
  /**
32672
32568
  * Computes the output value based on the input and calls _setOutput with that value.
@@ -32707,8 +32603,7 @@ try {
32707
32603
  },
32708
32604
  "qx.lang.String": {
32709
32605
  "construct": true
32710
- },
32711
- "qx.data.SingleValueBinding": {}
32606
+ }
32712
32607
  }
32713
32608
  };
32714
32609
  qx.Bootstrap.executePendingDefers($$dbClassInfo);
@@ -32772,6 +32667,9 @@ try {
32772
32667
  * Apply for `input`
32773
32668
  */
32774
32669
  _applyInput(value, oldValue) {
32670
+ if (!this.getOutputReceiver()) {
32671
+ return;
32672
+ }
32775
32673
  if (oldValue) {
32776
32674
  let eventName = this.__getEventName__P_96_1(oldValue);
32777
32675
  eventName && oldValue.removeListener(eventName, this.__onChangeInputProperty__P_96_2, this);
@@ -32782,9 +32680,7 @@ try {
32782
32680
  eventName && value.addListener(eventName, this.__onChangeInputProperty__P_96_2, this);
32783
32681
  this.setEventName(eventName);
32784
32682
  }
32785
- if (this.getOutputReceiver()) {
32786
- return this.updateOutput();
32787
- }
32683
+ return this.updateOutput();
32788
32684
  },
32789
32685
  updateOutput() {
32790
32686
  let input = this.getInput();
@@ -32795,8 +32691,8 @@ try {
32795
32691
  if (property === null) {
32796
32692
  return this._setOutput(null);
32797
32693
  }
32798
- if (!property.isAsync() || property.isInitialized(input)) {
32799
- let nextInput = property.get(input, this.__propName__P_96_0);
32694
+ if (!property.supportsGetAsync() || property.hasLocalValue(input)) {
32695
+ let nextInput = property.get(input);
32800
32696
  return this._setOutput(nextInput);
32801
32697
  } else {
32802
32698
  let promise = property.getAsync(input);
@@ -32808,13 +32704,30 @@ try {
32808
32704
  * @override
32809
32705
  */
32810
32706
  setTargetValue(targetValue) {
32811
- if (this.getInput() == null || this.getInput() === undefined) {
32707
+ var _this$getBinding;
32708
+ let input = this.getInput();
32709
+ if (input == null || input === undefined) {
32812
32710
  return;
32813
32711
  }
32712
+ let async = (_this$getBinding = this.getBinding()) === null || _this$getBinding === void 0 ? void 0 : _this$getBinding.isAsync();
32713
+
32714
+ //get the setter method name
32715
+ let upname = qx.lang.String.firstUp(this.__propName__P_96_0);
32716
+ let method;
32814
32717
  if (targetValue !== undefined) {
32815
- return qx.data.SingleValueBinding.set(this.getInput(), this.__propName__P_96_0, targetValue);
32718
+ if (async) {
32719
+ method = `set${upname}Async`;
32720
+ } else {
32721
+ method = `set${upname}`;
32722
+ }
32723
+ return input[method](targetValue);
32816
32724
  } else {
32817
- return qx.data.SingleValueBinding.reset(this.getInput(), this.__propName__P_96_0);
32725
+ if (async) {
32726
+ method = `reset${upname}Async`;
32727
+ } else {
32728
+ method = `reset${upname}`;
32729
+ }
32730
+ return input[method]();
32818
32731
  }
32819
32732
  },
32820
32733
  /**
@@ -32823,9 +32736,7 @@ try {
32823
32736
  * @param {qx.event.type.Data} evt
32824
32737
  */
32825
32738
  __onChangeInputProperty__P_96_2(evt) {
32826
- if (this.getOutputReceiver()) {
32827
- return this._setOutput(evt.getData());
32828
- }
32739
+ return this._setOutput(evt.getData());
32829
32740
  },
32830
32741
  /**
32831
32742
  *
@@ -47895,7 +47806,7 @@ try {
47895
47806
  * @return {String}
47896
47807
  */
47897
47808
  getCompilerVersion() {
47898
- return "8.0.0-beta.2";
47809
+ return "8.0.0-beta.3";
47899
47810
  },
47900
47811
  /**
47901
47812
  * Returns the qooxdoo version used in the application in the current or given
@@ -56934,8 +56845,7 @@ Version: v${await qx.tool.config.Utils.getQxVersion()}
56934
56845
  init: null,
56935
56846
  nullable: true,
56936
56847
  check: "qx.tool.compiler.cli.Command",
56937
- event: "changeCommand",
56938
- async: true
56848
+ event: "changeCommand"
56939
56849
  }
56940
56850
  },
56941
56851
  members: {
@@ -76241,6 +76151,30 @@ qx.$$packageData['0'] = {
76241
76151
  "en": {}
76242
76152
  },
76243
76153
  "resources": {
76154
+ "qx/decoration/Simple/cursors/alias.gif": [
76155
+ 19,
76156
+ 15,
76157
+ "gif",
76158
+ "qx"
76159
+ ],
76160
+ "qx/decoration/Simple/cursors/copy.gif": [
76161
+ 19,
76162
+ 15,
76163
+ "gif",
76164
+ "qx"
76165
+ ],
76166
+ "qx/decoration/Simple/cursors/move.gif": [
76167
+ 13,
76168
+ 9,
76169
+ "gif",
76170
+ "qx"
76171
+ ],
76172
+ "qx/decoration/Simple/cursors/nodrop.gif": [
76173
+ 20,
76174
+ 20,
76175
+ "gif",
76176
+ "qx"
76177
+ ],
76244
76178
  "qx/decoration/Simple/checkbox/checked-disabled.png": [
76245
76179
  6,
76246
76180
  6,
@@ -76289,30 +76223,6 @@ qx.$$packageData['0'] = {
76289
76223
  "gif",
76290
76224
  "qx"
76291
76225
  ],
76292
- "qx/decoration/Simple/cursors/alias.gif": [
76293
- 19,
76294
- 15,
76295
- "gif",
76296
- "qx"
76297
- ],
76298
- "qx/decoration/Simple/cursors/copy.gif": [
76299
- 19,
76300
- 15,
76301
- "gif",
76302
- "qx"
76303
- ],
76304
- "qx/decoration/Simple/cursors/move.gif": [
76305
- 13,
76306
- 9,
76307
- "gif",
76308
- "qx"
76309
- ],
76310
- "qx/decoration/Simple/cursors/nodrop.gif": [
76311
- 20,
76312
- 20,
76313
- "gif",
76314
- "qx"
76315
- ],
76316
76226
  "qx/decoration/Simple/arrows/down-invert.gif": [
76317
76227
  7,
76318
76228
  4,
@@ -76409,18 +76319,6 @@ qx.$$packageData['0'] = {
76409
76319
  "gif",
76410
76320
  "qx"
76411
76321
  ],
76412
- "qx/decoration/Simple/splitpane/knob-horizontal.png": [
76413
- 1,
76414
- 8,
76415
- "png",
76416
- "qx"
76417
- ],
76418
- "qx/decoration/Simple/splitpane/knob-vertical.png": [
76419
- 8,
76420
- 1,
76421
- "png",
76422
- "qx"
76423
- ],
76424
76322
  "qx/decoration/Simple/table/ascending-invert.png": [
76425
76323
  10,
76426
76324
  10,
@@ -76553,6 +76451,18 @@ qx.$$packageData['0'] = {
76553
76451
  "gif",
76554
76452
  "qx"
76555
76453
  ],
76454
+ "qx/decoration/Simple/splitpane/knob-horizontal.png": [
76455
+ 1,
76456
+ 8,
76457
+ "png",
76458
+ "qx"
76459
+ ],
76460
+ "qx/decoration/Simple/splitpane/knob-vertical.png": [
76461
+ 8,
76462
+ 1,
76463
+ "png",
76464
+ "qx"
76465
+ ],
76556
76466
  "qx/decoration/Simple/window/close-white.gif": [
76557
76467
  10,
76558
76468
  9,
@@ -76625,13 +76535,13 @@ qx.$$packageData['0'] = {
76625
76535
  "json",
76626
76536
  "qx"
76627
76537
  ],
76628
- "qx/tool/compiler/schema/Manifest-2-0-0.json": [
76538
+ "qx/tool/compiler/schema/qooxdoo-1-0-0.json": [
76629
76539
  null,
76630
76540
  null,
76631
76541
  "json",
76632
76542
  "qx"
76633
76543
  ],
76634
- "qx/tool/compiler/schema/qooxdoo-1-0-0.json": [
76544
+ "qx/tool/compiler/schema/Manifest-2-0-0.json": [
76635
76545
  null,
76636
76546
  null,
76637
76547
  "json",
@@ -76649,121 +76559,121 @@ qx.$$packageData['0'] = {
76649
76559
  "ts",
76650
76560
  "qx"
76651
76561
  ],
76652
- "qx/tool/compiler/cli/templates/loader/loader-browser.tmpl.js": [
76562
+ "qx/tool/compiler/cli/templates/class/default.tmpl.js": [
76653
76563
  null,
76654
76564
  null,
76655
76565
  "js",
76656
76566
  "qx"
76657
76567
  ],
76658
- "qx/tool/compiler/cli/templates/loader/loader-node.tmpl.js": [
76568
+ "qx/tool/compiler/cli/templates/class/header.tmpl.js": [
76659
76569
  null,
76660
76570
  null,
76661
76571
  "js",
76662
76572
  "qx"
76663
76573
  ],
76664
- "qx/tool/compiler/cli/templates/loader/loader-rhino.tmpl.js": [
76574
+ "qx/tool/compiler/cli/templates/class/interface.tmpl.js": [
76665
76575
  null,
76666
76576
  null,
76667
76577
  "js",
76668
76578
  "qx"
76669
76579
  ],
76670
- "qx/tool/compiler/cli/templates/class/default.tmpl.js": [
76580
+ "qx/tool/compiler/cli/templates/class/mixin.tmpl.js": [
76671
76581
  null,
76672
76582
  null,
76673
76583
  "js",
76674
76584
  "qx"
76675
76585
  ],
76676
- "qx/tool/compiler/cli/templates/class/header.tmpl.js": [
76586
+ "qx/tool/compiler/cli/templates/class/singleton.tmpl.js": [
76677
76587
  null,
76678
76588
  null,
76679
76589
  "js",
76680
76590
  "qx"
76681
76591
  ],
76682
- "qx/tool/compiler/cli/templates/class/interface.tmpl.js": [
76592
+ "qx/tool/compiler/cli/templates/loader/loader-browser.tmpl.js": [
76683
76593
  null,
76684
76594
  null,
76685
76595
  "js",
76686
76596
  "qx"
76687
76597
  ],
76688
- "qx/tool/compiler/cli/templates/class/mixin.tmpl.js": [
76598
+ "qx/tool/compiler/cli/templates/loader/loader-rhino.tmpl.js": [
76689
76599
  null,
76690
76600
  null,
76691
76601
  "js",
76692
76602
  "qx"
76693
76603
  ],
76694
- "qx/tool/compiler/cli/templates/class/singleton.tmpl.js": [
76604
+ "qx/tool/compiler/cli/templates/loader/loader-node.tmpl.js": [
76695
76605
  null,
76696
76606
  null,
76697
76607
  "js",
76698
76608
  "qx"
76699
76609
  ],
76700
- "qx/tool/compiler/cli/templates/skeleton/desktop/.gitignore.tmpl": [
76610
+ "qx/tool/compiler/cli/templates/skeleton/mobile/.gitignore.tmpl": [
76701
76611
  null,
76702
76612
  null,
76703
76613
  "tmpl",
76704
76614
  "qx"
76705
76615
  ],
76706
- "qx/tool/compiler/cli/templates/skeleton/desktop/compile.tmpl.json": [
76616
+ "qx/tool/compiler/cli/templates/skeleton/mobile/Manifest.tmpl.json": [
76707
76617
  null,
76708
76618
  null,
76709
76619
  "json",
76710
76620
  "qx"
76711
76621
  ],
76712
- "qx/tool/compiler/cli/templates/skeleton/desktop/Manifest.tmpl.json": [
76622
+ "qx/tool/compiler/cli/templates/skeleton/mobile/compile.tmpl.json": [
76713
76623
  null,
76714
76624
  null,
76715
76625
  "json",
76716
76626
  "qx"
76717
76627
  ],
76718
- "qx/tool/compiler/cli/templates/skeleton/desktop/readme.tmpl.md": [
76628
+ "qx/tool/compiler/cli/templates/skeleton/mobile/readme.tmpl.md": [
76719
76629
  null,
76720
76630
  null,
76721
76631
  "md",
76722
76632
  "qx"
76723
76633
  ],
76724
- "qx/tool/compiler/cli/templates/skeleton/package/.gitignore.tmpl": [
76634
+ "qx/tool/compiler/cli/templates/skeleton/desktop/.gitignore.tmpl": [
76725
76635
  null,
76726
76636
  null,
76727
76637
  "tmpl",
76728
76638
  "qx"
76729
76639
  ],
76730
- "qx/tool/compiler/cli/templates/skeleton/package/compile.tmpl.json": [
76640
+ "qx/tool/compiler/cli/templates/skeleton/desktop/compile.tmpl.json": [
76731
76641
  null,
76732
76642
  null,
76733
76643
  "json",
76734
76644
  "qx"
76735
76645
  ],
76736
- "qx/tool/compiler/cli/templates/skeleton/package/Manifest.tmpl.json": [
76646
+ "qx/tool/compiler/cli/templates/skeleton/desktop/Manifest.tmpl.json": [
76737
76647
  null,
76738
76648
  null,
76739
76649
  "json",
76740
76650
  "qx"
76741
76651
  ],
76742
- "qx/tool/compiler/cli/templates/skeleton/package/readme.tmpl.md": [
76652
+ "qx/tool/compiler/cli/templates/skeleton/desktop/readme.tmpl.md": [
76743
76653
  null,
76744
76654
  null,
76745
76655
  "md",
76746
76656
  "qx"
76747
76657
  ],
76748
- "qx/tool/compiler/cli/templates/skeleton/mobile/.gitignore.tmpl": [
76658
+ "qx/tool/compiler/cli/templates/skeleton/package/.gitignore.tmpl": [
76749
76659
  null,
76750
76660
  null,
76751
76661
  "tmpl",
76752
76662
  "qx"
76753
76663
  ],
76754
- "qx/tool/compiler/cli/templates/skeleton/mobile/compile.tmpl.json": [
76664
+ "qx/tool/compiler/cli/templates/skeleton/package/compile.tmpl.json": [
76755
76665
  null,
76756
76666
  null,
76757
76667
  "json",
76758
76668
  "qx"
76759
76669
  ],
76760
- "qx/tool/compiler/cli/templates/skeleton/mobile/Manifest.tmpl.json": [
76670
+ "qx/tool/compiler/cli/templates/skeleton/package/Manifest.tmpl.json": [
76761
76671
  null,
76762
76672
  null,
76763
76673
  "json",
76764
76674
  "qx"
76765
76675
  ],
76766
- "qx/tool/compiler/cli/templates/skeleton/mobile/readme.tmpl.md": [
76676
+ "qx/tool/compiler/cli/templates/skeleton/package/readme.tmpl.md": [
76767
76677
  null,
76768
76678
  null,
76769
76679
  "md",
@@ -76793,43 +76703,43 @@ qx.$$packageData['0'] = {
76793
76703
  "txt",
76794
76704
  "qx"
76795
76705
  ],
76796
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/boot/index.tmpl.html": [
76706
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/boot/index.tmpl.html": [
76797
76707
  null,
76798
76708
  null,
76799
76709
  "html",
76800
76710
  "qx"
76801
76711
  ],
76802
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/boot/nojs.tmpl.html": [
76712
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/boot/nojs.tmpl.html": [
76803
76713
  null,
76804
76714
  null,
76805
76715
  "html",
76806
76716
  "qx"
76807
76717
  ],
76808
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/translation/readme.txt": [
76718
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/translation/readme.txt": [
76809
76719
  null,
76810
76720
  null,
76811
76721
  "txt",
76812
76722
  "qx"
76813
76723
  ],
76814
- "qx/tool/compiler/cli/templates/skeleton/package/source/translation/readme.txt": [
76724
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/boot/index.tmpl.html": [
76815
76725
  null,
76816
76726
  null,
76817
- "txt",
76727
+ "html",
76818
76728
  "qx"
76819
76729
  ],
76820
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/boot/index.tmpl.html": [
76730
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/boot/nojs.tmpl.html": [
76821
76731
  null,
76822
76732
  null,
76823
76733
  "html",
76824
76734
  "qx"
76825
76735
  ],
76826
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/boot/nojs.tmpl.html": [
76736
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/translation/readme.txt": [
76827
76737
  null,
76828
76738
  null,
76829
- "html",
76739
+ "txt",
76830
76740
  "qx"
76831
76741
  ],
76832
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/translation/readme.txt": [
76742
+ "qx/tool/compiler/cli/templates/skeleton/package/source/translation/readme.txt": [
76833
76743
  null,
76834
76744
  null,
76835
76745
  "txt",
@@ -76841,88 +76751,88 @@ qx.$$packageData['0'] = {
76841
76751
  "txt",
76842
76752
  "qx"
76843
76753
  ],
76844
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/Application.tmpl.js": [
76754
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/Application.tmpl.js": [
76845
76755
  null,
76846
76756
  null,
76847
76757
  "js",
76848
76758
  "qx"
76849
76759
  ],
76850
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/__init__.tmpl.js": [
76760
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js": [
76851
76761
  null,
76852
76762
  null,
76853
76763
  "js",
76854
76764
  "qx"
76855
76765
  ],
76856
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/app.png": [
76766
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/app.png": [
76857
76767
  180,
76858
76768
  180,
76859
76769
  "png",
76860
76770
  "qx"
76861
76771
  ],
76862
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/favicon.png": [
76772
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/favicon.png": [
76863
76773
  32,
76864
76774
  32,
76865
76775
  "png",
76866
76776
  "qx"
76867
76777
  ],
76868
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/js_256x256.png": [
76778
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/js_256x256.png": [
76869
76779
  256,
76870
76780
  256,
76871
76781
  "png",
76872
76782
  "qx"
76873
76783
  ],
76874
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/test.png": [
76875
- 32,
76876
- 32,
76877
- "png",
76878
- "qx"
76879
- ],
76880
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/Button.tmpl.js": [
76784
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/Application.tmpl.js": [
76881
76785
  null,
76882
76786
  null,
76883
76787
  "js",
76884
76788
  "qx"
76885
76789
  ],
76886
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/__init__.tmpl.js": [
76790
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/__init__.tmpl.js": [
76887
76791
  null,
76888
76792
  null,
76889
76793
  "js",
76890
76794
  "qx"
76891
76795
  ],
76892
- "qx/tool/compiler/cli/templates/skeleton/package/source/resource/custom/test.png": [
76893
- 32,
76894
- 32,
76796
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/app.png": [
76797
+ 180,
76798
+ 180,
76895
76799
  "png",
76896
76800
  "qx"
76897
76801
  ],
76898
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/Application.tmpl.js": [
76899
- null,
76900
- null,
76901
- "js",
76802
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/favicon.png": [
76803
+ 32,
76804
+ 32,
76805
+ "png",
76902
76806
  "qx"
76903
76807
  ],
76904
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/__init__.tmpl.js": [
76905
- null,
76906
- null,
76907
- "js",
76808
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/js_256x256.png": [
76809
+ 256,
76810
+ 256,
76811
+ "png",
76908
76812
  "qx"
76909
76813
  ],
76910
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/app.png": [
76911
- 180,
76912
- 180,
76814
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/resource/custom/test.png": [
76815
+ 32,
76816
+ 32,
76913
76817
  "png",
76914
76818
  "qx"
76915
76819
  ],
76916
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/favicon.png": [
76820
+ "qx/tool/compiler/cli/templates/skeleton/package/source/resource/custom/test.png": [
76917
76821
  32,
76918
76822
  32,
76919
76823
  "png",
76920
76824
  "qx"
76921
76825
  ],
76922
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/js_256x256.png": [
76923
- 256,
76924
- 256,
76925
- "png",
76826
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/Button.tmpl.js": [
76827
+ null,
76828
+ null,
76829
+ "js",
76830
+ "qx"
76831
+ ],
76832
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/__init__.tmpl.js": [
76833
+ null,
76834
+ null,
76835
+ "js",
76926
76836
  "qx"
76927
76837
  ],
76928
76838
  "qx/tool/compiler/cli/templates/skeleton/server/source/class/custom/Application.tmpl.js": [
@@ -76943,124 +76853,124 @@ qx.$$packageData['0'] = {
76943
76853
  "tmpl",
76944
76854
  "qx"
76945
76855
  ],
76946
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js": [
76856
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/theme/custom/scss/custom.scss": [
76947
76857
  null,
76948
76858
  null,
76949
- "js",
76859
+ "scss",
76950
76860
  "qx"
76951
76861
  ],
76952
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js": [
76862
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/theme/custom/scss/_styles.scss": [
76953
76863
  null,
76954
76864
  null,
76955
- "js",
76865
+ "scss",
76956
76866
  "qx"
76957
76867
  ],
76958
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js": [
76868
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js": [
76959
76869
  null,
76960
76870
  null,
76961
76871
  "js",
76962
76872
  "qx"
76963
76873
  ],
76964
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js": [
76874
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js": [
76965
76875
  null,
76966
76876
  null,
76967
76877
  "js",
76968
76878
  "qx"
76969
76879
  ],
76970
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js": [
76880
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js": [
76971
76881
  null,
76972
76882
  null,
76973
76883
  "js",
76974
76884
  "qx"
76975
76885
  ],
76976
- "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js": [
76886
+ "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl": [
76977
76887
  null,
76978
76888
  null,
76979
- "js",
76889
+ "tmpl",
76980
76890
  "qx"
76981
76891
  ],
76982
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js": [
76892
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/test/DemoTest.tmpl.js": [
76983
76893
  null,
76984
76894
  null,
76985
76895
  "js",
76986
76896
  "qx"
76987
76897
  ],
76988
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js": [
76898
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Appearance.tmpl.js": [
76989
76899
  null,
76990
76900
  null,
76991
76901
  "js",
76992
76902
  "qx"
76993
76903
  ],
76994
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js": [
76904
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Color.tmpl.js": [
76995
76905
  null,
76996
76906
  null,
76997
76907
  "js",
76998
76908
  "qx"
76999
76909
  ],
77000
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js": [
76910
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Decoration.tmpl.js": [
77001
76911
  null,
77002
76912
  null,
77003
76913
  "js",
77004
76914
  "qx"
77005
76915
  ],
77006
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js": [
76916
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Theme.tmpl.js": [
77007
76917
  null,
77008
76918
  null,
77009
76919
  "js",
77010
76920
  "qx"
77011
76921
  ],
77012
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Decoration.tmpl.js": [
76922
+ "qx/tool/compiler/cli/templates/skeleton/desktop/source/class/custom/theme/Font.tmpl.js": [
77013
76923
  null,
77014
76924
  null,
77015
76925
  "js",
77016
76926
  "qx"
77017
76927
  ],
77018
- "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js": [
76928
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/demo/Application.tmpl.js": [
77019
76929
  null,
77020
76930
  null,
77021
76931
  "js",
77022
76932
  "qx"
77023
76933
  ],
77024
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/page/Login.tmpl.js": [
76934
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/test/DemoTest.tmpl.js": [
77025
76935
  null,
77026
76936
  null,
77027
76937
  "js",
77028
76938
  "qx"
77029
76939
  ],
77030
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/page/Overview.tmpl.js": [
76940
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Appearance.tmpl.js": [
77031
76941
  null,
77032
76942
  null,
77033
76943
  "js",
77034
76944
  "qx"
77035
76945
  ],
77036
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/class/custom/page/__init__.tmpl.js": [
76946
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Color.tmpl.js": [
77037
76947
  null,
77038
76948
  null,
77039
76949
  "js",
77040
76950
  "qx"
77041
76951
  ],
77042
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/theme/custom/scss/custom.scss": [
76952
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Decoration.tmpl.js": [
77043
76953
  null,
77044
76954
  null,
77045
- "scss",
76955
+ "js",
77046
76956
  "qx"
77047
76957
  ],
77048
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/theme/custom/scss/_styles.scss": [
76958
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Font.tmpl.js": [
77049
76959
  null,
77050
76960
  null,
77051
- "scss",
76961
+ "js",
77052
76962
  "qx"
77053
76963
  ],
77054
- "qx/tool/compiler/cli/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js": [
76964
+ "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/theme/Theme.tmpl.js": [
77055
76965
  null,
77056
76966
  null,
77057
76967
  "js",
77058
76968
  "qx"
77059
76969
  ],
77060
- "qx/tool/compiler/cli/templates/skeleton/mobile/source/resource/custom/css/.gitignore.tmpl": [
76970
+ "qx/tool/compiler/cli/templates/skeleton/server/source/class/custom/test/DemoTest.tmpl.js": [
77061
76971
  null,
77062
76972
  null,
77063
- "tmpl",
76973
+ "js",
77064
76974
  "qx"
77065
76975
  ],
77066
76976
  "qx/tool/compiler/cli/templates/skeleton/package/source/class/custom/resource/custom/test.png": [
@@ -77165,16 +77075,16 @@ qx.$$packageData['0'] = {
77165
77075
  "html",
77166
77076
  "qx"
77167
77077
  ],
77168
- "qx/tool/website/build/diagnostics/dependson.js": [
77078
+ "qx/tool/website/build/diagnostics/requiredby.html": [
77169
77079
  null,
77170
77080
  null,
77171
- "js",
77081
+ "html",
77172
77082
  "qx"
77173
77083
  ],
77174
- "qx/tool/website/build/diagnostics/requiredby.html": [
77084
+ "qx/tool/website/build/diagnostics/dependson.js": [
77175
77085
  null,
77176
77086
  null,
77177
- "html",
77087
+ "js",
77178
77088
  "qx"
77179
77089
  ],
77180
77090
  "qx/tool/website/build/diagnostics/requiredby.js": [
@@ -77189,13 +77099,13 @@ qx.$$packageData['0'] = {
77189
77099
  "css",
77190
77100
  "qx"
77191
77101
  ],
77192
- "qx/tool/website/build/assets/buttons.js": [
77102
+ "qx/tool/website/build/assets/common.js": [
77193
77103
  null,
77194
77104
  null,
77195
77105
  "js",
77196
77106
  "qx"
77197
77107
  ],
77198
- "qx/tool/website/build/assets/common.js": [
77108
+ "qx/tool/website/build/assets/buttons.js": [
77199
77109
  null,
77200
77110
  null,
77201
77111
  "js",
@@ -77231,18 +77141,18 @@ qx.$$packageData['0'] = {
77231
77141
  "png",
77232
77142
  "qx"
77233
77143
  ],
77234
- "qx/tool/website/build/assets/qx-ide.png": [
77235
- 3183,
77236
- 1752,
77237
- "png",
77238
- "qx"
77239
- ],
77240
77144
  "qx/tool/website/build/assets/qx-oo.png": [
77241
77145
  870,
77242
77146
  502,
77243
77147
  "png",
77244
77148
  "qx"
77245
77149
  ],
77150
+ "qx/tool/website/build/assets/qx-ide.png": [
77151
+ 3183,
77152
+ 1752,
77153
+ "png",
77154
+ "qx"
77155
+ ],
77246
77156
  "qx/tool/website/build/assets/qx-white.svg": [
77247
77157
  64,
77248
77158
  65,
@@ -77261,36 +77171,6 @@ qx.$$packageData['0'] = {
77261
77171
  "js",
77262
77172
  "qx"
77263
77173
  ],
77264
- "qx/tool/website/src/diagnostics/dependson.html": [
77265
- null,
77266
- null,
77267
- "html",
77268
- "qx"
77269
- ],
77270
- "qx/tool/website/src/diagnostics/dependson.js": [
77271
- null,
77272
- null,
77273
- "js",
77274
- "qx"
77275
- ],
77276
- "qx/tool/website/src/diagnostics/requiredby.html": [
77277
- null,
77278
- null,
77279
- "html",
77280
- "qx"
77281
- ],
77282
- "qx/tool/website/src/diagnostics/requiredby.js": [
77283
- null,
77284
- null,
77285
- "js",
77286
- "qx"
77287
- ],
77288
- "qx/tool/website/src/scripts/serve.js": [
77289
- null,
77290
- null,
77291
- "js",
77292
- "qx"
77293
- ],
77294
77174
  "qx/tool/website/src/assets/abel.css": [
77295
77175
  null,
77296
77176
  null,
@@ -77362,6 +77242,36 @@ qx.$$packageData['0'] = {
77362
77242
  null,
77363
77243
  "js",
77364
77244
  "qx"
77245
+ ],
77246
+ "qx/tool/website/src/scripts/serve.js": [
77247
+ null,
77248
+ null,
77249
+ "js",
77250
+ "qx"
77251
+ ],
77252
+ "qx/tool/website/src/diagnostics/dependson.html": [
77253
+ null,
77254
+ null,
77255
+ "html",
77256
+ "qx"
77257
+ ],
77258
+ "qx/tool/website/src/diagnostics/dependson.js": [
77259
+ null,
77260
+ null,
77261
+ "js",
77262
+ "qx"
77263
+ ],
77264
+ "qx/tool/website/src/diagnostics/requiredby.html": [
77265
+ null,
77266
+ null,
77267
+ "html",
77268
+ "qx"
77269
+ ],
77270
+ "qx/tool/website/src/diagnostics/requiredby.js": [
77271
+ null,
77272
+ null,
77273
+ "js",
77274
+ "qx"
77365
77275
  ]
77366
77276
  },
77367
77277
  "translations": {