@qooxdoo/framework 7.0.0-beta.3 → 7.0.0-beta.7
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 +3 -0
- package/Manifest.json +1 -1
- package/README.md +9 -3
- package/lib/compiler/compile-info.json +60 -58
- package/lib/compiler/index.js +3242 -1883
- package/lib/resource/qx/tool/cli/templates/skeleton/mobile/source/theme/custom/css/custom.css.map +1 -1
- package/lib/resource/qx/tool/loadsass.js +6 -4
- package/lib/resource/qx/tool/schema/compile-1-0-0.json +6 -11
- package/package.json +17 -3
- package/source/class/qx/Bootstrap.js +22 -1
- package/source/class/qx/bom/Blocker.js +2 -1
- package/source/class/qx/core/Environment.js +3 -12
- package/source/class/qx/core/MProperty.js +1 -1
- package/source/class/qx/dev/unit/Sinon.js +1 -1
- package/source/class/qx/io/__init__.js +5 -3
- package/source/class/qx/io/exception/Cancel.js +34 -0
- package/source/class/qx/io/exception/Exception.js +38 -0
- package/source/class/qx/io/exception/Protocol.js +26 -0
- package/source/class/qx/io/exception/Transport.js +39 -0
- package/source/class/qx/io/exception/__init__.js +4 -0
- package/source/class/qx/io/graphql/Client.js +112 -0
- package/source/class/qx/io/graphql/__init__.js +9 -0
- package/source/class/qx/io/graphql/protocol/Message.js +65 -0
- package/source/class/qx/io/graphql/protocol/Request.js +95 -0
- package/source/class/qx/io/graphql/protocol/Response.js +61 -0
- package/source/class/qx/io/graphql/protocol/__init__.js +6 -0
- package/source/class/qx/io/jsonrpc/Client.js +323 -0
- package/source/class/qx/io/jsonrpc/__init__.js +15 -0
- package/source/class/qx/io/jsonrpc/protocol/Batch.js +97 -0
- package/source/class/qx/io/jsonrpc/protocol/Error.js +63 -0
- package/source/class/qx/io/jsonrpc/protocol/Message.js +48 -0
- package/source/class/qx/io/jsonrpc/protocol/Notification.js +45 -0
- package/source/class/qx/io/jsonrpc/protocol/Parser.js +81 -0
- package/source/class/qx/io/jsonrpc/protocol/Request.js +93 -0
- package/source/class/qx/io/jsonrpc/protocol/Result.js +48 -0
- package/source/class/qx/io/jsonrpc/protocol/__init__.js +5 -0
- package/source/class/qx/io/request/authentication/Bearer.js +52 -0
- package/source/class/qx/io/transport/AbstractClient.js +100 -0
- package/source/class/qx/io/transport/AbstractTransport.js +41 -0
- package/source/class/qx/io/transport/Fetch.js +95 -0
- package/source/class/qx/io/transport/ITransport.js +40 -0
- package/source/class/qx/io/transport/PostMessage.js +55 -0
- package/source/class/qx/io/transport/Websocket.js +97 -0
- package/source/class/qx/io/transport/Xhr.js +139 -0
- package/source/class/qx/io/transport/__init__.js +18 -0
- package/source/class/qx/test/core/Assert.js +1 -1
- package/source/class/qx/test/core/Environment.js +0 -3
- package/source/class/qx/test/io/MAssert.js +46 -0
- package/source/class/qx/test/io/graphql/Client.js +169 -0
- package/source/class/qx/test/io/graphql/ClientFetch.js +34 -0
- package/source/class/qx/test/io/graphql/Request.js +42 -0
- package/source/class/qx/test/io/jsonrpc/Client.js +267 -0
- package/source/class/qx/test/io/jsonrpc/Protocol.js +80 -0
- package/source/class/qx/test/io/transport/PostMessage.js +56 -0
- package/source/class/qx/test/io/transport/Websocket.js +63 -0
- package/source/class/qx/test/ui/embed/Iframe.js +1 -1
- package/source/class/qx/test/util/DateFormat.js +45 -6
- package/source/class/qx/tool/cli/Cli.js +1 -0
- package/source/class/qx/tool/cli/commands/Compile.js +13 -3
- package/source/class/qx/tool/cli/commands/Es6ify.js +93 -0
- package/source/class/qx/tool/cli/commands/package/Install.js +1 -1
- package/source/class/qx/tool/cli/commands/package/Publish.js +14 -0
- package/source/class/qx/tool/compiler/ClassFile.js +67 -27
- package/source/class/qx/tool/compiler/Es6ify.js +368 -0
- package/source/class/qx/tool/compiler/makers/AppMaker.js +2 -1
- package/source/class/qx/tool/compiler/targets/Target.js +57 -47
- package/source/class/qx/tool/compiler/targets/meta/AbstractJavascriptMeta.js +25 -18
- package/source/class/qx/tool/compiler/targets/meta/BootJs.js +16 -16
- package/source/class/qx/tool/compiler/targets/meta/PolyfillJs.js +11 -3
- package/source/class/qx/tool/compiler/targets/meta/Uglify.js +10 -10
- package/source/class/qx/ui/core/Widget.js +70 -0
- package/source/class/qx/ui/decoration/MLinearBackgroundGradient.js +2 -1
- package/source/class/qx/ui/form/ComboBox.js +8 -3
- package/source/class/qx/ui/form/DateField.js +16 -1
- package/source/class/qx/ui/form/MenuButton.js +8 -4
- package/source/class/qx/ui/form/SelectBox.js +8 -3
- package/source/class/qx/ui/menu/AbstractButton.js +12 -8
- package/source/class/qx/ui/menu/Menu.js +18 -8
- package/source/class/qx/ui/table/pane/Model.js +10 -4
- package/source/class/qx/ui/window/Window.js +8 -0
- package/source/class/qx/util/format/DateFormat.js +44 -17
- package/source/resource/qx/tool/loadsass.js +6 -4
- package/source/resource/qx/tool/schema/compile-1-0-0.json +6 -11
- package/source/translation/hr.po +297 -0
- package/lib/resource/qx/static/blank.gif +0 -0
- package/source/class/qx/io/remote/Exchange.js +0 -1063
- package/source/class/qx/io/remote/Request.js +0 -1021
- package/source/class/qx/io/remote/RequestQueue.js +0 -521
- package/source/class/qx/io/remote/Response.js +0 -137
- package/source/class/qx/io/remote/Rpc.js +0 -1075
- package/source/class/qx/io/remote/RpcError.js +0 -198
- package/source/class/qx/io/remote/__init__.js +0 -88
- package/source/class/qx/io/remote/transport/Abstract.js +0 -513
- package/source/class/qx/io/remote/transport/Iframe.js +0 -652
- package/source/class/qx/io/remote/transport/Script.js +0 -475
- package/source/class/qx/io/remote/transport/XmlHttp.js +0 -1019
- package/source/class/qx/io/remote/transport/__init__.js +0 -3
- package/source/class/qx/test/io/remote/AbstractRequest.js +0 -150
- package/source/class/qx/test/io/remote/RequestIframe.js +0 -105
- package/source/class/qx/test/io/remote/RequestXhr.js +0 -151
- package/source/class/qx/test/io/remote/Rpc.js +0 -205
- package/source/class/qx/test/io/remote/__init__.js +0 -4
- package/source/class/qx/test/io/remote/transport/Iframe.js +0 -67
- package/source/class/qx/test/io/remote/transport/XmlHttp.js +0 -133
- package/source/class/qx/test/io/remote/transport/__init__.js +0 -4
|
@@ -3827,6 +3827,76 @@ qx.Class.define("qx.ui.core.Widget",
|
|
|
3827
3827
|
|
|
3828
3828
|
|
|
3829
3829
|
|
|
3830
|
+
/*
|
|
3831
|
+
---------------------------------------------------------------------------
|
|
3832
|
+
ARIA attrs support
|
|
3833
|
+
---------------------------------------------------------------------------
|
|
3834
|
+
*/
|
|
3835
|
+
|
|
3836
|
+
/**
|
|
3837
|
+
* Sets the string which labels this widget. This will be read out by screenreaders. Needed if there is no
|
|
3838
|
+
* readable text/label in this widget which would automatically act as aria-label.
|
|
3839
|
+
* @param label {String} Labelling Text
|
|
3840
|
+
*/
|
|
3841
|
+
setAriaLabel: function(label) {
|
|
3842
|
+
this.getContentElement().setAttribute("aria-label", label);
|
|
3843
|
+
},
|
|
3844
|
+
|
|
3845
|
+
/**
|
|
3846
|
+
* Marks that this widget gets labelled by another widget. This will be read out by screenreaders as first
|
|
3847
|
+
* information.
|
|
3848
|
+
* Similiar to aria-label, difference being that the labelling widget is an different widget and multiple
|
|
3849
|
+
* widgets can be added.
|
|
3850
|
+
* @param labelWidgets {qx.ui.core.Widget[]} Indefinite Number of labelling Widgets
|
|
3851
|
+
*/
|
|
3852
|
+
addAriaLabelledBy: function(...labelWidgets) {
|
|
3853
|
+
this.__addAriaXBy(labelWidgets, "aria-labelledby");
|
|
3854
|
+
},
|
|
3855
|
+
|
|
3856
|
+
/**
|
|
3857
|
+
* Marks that this widget gets described by another widget. This will be read out by screenreaders as last
|
|
3858
|
+
* information. Multiple Widgets possible.
|
|
3859
|
+
* @param describingWidgets {qx.ui.core.Widget[]} Indefinite Number of describing Widgets
|
|
3860
|
+
*/
|
|
3861
|
+
addAriaDescribedBy: function(...describingWidgets) {
|
|
3862
|
+
this.__addAriaXBy(describingWidgets, "aria-describedby");
|
|
3863
|
+
},
|
|
3864
|
+
|
|
3865
|
+
/**
|
|
3866
|
+
* Sets either aria-labelledby or aria-describedby
|
|
3867
|
+
* @param widgets {qx.ui.core.Widget[]} Indefinite Number of widgets
|
|
3868
|
+
* @param ariaAttr {String} aria-labelledby | aria-describedby
|
|
3869
|
+
*/
|
|
3870
|
+
__addAriaXBy: function(widgets, ariaAttr) {
|
|
3871
|
+
if (!["aria-labelledby", "aria-describedby"].includes(ariaAttr)) {
|
|
3872
|
+
throw new Error("Only aria-labelledby or aria-describedby allowed!");
|
|
3873
|
+
}
|
|
3874
|
+
let idArr = [];
|
|
3875
|
+
for (const widget of widgets) {
|
|
3876
|
+
if (!(widget instanceof qx.ui.core.Widget)) {
|
|
3877
|
+
throw new Error("Given widget " + widget + " is not an instance of qx.ui.core.Widget!");
|
|
3878
|
+
}
|
|
3879
|
+
const contentEl = widget.getContentElement();
|
|
3880
|
+
let widgetId = contentEl.getAttribute("id");
|
|
3881
|
+
if (!widgetId) {
|
|
3882
|
+
widgetId = `label-${widget.toHashCode()}`;
|
|
3883
|
+
contentEl.setAttribute("id", widgetId);
|
|
3884
|
+
}
|
|
3885
|
+
if (!idArr.includes(widgetId)) {
|
|
3886
|
+
idArr.push(widgetId);
|
|
3887
|
+
}
|
|
3888
|
+
}
|
|
3889
|
+
if (idArr.length === 0) {
|
|
3890
|
+
return;
|
|
3891
|
+
}
|
|
3892
|
+
const idStr = idArr.join(" ");
|
|
3893
|
+
const contentEl = this.getContentElement();
|
|
3894
|
+
let res = contentEl.getAttribute(ariaAttr);
|
|
3895
|
+
res = res ? `${res} ${idStr}` : idStr;
|
|
3896
|
+
contentEl.setAttribute(ariaAttr, res);
|
|
3897
|
+
},
|
|
3898
|
+
|
|
3899
|
+
|
|
3830
3900
|
|
|
3831
3901
|
/*
|
|
3832
3902
|
---------------------------------------------------------------------------
|
|
@@ -240,7 +240,8 @@ qx.Mixin.define("qx.ui.decoration.MLinearBackgroundGradient",
|
|
|
240
240
|
*
|
|
241
241
|
* @return {Boolean} Whether this implementation supports multiple gradients atop each other (true).
|
|
242
242
|
*/
|
|
243
|
-
__styleLinearBackgroundGradientWithCanvas: function
|
|
243
|
+
__styleLinearBackgroundGradientWithCanvas: function(startColor, endColor, unit, orientation, startColorPosition, endColorPosition, styles, backgroundStyle) {
|
|
244
|
+
const me = qx.ui.decoration.MLinearBackgroundGradient.__styleLinearBackgroundGradientWithCanvas;
|
|
244
245
|
if (!me.__canvas) {
|
|
245
246
|
me.__canvas = document.createElement("canvas");
|
|
246
247
|
}
|
|
@@ -337,10 +337,15 @@ qx.Class.define("qx.ui.form.ComboBox",
|
|
|
337
337
|
}
|
|
338
338
|
|
|
339
339
|
// Set aria-activedescendant
|
|
340
|
-
|
|
341
|
-
|
|
340
|
+
const textFieldContentEl = this.getChildControl("textfield").getContentElement();
|
|
341
|
+
if (!textFieldContentEl) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const currentContentEl = current && current[0] ? current[0].getContentElement() : null;
|
|
345
|
+
if (currentContentEl) {
|
|
346
|
+
textFieldContentEl.setAttribute("aria-activedescendant", currentContentEl.getAttribute("id"));
|
|
342
347
|
} else {
|
|
343
|
-
|
|
348
|
+
textFieldContentEl.removeAttribute("aria-activedescendant");
|
|
344
349
|
}
|
|
345
350
|
},
|
|
346
351
|
|
|
@@ -602,7 +602,22 @@ qx.Class.define("qx.ui.form.DateField",
|
|
|
602
602
|
|
|
603
603
|
field.getFocusElement().focus();
|
|
604
604
|
field.selectAllText();
|
|
605
|
-
}
|
|
605
|
+
},
|
|
606
|
+
|
|
607
|
+
// overridden
|
|
608
|
+
setAriaLabel: function(label) {
|
|
609
|
+
this.getChildControl("textfield").setAriaLabel(label);
|
|
610
|
+
},
|
|
611
|
+
|
|
612
|
+
// overridden
|
|
613
|
+
addAriaLabelledBy: function(...labelWidgets) {
|
|
614
|
+
this.getChildControl("textfield").addAriaLabelledBy(...labelWidgets);
|
|
615
|
+
},
|
|
616
|
+
|
|
617
|
+
// overridden
|
|
618
|
+
addAriaDescribedBy: function(...describingWidgets) {
|
|
619
|
+
this.getChildControl("textfield").addAriaDescribedBy(...describingWidgets);
|
|
620
|
+
},
|
|
606
621
|
},
|
|
607
622
|
|
|
608
623
|
|
|
@@ -115,7 +115,6 @@ qx.Class.define("qx.ui.form.MenuButton",
|
|
|
115
115
|
old.resetOpener();
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
const contentEl = this.getContentElement();
|
|
119
118
|
if (value)
|
|
120
119
|
{
|
|
121
120
|
value.addListener("changeVisibility", this._onMenuChange, this);
|
|
@@ -123,13 +122,18 @@ qx.Class.define("qx.ui.form.MenuButton",
|
|
|
123
122
|
|
|
124
123
|
value.removeState("submenu");
|
|
125
124
|
value.removeState("contextmenu");
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ARIA attrs
|
|
128
|
+
const contentEl = this.getContentElement();
|
|
129
|
+
if (!contentEl) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (value) {
|
|
128
133
|
contentEl.setAttribute("aria-haspopup", "menu");
|
|
129
134
|
contentEl.setAttribute("aria-expanded", value.isVisible());
|
|
130
135
|
contentEl.setAttribute("aria-controls", value.getContentElement().getAttribute("id"));
|
|
131
136
|
} else {
|
|
132
|
-
// ARIA attrs
|
|
133
137
|
contentEl.removeAttribute("aria-haspopup");
|
|
134
138
|
contentEl.removeAttribute("aria-expanded");
|
|
135
139
|
contentEl.removeAttribute("aria-controls");
|
|
@@ -430,10 +430,15 @@ qx.Class.define("qx.ui.form.SelectBox",
|
|
|
430
430
|
}
|
|
431
431
|
|
|
432
432
|
// Set aria-activedescendant
|
|
433
|
-
|
|
434
|
-
|
|
433
|
+
const contentEl = this.getContentElement();
|
|
434
|
+
if (!contentEl) {
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
const currentContentEl = current && current[0] ? current[0].getContentElement() : null;
|
|
438
|
+
if (currentContentEl) {
|
|
439
|
+
contentEl.setAttribute("aria-activedescendant", currentContentEl.getAttribute("id"));
|
|
435
440
|
} else {
|
|
436
|
-
|
|
441
|
+
contentEl.removeAttribute("aria-activedescendant");
|
|
437
442
|
}
|
|
438
443
|
},
|
|
439
444
|
|
|
@@ -340,7 +340,6 @@ qx.Class.define("qx.ui.menu.AbstractButton",
|
|
|
340
340
|
old.removeState("submenu");
|
|
341
341
|
}
|
|
342
342
|
|
|
343
|
-
const contentEl = this.getContentElement();
|
|
344
343
|
if (value)
|
|
345
344
|
{
|
|
346
345
|
this._showChildControl("arrow");
|
|
@@ -348,17 +347,22 @@ qx.Class.define("qx.ui.menu.AbstractButton",
|
|
|
348
347
|
value.addListener("changeVisibility", this._onMenuChange, this);
|
|
349
348
|
value.setOpener(this);
|
|
350
349
|
value.addState("submenu");
|
|
351
|
-
|
|
352
|
-
// ARIA attrs
|
|
353
|
-
contentEl.setAttribute("aria-haspopup", "menu");
|
|
354
|
-
contentEl.setAttribute("aria-expanded", value.isVisible());
|
|
355
|
-
contentEl.setAttribute("aria-controls", value.getContentElement().getAttribute("id"));
|
|
356
350
|
}
|
|
357
351
|
else
|
|
358
352
|
{
|
|
359
353
|
this._excludeChildControl("arrow");
|
|
360
|
-
|
|
361
|
-
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// ARIA attrs
|
|
357
|
+
const contentEl = this.getContentElement();
|
|
358
|
+
if (!contentEl) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
if (value) {
|
|
362
|
+
contentEl.setAttribute("aria-haspopup", "menu");
|
|
363
|
+
contentEl.setAttribute("aria-expanded", value.isVisible());
|
|
364
|
+
contentEl.setAttribute("aria-controls", value.getContentElement().getAttribute("id"));
|
|
365
|
+
} else {
|
|
362
366
|
contentEl.removeAttribute("aria-haspopup");
|
|
363
367
|
contentEl.removeAttribute("aria-expanded");
|
|
364
368
|
contentEl.removeAttribute("aria-controls");
|
|
@@ -493,14 +493,19 @@ qx.Class.define("qx.ui.menu.Menu",
|
|
|
493
493
|
if (old) {
|
|
494
494
|
old.removeState("selected");
|
|
495
495
|
}
|
|
496
|
-
|
|
497
|
-
const opener = this.__getRootOpener();
|
|
498
|
-
const contentEl = opener ? opener.getContentElement() : this.getContentElement();
|
|
499
496
|
if (value) {
|
|
500
497
|
value.addState("selected");
|
|
498
|
+
}
|
|
501
499
|
|
|
502
|
-
|
|
503
|
-
|
|
500
|
+
// ARIA attrs
|
|
501
|
+
const opener = this.__getRootOpener();
|
|
502
|
+
const contentEl = opener ? opener.getContentElement() : this.getContentElement();
|
|
503
|
+
if (!contentEl) {
|
|
504
|
+
return;
|
|
505
|
+
}
|
|
506
|
+
const valueContentEl = value ? value.getContentElement() : null;
|
|
507
|
+
if (valueContentEl) {
|
|
508
|
+
contentEl.setAttribute("aria-activedescendant", valueContentEl.getAttribute("id"));
|
|
504
509
|
} else {
|
|
505
510
|
contentEl.removeAttribute("aria-activedescendant");
|
|
506
511
|
}
|
|
@@ -523,10 +528,15 @@ qx.Class.define("qx.ui.menu.Menu",
|
|
|
523
528
|
_applyOpener : function(value, old)
|
|
524
529
|
{
|
|
525
530
|
// ARIA attrs
|
|
526
|
-
|
|
527
|
-
|
|
531
|
+
const contentEl = this.getContentElement();
|
|
532
|
+
if (!contentEl) {
|
|
533
|
+
return;
|
|
534
|
+
}
|
|
535
|
+
if (value && value.getContentElement()) {
|
|
536
|
+
contentEl.setAttribute("aria-labelledby", "");
|
|
537
|
+
this.addAriaLabelledBy(value);
|
|
528
538
|
} else {
|
|
529
|
-
|
|
539
|
+
contentEl.removeAttribute("aria-labelledby");
|
|
530
540
|
}
|
|
531
541
|
},
|
|
532
542
|
|
|
@@ -44,6 +44,10 @@ qx.Class.define("qx.ui.table.pane.Model",
|
|
|
44
44
|
this.base(arguments);
|
|
45
45
|
|
|
46
46
|
this.setTableColumnModel(tableColumnModel);
|
|
47
|
+
|
|
48
|
+
this.__defferedEventDispatcher = new qx.util.DeferredCall(function() {
|
|
49
|
+
this.fireEvent(qx.ui.table.pane.Model.EVENT_TYPE_MODEL_CHANGED);
|
|
50
|
+
}, this);
|
|
47
51
|
},
|
|
48
52
|
|
|
49
53
|
|
|
@@ -122,20 +126,21 @@ qx.Class.define("qx.ui.table.pane.Model",
|
|
|
122
126
|
{
|
|
123
127
|
__columnCount : null,
|
|
124
128
|
__tableColumnModel : null,
|
|
129
|
+
__defferedEventDispatcher : null,
|
|
125
130
|
|
|
126
131
|
|
|
127
132
|
// property modifier
|
|
128
133
|
_applyFirstColumnX : function(value, old)
|
|
129
134
|
{
|
|
130
135
|
this.__columnCount = null;
|
|
131
|
-
this.
|
|
136
|
+
this.__defferedEventDispatcher.schedule();
|
|
132
137
|
},
|
|
133
138
|
|
|
134
139
|
// property modifier
|
|
135
140
|
_applyMaxColumnCount : function(value, old)
|
|
136
141
|
{
|
|
137
142
|
this.__columnCount = null;
|
|
138
|
-
this.
|
|
143
|
+
this.__defferedEventDispatcher.schedule();
|
|
139
144
|
},
|
|
140
145
|
|
|
141
146
|
|
|
@@ -166,7 +171,7 @@ qx.Class.define("qx.ui.table.pane.Model",
|
|
|
166
171
|
{
|
|
167
172
|
this.__columnCount = null;
|
|
168
173
|
|
|
169
|
-
this.
|
|
174
|
+
this.__defferedEventDispatcher.schedule();
|
|
170
175
|
},
|
|
171
176
|
|
|
172
177
|
|
|
@@ -177,7 +182,7 @@ qx.Class.define("qx.ui.table.pane.Model",
|
|
|
177
182
|
*/
|
|
178
183
|
_onHeaderCellRendererChanged : function(evt)
|
|
179
184
|
{
|
|
180
|
-
this.
|
|
185
|
+
this.__defferedEventDispatcher.schedule();
|
|
181
186
|
},
|
|
182
187
|
|
|
183
188
|
|
|
@@ -305,5 +310,6 @@ qx.Class.define("qx.ui.table.pane.Model",
|
|
|
305
310
|
this.__tableColumnModel.removeListener("headerCellRendererChanged", this._onHeaderCellRendererChanged, this);
|
|
306
311
|
}
|
|
307
312
|
this.__tableColumnModel = null;
|
|
313
|
+
this._disposeObjects("__defferedEventDispatcher");
|
|
308
314
|
}
|
|
309
315
|
});
|
|
@@ -102,6 +102,11 @@ qx.Class.define("qx.ui.window.Window",
|
|
|
102
102
|
|
|
103
103
|
// Change the resize frames appearance
|
|
104
104
|
this._getResizeFrame().setAppearance("window-resize-frame");
|
|
105
|
+
|
|
106
|
+
// ARIA attrs
|
|
107
|
+
this.getContentElement().setAttribute("role", "dialog");
|
|
108
|
+
this.addAriaLabelledBy(this.getChildControl("title"));
|
|
109
|
+
this.addAriaDescribedBy(this.getChildControl("statusbar-text"));
|
|
105
110
|
},
|
|
106
111
|
|
|
107
112
|
|
|
@@ -961,6 +966,9 @@ qx.Class.define("qx.ui.window.Window",
|
|
|
961
966
|
} else {
|
|
962
967
|
this.addState("modal");
|
|
963
968
|
}
|
|
969
|
+
|
|
970
|
+
// ARIA attrs
|
|
971
|
+
this.getContentElement().setAttribute("aria-modal", value);
|
|
964
972
|
},
|
|
965
973
|
|
|
966
974
|
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
* single-quoted.
|
|
65
65
|
*
|
|
66
66
|
* The same format patterns will be used for both parsing and output formatting.
|
|
67
|
-
*
|
|
67
|
+
*
|
|
68
68
|
* NOTE: Instances of this class must be disposed of after use
|
|
69
69
|
*
|
|
70
70
|
*/
|
|
@@ -181,6 +181,7 @@ qx.Class.define("qx.util.format.DateFormat",
|
|
|
181
181
|
isoDate : "yyyy-MM-dd",
|
|
182
182
|
isoTime : "HH:mm:ss",
|
|
183
183
|
isoDateTime : "yyyy-MM-dd'T'HH:mm:ss",
|
|
184
|
+
isoDateTimeTz : "yyyy-MM-dd'T'HH:mm:ssZ",
|
|
184
185
|
isoUtcDateTime : "yyyy-MM-dd'T'HH:mm:ss'Z'"
|
|
185
186
|
},
|
|
186
187
|
|
|
@@ -406,14 +407,14 @@ qx.Class.define("qx.util.format.DateFormat",
|
|
|
406
407
|
}
|
|
407
408
|
this.__locale = value === null ? this.__initialLocale : value;
|
|
408
409
|
},
|
|
409
|
-
|
|
410
|
+
|
|
410
411
|
/**
|
|
411
412
|
* Resets the Locale
|
|
412
413
|
*/
|
|
413
414
|
resetLocale : function() {
|
|
414
415
|
this.setLocale(null);
|
|
415
416
|
},
|
|
416
|
-
|
|
417
|
+
|
|
417
418
|
/**
|
|
418
419
|
* Returns the locale
|
|
419
420
|
*/
|
|
@@ -427,7 +428,7 @@ qx.Class.define("qx.util.format.DateFormat",
|
|
|
427
428
|
|
|
428
429
|
/**
|
|
429
430
|
* Returns the original format string
|
|
430
|
-
*
|
|
431
|
+
*
|
|
431
432
|
* @return {String}
|
|
432
433
|
*/
|
|
433
434
|
getFormatString() {
|
|
@@ -761,7 +762,8 @@ qx.Class.define("qx.util.format.DateFormat",
|
|
|
761
762
|
weekOfYear : 1,
|
|
762
763
|
min : 0,
|
|
763
764
|
sec : 0,
|
|
764
|
-
ms : 0
|
|
765
|
+
ms : 0,
|
|
766
|
+
tzOffsetMins: null
|
|
765
767
|
};
|
|
766
768
|
|
|
767
769
|
var currGroup = 1;
|
|
@@ -825,14 +827,21 @@ qx.Class.define("qx.util.format.DateFormat",
|
|
|
825
827
|
dateValues.year = dateValues.year * dateValues.era;
|
|
826
828
|
}
|
|
827
829
|
|
|
828
|
-
var date
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
830
|
+
var date;
|
|
831
|
+
if (this.__UTC || dateValues.tzOffsetMins !== null) {
|
|
832
|
+
var utcMs = Date.UTC(dateValues.year, dateValues.month, dateValues.day, (dateValues.ispm) ? (dateValues.hour + 12) : dateValues.hour, dateValues.min, dateValues.sec, dateValues.ms);
|
|
833
|
+
if (dateValues.tzOffsetMins !== 0) {
|
|
834
|
+
utcMs += (dateValues.tzOffsetMins * 60000);
|
|
835
|
+
}
|
|
836
|
+
date = new Date(utcMs);
|
|
837
|
+
if (this.__UTC && (dateValues.month !== date.getUTCMonth() || dateValues.year !== date.getUTCFullYear())) {
|
|
838
|
+
throw new Error("Error parsing date '" + dateStr + "': the value for day or month is too large");
|
|
839
|
+
}
|
|
840
|
+
} else {
|
|
841
|
+
date = new Date(dateValues.year, dateValues.month, dateValues.day, (dateValues.ispm) ? (dateValues.hour + 12) : dateValues.hour, dateValues.min, dateValues.sec, dateValues.ms);
|
|
842
|
+
if (dateValues.month !== date.getMonth() || dateValues.year !== date.getFullYear()) {
|
|
843
|
+
throw new Error("Error parsing date '" + dateStr + "': the value for day or month is too large");
|
|
844
|
+
}
|
|
836
845
|
}
|
|
837
846
|
|
|
838
847
|
return date;
|
|
@@ -1207,10 +1216,28 @@ qx.Class.define("qx.util.format.DateFormat",
|
|
|
1207
1216
|
dateValues.hour = parseInt(value, 10) % 12;
|
|
1208
1217
|
};
|
|
1209
1218
|
|
|
1210
|
-
var
|
|
1211
|
-
|
|
1219
|
+
var timezoneManipulator = function(dateValues, value) {
|
|
1220
|
+
var regEx = new RegExp("([+-]?)(\\d\\d)(?::?(\\d\\d))?$");
|
|
1221
|
+
var tzResults = regEx.exec(value);
|
|
1222
|
+
var offsetHours = parseInt(tzResults[2], 10);
|
|
1223
|
+
var offsetMins = parseInt(tzResults[3], 10);
|
|
1224
|
+
// basic check, hours range is -12 to +14 https://en.wikipedia.org/wiki/Category:UTC_offsets
|
|
1225
|
+
if (offsetHours > 14) {
|
|
1226
|
+
throw new Error("Invalid hours in time zone offset.");
|
|
1227
|
+
}
|
|
1228
|
+
if (offsetMins > 59) {
|
|
1229
|
+
throw new Error("Invalid minutes in time zone offset.");
|
|
1230
|
+
}
|
|
1231
|
+
dateValues.tzOffsetMins = (offsetHours * 60) + offsetMins;
|
|
1232
|
+
if (tzResults[1] === "-") {
|
|
1233
|
+
dateValues.tzOffsetMins = -dateValues.tzOffsetMins;
|
|
1234
|
+
}
|
|
1212
1235
|
};
|
|
1213
1236
|
|
|
1237
|
+
// var ignoreManipulator = function(dateValues, value) {
|
|
1238
|
+
// return;
|
|
1239
|
+
// };
|
|
1240
|
+
|
|
1214
1241
|
var narrowEraNames = ['A', 'B'];
|
|
1215
1242
|
var narrowEraNameManipulator = function(dateValues, value) {
|
|
1216
1243
|
dateValues.era = value == 'A' ? 1 : -1;
|
|
@@ -1755,14 +1782,14 @@ qx.Class.define("qx.util.format.DateFormat",
|
|
|
1755
1782
|
{
|
|
1756
1783
|
pattern : "Z",
|
|
1757
1784
|
regex : "([\\+\\-]\\d\\d\\d\\d)",
|
|
1758
|
-
manipulator :
|
|
1785
|
+
manipulator : timezoneManipulator
|
|
1759
1786
|
});
|
|
1760
1787
|
|
|
1761
1788
|
rules.push(
|
|
1762
1789
|
{
|
|
1763
1790
|
pattern : "z",
|
|
1764
1791
|
regex : "(GMT[\\+\\-]\\d\\d:\\d\\d)",
|
|
1765
|
-
manipulator :
|
|
1792
|
+
manipulator : timezoneManipulator
|
|
1766
1793
|
});
|
|
1767
1794
|
}
|
|
1768
1795
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
global
|
|
2
|
-
global.
|
|
3
|
-
|
|
4
|
-
global
|
|
1
|
+
if ((typeof global !== 'undefined')) {
|
|
2
|
+
global.require = require;
|
|
3
|
+
global.__filename__ = __filename;
|
|
4
|
+
/* global loadSass */
|
|
5
|
+
global.loadSass = new Function (
|
|
5
6
|
`
|
|
6
7
|
// trick out sass
|
|
7
8
|
process.versions.electron = "0.0.0";
|
|
@@ -11,3 +12,4 @@ global.loadSass = new Function (
|
|
|
11
12
|
delete process.versions.electron;
|
|
12
13
|
return sass;
|
|
13
14
|
`);
|
|
15
|
+
}
|
|
@@ -168,15 +168,6 @@
|
|
|
168
168
|
},
|
|
169
169
|
"parts": {
|
|
170
170
|
"$ref": "#/properties/parts"
|
|
171
|
-
},
|
|
172
|
-
"minify": {
|
|
173
|
-
"$ref": "#/properties/targets"
|
|
174
|
-
},
|
|
175
|
-
"save-source-in-map": {
|
|
176
|
-
"$ref": "#/properties/targets"
|
|
177
|
-
},
|
|
178
|
-
"save-unminified": {
|
|
179
|
-
"$ref": "#/properties/targets"
|
|
180
171
|
}
|
|
181
172
|
}
|
|
182
173
|
}
|
|
@@ -266,11 +257,15 @@
|
|
|
266
257
|
"type": "boolean"
|
|
267
258
|
},
|
|
268
259
|
"save-source-in-map": {
|
|
269
|
-
"description": "If true, the source file will be saved in the map file if the target supports it.
|
|
260
|
+
"description": "If true, the source file will be saved in the map file if the target supports it.",
|
|
261
|
+
"type": "boolean"
|
|
262
|
+
},
|
|
263
|
+
"source-map-relative-paths": {
|
|
264
|
+
"description": "If true, the source map files will be saved with relative paths in the map file if the target supports it.",
|
|
270
265
|
"type": "boolean"
|
|
271
266
|
},
|
|
272
267
|
"save-unminified": {
|
|
273
|
-
"description": "If true, the unminified files will be saved if the target supports it.
|
|
268
|
+
"description": "If true, the unminified files will be saved if the target supports it.",
|
|
274
269
|
"type": "boolean"
|
|
275
270
|
},
|
|
276
271
|
"inline-external-scripts": {
|