@qooxdoo/framework 7.7.2 → 7.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/Manifest.json +1 -1
  2. package/lib/compiler/compile-info.json +63 -63
  3. package/lib/compiler/index.js +513 -353
  4. package/lib/resource/qx/tool/schema/compile-1-0-0.json +13 -0
  5. package/package.json +2 -2
  6. package/source/class/qx/bom/Label.js +82 -2
  7. package/source/class/qx/bom/webfonts/WebFont.js +1 -0
  8. package/source/class/qx/core/Environment.js +82 -1
  9. package/source/class/qx/data/controller/List.js +50 -21
  10. package/source/class/qx/data/controller/MSelection.js +45 -12
  11. package/source/class/qx/dev/unit/AsyncWrapper.js +8 -0
  12. package/source/class/qx/event/Manager.js +163 -124
  13. package/source/class/qx/io/ImageLoader.js +6 -3
  14. package/source/class/qx/io/exception/Transport.js +1 -0
  15. package/source/class/qx/io/jsonrpc/Client.js +64 -8
  16. package/source/class/qx/io/jsonrpc/protocol/Request.js +10 -6
  17. package/source/class/qx/test/bom/client/Pdfjs.js +4 -0
  18. package/source/class/qx/test/bom/element/AnimationJs.js +3 -0
  19. package/source/class/qx/test/bom/element/Style.js +1 -0
  20. package/source/class/qx/test/bom/media/MediaTestCase.js +6 -0
  21. package/source/class/qx/test/core/Environment.js +44 -0
  22. package/source/class/qx/test/io/MAssert.js +94 -0
  23. package/source/class/qx/test/io/TestMAssert.js +47 -0
  24. package/source/class/qx/test/io/jsonrpc/Client.js +79 -19
  25. package/source/class/qx/test/io/jsonrpc/PostMessageClient.js +152 -0
  26. package/source/class/qx/test/io/jsonrpc/Protocol.js +1 -5
  27. package/source/class/qx/test/ui/embed/Iframe.js +1 -1
  28. package/source/class/qx/test/ui/form/TextArea.js +4 -0
  29. package/source/class/qx/test/util/DeferredCall.js +6 -0
  30. package/source/class/qx/test/util/Function.js +2 -2
  31. package/source/class/qx/tool/cli/api/Test.js +22 -0
  32. package/source/class/qx/tool/cli/commands/Compile.js +17 -4
  33. package/source/class/qx/tool/cli/commands/Test.js +7 -1
  34. package/source/class/qx/tool/compiler/Analyser.js +7 -0
  35. package/source/class/qx/tool/compiler/ClassFile.js +3 -2
  36. package/source/class/qx/tool/compiler/MetaExtraction.js +0 -5
  37. package/source/class/qx/tool/compiler/targets/meta/Browserify.js +8 -2
  38. package/source/class/qx/ui/basic/Image.js +72 -8
  39. package/source/class/qx/ui/basic/Label.js +4 -6
  40. package/source/class/qx/ui/control/DateChooser.js +4 -6
  41. package/source/class/qx/ui/core/Blocker.js +4 -6
  42. package/source/class/qx/ui/core/LayoutItem.js +4 -6
  43. package/source/class/qx/ui/core/MPlacement.js +11 -0
  44. package/source/class/qx/ui/core/Widget.js +7 -5
  45. package/source/class/qx/ui/form/AbstractField.js +4 -6
  46. package/source/class/qx/ui/form/MForm.js +4 -6
  47. package/source/class/qx/ui/form/Spinner.js +4 -6
  48. package/source/class/qx/ui/form/renderer/AbstractRenderer.js +4 -6
  49. package/source/class/qx/ui/menu/AbstractButton.js +7 -11
  50. package/source/class/qx/ui/mobile/basic/Label.js +4 -6
  51. package/source/class/qx/ui/mobile/form/Label.js +4 -6
  52. package/source/class/qx/ui/mobile/list/List.js +4 -6
  53. package/source/class/qx/ui/progressive/renderer/table/Row.js +35 -7
  54. package/source/class/qx/ui/progressive/renderer/table/cell/Boolean.js +4 -6
  55. package/source/class/qx/ui/table/Table.js +4 -6
  56. package/source/class/qx/ui/table/cellrenderer/Abstract.js +4 -6
  57. package/source/class/qx/ui/table/cellrenderer/Boolean.js +4 -6
  58. package/source/class/qx/ui/table/rowrenderer/Default.js +4 -6
  59. package/source/resource/qx/tool/schema/compile-1-0-0.json +13 -0
