@qooxdoo/framework 8.0.0-beta.1 → 8.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/Manifest.json +1 -1
- package/lib/compiler/compile-info.json +55 -55
- package/lib/compiler/index.js +18497 -22975
- package/lib/resource/qx/tool/compiler/cli/templates/class/default.tmpl.js +6 -7
- package/lib/resource/qx/tool/compiler/cli/templates/class/singleton.tmpl.js +5 -6
- package/lib/resource/qx/tool/compiler/schema/compile-1-0-0.json +6 -2
- package/package.json +8 -10
- package/source/class/qx/Class.js +3 -3
- package/source/class/qx/core/BaseInit.js +14 -13
- package/source/class/qx/core/MObjectId.js +16 -0
- package/source/class/qx/core/MProperty.js +147 -175
- package/source/class/qx/core/check/DynamicTypeCheck.js +4 -0
- package/source/class/qx/core/property/Property.js +20 -19
- package/source/class/qx/data/SingleValueBinding.js +5 -7
- package/source/class/qx/data/binding/AbstractSegment.js +1 -1
- package/source/class/qx/data/binding/ArrayIndexSegment.js +17 -10
- package/source/class/qx/data/binding/IInputReceiver.js +1 -1
- package/source/class/qx/data/binding/PropNameSegment.js +1 -1
- package/source/class/qx/dev/unit/TestCase.js +4 -1
- package/source/class/qx/event/handler/Focus.js +2 -1
- package/source/class/qx/html/Jsx.js +2 -3
- package/source/class/qx/html/Node.js +3 -3
- package/source/class/qx/io/jsonrpc/Client.js +1 -1
- package/source/class/qx/promise/NativeWrapper.js +1 -1
- package/source/class/qx/test/core/Property.js +30 -2
- package/source/class/qx/test/data/singlevalue/Simple.js +6 -0
- package/source/class/qx/test/locale/Date.js +2 -2
- package/source/class/qx/theme/classic/Appearance.js +21 -0
- package/source/class/qx/theme/modern/Appearance.js +21 -0
- package/source/class/qx/theme/simple/Appearance.js +21 -0
- package/source/class/qx/theme/tangible/Appearance.js +2 -0
- package/source/class/qx/tool/cli/AbstractCliApp.js +18 -2
- package/source/class/qx/tool/compiler/ClassFile.js +0 -4
- package/source/class/qx/tool/compiler/MetaDatabase.js +47 -0
- package/source/class/qx/tool/compiler/cli/commands/Compile.js +139 -8
- package/source/class/qx/tool/compiler/cli/commands/Create.js +1 -1
- package/source/class/qx/tool/compiler/cli/commands/Serve.js +1 -1
- package/source/class/qx/tool/compiler/cli/commands/Typescript.js +26 -39
- package/source/class/qx/tool/compiler/cli/commands/add/Script.js +1 -1
- package/source/class/qx/tool/compiler/cli/commands/package/Publish.js +3 -2
- package/source/class/qx/tool/compiler/cli/commands/package/Update.js +2 -2
- package/source/class/qx/tool/compiler/targets/TypeScriptWriter.js +3 -0
- package/source/class/qx/tool/compiler/targets/meta/Browserify.js +142 -80
- package/source/class/qx/tool/migration/M8_0_0.js +4 -4
- package/source/class/qx/ui/toolbar/ToolBar.js +4 -4
- package/source/resource/qx/tool/compiler/cli/templates/class/default.tmpl.js +6 -7
- package/source/resource/qx/tool/compiler/cli/templates/class/singleton.tmpl.js +5 -6
- package/source/resource/qx/tool/compiler/schema/compile-1-0-0.json +6 -2
|
@@ -12,9 +12,8 @@ qx.Class.define("${classname}",
|
|
|
12
12
|
/**
|
|
13
13
|
* Constructor
|
|
14
14
|
*/
|
|
15
|
-
construct
|
|
16
|
-
|
|
17
|
-
// this.base(arguments);
|
|
15
|
+
construct() {
|
|
16
|
+
super();
|
|
18
17
|
},
|
|
19
18
|
|
|
20
19
|
/**
|
|
@@ -62,7 +61,7 @@ qx.Class.define("${classname}",
|
|
|
62
61
|
* @param {number} bar The bar parameter
|
|
63
62
|
* @return The result of the method.
|
|
64
63
|
*/
|
|
65
|
-
myMethod
|
|
64
|
+
myMethod(foo, bar) {
|
|
66
65
|
//
|
|
67
66
|
},
|
|
68
67
|
|
|
@@ -72,7 +71,7 @@ qx.Class.define("${classname}",
|
|
|
72
71
|
* @param {string} value new value
|
|
73
72
|
* @param {string} old the old value
|
|
74
73
|
*/
|
|
75
|
-
_applyFoo
|
|
74
|
+
_applyFoo(value, old) {
|
|
76
75
|
//
|
|
77
76
|
}
|
|
78
77
|
|
|
@@ -81,7 +80,7 @@ qx.Class.define("${classname}",
|
|
|
81
80
|
/**
|
|
82
81
|
* Use for disposing objects created by class instances
|
|
83
82
|
*/
|
|
84
|
-
destruct
|
|
83
|
+
destruct() {
|
|
85
84
|
//
|
|
86
|
-
}
|
|
85
|
+
}
|
|
87
86
|
});
|
|
@@ -14,9 +14,8 @@ qx.Class.define("${classname}",
|
|
|
14
14
|
/**
|
|
15
15
|
* Create a the singleton
|
|
16
16
|
*/
|
|
17
|
-
construct
|
|
18
|
-
|
|
19
|
-
// this.base(arguments);
|
|
17
|
+
construct() {
|
|
18
|
+
super();
|
|
20
19
|
},
|
|
21
20
|
|
|
22
21
|
/**
|
|
@@ -55,15 +54,15 @@ qx.Class.define("${classname}",
|
|
|
55
54
|
* @param {Number} bar The bar parameter
|
|
56
55
|
* @return {void} The result of the method.
|
|
57
56
|
*/
|
|
58
|
-
myMethod
|
|
57
|
+
myMethod(foo, bar)
|
|
59
58
|
{
|
|
60
59
|
//
|
|
61
60
|
},
|
|
62
61
|
|
|
63
62
|
/** Applies the foo property */
|
|
64
|
-
_applyFoo
|
|
63
|
+
_applyFoo(value, old)
|
|
65
64
|
{
|
|
66
65
|
//
|
|
67
|
-
}
|
|
66
|
+
}
|
|
68
67
|
}
|
|
69
68
|
});
|
|
@@ -320,7 +320,7 @@
|
|
|
320
320
|
},
|
|
321
321
|
"browserifyOptions": {
|
|
322
322
|
"type": "object",
|
|
323
|
-
"description": "Options
|
|
323
|
+
"description": "Options passed to esbuild when bundling CommonJS modules. See https://esbuild.github.io/api/ for available options. They can be overridden per target. Browserify-specific options (noParse, ignoreMissing, insertGlobals, detectGlobals, builtins) are not supported and will be ignored with a warning."
|
|
324
324
|
},
|
|
325
325
|
"parts": {
|
|
326
326
|
"$ref": "#/properties/parts"
|
|
@@ -465,9 +465,13 @@
|
|
|
465
465
|
"browserify": {
|
|
466
466
|
"type": "object",
|
|
467
467
|
"properties": {
|
|
468
|
+
"polyfillNode": {
|
|
469
|
+
"type": "boolean",
|
|
470
|
+
"description": "Whether to include the esbuild-plugin-polyfill-node plugin, which provides browser shims for Node.js built-ins (process, buffer, etc.). Defaults to true. Set to false if your packages do not use Node.js built-ins and you want a smaller bundle."
|
|
471
|
+
},
|
|
468
472
|
"options": {
|
|
469
473
|
"type": "object",
|
|
470
|
-
"description": "Options
|
|
474
|
+
"description": "Options passed to esbuild when bundling CommonJS modules. See https://esbuild.github.io/api/ for available options. They can be overridden per target. Browserify-specific options (noParse, ignoreMissing, insertGlobals, detectGlobals, builtins) are not supported and will be ignored with a warning."
|
|
471
475
|
}
|
|
472
476
|
}
|
|
473
477
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qooxdoo/framework",
|
|
3
|
-
"version": "8.0.0-beta.
|
|
3
|
+
"version": "8.0.0-beta.2",
|
|
4
4
|
"description": "The JS Framework for Coders",
|
|
5
5
|
"author": "The qooxdoo project",
|
|
6
6
|
"keywords": [
|
|
@@ -78,9 +78,7 @@
|
|
|
78
78
|
"ajv": "^8.12.0",
|
|
79
79
|
"app-module-path": "^2.2.0",
|
|
80
80
|
"async": "^2.6.3",
|
|
81
|
-
"babelify": "^10.0.0",
|
|
82
81
|
"better-ajv-errors": "^1.2.0",
|
|
83
|
-
"browserify": "^17.0.1",
|
|
84
82
|
"chokidar": "^3.5.3",
|
|
85
83
|
"cli-progress": "^3.12.0",
|
|
86
84
|
"columnify": "^1.6.0",
|
|
@@ -88,32 +86,32 @@
|
|
|
88
86
|
"core-js-bundle": "^3.33.1",
|
|
89
87
|
"dot": "^1.1.3",
|
|
90
88
|
"es6-promise-pool": "^2.5.0",
|
|
89
|
+
"esbuild": "^0.27.3",
|
|
90
|
+
"esbuild-plugin-polyfill-node": "^0.3.0",
|
|
91
91
|
"eslint": "^9.15.0",
|
|
92
92
|
"eslint-formatter-codeframe": "^7.32.1",
|
|
93
93
|
"eslint-plugin-jsdoc": "^50.5.0",
|
|
94
94
|
"express": "^5.1.0",
|
|
95
95
|
"fontkit": "^2.0.2",
|
|
96
96
|
"get-value": "^3.0.1",
|
|
97
|
-
"glob": "^
|
|
97
|
+
"glob": "^13.0.6",
|
|
98
98
|
"image-size": "^0.8.3",
|
|
99
|
-
"inquirer": "^
|
|
99
|
+
"inquirer": "^13.2.5",
|
|
100
100
|
"jsdoctypeparser": "^9.0.0",
|
|
101
101
|
"json-stable-stringify": "^1.0.2",
|
|
102
102
|
"jstransformer-dot": "^0.1.2",
|
|
103
103
|
"metalsmith": "^2.6.1",
|
|
104
|
-
"node-fetch": "^3.3.2",
|
|
105
104
|
"object-hash": "^2.1.1",
|
|
106
105
|
"prettier": "^2.5.1",
|
|
107
106
|
"ps-tree": "^1.2.0",
|
|
108
107
|
"regenerator-runtime": "^0.14.1",
|
|
109
|
-
"replace-in-file": "^8.
|
|
110
|
-
"rimraf": "^6.
|
|
108
|
+
"replace-in-file": "^8.4.0",
|
|
109
|
+
"rimraf": "^6.1.3",
|
|
111
110
|
"sass": "1.69.4",
|
|
112
111
|
"semver": "^7.5.4",
|
|
113
112
|
"set-value": "^4.1.0",
|
|
114
113
|
"showdown": "^1.9.1",
|
|
115
114
|
"source-map-js": "^1.0.2",
|
|
116
|
-
"tap-colorize": "^1.2.0",
|
|
117
115
|
"terser": "^5.22.0",
|
|
118
116
|
"tmp": "^0.2.5",
|
|
119
117
|
"unset-value": "^1.0.0",
|
|
@@ -123,9 +121,9 @@
|
|
|
123
121
|
"yauzl-promise": "^4.0.0"
|
|
124
122
|
},
|
|
125
123
|
"devDependencies": {
|
|
124
|
+
"baseline-browser-mapping": "^2.10.0",
|
|
126
125
|
"dirsum": "^0.1.1",
|
|
127
126
|
"source-map-support": "^0.5.21",
|
|
128
|
-
"tape": "^5.9.0",
|
|
129
127
|
"tree-kill": "^1.2.2"
|
|
130
128
|
},
|
|
131
129
|
"engine": "node >= 20",
|
package/source/class/qx/Class.js
CHANGED
|
@@ -679,14 +679,14 @@ qx.Bootstrap.define("qx.Class", {
|
|
|
679
679
|
continue;
|
|
680
680
|
}
|
|
681
681
|
let def = property.getDefinition();
|
|
682
|
-
let
|
|
682
|
+
let modernFeatures = def && (def.autoApply || def.initFunction);
|
|
683
|
+
let excluded = property.getClass().classname ? excludeAutoApply.find(match => property.getClass().classname.match(match)) : !modernFeatures;
|
|
683
684
|
if (
|
|
684
685
|
!property.isPseudoProperty() &&
|
|
685
686
|
def.autoApply !== false &&
|
|
686
|
-
property.getClass().classname &&
|
|
687
687
|
property.hasInitValue() &&
|
|
688
688
|
!property.getPropertyState(this).initMethodCalled &&
|
|
689
|
-
((initDuringConstruct === true && !excluded) ||
|
|
689
|
+
((initDuringConstruct === true && !excluded) || modernFeatures)
|
|
690
690
|
) {
|
|
691
691
|
property.init(this);
|
|
692
692
|
}
|
|
@@ -71,25 +71,26 @@ qx.Class.define("qx.core.BaseInit", {
|
|
|
71
71
|
var clazz = qx.Class.getByName(app);
|
|
72
72
|
|
|
73
73
|
if (clazz) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
this.__application = new clazz();
|
|
75
|
+
let mainResult = this.__application.main();
|
|
76
|
+
|
|
77
|
+
const cb = () => {
|
|
78
78
|
if (qx.core.Environment.get("qx.debug.startupTimings")) {
|
|
79
|
-
qx.log.Logger.debug(
|
|
80
|
-
this,
|
|
81
|
-
"Main runtime: " + (new Date() - start) + "ms"
|
|
82
|
-
);
|
|
79
|
+
qx.log.Logger.debug(this, "Main runtime: " + (new Date() - start) + "ms");
|
|
83
80
|
}
|
|
84
81
|
var start = new Date();
|
|
85
82
|
this.__application.finalize();
|
|
86
83
|
if (qx.core.Environment.get("qx.debug.startupTimings")) {
|
|
87
|
-
qx.log.Logger.debug(
|
|
88
|
-
this,
|
|
89
|
-
"Finalize runtime: " + (new Date() - start) + "ms"
|
|
90
|
-
);
|
|
84
|
+
qx.log.Logger.debug(this, "Finalize runtime: " + (new Date() - start) + "ms");
|
|
91
85
|
}
|
|
92
|
-
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
//We cannot use await here because this code may be called in engines which don't support async, such as Rhino
|
|
89
|
+
if (qx.lang.Type.isPromise(mainResult)) {
|
|
90
|
+
mainResult.then(cb);
|
|
91
|
+
} else {
|
|
92
|
+
cb(mainResult);
|
|
93
|
+
}
|
|
93
94
|
qx.event.handler.Application.onAppInstanceInitialized();
|
|
94
95
|
} else {
|
|
95
96
|
qx.log.Logger.warn("Missing application class: " + app);
|
|
@@ -399,6 +399,22 @@ qx.Mixin.define("qx.core.MObjectId", {
|
|
|
399
399
|
*/
|
|
400
400
|
getOwnedQxObjects() {
|
|
401
401
|
return this.__ownedQxObjects ? Object.values(this.__ownedQxObjects) : [];
|
|
402
|
+
},
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* @param {string}
|
|
406
|
+
* @returns {boolean} Whether this object has an owned object with the given ID that has been created
|
|
407
|
+
*/
|
|
408
|
+
hasOwnedQxObject(id) {
|
|
409
|
+
return !!(this.__ownedQxObjects && this.__ownedQxObjects[id]);
|
|
410
|
+
},
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
*
|
|
414
|
+
* @returns {Object} An object mapping IDs to owned objects. Do not modify this object directly.
|
|
415
|
+
*/
|
|
416
|
+
getAllQxObjectsById() {
|
|
417
|
+
return this.__ownedQxObjects ?? {};
|
|
402
418
|
}
|
|
403
419
|
}
|
|
404
420
|
});
|
|
@@ -20,193 +20,165 @@
|
|
|
20
20
|
* This mixin offers the basic property features which include generic
|
|
21
21
|
* setter, getter and resetter.
|
|
22
22
|
*/
|
|
23
|
-
qx.Mixin.define(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
{
|
|
55
|
-
data =
|
|
56
|
-
{
|
|
57
|
-
[data] : value
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Set each property specified in the map
|
|
62
|
-
for (let prop in data)
|
|
63
|
-
{
|
|
64
|
-
// If the property exists as a member variable, set it directly
|
|
65
|
-
if (prop in this)
|
|
66
|
-
{
|
|
67
|
-
if (data[prop] !== undefined)
|
|
68
|
-
{
|
|
69
|
-
this[`$$variant_${prop}`] = "set";
|
|
70
|
-
this[prop] = data[prop];
|
|
71
|
-
}
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Otherwise, see if there's a hand-written setter method
|
|
76
|
-
if (this["set" + qx.Bootstrap.firstUp(prop)] != undefined)
|
|
77
|
-
{
|
|
78
|
-
this["set" + qx.Bootstrap.firstUp(prop)](data[prop]);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
23
|
+
qx.Mixin.define("qx.core.MProperty", {
|
|
24
|
+
members: {
|
|
25
|
+
/**
|
|
26
|
+
* Sets either multiple properties at once by using a property
|
|
27
|
+
* list or sets one property and its value by the first and
|
|
28
|
+
* second argument. As a fallback, if no generated property
|
|
29
|
+
* setter could be found, a handwritten setter will be searched
|
|
30
|
+
* and invoked if available.
|
|
31
|
+
*
|
|
32
|
+
* @param data {Object | String}
|
|
33
|
+
* a map of property values. The key is the name of the property.
|
|
34
|
+
*
|
|
35
|
+
* @param value {var?}
|
|
36
|
+
* the value, only used when <code>data</code> is a string.
|
|
37
|
+
*
|
|
38
|
+
* @return {Object}
|
|
39
|
+
* Returns this instance if <code>data</code> is a map or a
|
|
40
|
+
* non-generated setter is called; otherwise returns
|
|
41
|
+
* <code>value</code>.
|
|
42
|
+
*
|
|
43
|
+
* @throws {Error} if a property defined does not exist
|
|
44
|
+
*/
|
|
45
|
+
set(data, value) {
|
|
46
|
+
// If there's just a single property name and value, convert
|
|
47
|
+
// it to a map as if there were multiple property names and
|
|
48
|
+
// values.
|
|
49
|
+
if (qx.Bootstrap.isString(data)) {
|
|
50
|
+
data = {
|
|
51
|
+
[data]: value
|
|
52
|
+
};
|
|
53
|
+
}
|
|
81
54
|
|
|
82
|
-
|
|
83
|
-
|
|
55
|
+
// Set each property specified in the map
|
|
56
|
+
for (let prop in data) {
|
|
57
|
+
// Otherwise, see if there's a hand-written setter method
|
|
58
|
+
if (this["set" + qx.Bootstrap.firstUp(prop)] != undefined) {
|
|
59
|
+
this["set" + qx.Bootstrap.firstUp(prop)](data[prop]);
|
|
60
|
+
continue;
|
|
84
61
|
}
|
|
62
|
+
// Neither was true
|
|
63
|
+
throw new Error("No such property: " + prop + " in " + this.classname + " (" + this + ")");
|
|
64
|
+
}
|
|
85
65
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
async
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
66
|
+
// Allow for the case where no properties were given
|
|
67
|
+
return this;
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Sets a property or multiple properties asynchronously.
|
|
72
|
+
* First tries calling `setPropetyNameAsync` if it exists,
|
|
73
|
+
* otherwise falls back to `setPropertyName`.
|
|
74
|
+
*
|
|
75
|
+
* @overload
|
|
76
|
+
* @param {string} data Name of property to set
|
|
77
|
+
* @param {*} value Value to set it to
|
|
78
|
+
*
|
|
79
|
+
* @overload
|
|
80
|
+
* @param {Object<string, *>} data Map of properties to set
|
|
81
|
+
*
|
|
82
|
+
* @returns {qx.core.Object | Promise<*>} This instance if a map was provided,
|
|
83
|
+
* or, if a single property is set,
|
|
84
|
+
* a promise which resolves when the setting has completed
|
|
85
|
+
* to the set value of the property.
|
|
86
|
+
*/
|
|
87
|
+
async setAsync(data, value) {
|
|
88
|
+
const setValueImpl = async (propName, value) => {
|
|
89
|
+
let upname = qx.Bootstrap.firstUp(propName);
|
|
90
|
+
let setterName = "set" + upname + "Async";
|
|
91
|
+
|
|
92
|
+
if (!this[setterName]) {
|
|
93
|
+
setterName = "set" + upname;
|
|
94
|
+
}
|
|
112
95
|
|
|
96
|
+
if (qx.core.Environment.get("qx.debug")) {
|
|
113
97
|
if (!this[setterName]) {
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (qx.core.Environment.get("qx.debug")) {
|
|
118
|
-
if (!this[setterName]) {
|
|
119
|
-
throw new Error(
|
|
120
|
-
`No such property: ${propName} in ${this.classname} (${this})`
|
|
121
|
-
);
|
|
122
|
-
}
|
|
98
|
+
throw new Error(`No such property: ${propName} in ${this.classname} (${this})`);
|
|
123
99
|
}
|
|
124
|
-
|
|
125
|
-
return await this[setterName](value);
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
if (qx.Bootstrap.isString(data)) {
|
|
129
|
-
return await setValueImpl(data, value);
|
|
130
100
|
}
|
|
131
101
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}
|
|
135
|
-
return this;
|
|
136
|
-
},
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Returns the value of the given property. If no generated getter could
|
|
140
|
-
* be found, a fallback tries to access a handwritten getter.
|
|
141
|
-
*
|
|
142
|
-
* @param prop {String}
|
|
143
|
-
* Name of the property.
|
|
144
|
-
*
|
|
145
|
-
* @return {var}
|
|
146
|
-
* The value of the value
|
|
147
|
-
*
|
|
148
|
-
* @param safe {Boolean?false}
|
|
149
|
-
*
|
|
150
|
-
* @throws {Error}
|
|
151
|
-
* if a property defined does not exist
|
|
152
|
-
*/
|
|
153
|
-
get(prop, safe)
|
|
154
|
-
{
|
|
155
|
-
if (safe) {
|
|
156
|
-
let property = qx.Class.getByProperty(this.constructor, prop);
|
|
157
|
-
if (property) {
|
|
158
|
-
return property.getSafe(this);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
102
|
+
return await this[setterName](value);
|
|
103
|
+
};
|
|
161
104
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
return this["get" + qx.Bootstrap.firstUp(prop)]();
|
|
166
|
-
}
|
|
105
|
+
if (qx.Bootstrap.isString(data)) {
|
|
106
|
+
return await setValueImpl(data, value);
|
|
107
|
+
}
|
|
167
108
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
109
|
+
for (let propName in data) {
|
|
110
|
+
await setValueImpl(propName, data[propName]);
|
|
111
|
+
}
|
|
112
|
+
return this;
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Returns the value of the given property. If no generated getter could
|
|
117
|
+
* be found, a fallback tries to access a handwritten getter.
|
|
118
|
+
*
|
|
119
|
+
* @param prop {String}
|
|
120
|
+
* Name of the property.
|
|
121
|
+
*
|
|
122
|
+
* @return {var}
|
|
123
|
+
* The value of the value
|
|
124
|
+
*
|
|
125
|
+
* @param safe {Boolean?false}
|
|
126
|
+
*
|
|
127
|
+
* @throws {Error}
|
|
128
|
+
* if a property defined does not exist
|
|
129
|
+
*/
|
|
130
|
+
get(prop, safe) {
|
|
131
|
+
if (safe) {
|
|
132
|
+
let property = qx.Class.getByProperty(this.constructor, prop);
|
|
133
|
+
if (property) {
|
|
134
|
+
return property.getSafe(this);
|
|
172
135
|
}
|
|
136
|
+
}
|
|
173
137
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
*
|
|
179
|
-
* Returns the value of the given property.
|
|
180
|
-
* If the property is not initialized, it will return undefined.
|
|
181
|
-
*
|
|
182
|
-
* @param prop {String}
|
|
183
|
-
* Name of the property.
|
|
184
|
-
*
|
|
185
|
-
* @returns {*}
|
|
186
|
-
*/
|
|
187
|
-
getSafe(prop) {
|
|
188
|
-
return this.get(prop, true);
|
|
189
|
-
},
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Resets the value of the given property. If no generated resetter
|
|
193
|
-
* could be found, a handwritten resetter will be invoked, if available.
|
|
194
|
-
*
|
|
195
|
-
* @param prop {String}
|
|
196
|
-
* Name of the property.
|
|
197
|
-
*
|
|
198
|
-
* @throws {Error}
|
|
199
|
-
* if a property defined does not exist
|
|
200
|
-
*/
|
|
201
|
-
reset(prop)
|
|
202
|
-
{
|
|
203
|
-
// Reset the property
|
|
204
|
-
if (this["reset" + qx.Bootstrap.firstUp(prop)] != undefined)
|
|
205
|
-
{
|
|
206
|
-
return this["reset" + qx.Bootstrap.firstUp(prop)]();
|
|
207
|
-
}
|
|
138
|
+
// Otherwise, see if there's a hand-written getter method
|
|
139
|
+
if (this["get" + qx.Bootstrap.firstUp(prop)] != undefined) {
|
|
140
|
+
return this["get" + qx.Bootstrap.firstUp(prop)]();
|
|
141
|
+
}
|
|
208
142
|
|
|
209
|
-
|
|
143
|
+
// If the property exists as a member variable, get it directly
|
|
144
|
+
if (prop in this) {
|
|
145
|
+
return this[prop];
|
|
210
146
|
}
|
|
147
|
+
|
|
148
|
+
throw new Error("No such property: " + prop);
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
*
|
|
153
|
+
* Returns the value of the given property.
|
|
154
|
+
* If the property is not initialized, it will return undefined.
|
|
155
|
+
*
|
|
156
|
+
* @param prop {String}
|
|
157
|
+
* Name of the property.
|
|
158
|
+
*
|
|
159
|
+
* @returns {*}
|
|
160
|
+
*/
|
|
161
|
+
getSafe(prop) {
|
|
162
|
+
return this.get(prop, true);
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Resets the value of the given property. If no generated resetter
|
|
167
|
+
* could be found, a handwritten resetter will be invoked, if available.
|
|
168
|
+
*
|
|
169
|
+
* @param prop {String}
|
|
170
|
+
* Name of the property.
|
|
171
|
+
*
|
|
172
|
+
* @throws {Error}
|
|
173
|
+
* if a property defined does not exist
|
|
174
|
+
*/
|
|
175
|
+
reset(prop) {
|
|
176
|
+
// Reset the property
|
|
177
|
+
if (this["reset" + qx.Bootstrap.firstUp(prop)] != undefined) {
|
|
178
|
+
return this["reset" + qx.Bootstrap.firstUp(prop)]();
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
throw new Error("No such property: " + prop);
|
|
211
182
|
}
|
|
212
|
-
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
@@ -61,6 +61,10 @@ qx.Bootstrap.define("qx.core.check.DynamicTypeCheck", {
|
|
|
61
61
|
}
|
|
62
62
|
tmp = tmp.superclass;
|
|
63
63
|
}
|
|
64
|
+
} else if (typeof window[this.__typename] === "function") {
|
|
65
|
+
//handle cases where the check is a globally-defined class
|
|
66
|
+
let clazz = window[this.__typename];
|
|
67
|
+
return value instanceof clazz;
|
|
64
68
|
}
|
|
65
69
|
|
|
66
70
|
return false;
|