@qooxdoo/framework 7.8.0 → 7.9.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.
- package/Manifest.json +2 -2
- package/lib/compiler/compile-info.json +100 -98
- package/lib/compiler/index.js +2130 -1261
- package/lib/resource/qx/tool/website/build/404.html +3 -25
- package/lib/resource/qx/tool/website/build/about.html +3 -25
- package/lib/resource/qx/tool/website/build/assets/common.js +20 -0
- package/lib/resource/qx/tool/website/build/diagnostics/dependson.html +3 -25
- package/lib/resource/qx/tool/website/build/diagnostics/requiredby.html +3 -22
- package/lib/resource/qx/tool/website/build/index.html +3 -25
- package/lib/resource/qx/tool/website/partials/footer.html +3 -21
- package/lib/resource/qx/tool/website/partials/head.html +0 -1
- package/package.json +1 -1
- package/source/class/qx/Bootstrap.js +6 -3
- package/source/class/qx/Promise.js +93 -6964
- package/source/class/qx/core/Environment.js +1 -0
- package/source/class/qx/data/marshal/Json.js +64 -11
- package/source/class/qx/lang/Type.js +36 -3
- package/source/class/qx/promise/BluebirdImpl.js +6918 -0
- package/source/class/qx/promise/NativeWrapper.js +738 -0
- package/source/class/qx/test/Promise.js +1145 -22
- package/source/class/qx/test/data/controller/List.js +6 -0
- package/source/class/qx/test/data/marshal/Json.js +29 -0
- package/source/class/qx/test/io/request/Xhr.js +16 -0
- package/source/class/qx/test/lang/Type.js +151 -0
- package/source/class/qx/theme/indigo/ColorDark.js +1 -1
- package/source/class/qx/ui/core/MPlacement.js +18 -7
- package/source/class/qx/ui/table/pane/Scroller.js +1 -1
- package/source/class/qx/util/ConcurrencyLimiter.js +78 -0
- package/source/resource/qx/tool/website/build/404.html +3 -25
- package/source/resource/qx/tool/website/build/about.html +3 -25
- package/source/resource/qx/tool/website/build/assets/common.js +20 -0
- package/source/resource/qx/tool/website/build/diagnostics/dependson.html +3 -25
- package/source/resource/qx/tool/website/build/diagnostics/requiredby.html +3 -22
- package/source/resource/qx/tool/website/build/index.html +3 -25
- package/source/resource/qx/tool/website/partials/footer.html +3 -21
- package/source/resource/qx/tool/website/partials/head.html +0 -1
- package/lib/resource/qx/tool/website/build/assets/bluebird.min.js +0 -4615
- package/lib/resource/qx/tool/website/src/assets/bluebird.min.js +0 -4615
- package/source/resource/qx/tool/website/build/assets/bluebird.min.js +0 -4615
- package/source/resource/qx/tool/website/src/assets/bluebird.min.js +0 -4615
|
@@ -25,7 +25,13 @@ qx.Class.define("qx.test.data.controller.List", {
|
|
|
25
25
|
include: qx.dev.unit.MMock,
|
|
26
26
|
|
|
27
27
|
members: {
|
|
28
|
+
/**
|
|
29
|
+
* @type {qx.ui.form.List}
|
|
30
|
+
*/
|
|
28
31
|
__list: null,
|
|
32
|
+
/**
|
|
33
|
+
* @type {qx.data.controller.List}
|
|
34
|
+
*/
|
|
29
35
|
__controller: null,
|
|
30
36
|
__data: null,
|
|
31
37
|
__model: null,
|
|
@@ -1498,6 +1498,35 @@ qx.Class.define("qx.test.data.marshal.Json", {
|
|
|
1498
1498
|
|
|
1499
1499
|
model.dispose();
|
|
1500
1500
|
qx.Class.undefine("qx.test.Array");
|
|
1501
|
+
},
|
|
1502
|
+
|
|
1503
|
+
testNonPojoObjects() {
|
|
1504
|
+
function NativeClass() {
|
|
1505
|
+
this.foo = "bar";
|
|
1506
|
+
}
|
|
1507
|
+
|
|
1508
|
+
NativeClass.prototype.myMethod = function () {
|
|
1509
|
+
return "method";
|
|
1510
|
+
};
|
|
1511
|
+
|
|
1512
|
+
let data = {
|
|
1513
|
+
name: "Michael",
|
|
1514
|
+
nonPojo: new NativeClass()
|
|
1515
|
+
};
|
|
1516
|
+
|
|
1517
|
+
this.__marshaler.dispose();
|
|
1518
|
+
this.__marshaler = new qx.data.marshal.Json();
|
|
1519
|
+
this.__marshaler.toClass(data);
|
|
1520
|
+
var model = this.__marshaler.toModel(data);
|
|
1521
|
+
|
|
1522
|
+
this.assertEquals("Michael", model.getName());
|
|
1523
|
+
|
|
1524
|
+
if (qx.core.Environment.get("qx.data.marshal.Json.breakOnNonPojos")) {
|
|
1525
|
+
this.assertEquals("method", model.getNonPojo().myMethod());
|
|
1526
|
+
this.assertEquals("bar", model.getNonPojo().foo);
|
|
1527
|
+
} else {
|
|
1528
|
+
this.assertEquals("bar", model.getNonPojo().getFoo());
|
|
1529
|
+
}
|
|
1501
1530
|
}
|
|
1502
1531
|
}
|
|
1503
1532
|
});
|
|
@@ -760,6 +760,12 @@ qx.Class.define("qx.test.io.request.Xhr", {
|
|
|
760
760
|
this.skip("Skipping because qx.promise==false");
|
|
761
761
|
}
|
|
762
762
|
|
|
763
|
+
if (qx.core.Environment.get("qx.Promise.useNativePromise")) {
|
|
764
|
+
this.skip(
|
|
765
|
+
"Skipping because qx.Promise.useNativePromise===true, meaning we can't cancel promises."
|
|
766
|
+
);
|
|
767
|
+
}
|
|
768
|
+
|
|
763
769
|
this.setUpFakeTransport();
|
|
764
770
|
var req = this.req;
|
|
765
771
|
|
|
@@ -818,6 +824,11 @@ qx.Class.define("qx.test.io.request.Xhr", {
|
|
|
818
824
|
if (!qx.core.Environment.get("qx.promise")) {
|
|
819
825
|
this.skip("Skipping because qx.promise==false");
|
|
820
826
|
}
|
|
827
|
+
if (qx.core.Environment.get("qx.Promise.useNativePromise")) {
|
|
828
|
+
this.skip(
|
|
829
|
+
"Skipping because qx.Promise.useNativePromise===true, meaning we can't cancel promises."
|
|
830
|
+
);
|
|
831
|
+
}
|
|
821
832
|
|
|
822
833
|
this.setUpFakeTransport();
|
|
823
834
|
var req = this.req;
|
|
@@ -863,6 +874,11 @@ qx.Class.define("qx.test.io.request.Xhr", {
|
|
|
863
874
|
if (!qx.core.Environment.get("qx.promise")) {
|
|
864
875
|
this.skip("Skipping because qx.promise==false");
|
|
865
876
|
}
|
|
877
|
+
if (qx.core.Environment.get("qx.Promise.useNativePromise")) {
|
|
878
|
+
this.skip(
|
|
879
|
+
"Skipping because qx.Promise.useNativePromise===true, meaning we can't cancel promises."
|
|
880
|
+
);
|
|
881
|
+
}
|
|
866
882
|
|
|
867
883
|
this.setUpFakeTransport();
|
|
868
884
|
var req = this.req;
|
|
@@ -42,6 +42,156 @@ qx.Class.define("qx.test.lang.Type", {
|
|
|
42
42
|
this.assertFalse(Type.isString(document.getElementById("ReturenedNull")));
|
|
43
43
|
},
|
|
44
44
|
|
|
45
|
+
testIsPojo() {
|
|
46
|
+
var isPojo = qx.lang.Type.isPojo;
|
|
47
|
+
|
|
48
|
+
//Class Person extends Object
|
|
49
|
+
function Person() {
|
|
50
|
+
this.name = "Mary";
|
|
51
|
+
this.surname = "Berry";
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
Person.prototype.getFullName = function () {
|
|
55
|
+
return this.name + " " + this.surname;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
Person.prototype.properties = function () {
|
|
59
|
+
return "Properties";
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
//Class Child extends Person
|
|
63
|
+
function Child() {
|
|
64
|
+
Person.call(this);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
Child.prototype = Object.create(Person.prototype);
|
|
68
|
+
Child.prototype.constructor = Child;
|
|
69
|
+
|
|
70
|
+
Child.prototype.childMethod = function () {
|
|
71
|
+
return "Child method";
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Simple POJO, should return true
|
|
75
|
+
this.assertTrue(isPojo({ foo: 1 }));
|
|
76
|
+
|
|
77
|
+
//Arrays, strings, numbers, and booleans are not POJOs
|
|
78
|
+
this.assertFalse(isPojo([]));
|
|
79
|
+
this.assertFalse(isPojo(null));
|
|
80
|
+
this.assertFalse(isPojo(new qx.data.Array()));
|
|
81
|
+
this.assertFalse(isPojo("hello"));
|
|
82
|
+
this.assertFalse(isPojo(12));
|
|
83
|
+
this.assertFalse(isPojo(true));
|
|
84
|
+
|
|
85
|
+
//Class instance which does not inherit
|
|
86
|
+
var nonInheritance = new Person();
|
|
87
|
+
this.assertFalse(isPojo(nonInheritance));
|
|
88
|
+
|
|
89
|
+
//Class instance with class that inherits
|
|
90
|
+
var withInheritance = new Child();
|
|
91
|
+
this.assertFalse(isPojo(withInheritance));
|
|
92
|
+
|
|
93
|
+
//POJO with class prototype
|
|
94
|
+
var pojoWithClassPrototype = { age: 22 };
|
|
95
|
+
Object.setPrototypeOf(pojoWithClassPrototype, Person.prototype);
|
|
96
|
+
this.assertFalse(isPojo(pojoWithClassPrototype));
|
|
97
|
+
|
|
98
|
+
//POJO with an object prototype
|
|
99
|
+
//Should return true
|
|
100
|
+
var pojoWithObjectPrototype = { extraproperty: "Nuts" };
|
|
101
|
+
var proto = {
|
|
102
|
+
protoMethod() {
|
|
103
|
+
return "protomethod";
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
Object.setPrototypeOf(pojoWithObjectPrototype, proto);
|
|
107
|
+
this.assertTrue(isPojo(pojoWithObjectPrototype));
|
|
108
|
+
|
|
109
|
+
//Object which has a POJO prototype, which in turn has a class prototype
|
|
110
|
+
//Should return false
|
|
111
|
+
var prototypeIsObjectThenConstructor = { extraproperty: "Nuts" };
|
|
112
|
+
var proto = {
|
|
113
|
+
protoMethod() {
|
|
114
|
+
return "protomethod";
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
Object.setPrototypeOf(prototypeIsObjectThenConstructor, proto);
|
|
119
|
+
Object.setPrototypeOf(proto, Person.prototype);
|
|
120
|
+
this.assertFalse(isPojo(prototypeIsObjectThenConstructor));
|
|
121
|
+
|
|
122
|
+
//Object which has a POJO prototype, which in turn has a POJO prototype
|
|
123
|
+
//Should return true
|
|
124
|
+
var obj = {
|
|
125
|
+
nuts: 345
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
var proto1 = {
|
|
129
|
+
myMethod() {
|
|
130
|
+
return "proto1.myMethod";
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
Object.setPrototypeOf(obj, proto1);
|
|
135
|
+
var proto2 = {
|
|
136
|
+
myMethod() {
|
|
137
|
+
return "proto2.myMethod";
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
method2() {
|
|
141
|
+
return "proto2.method2";
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
Object.setPrototypeOf(proto1, proto2);
|
|
146
|
+
|
|
147
|
+
this.assertEquals("proto1.myMethod", obj.myMethod());
|
|
148
|
+
this.assertEquals("proto2.method2", obj.method2());
|
|
149
|
+
this.assertTrue(isPojo(obj));
|
|
150
|
+
|
|
151
|
+
//Object which is instance of a class, where the class has a prototype which is not Object.prototype
|
|
152
|
+
//Must return false
|
|
153
|
+
function NonObjectPrototype() {
|
|
154
|
+
this.foo = "foo";
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
var proto = {
|
|
158
|
+
myMethod() {
|
|
159
|
+
return "proto.myMethod";
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
NonObjectPrototype.prototype = proto;
|
|
164
|
+
NonObjectPrototype.prototype.constructor = NonObjectPrototype;
|
|
165
|
+
NonObjectPrototype.prototype.extraMethod = function () {
|
|
166
|
+
return "extraMethod";
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
var obj = new NonObjectPrototype();
|
|
170
|
+
|
|
171
|
+
this.assertEquals("proto.myMethod", obj.myMethod());
|
|
172
|
+
this.assertEquals("extraMethod", obj.extraMethod());
|
|
173
|
+
this.assertEquals("foo", obj.foo);
|
|
174
|
+
this.assertFalse(isPojo(obj));
|
|
175
|
+
|
|
176
|
+
//Qooxdoo objects must not be POJOs
|
|
177
|
+
var obj = new qx.core.Object();
|
|
178
|
+
this.assertFalse(isPojo(obj));
|
|
179
|
+
|
|
180
|
+
//ES6 class must not be a POJO
|
|
181
|
+
class ES6Class {
|
|
182
|
+
constructor() {
|
|
183
|
+
this.foo = "bar";
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
method() {
|
|
187
|
+
return "method: " + this.foo;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
var obj = new ES6Class();
|
|
192
|
+
this.assertFalse(isPojo(obj));
|
|
193
|
+
},
|
|
194
|
+
|
|
45
195
|
testIsArray() {
|
|
46
196
|
var Type = qx.lang.Type;
|
|
47
197
|
|
|
@@ -64,6 +214,7 @@ qx.Class.define("qx.test.lang.Type", {
|
|
|
64
214
|
},
|
|
65
215
|
|
|
66
216
|
testIsObject() {
|
|
217
|
+
//note: old testIsObject
|
|
67
218
|
var Type = qx.lang.Type;
|
|
68
219
|
|
|
69
220
|
this.assertTrue(Type.isObject({}));
|
|
@@ -95,7 +95,7 @@ qx.Theme.define("qx.theme.indigo.ColorDark", {
|
|
|
95
95
|
// used in table code
|
|
96
96
|
"table-header-cell": "#ebeadb",
|
|
97
97
|
"table-row-background-focused-selected": "#666666",
|
|
98
|
-
"table-row-background-focused": "#
|
|
98
|
+
"table-row-background-focused": "#444444",
|
|
99
99
|
"table-row-background-selected": "#666666",
|
|
100
100
|
"table-row-background-even": "#333333",
|
|
101
101
|
"table-row-background-odd": "#333333",
|
|
@@ -205,6 +205,7 @@ qx.Mixin.define("qx.ui.core.MPlacement", {
|
|
|
205
205
|
__ptwLiveUpdateDisappearListener: null,
|
|
206
206
|
/**@type {Record<"top" | "right" | "bottom" | "left", number> | null}*/
|
|
207
207
|
__lastKnownCoords: null,
|
|
208
|
+
__lastKnownSize: null,
|
|
208
209
|
|
|
209
210
|
/**
|
|
210
211
|
* Returns the location data like {qx.bom.element.Location#get} does,
|
|
@@ -378,17 +379,23 @@ qx.Mixin.define("qx.ui.core.MPlacement", {
|
|
|
378
379
|
|
|
379
380
|
var coords =
|
|
380
381
|
target.getContentLocation() || this.getLayoutLocation(target);
|
|
382
|
+
var size = this.__getPlacementSize();
|
|
381
383
|
|
|
382
384
|
if (coords != null) {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
385
|
+
|
|
386
|
+
const boundsAreEqual = (bound1, bound2) => bound1 && bound2 &&
|
|
387
|
+
bound1.top === bound2.top &&
|
|
388
|
+
bound1.right === bound2.right &&
|
|
389
|
+
bound1.bottom === bound2.bottom &&
|
|
390
|
+
bound1.left === bound2.left;
|
|
391
|
+
|
|
392
|
+
if (boundsAreEqual(coords, this.__lastKnownCoords) &&
|
|
393
|
+
boundsAreEqual(size, this.__lastKnownSize)) {
|
|
389
394
|
return true;
|
|
390
395
|
}
|
|
396
|
+
|
|
391
397
|
this.__lastKnownCoords = coords;
|
|
398
|
+
this.__lastKnownSize = size;
|
|
392
399
|
this._place(coords);
|
|
393
400
|
return true;
|
|
394
401
|
} else {
|
|
@@ -527,7 +534,7 @@ qx.Mixin.define("qx.ui.core.MPlacement", {
|
|
|
527
534
|
* <code>_computePlacementSize</code>, which returns the size.
|
|
528
535
|
*
|
|
529
536
|
* @param callback {Function} This function will be called with the size as
|
|
530
|
-
* first argument
|
|
537
|
+
* first argument. If it is null, the size is returned directly.
|
|
531
538
|
*/
|
|
532
539
|
__getPlacementSize(callback) {
|
|
533
540
|
var size = null;
|
|
@@ -538,6 +545,10 @@ qx.Mixin.define("qx.ui.core.MPlacement", {
|
|
|
538
545
|
var size = this.getBounds();
|
|
539
546
|
}
|
|
540
547
|
|
|
548
|
+
if (!callback) {
|
|
549
|
+
return {...size};
|
|
550
|
+
}
|
|
551
|
+
|
|
541
552
|
if (size == null) {
|
|
542
553
|
this.addListenerOnce("appear", () => {
|
|
543
554
|
this.__getPlacementSize(callback);
|
|
@@ -1975,7 +1975,7 @@ qx.Class.define("qx.ui.table.pane.Scroller", {
|
|
|
1975
1975
|
qx.event.Timer.once(function() {
|
|
1976
1976
|
this._cellEditor.addListenerOnce('blur', this._onBlurCellEditorStopEditing, this);
|
|
1977
1977
|
this.debug('added BLUR listener to hash: ' + this._cellEditor.$$hash);
|
|
1978
|
-
}, this,
|
|
1978
|
+
}, this, 1);
|
|
1979
1979
|
},
|
|
1980
1980
|
|
|
1981
1981
|
/**
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class to limit the number of concurrent executions of async functions.
|
|
3
|
+
*
|
|
4
|
+
* @typedef {Object} TaskEntry
|
|
5
|
+
* @template T
|
|
6
|
+
* @property {() => Promise<T>} task The function to execute.
|
|
7
|
+
* @property {(value: T) => void} resolve The function to call when the task resolves.
|
|
8
|
+
* @property {(reason: any) => void} reject The function to call when the task rejects.
|
|
9
|
+
*/
|
|
10
|
+
qx.Class.define("qx.util.ConcurrencyLimiter", {
|
|
11
|
+
extend: qx.core.Object,
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param {Number?Infinity} limit The maximum number of concurrent executions. If Infinity, no limit is applied.
|
|
15
|
+
*/
|
|
16
|
+
construct(limit = Infinity) {
|
|
17
|
+
super();
|
|
18
|
+
this.__limit = limit;
|
|
19
|
+
|
|
20
|
+
this.__queue = [];
|
|
21
|
+
this.__running = 0;
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
members: {
|
|
25
|
+
/**
|
|
26
|
+
* @type {TaskEntry<*>[]}
|
|
27
|
+
* The tasks that are waiting to be executed
|
|
28
|
+
*/
|
|
29
|
+
__queue: null,
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Number of currently running tasks.
|
|
33
|
+
*/
|
|
34
|
+
__running: null,
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Queues a function to be executed.
|
|
38
|
+
* If the limit is reached, the function will be put on hold until a slot is available.
|
|
39
|
+
*
|
|
40
|
+
* @template T
|
|
41
|
+
* @param {() => Promise<T>} task The function to execute.
|
|
42
|
+
* @returns {Promise<T>} The promise that will be resolved when the function is executed.
|
|
43
|
+
* If the function rejects, the promise will also reject.
|
|
44
|
+
*/
|
|
45
|
+
add(task) {
|
|
46
|
+
return new Promise((resolve, reject) => {
|
|
47
|
+
this.__queue.push({ task, resolve, reject });
|
|
48
|
+
this.__checkQueue();
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Checks the queue to see if anything can be executed,
|
|
54
|
+
* and executes the next item in the queue if the limit is not reached.
|
|
55
|
+
* Once the item has finished executing, it will check the queue again.
|
|
56
|
+
*/
|
|
57
|
+
__checkQueue() {
|
|
58
|
+
if (this.__running == this.__limit) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
let next = this.__queue.shift();
|
|
63
|
+
if (!next) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let { task, resolve, reject } = next;
|
|
68
|
+
|
|
69
|
+
this.__running++;
|
|
70
|
+
task()
|
|
71
|
+
.then(resolve, reject)
|
|
72
|
+
.finally(() => {
|
|
73
|
+
this.__running--;
|
|
74
|
+
this.__checkQueue();
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
<title>Qooxdoo Application Server</title>
|
|
19
19
|
<meta name="description" content="">
|
|
20
20
|
<link rel="stylesheet" type="text/css" href="/qooxdoo.css">
|
|
21
|
-
<script type="text/javascript" src="/assets/bluebird.min.js"></script>
|
|
22
21
|
<script type="text/javascript" src="/assets/jquery.js"></script>
|
|
23
22
|
<script type="text/javascript" src="/scripts/serve.js"></script>
|
|
24
23
|
</head>
|
|
@@ -201,11 +200,11 @@
|
|
|
201
200
|
</div>
|
|
202
201
|
<div class="container text-center d-none d-sm-block p-4">
|
|
203
202
|
<img class="img p-4" src="/assets/qx-white.svg">
|
|
204
|
-
<span class="text-light">© 2005-
|
|
203
|
+
<span class="text-light">© 2005-<span class="current-year"></span> Qooxdoo Contributors</span>
|
|
205
204
|
</div>
|
|
206
205
|
<div class="container text-center d-block d-sm-none p-4">
|
|
207
206
|
<img class="img-fluid p-4" src="/assets/qx-white.svg">
|
|
208
|
-
<p>© 2005-
|
|
207
|
+
<p>© 2005-<span class="current-year"></span> Qooxdoo Contributors</p>
|
|
209
208
|
</div>
|
|
210
209
|
</div>
|
|
211
210
|
|
|
@@ -213,28 +212,7 @@
|
|
|
213
212
|
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
|
214
213
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
|
|
215
214
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
|
|
216
|
-
<script type="text/javascript">
|
|
217
|
-
$(function () {
|
|
218
|
-
$('[data-toggle="tooltip"]').tooltip()
|
|
219
|
-
})
|
|
220
|
-
var scroll = (function (event) {
|
|
221
|
-
var scroll = $(window).scrollTop();
|
|
222
|
-
if (scroll < 250) {
|
|
223
|
-
$(navigatopnBar).css('background-color', 'transparent');
|
|
224
|
-
$(navigationLogo).css('width', '0');
|
|
225
|
-
$(navigationLogo).addClass('invisible');
|
|
226
|
-
} else {
|
|
227
|
-
$(navigatopnBar).css('background-color', 'rgba(0, 40, 56, 0.9)');
|
|
228
|
-
$(navigationLogo).css('width', '');
|
|
229
|
-
$(navigationLogo).removeClass('invisible');
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
$(window).scroll(scroll);
|
|
233
|
-
scroll();
|
|
234
|
-
</script>
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
215
|
+
<script src="/assets/common.js" type="text/javascript"></script>
|
|
238
216
|
</body>
|
|
239
217
|
|
|
240
218
|
</html>
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
<title>About</title>
|
|
19
19
|
<meta name="description" content="">
|
|
20
20
|
<link rel="stylesheet" type="text/css" href="/qooxdoo.css">
|
|
21
|
-
<script type="text/javascript" src="/assets/bluebird.min.js"></script>
|
|
22
21
|
<script type="text/javascript" src="/assets/jquery.js"></script>
|
|
23
22
|
<script type="text/javascript" src="/scripts/serve.js"></script>
|
|
24
23
|
</head>
|
|
@@ -184,11 +183,11 @@
|
|
|
184
183
|
</div>
|
|
185
184
|
<div class="container text-center d-none d-sm-block p-4">
|
|
186
185
|
<img class="img p-4" src="/assets/qx-white.svg">
|
|
187
|
-
<span class="text-light">© 2005-
|
|
186
|
+
<span class="text-light">© 2005-<span class="current-year"></span> Qooxdoo Contributors</span>
|
|
188
187
|
</div>
|
|
189
188
|
<div class="container text-center d-block d-sm-none p-4">
|
|
190
189
|
<img class="img-fluid p-4" src="/assets/qx-white.svg">
|
|
191
|
-
<p>© 2005-
|
|
190
|
+
<p>© 2005-<span class="current-year"></span> Qooxdoo Contributors</p>
|
|
192
191
|
</div>
|
|
193
192
|
</div>
|
|
194
193
|
|
|
@@ -196,28 +195,7 @@
|
|
|
196
195
|
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
|
197
196
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
|
|
198
197
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
|
|
199
|
-
<script type="text/javascript">
|
|
200
|
-
$(function () {
|
|
201
|
-
$('[data-toggle="tooltip"]').tooltip()
|
|
202
|
-
})
|
|
203
|
-
var scroll = (function (event) {
|
|
204
|
-
var scroll = $(window).scrollTop();
|
|
205
|
-
if (scroll < 250) {
|
|
206
|
-
$(navigatopnBar).css('background-color', 'transparent');
|
|
207
|
-
$(navigationLogo).css('width', '0');
|
|
208
|
-
$(navigationLogo).addClass('invisible');
|
|
209
|
-
} else {
|
|
210
|
-
$(navigatopnBar).css('background-color', 'rgba(0, 40, 56, 0.9)');
|
|
211
|
-
$(navigationLogo).css('width', '');
|
|
212
|
-
$(navigationLogo).removeClass('invisible');
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
$(window).scroll(scroll);
|
|
216
|
-
scroll();
|
|
217
|
-
</script>
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
198
|
+
<script src="/assets/common.js" type="text/javascript"></script>
|
|
221
199
|
</body>
|
|
222
200
|
|
|
223
201
|
</html>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var currentYear = new Date().getFullYear();
|
|
2
|
+
$(".current-year").text(currentYear);
|
|
3
|
+
|
|
4
|
+
$(function () {
|
|
5
|
+
$('[data-toggle="tooltip"]').tooltip();
|
|
6
|
+
})
|
|
7
|
+
var scroll = (function (event) {
|
|
8
|
+
var scroll = $(window).scrollTop();
|
|
9
|
+
if (scroll < 250) {
|
|
10
|
+
$(navigatopnBar).css('background-color', 'transparent');
|
|
11
|
+
$(navigationLogo).css('width', '0');
|
|
12
|
+
$(navigationLogo).addClass('invisible');
|
|
13
|
+
} else {
|
|
14
|
+
$(navigatopnBar).css('background-color', 'rgba(0, 40, 56, 0.9)');
|
|
15
|
+
$(navigationLogo).css('width', '');
|
|
16
|
+
$(navigationLogo).removeClass('invisible');
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
$(window).scroll(scroll);
|
|
20
|
+
scroll();
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
<title>Qooxdoo Application Server</title>
|
|
19
19
|
<meta name="description" content="">
|
|
20
20
|
<link rel="stylesheet" type="text/css" href="/qooxdoo.css">
|
|
21
|
-
<script type="text/javascript" src="/assets/bluebird.min.js"></script>
|
|
22
21
|
<script type="text/javascript" src="/assets/jquery.js"></script>
|
|
23
22
|
<script type="text/javascript" src="/scripts/serve.js"></script>
|
|
24
23
|
</head>
|
|
@@ -196,11 +195,11 @@
|
|
|
196
195
|
</div>
|
|
197
196
|
<div class="container text-center d-none d-sm-block p-4">
|
|
198
197
|
<img class="img p-4" src="/assets/qx-white.svg">
|
|
199
|
-
<span class="text-light">© 2005-
|
|
198
|
+
<span class="text-light">© 2005-<span class="current-year"></span> Qooxdoo Contributors</span>
|
|
200
199
|
</div>
|
|
201
200
|
<div class="container text-center d-block d-sm-none p-4">
|
|
202
201
|
<img class="img-fluid p-4" src="/assets/qx-white.svg">
|
|
203
|
-
<p>© 2005-
|
|
202
|
+
<p>© 2005-<span class="current-year"></span> Qooxdoo Contributors</p>
|
|
204
203
|
</div>
|
|
205
204
|
</div>
|
|
206
205
|
|
|
@@ -208,28 +207,7 @@
|
|
|
208
207
|
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
|
209
208
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
|
|
210
209
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
|
|
211
|
-
<script type="text/javascript">
|
|
212
|
-
$(function () {
|
|
213
|
-
$('[data-toggle="tooltip"]').tooltip()
|
|
214
|
-
})
|
|
215
|
-
var scroll = (function (event) {
|
|
216
|
-
var scroll = $(window).scrollTop();
|
|
217
|
-
if (scroll < 250) {
|
|
218
|
-
$(navigatopnBar).css('background-color', 'transparent');
|
|
219
|
-
$(navigationLogo).css('width', '0');
|
|
220
|
-
$(navigationLogo).addClass('invisible');
|
|
221
|
-
} else {
|
|
222
|
-
$(navigatopnBar).css('background-color', 'rgba(0, 40, 56, 0.9)');
|
|
223
|
-
$(navigationLogo).css('width', '');
|
|
224
|
-
$(navigationLogo).removeClass('invisible');
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
$(window).scroll(scroll);
|
|
228
|
-
scroll();
|
|
229
|
-
</script>
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
210
|
+
<script src="/assets/common.js" type="text/javascript"></script>
|
|
233
211
|
</body>
|
|
234
212
|
|
|
235
213
|
</html>
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
<title>Qooxdoo Application Server</title>
|
|
19
19
|
<meta name="description" content="">
|
|
20
20
|
<link rel="stylesheet" type="text/css" href="/qooxdoo.css">
|
|
21
|
-
<script type="text/javascript" src="/assets/bluebird.min.js"></script>
|
|
22
21
|
<script type="text/javascript" src="/assets/jquery.js"></script>
|
|
23
22
|
<script type="text/javascript" src="/scripts/serve.js"></script>
|
|
24
23
|
</head>
|
|
@@ -198,11 +197,11 @@
|
|
|
198
197
|
</div>
|
|
199
198
|
<div class="container text-center d-none d-sm-block p-4">
|
|
200
199
|
<img class="img p-4" src="/assets/qx-white.svg">
|
|
201
|
-
<span class="text-light">© 2005-
|
|
200
|
+
<span class="text-light">© 2005-<span class="current-year"></span> Qooxdoo Contributors</span>
|
|
202
201
|
</div>
|
|
203
202
|
<div class="container text-center d-block d-sm-none p-4">
|
|
204
203
|
<img class="img-fluid p-4" src="/assets/qx-white.svg">
|
|
205
|
-
<p>© 2005-
|
|
204
|
+
<p>© 2005-<span class="current-year"></span> Qooxdoo Contributors</p>
|
|
206
205
|
</div>
|
|
207
206
|
</div>
|
|
208
207
|
|
|
@@ -210,25 +209,7 @@
|
|
|
210
209
|
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
|
211
210
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
|
|
212
211
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/js/bootstrap.min.js" integrity="sha384-a5N7Y/aK3qNeh15eJKGWxsqtnX/wWdSZSKp+81YjTmS15nvnvxKHuzaWwXHDli+4" crossorigin="anonymous"></script>
|
|
213
|
-
<script type="text/javascript">
|
|
214
|
-
$(function () {
|
|
215
|
-
$('[data-toggle="tooltip"]').tooltip()
|
|
216
|
-
})
|
|
217
|
-
var scroll = (function (event) {
|
|
218
|
-
var scroll = $(window).scrollTop();
|
|
219
|
-
if (scroll < 250) {
|
|
220
|
-
$(navigatopnBar).css('background-color', 'transparent');
|
|
221
|
-
$(navigationLogo).css('width', '0');
|
|
222
|
-
$(navigationLogo).addClass('invisible');
|
|
223
|
-
} else {
|
|
224
|
-
$(navigatopnBar).css('background-color', 'rgba(0, 40, 56, 0.9)');
|
|
225
|
-
$(navigationLogo).css('width', '');
|
|
226
|
-
$(navigationLogo).removeClass('invisible');
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
$(window).scroll(scroll);
|
|
230
|
-
scroll();
|
|
231
|
-
</script>
|
|
212
|
+
<script src="/assets/common.js" type="text/javascript"></script>
|
|
232
213
|
|
|
233
214
|
|
|
234
215
|
|