@@ -71,7 +71,7 @@ qx.Class.define("qx.ui.mobile.form.Label", {
71
71
  this.initWrap();
72
72
 
73
73
  if (qx.core.Environment.get("qx.dynlocale")) {
74
- qx.locale.Manager.getInstance().addListener(
74
+ this.__changeLocaleLabelListenerId = qx.locale.Manager.getInstance().addListener(
75
75
  "changeLocale",
76
76
  this._onChangeLocale,
77
77
  this
@@ -242,11 +242,9 @@ qx.Class.define("qx.ui.mobile.form.Label", {
242
242
 
243
243
  this.__forWidget = null;
244
244
  }
245
- if (qx.core.Environment.get("qx.dynlocale")) {
246
- qx.locale.Manager.getInstance().removeListener(
247
- "changeLocale",
248
- this._onChangeLocale,
249
- this
245
+ if (qx.core.Environment.get("qx.dynlocale") && this.__changeLocaleLabelListenerId) {
246
+ qx.locale.Manager.getInstance().removeListenerById(
247
+ this.__changeLocaleLabelListenerId
250
248
  );
251
249
  }
252
250
  }
@@ -89,7 +89,7 @@ qx.Class.define("qx.ui.mobile.list.List", {
89
89
  }
90
90
 
91
91
  if (qx.core.Environment.get("qx.dynlocale")) {
92
- qx.locale.Manager.getInstance().addListener(
92
+ this.__changeLocaleListListenerId = qx.locale.Manager.getInstance().addListener(
93
93
  "changeLocale",
94
94
  this._onChangeLocale,
95
95
  this
@@ -615,11 +615,9 @@ qx.Class.define("qx.ui.mobile.list.List", {
615
615
  destruct() {
616
616
  this.__trackElement = null;
617
617
  this._disposeObjects("__provider");
618
- if (qx.core.Environment.get("qx.dynlocale")) {
619
- qx.locale.Manager.getInstance().removeListener(
620
- "changeLocale",
621
- this._onChangeLocale,
622
- this
618
+ if (qx.core.Environment.get("qx.dynlocale") && this.__changeLocaleListListenerId) {
619
+ qx.locale.Manager.getInstance().removeListenerById(
620
+ this.__changeLocaleListListenerId
623
621
  );
624
622
  }
625
623
  }
@@ -107,6 +107,14 @@ qx.Class.define("qx.ui.progressive.renderer.table.Row", {
107
107
  /** The default height of a row, if not altered by a cell renderer. */
108
108
  defaultRowHeight: {
109
109
  init: 16
110
+ },
111
+
112
+ /**
113
+ * Use a table-specific alternating row color instead of
114
+ * row-renderer-instance-specific
115
+ */
116
+ alternateBgColorsTableGlobal: {
117
+ init: false
110
118
  }
111
119
  },
112
120
 
@@ -157,6 +165,9 @@ qx.Class.define("qx.ui.progressive.renderer.table.Row", {
157
165
  }
158
166
 
159
167
  var hash = progressive.toHashCode();
168
+ this.__hash = hash;
169
+
170
+
160
171
  if (!tr.__clazz[hash]) {
161
172
  // ... then do it now.
162
173
  tr.__clazz[hash] = {
@@ -184,9 +195,6 @@ qx.Class.define("qx.ui.progressive.renderer.table.Row", {
184
195
  qx.bom.Stylesheet.createElement(stylesheet);
185
196
  }
186
197
 
187
- // Save the hash too
188
- this.__hash = hash;
189
-
190
198
  // Arrange to be called when the window appears or is resized, so we
191
199
  // can set each style sheet's left and width field appropriately.
192
200
  var pane = progressive.getStructure().getPane();
@@ -316,13 +324,19 @@ qx.Class.define("qx.ui.progressive.renderer.table.Row", {
316
324
  switch (element.location) {
317
325
  case "end":
318
326
  // Determine color of row based on state of last added row
319
- var index = rendererData.end || 0;
327
+ var index;
328
+ if (this.getAlternateBgColorsTableGlobal()) {
329
+ index = state.getUserData().tableRowBgEnd || 0;
330
+ } else {
331
+ index = rendererData.end;
332
+ }
320
333
 
321
334
  // Set the background color of this row
322
335
  div.style.backgroundColor = this.__colors.bgcol[index];
323
336
 
324
337
  // Update state for next time
325
338
  rendererData.end = index == 0 ? 1 : 0;
339
+ state.getUserData().tableRowBgEnd = rendererData.end;
326
340
 
327
341
  // Append our new row to the pane.
328
342
  state.getPane().getContentElement().getDomElement().appendChild(div);
@@ -338,19 +352,33 @@ qx.Class.define("qx.ui.progressive.renderer.table.Row", {
338
352
  // Are there any children?
339
353
  if (children.length > 0) {
340
354
  // Yup. Determine color of row based on state of last added row
341
- var index = rendererData.start;
355
+ var index;
356
+ if (this.getAlternateBgColorsTableGlobal()) {
357
+ index = state.getUserData().tableRowBgStart == 0 ? 1 : 0; // == 0 includes undefined
358
+ } else {
359
+ index = rendererData.start == 0 ? 1 : 0;
360
+ }
342
361
 
343
362
  // Set the background color of this row
344
363
  div.style.backgroundColor = this.__colors.bgcol[index];
345
364
 
346
365
  // Update state for next time
347
- rendererData.start = index == 0 ? 1 : 0;
366
+ rendererData.start = index;
367
+ state.getUserData().tableRowBgStart = rendererData.start;
348
368
 
349
369
  // Insert our new row before the first child.
350
370
  elem.insertBefore(div, children[0]);
351
371
  break;
352
372
  } else {
353
- /* No children yet. We can append our new row. */
373
+ // No children yet.
374
+
375
+ // Set the background color of this row
376
+ div.style.backgroundColor = this.__colors.bgcol[0];
377
+
378
+ // Update state for next time
379
+ rendererData.start = 0;
380
+ state.getUserData().tableRowBgStart = rendererData.start;
381
+
354
382
  elem.appendChild(div);
355
383
  }
356
384
  break;
@@ -32,7 +32,7 @@ qx.Class.define("qx.ui.progressive.renderer.table.cell.Boolean", {
32
32
 
33
33
  // dynamic theme switch
34
34
  if (qx.core.Environment.get("qx.dyntheme")) {
35
- qx.theme.manager.Meta.getInstance().addListener(
35
+ this.__changeThemeBooleanCellListenerId = qx.theme.manager.Meta.getInstance().addListener(
36
36
  "changeTheme",
37
37
  this._resolveImages,
38
38
  this
@@ -177,11 +177,9 @@ qx.Class.define("qx.ui.progressive.renderer.table.cell.Boolean", {
177
177
  this._iconUrlTrue = this._iconUrlFalse = null;
178
178
 
179
179
  // remove dynamic theme listener
180
- if (qx.core.Environment.get("qx.dyntheme")) {
181
- qx.theme.manager.Meta.getInstance().removeListener(
182
- "changeTheme",
183
- this._resolveImages,
184
- this
180
+ if (qx.core.Environment.get("qx.dyntheme") && this.__changeThemeBooleanCellListenerId) {
181
+ qx.theme.manager.Meta.getInstance().removeListenerById(
182
+ this.__changeThemeBooleanCellListenerId
185
183
  );
186
184
  }
187
185
  }
@@ -205,7 +205,7 @@ qx.Class.define("qx.ui.table.Table", {
205
205
 
206
206
  // add an event listener which updates the table content on locale change
207
207
  if (qx.core.Environment.get("qx.dynlocale")) {
208
- qx.locale.Manager.getInstance().addListener(
208
+ this.__changeLocaleTableListenerId = qx.locale.Manager.getInstance().addListener(
209
209
  "changeLocale",
210
210
  this._onChangeLocale,
211
211
  this
@@ -2164,11 +2164,9 @@ qx.Class.define("qx.ui.table.Table", {
2164
2164
 
2165
2165
  destruct() {
2166
2166
  // remove the event listener which handled the locale change
2167
- if (qx.core.Environment.get("qx.dynlocale")) {
2168
- qx.locale.Manager.getInstance().removeListener(
2169
- "changeLocale",
2170
- this._onChangeLocale,
2171
- this
2167
+ if (qx.core.Environment.get("qx.dynlocale") && this.__changeLocaleTableListenerId) {
2168
+ qx.locale.Manager.getInstance().removeListenerById(
2169
+ this.__changeLocaleTableListenerId
2172
2170
  );
2173
2171
  }
2174
2172
 
@@ -38,7 +38,7 @@ qx.Class.define("qx.ui.table.cellrenderer.Abstract", {
38
38
 
39
39
  // add dynamic theme listener
40
40
  if (qx.core.Environment.get("qx.dyntheme")) {
41
- qx.theme.manager.Meta.getInstance().addListener(
41
+ this.__changeThemeCellRendererListenerId = qx.theme.manager.Meta.getInstance().addListener(
42
42
  "changeTheme",
43
43
  this._onChangeTheme,
44
44
  this
@@ -242,11 +242,9 @@ qx.Class.define("qx.ui.table.cellrenderer.Abstract", {
242
242
 
243
243
  destruct() {
244
244
  // remove dynamic theme listener
245
- if (qx.core.Environment.get("qx.dyntheme")) {
246
- qx.theme.manager.Meta.getInstance().removeListener(
247
- "changeTheme",
248
- this._onChangeTheme,
249
- this
245
+ if (qx.core.Environment.get("qx.dyntheme") && this.__changeThemeCellRendererListenerId) {
246
+ qx.theme.manager.Meta.getInstance().removeListenerById(
247
+ this.__changeThemeCellRendererListenerId
250
248
  );
251
249
  }
252
250
  }
@@ -39,7 +39,7 @@ qx.Class.define("qx.ui.table.cellrenderer.Boolean", {
39
39
 
40
40
  // dynamic theme switch
41
41
  if (qx.core.Environment.get("qx.dyntheme")) {
42
- qx.theme.manager.Meta.getInstance().addListener(
42
+ this.__changeThemeBoolCellRendererListenerId = qx.theme.manager.Meta.getInstance().addListener(
43
43
  "changeTheme",
44
44
  this._onChangeTheme,
45
45
  this
@@ -172,11 +172,9 @@ qx.Class.define("qx.ui.table.cellrenderer.Boolean", {
172
172
  destruct() {
173
173
  this.__aliasManager = null;
174
174
  // remove dynamic theme listener
175
- if (qx.core.Environment.get("qx.dyntheme")) {
176
- qx.theme.manager.Meta.getInstance().removeListener(
177
- "changeTheme",
178
- this._onChangeTheme,
179
- this
175
+ if (qx.core.Environment.get("qx.dyntheme") && this.__changeThemeBoolCellRendererListenerId) {
176
+ qx.theme.manager.Meta.getInstance().removeListenerById(
177
+ this.__changeThemeBoolCellRendererListenerId
180
178
  );
181
179
  }
182
180
  }
@@ -38,7 +38,7 @@ qx.Class.define("qx.ui.table.rowrenderer.Default", {
38
38
 
39
39
  // dynamic theme switch
40
40
  if (qx.core.Environment.get("qx.dyntheme")) {
41
- qx.theme.manager.Meta.getInstance().addListener(
41
+ this.__changeThemeRowRendererListenerId = qx.theme.manager.Meta.getInstance().addListener(
42
42
  "changeTheme",
43
43
  this.initThemeValues,
44
44
  this
@@ -254,11 +254,9 @@ qx.Class.define("qx.ui.table.rowrenderer.Default", {
254
254
  this._colors = this._fontStyle = this._fontStyleString = null;
255
255
 
256
256
  // remove dynamic theme listener
257
- if (qx.core.Environment.get("qx.dyntheme")) {
258
- qx.theme.manager.Meta.getInstance().removeListener(
259
- "changeTheme",
260
- this.initThemeValues,
261
- this
257
+ if (qx.core.Environment.get("qx.dyntheme") && this.__changeThemeRowRendererListenerId) {
258
+ qx.theme.manager.Meta.getInstance().removeListenerById(
259
+ this.__changeThemeRowRendererListenerId
262
260
  );
263
261
  }
264
262
  }
@@ -318,6 +318,10 @@
318
318
  "type": "object",
319
319
  "description": "Options given to @babel/preset-env. With this options the output type of babel can be defined. For details see here: <https://babeljs.io/docs/en/babel-preset-env#options>. They can be overridden per target."
320
320
  },
321
+ "browserifyOptions": {
322
+ "type": "object",
323
+ "description": "Options given to browserify. For details see here: <https://github.com/browserify/browserify#usage>. They can be overridden per target."
324
+ },
321
325
  "parts": {
322
326
  "$ref": "#/properties/parts"
323
327
  }
@@ -458,6 +462,15 @@
458
462
  "description": "** DEPRECATED - See babel.options instead",
459
463
  "deprecated": true
460
464
  },
465
+ "browserify": {
466
+ "type": "object",
467
+ "properties": {
468
+ "options": {
469
+ "type": "object",
470
+ "description": "Options given to browserify. For details see here: <https://github.com/browserify/browserify#usage>. They can be overridden per target."
471
+ }
472
+ }
473
+ },
461
474
  "jsx": {
462
475
  "type": "object",
463
476
  "description": "Options given to @babel/preset-react to change how JSX HTML is transpiled"