@qooxdoo/framework 7.1.0 → 7.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/Manifest.json +22 -22
  3. package/lib/compiler/compile-info.json +66 -66
  4. package/lib/compiler/index.js +406 -335
  5. package/lib/resource/qx/tool/cli/templates/loader/loader-browser.tmpl.js +1 -2
  6. package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +1 -1
  7. package/lib/resource/qx/tool/schema/compile-1-0-0.json +11 -1
  8. package/npm-shrinkwrap.json +793 -744
  9. package/package.json +9 -8
  10. package/source/class/qx/Interface.js +13 -15
  11. package/source/class/qx/dev/unit/MTestLoader.js +25 -33
  12. package/source/class/qx/dev/unit/TestResult.js +9 -13
  13. package/source/class/qx/event/handler/Focus.js +1 -1
  14. package/source/class/qx/html/Element.js +1 -1
  15. package/source/class/qx/html/Node.js +0 -1
  16. package/source/class/qx/io/request/AbstractRequest.js +42 -66
  17. package/source/class/qx/test/Interface.js +70 -6
  18. package/source/class/qx/test/Mixin.js +20 -17
  19. package/source/class/qx/test/Promise.js +67 -91
  20. package/source/class/qx/test/bom/History.js +11 -19
  21. package/source/class/qx/test/bom/WebWorker.js +7 -15
  22. package/source/class/qx/test/bom/media/MediaTestCase.js +10 -18
  23. package/source/class/qx/test/bom/media/Video.js +10 -18
  24. package/source/class/qx/test/bom/rest/Resource.js +3 -7
  25. package/source/class/qx/test/bom/rest/ResourceWithRemote.js +40 -56
  26. package/source/class/qx/test/bom/webfonts/Validator.js +12 -20
  27. package/source/class/qx/test/core/Object.js +3 -7
  28. package/source/class/qx/test/data/controller/List.js +18 -22
  29. package/source/class/qx/test/data/marshal/Json.js +10 -14
  30. package/source/class/qx/test/data/store/Json.js +337 -428
  31. package/source/class/qx/test/data/store/Jsonp.js +46 -66
  32. package/source/class/qx/test/data/store/RestWithRemote.js +10 -18
  33. package/source/class/qx/test/html/Element.js +4 -8
  34. package/source/class/qx/test/html/Iframe.js +48 -60
  35. package/source/class/qx/test/io/jsonrpc/Client.js +1 -1
  36. package/source/class/qx/test/io/request/JsonpWithRemote.js +6 -10
  37. package/source/class/qx/test/io/request/MRequest.js +13 -25
  38. package/source/class/qx/test/io/request/Xhr.js +5 -9
  39. package/source/class/qx/test/io/request/XhrWithRemote.js +50 -78
  40. package/source/class/qx/test/io/rest/Resource.js +3 -7
  41. package/source/class/qx/test/io/rest/ResourceWithRemote.js +41 -57
  42. package/source/class/qx/test/mobile/basic/Image.js +16 -24
  43. package/source/class/qx/test/mobile/container/Navigation.js +3 -7
  44. package/source/class/qx/test/mobile/container/Scroll.js +8 -12
  45. package/source/class/qx/test/mobile/page/Page.js +24 -44
  46. package/source/class/qx/test/performance/Property.js +2 -2
  47. package/source/class/qx/test/ui/basic/Image.js +32 -52
  48. package/source/class/qx/test/ui/core/Blocker.js +6 -14
  49. package/source/class/qx/test/ui/embed/Iframe.js +13 -21
  50. package/source/class/qx/test/ui/form/FileSelectorButton.js +32 -0
  51. package/source/class/qx/test/ui/form/FormValidator.js +147 -211
  52. package/source/class/qx/test/ui/form/Label.js +8 -16
  53. package/source/class/qx/test/ui/root/Inline.js +9 -13
  54. package/source/class/qx/test/ui/table/Table.js +6 -14
  55. package/source/class/qx/test/ui/toolbar/OverflowHandling.js +18 -30
  56. package/source/class/qx/test/ui/virtual/Pane.js +3 -7
  57. package/source/class/qx/test/util/DynamicScriptLoader.js +23 -42
  58. package/source/class/qx/theme/iconfont/LoadMaterialIcons.js +4 -4
  59. package/source/class/qx/theme/iconfont/LoadMaterialIconsOutlined.js +4 -4
  60. package/source/class/qx/theme/iconfont/LoadMaterialIconsRound.js +4 -4
  61. package/source/class/qx/theme/iconfont/LoadMaterialIconsSharp.js +4 -4
  62. package/source/class/qx/theme/iconfont/LoadMaterialIconsTwoTone.js +4 -4
  63. package/source/class/qx/theme/tangible/Appearance.js +22 -3
  64. package/source/class/qx/theme/tangible/ColorEngine.js +3 -3
  65. package/source/class/qx/theme/tangible/Decoration.js +3 -3
  66. package/source/class/qx/tool/cli/Watch.js +3 -7
  67. package/source/class/qx/tool/cli/api/AbstractApi.js +1 -1
  68. package/source/class/qx/tool/cli/api/CompilerApi.js +3 -7
  69. package/source/class/qx/tool/cli/commands/Compile.js +9 -1
  70. package/source/class/qx/tool/cli/commands/Lint.js +21 -17
  71. package/source/class/qx/tool/compiler/ClassFile.js +22 -12
  72. package/source/class/qx/tool/compiler/Es6ify.js +12 -5
  73. package/source/class/qx/tool/compiler/TargetError.js +3 -4
  74. package/source/class/qx/tool/compiler/app/Application.js +14 -0
  75. package/source/class/qx/tool/compiler/app/WebFont.js +8 -6
  76. package/source/class/qx/tool/compiler/targets/SourceCodeCopier.js +1 -1
  77. package/source/class/qx/tool/compiler/targets/Target.js +7 -5
  78. package/source/class/qx/tool/compiler/targets/meta/AbstractJavascriptMeta.js +1 -1
  79. package/source/class/qx/tool/compiler/targets/meta/Browserify.js +88 -52
  80. package/source/class/qx/tool/compiler/targets/meta/Uglify.js +11 -3
  81. package/source/class/qx/tool/utils/Json.js +1 -1
  82. package/source/class/qx/tool/utils/Website.js +2 -2
  83. package/source/class/qx/ui/basic/Label.js +13 -17
  84. package/source/class/qx/ui/core/MPlacement.js +13 -21
  85. package/source/class/qx/ui/core/Widget.js +2 -3
  86. package/source/class/qx/ui/core/scroll/NativeScrollBar.js +3 -7
  87. package/source/class/qx/ui/core/scroll/ScrollBar.js +3 -7
  88. package/source/class/qx/ui/embed/Iframe.js +40 -50
  89. package/source/class/qx/ui/form/AbstractField.js +8 -12
  90. package/source/class/qx/ui/form/ComboBox.js +7 -15
  91. package/source/class/qx/ui/form/DateField.js +9 -18
  92. package/source/class/qx/ui/form/FileSelectorButton.js +157 -0
  93. package/source/class/qx/ui/form/Spinner.js +7 -15
  94. package/source/class/qx/ui/form/TextArea.js +3 -7
  95. package/source/class/qx/ui/form/VirtualComboBox.js +8 -16
  96. package/source/class/qx/ui/form/VirtualSelectBox.js +21 -37
  97. package/source/class/qx/ui/layout/Canvas.js +2 -2
  98. package/source/class/qx/ui/mobile/container/MIScroll.js +3 -7
  99. package/source/class/qx/ui/progressive/headfoot/Progress.js +22 -34
  100. package/source/class/qx/ui/progressive/renderer/table/Row.js +1 -1
  101. package/source/class/qx/ui/splitpane/Pane.js +14 -22
  102. package/source/class/qx/ui/table/MTableContextMenu.js +63 -71
  103. package/source/class/qx/ui/table/Table.js +3 -7
  104. package/source/class/qx/ui/table/model/Abstract.js +5 -2
  105. package/source/class/qx/ui/table/pane/Scroller.js +8 -12
  106. package/source/class/qx/ui/toolbar/FileSelectorButton.js +57 -0
  107. package/source/class/qx/ui/toolbar/Part.js +3 -7
  108. package/source/class/qx/ui/tree/VirtualTree.js +5 -9
  109. package/source/class/qx/ui/treevirtual/MNode.js +5 -3
  110. package/source/class/qx/ui/treevirtual/TreeVirtual.js +3 -7
  111. package/source/class/qx/ui/virtual/core/Pane.js +30 -42
  112. package/source/class/qx/util/DynamicScriptLoader.js +31 -43
  113. package/source/resource/qx/iconfont/MaterialIcons/materialicons-v126.eot +0 -0
  114. package/source/resource/qx/iconfont/MaterialIcons/{materialicons-v70.ttf → materialicons-v126.ttf} +0 -0
  115. package/source/resource/qx/iconfont/MaterialIcons/materialicons-v126.woff +0 -0
  116. package/source/resource/qx/iconfont/MaterialIcons/materialicons-v126.woff2 +0 -0
  117. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v101.eot +0 -0
  118. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v101.otf +0 -0
  119. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v101.woff +0 -0
  120. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v101.woff2 +0 -0
  121. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v100.eot +0 -0
  122. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v100.otf +0 -0
  123. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v100.woff +0 -0
  124. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v100.woff2 +0 -0
  125. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v101.eot +0 -0
  126. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v101.otf +0 -0
  127. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v101.woff +0 -0
  128. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v101.woff2 +0 -0
  129. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v104.eot +0 -0
  130. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v104.otf +0 -0
  131. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v104.woff +0 -0
  132. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v104.woff2 +0 -0
  133. package/source/resource/qx/tool/cli/templates/loader/loader-browser.tmpl.js +1 -2
  134. package/source/resource/qx/tool/schema/compile-1-0-0.json +11 -1
  135. package/source/resource/qx/iconfont/MaterialIcons/materialicons-v70.eot +0 -0
  136. package/source/resource/qx/iconfont/MaterialIcons/materialicons-v70.woff +0 -0
  137. package/source/resource/qx/iconfont/MaterialIcons/materialicons-v70.woff2 +0 -0
  138. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v38.eot +0 -0
  139. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v38.otf +0 -0
  140. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v38.woff +0 -0
  141. package/source/resource/qx/iconfont/MaterialIcons/materialiconsoutlined-v38.woff2 +0 -0
  142. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v37.eot +0 -0
  143. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v37.otf +0 -0
  144. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v37.woff +0 -0
  145. package/source/resource/qx/iconfont/MaterialIcons/materialiconsround-v37.woff2 +0 -0
  146. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v38.eot +0 -0
  147. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v38.otf +0 -0
  148. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v38.woff +0 -0
  149. package/source/resource/qx/iconfont/MaterialIcons/materialiconssharp-v38.woff2 +0 -0
  150. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v36.eot +0 -0
  151. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v36.otf +0 -0
  152. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v36.woff +0 -0
  153. package/source/resource/qx/iconfont/MaterialIcons/materialiconstwotone-v36.woff2 +0 -0
@@ -1852,18 +1852,14 @@ qx.Class.define("qx.ui.table.pane.Scroller", {
1852
1852
  } else {
1853
1853
  // prevent tap event from bubbling up to the table
1854
1854
  this.__focusIndicatorPointerDownListener =
1855
- this.__focusIndicator.addListener(
1856
- "pointerdown",
1857
- function (e) {
1858
- this.__lastPointerDownCell = {
1859
- row: this.__focusedRow,
1860
- col: this.__focusedCol
1861
- };
1862
-
1863
- e.stopPropagation();
1864
- },
1865
- this
1866
- );
1855
+ this.__focusIndicator.addListener("pointerdown", e => {
1856
+ this.__lastPointerDownCell = {
1857
+ row: this.__focusedRow,
1858
+ col: this.__focusedCol
1859
+ };
1860
+
1861
+ e.stopPropagation();
1862
+ });
1867
1863
 
1868
1864
  this._updateFocusIndicator(true);
1869
1865
  this.__focusIndicator.add(this._cellEditor);
@@ -0,0 +1,57 @@
1
+ /* ************************************************************************
2
+
3
+ qooxdoo
4
+
5
+ https://qooxdoo.org
6
+
7
+ Copyright:
8
+ 2022 OETIKER+PARTNER AG
9
+
10
+ License:
11
+ MIT: https://opensource.org/licenses/MIT
12
+ See the LICENSE file in the project's top-level directory for details.
13
+
14
+ Authors:
15
+ * Tobias Oetiker (oetiker)
16
+
17
+ ************************************************************************ */
18
+
19
+ /**
20
+ * A toolbar-aware version of the {@link qx.ui.form.FileSelectorButton}.
21
+ */
22
+
23
+ qx.Class.define("qx.ui.toolbar.FileSelectorButton", {
24
+ extend: qx.ui.form.FileSelectorButton,
25
+ construct: function (label, icon, command) {
26
+ this.base(arguments, label, icon, command);
27
+ // Toolbar buttons should not support the keyboard events
28
+ this.removeListener("keydown", this._onKeyDown);
29
+ this.removeListener("keyup", this._onKeyUp);
30
+ },
31
+ properties: {
32
+ appearance: {
33
+ refine: true,
34
+ init: "toolbar-button"
35
+ },
36
+ show: {
37
+ refine: true,
38
+ init: "inherit"
39
+ },
40
+ focusable: {
41
+ refine: true,
42
+ init: false
43
+ }
44
+ },
45
+
46
+ members: {
47
+ // overridden
48
+ _applyVisibility: function (value, old) {
49
+ this.base(arguments, value, old);
50
+ // trigger a appearance recalculation of the parent
51
+ let parent = this.getLayoutParent();
52
+ if (parent && parent instanceof qx.ui.toolbar.PartContainer) {
53
+ qx.ui.core.queue.Appearance.add(parent);
54
+ }
55
+ }
56
+ }
57
+ });
@@ -105,13 +105,9 @@ qx.Class.define("qx.ui.toolbar.Part", {
105
105
  control = new qx.ui.toolbar.PartContainer();
106
106
  control.addListener("syncAppearance", this.__onSyncAppearance, this);
107
107
  this._add(control);
108
- control.addListener(
109
- "changeChildren",
110
- function () {
111
- this.__onSyncAppearance();
112
- },
113
- this
114
- );
108
+ control.addListener("changeChildren", () => {
109
+ this.__onSyncAppearance();
110
+ });
115
111
 
116
112
  break;
117
113
  }
@@ -526,15 +526,11 @@ qx.Class.define("qx.ui.tree.VirtualTree", {
526
526
  this._layer = this._provider.createLayer();
527
527
  this._layer.addListener("updated", this._onUpdated, this);
528
528
  this.getPane().addLayer(this._layer);
529
- this.getPane().addListenerOnce(
530
- "resize",
531
- function (e) {
532
- // apply width to pane on first rendering pass
533
- // to avoid visible flickering
534
- this.getPane().getColumnConfig().setItemSize(0, e.getData().width);
535
- },
536
- this
537
- );
529
+ this.getPane().addListenerOnce("resize", e => {
530
+ // apply width to pane on first rendering pass
531
+ // to avoid visible flickering
532
+ this.getPane().getColumnConfig().setItemSize(0, e.getData().width);
533
+ });
538
534
  },
539
535
 
540
536
  // Interface implementation
@@ -171,7 +171,7 @@ qx.Mixin.define("qx.ui.treevirtual.MNode", {
171
171
  var model = this.getTableModel();
172
172
  model.getData().forEach(node => {
173
173
  if (node) {
174
- model.setState(node.nodeId, {bOpened: true}, true);
174
+ model.setState(node.nodeId, { bOpened: true }, true);
175
175
  }
176
176
  });
177
177
  model.setData();
@@ -184,7 +184,7 @@ qx.Mixin.define("qx.ui.treevirtual.MNode", {
184
184
  var model = this.getTableModel();
185
185
  model.getData().forEach(node => {
186
186
  if (node) {
187
- model.setState(node.nodeId, {bOpened: false}, true);
187
+ model.setState(node.nodeId, { bOpened: false }, true);
188
188
  }
189
189
  });
190
190
  model.setData();
@@ -225,7 +225,9 @@ qx.Mixin.define("qx.ui.treevirtual.MNode", {
225
225
  this.getTableModel().setState(node.nodeId, { bOpened: opened }, true);
226
226
  }
227
227
  if (cascade) {
228
- node.children.forEach(child => this.nodeSetOpened(child, opened, cascade, true));
228
+ node.children.forEach(child =>
229
+ this.nodeSetOpened(child, opened, cascade, true)
230
+ );
229
231
  }
230
232
  if (!cascade || !isRecursed) {
231
233
  this.getTableModel().setData();
@@ -170,13 +170,9 @@ qx.Class.define("qx.ui.treevirtual.TreeVirtual", {
170
170
  super(custom.dataModel, custom);
171
171
 
172
172
  // Arrange to redisplay edited data following editing
173
- this.addListener(
174
- "dataEdited",
175
- function (e) {
176
- this.getDataModel().setData();
177
- },
178
- this
179
- );
173
+ this.addListener("dataEdited", e => {
174
+ this.getDataModel().setData();
175
+ });
180
176
 
181
177
  // By default, present the column visibility button only if there are
182
178
  // multiple columns.
@@ -323,20 +323,16 @@ qx.Class.define("qx.ui.virtual.core.Pane", {
323
323
  scrollRowIntoView(row) {
324
324
  var bounds = this.getBounds();
325
325
  if (!bounds) {
326
- this.addListenerOnce(
327
- "appear",
328
- function () {
329
- // It's important that the registered events are first dispatched.
330
- qx.event.Timer.once(
331
- function () {
332
- this.scrollRowIntoView(row);
333
- },
334
- this,
335
- 0
336
- );
337
- },
338
- this
339
- );
326
+ this.addListenerOnce("appear", () => {
327
+ // It's important that the registered events are first dispatched.
328
+ qx.event.Timer.once(
329
+ function () {
330
+ this.scrollRowIntoView(row);
331
+ },
332
+ this,
333
+ 0
334
+ );
335
+ });
340
336
 
341
337
  return;
342
338
  }
@@ -360,20 +356,16 @@ qx.Class.define("qx.ui.virtual.core.Pane", {
360
356
  scrollColumnIntoView(column) {
361
357
  var bounds = this.getBounds();
362
358
  if (!bounds) {
363
- this.addListenerOnce(
364
- "appear",
365
- function () {
366
- // It's important that the registered events are first dispatched.
367
- qx.event.Timer.once(
368
- function () {
369
- this.scrollColumnIntoView(column);
370
- },
371
- this,
372
- 0
373
- );
374
- },
375
- this
376
- );
359
+ this.addListenerOnce("appear", () => {
360
+ // It's important that the registered events are first dispatched.
361
+ qx.event.Timer.once(
362
+ function () {
363
+ this.scrollColumnIntoView(column);
364
+ },
365
+ this,
366
+ 0
367
+ );
368
+ });
377
369
 
378
370
  return;
379
371
  }
@@ -398,20 +390,16 @@ qx.Class.define("qx.ui.virtual.core.Pane", {
398
390
  scrollCellIntoView(column, row) {
399
391
  var bounds = this.getBounds();
400
392
  if (!bounds) {
401
- this.addListenerOnce(
402
- "appear",
403
- function () {
404
- // It's important that the registered events are first dispatched.
405
- qx.event.Timer.once(
406
- function () {
407
- this.scrollCellIntoView(column, row);
408
- },
409
- this,
410
- 0
411
- );
412
- },
413
- this
414
- );
393
+ this.addListenerOnce("appear", () => {
394
+ // It's important that the registered events are first dispatched.
395
+ qx.event.Timer.once(
396
+ function () {
397
+ this.scrollCellIntoView(column, row);
398
+ },
399
+ this,
400
+ 0
401
+ );
402
+ });
415
403
 
416
404
  return;
417
405
  }
@@ -144,13 +144,9 @@ qx.Class.define("qx.util.DynamicScriptLoader", {
144
144
  true() {
145
145
  return new qx.Promise(function (resolve, reject) {
146
146
  this.addListenerOnce("ready", resolve, this);
147
- this.addListenerOnce(
148
- "failed",
149
- function (e) {
150
- reject(new Error(e.getData()));
151
- },
152
- this
153
- );
147
+ this.addListenerOnce("failed", e => {
148
+ reject(new Error(e.getData()));
149
+ });
154
150
 
155
151
  if (this.isDisposed()) {
156
152
  reject(new Error("disposed"));
@@ -206,43 +202,35 @@ qx.Class.define("qx.util.DynamicScriptLoader", {
206
202
 
207
203
  dynLoader = DynamicScriptLoader.__IN_PROGRESS[script];
208
204
  if (dynLoader) {
209
- id1 = dynLoader.addListener(
210
- "loaded",
211
- function (e) {
212
- if (this.isDisposed()) {
213
- return;
214
- }
215
- var data = e.getData();
216
- if (data.script === script) {
217
- dynLoader.removeListenerById(id2);
218
- dynLoader.removeListenerById(id1);
219
- this.fireDataEvent("loaded", data);
220
- this.__loadScripts();
221
- }
222
- },
223
- this
224
- );
225
-
226
- id2 = dynLoader.addListener(
227
- "failed",
228
- function (e) {
229
- if (this.isDisposed()) {
230
- return;
231
- }
232
- var data = e.getData();
233
- dynLoader.removeListenerById(id1);
205
+ id1 = dynLoader.addListener("loaded", e => {
206
+ if (this.isDisposed()) {
207
+ return;
208
+ }
209
+ var data = e.getData();
210
+ if (data.script === script) {
234
211
  dynLoader.removeListenerById(id2);
235
- this.fireDataEvent("failed", {
236
- script: script,
237
- status:
238
- "loading of " +
239
- data.script +
240
- " failed while waiting for " +
241
- script
242
- });
243
- },
244
- this
245
- );
212
+ dynLoader.removeListenerById(id1);
213
+ this.fireDataEvent("loaded", data);
214
+ this.__loadScripts();
215
+ }
216
+ });
217
+
218
+ id2 = dynLoader.addListener("failed", e => {
219
+ if (this.isDisposed()) {
220
+ return;
221
+ }
222
+ var data = e.getData();
223
+ dynLoader.removeListenerById(id1);
224
+ dynLoader.removeListenerById(id2);
225
+ this.fireDataEvent("failed", {
226
+ script: script,
227
+ status:
228
+ "loading of " +
229
+ data.script +
230
+ " failed while waiting for " +
231
+ script
232
+ });
233
+ });
246
234
 
247
235
  return;
248
236
  }
@@ -91,7 +91,6 @@ qx.$$createdAt = function(obj, filename, lineNumber, column) {
91
91
  };
92
92
 
93
93
  var isWebkit = /AppleWebKit\/([^ ]+)/.test(navigator.userAgent);
94
- var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
95
94
  var isIE11 = !!window.MSInputMethodContext && !!document.documentMode;
96
95
 
97
96
  qx.$$loader = {
@@ -103,7 +102,7 @@ qx.$$loader = {
103
102
  closureParts : %{ClosureParts},
104
103
  bootIsInline : %{BootIsInline},
105
104
  addNoCacheParam : %{NoCacheParam},
106
- isLoadParallel: !isFirefox && !isIE11 && 'async' in document.createElement('script'),
105
+ isLoadParallel: !isIE11 && 'async' in document.createElement('script'),
107
106
  delayDefer: false,
108
107
  splashscreen: window.QOOXDOO_SPLASH_SCREEN || null,
109
108
  isLoadChunked: false,
@@ -53,11 +53,11 @@
53
53
  "minItems": 1,
54
54
  "items": {
55
55
  "type": "object",
56
- "additionalItems": false,
57
56
  "required": [
58
57
  "class",
59
58
  "name"
60
59
  ],
60
+ "additionalProperties": false,
61
61
  "properties": {
62
62
  "class" : {
63
63
  "description": "The class name of the main application class (it typically inherits from `qx.application.Standalone` for web applications)",
@@ -105,6 +105,10 @@
105
105
  "type": "boolean",
106
106
  "default": true
107
107
  },
108
+ "default": {
109
+ "description": "This browser application is written into the root of the target dir. If not set the first application is used instead",
110
+ "type": "boolean"
111
+ },
108
112
  "standalone": {
109
113
  "description": "Whether this application can be opened in a browser on its own (true) or is part of a different application (false)",
110
114
  "type": "boolean",
@@ -168,6 +172,12 @@
168
172
  },
169
173
  "parts": {
170
174
  "$ref": "#/properties/parts"
175
+ },
176
+ "localModules": {
177
+ "type": "object",
178
+ "additionalProperties": {
179
+ "type": "string"
180
+ }
171
181
  }
172
182
  }
173
183
  }