vsn 0.1.114 → 0.1.116
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/demo/service.html +21 -0
- package/demo/vsn.js +3 -3
- package/demo/xhr-test.html +4 -2
- package/dist/AST/ArithmeticAssignmentNode.js +2 -2
- package/dist/AST/ArithmeticAssignmentNode.js.map +1 -1
- package/dist/AST/FunctionCallNode.js +0 -1
- package/dist/AST/FunctionCallNode.js.map +1 -1
- package/dist/AST/ScopeMemberNode.js +0 -2
- package/dist/AST/ScopeMemberNode.js.map +1 -1
- package/dist/AST/ScopeNodeAbstract.js +1 -0
- package/dist/AST/ScopeNodeAbstract.js.map +1 -1
- package/dist/Controller.d.ts +2 -2
- package/dist/Controller.js +2 -2
- package/dist/Controller.js.map +1 -1
- package/dist/Scope/ScopeObject.d.ts +3 -0
- package/dist/Scope/ScopeObject.js +28 -0
- package/dist/Scope/ScopeObject.js.map +1 -0
- package/dist/Scope/properties/FloatProperty.d.ts +4 -0
- package/dist/Scope/properties/FloatProperty.js +30 -0
- package/dist/Scope/properties/FloatProperty.js.map +1 -0
- package/dist/Scope/properties/IntegerProperty.d.ts +4 -0
- package/dist/Scope/properties/IntegerProperty.js +30 -0
- package/dist/Scope/properties/IntegerProperty.js.map +1 -0
- package/dist/Scope/properties/_imports.d.ts +2 -0
- package/dist/Scope/properties/_imports.js +5 -1
- package/dist/Scope/properties/_imports.js.map +1 -1
- package/dist/Service.d.ts +2 -2
- package/dist/Service.js +2 -2
- package/dist/Service.js.map +1 -1
- package/dist/attributes/ControllerAttribute.js +19 -7
- package/dist/attributes/ControllerAttribute.js.map +1 -1
- package/dist/attributes/XHRAttribute.d.ts +2 -0
- package/dist/attributes/XHRAttribute.js +46 -34
- package/dist/attributes/XHRAttribute.js.map +1 -1
- package/dist/demo/ServiceDemo.d.ts +5 -0
- package/dist/demo/ServiceDemo.js +45 -0
- package/dist/demo/ServiceDemo.js.map +1 -0
- package/dist/demo.d.ts +2 -0
- package/dist/demo.js +17 -0
- package/dist/demo.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/vsn.js +7 -0
- package/dist/vsn.js.map +1 -1
- package/package.json +2 -2
- package/src/AST/ArithmeticAssignmentNode.ts +4 -3
- package/src/AST/FunctionCallNode.ts +0 -1
- package/src/AST/ScopeMemberNode.ts +0 -2
- package/src/AST/ScopeNodeAbstract.ts +1 -0
- package/src/Controller.ts +2 -2
- package/src/Scope/ScopeObject.ts +3 -0
- package/src/Scope/properties/FloatProperty.ts +5 -0
- package/src/Scope/properties/IntegerProperty.ts +5 -0
- package/src/Scope/properties/_imports.ts +2 -0
- package/src/Service.ts +2 -2
- package/src/attributes/ControllerAttribute.ts +18 -6
- package/src/attributes/XHRAttribute.ts +26 -14
- package/src/demo/ServiceDemo.ts +11 -0
- package/src/demo.ts +2 -0
- package/src/version.ts +1 -1
- package/src/vsn.ts +5 -0
- package/test/Controller.spec.ts +5 -1
- package/test/attributes/ServiceAttribute.spec.ts +10 -3
- package/webpack.config.js +5 -2
package/dist/demo.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ServiceDemo = void 0;
|
|
14
|
+
__exportStar(require("./vsn"), exports);
|
|
15
|
+
var ServiceDemo_1 = require("./demo/ServiceDemo");
|
|
16
|
+
Object.defineProperty(exports, "ServiceDemo", { enumerable: true, get: function () { return ServiceDemo_1.ServiceDemo; } });
|
|
17
|
+
//# sourceMappingURL=demo.js.map
|
package/dist/demo.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,wCAAsB;AACtB,kDAA+C;AAAvC,0GAAA,WAAW,OAAA"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.116";
|
package/dist/version.js
CHANGED
package/dist/vsn.js
CHANGED
|
@@ -90,6 +90,13 @@ var Vision = /** @class */ (function (_super) {
|
|
|
90
90
|
_this.registry.functions.register('warn', console.warn);
|
|
91
91
|
_this.registry.functions.register('error', console.error);
|
|
92
92
|
_this.registry.functions.register('info', console.info);
|
|
93
|
+
_this.registry.functions.register('wait', function (seconds) { return __awaiter(_this, void 0, void 0, function () {
|
|
94
|
+
return __generator(this, function (_a) {
|
|
95
|
+
return [2 /*return*/, new Promise(function (resolve) {
|
|
96
|
+
setTimeout(resolve, seconds * 1000);
|
|
97
|
+
})];
|
|
98
|
+
});
|
|
99
|
+
}); });
|
|
93
100
|
_this.registry.models.register('Object', Object);
|
|
94
101
|
_this.registry.controllers.register('WrappedArray', WrappedArray_1.WrappedArray);
|
|
95
102
|
_this.registry.controllers.register('Data', DynamicScopeData_1.DynamicScopeData);
|
package/dist/vsn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsn.js","sourceRoot":"","sources":["../src/vsn.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAA0B;AAC1B,qDAAkD;AAClD,uCAAoC;AACpC,iDAA8C;AAC9C,uDAAoD;AACpD,6BAA2B;AAC3B,iCAA8B;AAC9B,qDAAkD;AAClD,6DAA0D;AAE1D,qCAAkC;AAClC,6BAA2B;AAE3B;IAA4B,0BAAe;IAMvC;QAAA,YACI,iBAAO,
|
|
1
|
+
{"version":3,"file":"vsn.js","sourceRoot":"","sources":["../src/vsn.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAA0B;AAC1B,qDAAkD;AAClD,uCAAoC;AACpC,iDAA8C;AAC9C,uDAAoD;AACpD,6BAA2B;AAC3B,iCAA8B;AAC9B,qDAAkD;AAClD,6DAA0D;AAE1D,qCAAkC;AAClC,6BAA2B;AAE3B;IAA4B,0BAAe;IAMvC;QAAA,YACI,iBAAO,SA+BV;QAnCe,cAAQ,GAAG,mBAAQ,CAAC,QAAQ,CAAC;QAC7B,YAAM,GAAkB,6BAAa,CAAC,QAAQ,CAAC;QAI3D,mBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,KAAI,CAAC,eAAe,EAAE,KAAI,CAAC,CAAC;QAClE,IAAI,2BAAY,CAAC,QAAQ,EAAE;YACvB,QAAQ,CAAC,gBAAgB,CACrB,kBAAkB,EAClB,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,CACxB,CAAC;SACL;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;SAChD;QACD,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACrD,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACzD,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,KAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAO,OAAO;;gBACnD,sBAAO,IAAI,OAAO,CAAC,UAAC,OAAO;wBACvB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;oBACxC,CAAC,CAAC,EAAC;;aACN,CAAC,CAAC;QACH,KAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,2BAAY,CAAC,CAAC;QACjE,KAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,mCAAgB,CAAC,CAAC;QAE7D,IAAI,2BAAY,CAAC,MAAM,EAAE;YACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC1B,MAAM,CAAC,UAAU,CAAC,GAAG,mBAAQ,CAAC;YAC9B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAI,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,GAAG,UAAI,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,GAAG,aAAK,CAAC;YACpB,2BAAY,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;SACvD;;IACL,CAAC;IAES,gCAAe,GAAzB,UAA0B,IAAI,EAAE,GAAG;QAC/B,IAAI,SAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;YACpB,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACpC;aAAM;YACH,SAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED,sBAAW,uBAAG;aAAd;YACI,OAAO,IAAI,CAAC,IAAI,CAAC;QACrB,CAAC;;;OAAA;IAEY,qBAAI,GAAjB,UAAkB,IAAY;;;;4BACnB,qBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;4BAAjC,sBAAO,SAA0B,EAAC;;;;KACrC;IAEY,sBAAK,GAAlB;;;;;;wBACU,IAAI,GAAgB,QAAQ,CAAC,IAAI,CAAC;wBACxC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;wBAClC,IAAI,CAAC,IAAI,GAAG,SAAG,CAAC,QAAQ,CAAC;wBACnB,SAAS,GAAW,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;wBAC/C,qBAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAA;;wBAAzC,SAAyC,CAAC;wBACpC,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;wBAC7B,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;wBAClC,OAAO,CAAC,IAAI,CAAC,UAAQ,SAAS,oDAAiD,EAAE,MAAI,iBAAS,CAAC,CAAC;;;;;KACnG;IAED,sBAAkB,kBAAQ;aAA1B;YACI,IAAI,CAAC,MAAM,CAAC,SAAS;gBACjB,MAAM,CAAC,SAAS,GAAG,IAAI,MAAM,EAAE,CAAC;YAEpC,OAAO,MAAM,CAAC,SAAS,CAAC;QAC5B,CAAC;;;OAAA;IACL,aAAC;AAAD,CAAC,AA3ED,CAA4B,iCAAe,GA2E1C;AA3EY,wBAAM;AA6EnB,6CAA2B;AAC3B,wDAAsC;AACtC,8DAA4C;AAC5C,8CAA4B;AAC5B,wCAAsB;AACtB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AACf,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,6BAA0B;AAAlB,0FAAA,GAAG,OAAA;AACX,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,yDAAsD;AAA9C,gHAAA,cAAc,OAAA;AACtB,qDAAkD;AAA1C,4GAAA,YAAY,OAAA;AACpB,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AACf,qDAAkD;AAA1C,kHAAA,eAAe,OAAA;AACvB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AACnB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,6BAA0B;AAAlB,0FAAA,GAAG,OAAA;AACE,QAAA,MAAM,GAAW,MAAM,CAAC,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vsn",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.116",
|
|
4
4
|
"description": "SEO Friendly Javascript/Typescript Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"build": "rm -rf ./dist/ && npm run-script version && tsc",
|
|
22
22
|
"version": "echo \"export const VERSION = '${npm_package_version}';\n\" > src/version.ts",
|
|
23
23
|
"build_dev": "rm -rf ./dist/ && webpack --env BUILD=development BENCHMARK=1",
|
|
24
|
-
"demo": "webpack --env BUILD=production BENCHMARK=1 && cp ./dist/
|
|
24
|
+
"demo": "webpack --env BUILD=production BENCHMARK=1 && cp ./dist/demo.min.js ./demo/vsn.js",
|
|
25
25
|
"test": "karma start --single-run",
|
|
26
26
|
"posttest": "codecov",
|
|
27
27
|
"clean": "rm -rf ./dist/"
|
|
@@ -10,7 +10,7 @@ import {ElementQueryNode} from "./ElementQueryNode";
|
|
|
10
10
|
import {ElementAttributeNode} from "./ElementAttributeNode";
|
|
11
11
|
import {ElementStyleNode} from "./ElementStyleNode";
|
|
12
12
|
import {UnitLiteral} from "./UnitLiteralNode";
|
|
13
|
-
import {
|
|
13
|
+
import {ScopeObject} from "../Scope/ScopeObject";
|
|
14
14
|
|
|
15
15
|
export class ArithmeticAssignmentNode extends Node implements TreeNode {
|
|
16
16
|
constructor(
|
|
@@ -41,7 +41,7 @@ export class ArithmeticAssignmentNode extends Node implements TreeNode {
|
|
|
41
41
|
}
|
|
42
42
|
} else if (inner instanceof Scope) {
|
|
43
43
|
scopes.push(inner);
|
|
44
|
-
} else if (inner instanceof
|
|
44
|
+
} else if (inner instanceof ScopeObject) {
|
|
45
45
|
scopes.push(inner.scope);
|
|
46
46
|
} else {
|
|
47
47
|
scopes.push(scope)
|
|
@@ -53,8 +53,9 @@ export class ArithmeticAssignmentNode extends Node implements TreeNode {
|
|
|
53
53
|
} else {
|
|
54
54
|
scopes = elements;
|
|
55
55
|
}
|
|
56
|
-
} else
|
|
56
|
+
} else {
|
|
57
57
|
scopes.push(scope);
|
|
58
|
+
}
|
|
58
59
|
|
|
59
60
|
const values = [];
|
|
60
61
|
for (let localScope of scopes) {
|
|
@@ -51,7 +51,6 @@ export class FunctionCallNode<T = any> extends Node implements TreeNode {
|
|
|
51
51
|
|
|
52
52
|
const values = await this.args.evaluate(scope, dom, tag);
|
|
53
53
|
let func = await this.fnc.evaluate(scope, dom, tag);
|
|
54
|
-
console.log(tag?.element, functionName, func, scope.keys, functionScope?.keys, instanceOfScopeMemberNode);
|
|
55
54
|
if (!func || func instanceof Array) {
|
|
56
55
|
const functionName = await (this.fnc as any).name.evaluate(scope, dom, tag);
|
|
57
56
|
const returnValues = [];
|
|
@@ -51,8 +51,6 @@ export class ScopeMemberNode extends ScopeNodeAbstract implements TreeNode {
|
|
|
51
51
|
}
|
|
52
52
|
const name = await this.name.evaluate(scope, dom, tag);
|
|
53
53
|
await this.applyModifiers(name, parent, dom, tag);
|
|
54
|
-
if (!parent.get)
|
|
55
|
-
console.log('nani?', parent);
|
|
56
54
|
const value: any = parent.get(name, false);
|
|
57
55
|
values.push(value instanceof Scope && value.wrapped || value);
|
|
58
56
|
}
|
|
@@ -9,6 +9,7 @@ export abstract class ScopeNodeAbstract extends Node implements TreeNode {
|
|
|
9
9
|
async applyModifiers(name: string, scope: Scope, dom: DOM, tag: Tag) {
|
|
10
10
|
let type: string;
|
|
11
11
|
for (const modifier of this.modifiers) {
|
|
12
|
+
// Check for type cast modifier
|
|
12
13
|
if (Registry.instance.types.has(modifier)) {
|
|
13
14
|
type = modifier;
|
|
14
15
|
break;
|
package/src/Controller.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {Scope} from "./Scope";
|
|
2
2
|
import {Tag} from "./Tag";
|
|
3
|
-
import {
|
|
3
|
+
import {ScopeObject} from "./Scope/ScopeObject";
|
|
4
4
|
|
|
5
|
-
export abstract class Controller extends
|
|
5
|
+
export abstract class Controller extends ScopeObject {
|
|
6
6
|
protected _scope: Scope;
|
|
7
7
|
protected _tag: Tag;
|
|
8
8
|
protected _element: HTMLElement;
|
package/src/Service.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {ScopeData} from "./Scope/ScopeData";
|
|
2
1
|
import {Scope} from "./Scope";
|
|
2
|
+
import {ScopeObject} from "./Scope/ScopeObject";
|
|
3
3
|
|
|
4
|
-
export class Service extends
|
|
4
|
+
export class Service extends ScopeObject {
|
|
5
5
|
protected static _instance: Service;
|
|
6
6
|
protected _scope: Scope;
|
|
7
7
|
|
|
@@ -2,6 +2,7 @@ import {Scope} from "../Scope";
|
|
|
2
2
|
import {Attribute} from "../Attribute";
|
|
3
3
|
import {Registry} from "../Registry";
|
|
4
4
|
import {Controller} from "../Controller";
|
|
5
|
+
import {Service} from "../Service";
|
|
5
6
|
|
|
6
7
|
@Registry.attribute('vsn-controller')
|
|
7
8
|
export class ControllerAttribute extends Attribute {
|
|
@@ -18,13 +19,24 @@ export class ControllerAttribute extends Attribute {
|
|
|
18
19
|
const cls = await Registry.instance[this.registryName].get(this.className);
|
|
19
20
|
|
|
20
21
|
if (this.attributeKey) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
|
|
22
|
+
let clsScope: Scope;
|
|
23
|
+
// Singleton?
|
|
24
|
+
if (cls['instance'] instanceof cls) {
|
|
25
|
+
clsScope = cls['instance'].scope;
|
|
26
|
+
if (cls['instance'] instanceof Service) {
|
|
27
|
+
this.tag.dom.root.scope.addChild(clsScope);
|
|
28
|
+
this.tag.dom.root.scope.set(this.attributeKey, clsScope);
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
clsScope = new Scope(this.tag.scope);
|
|
32
|
+
const obj = new cls();
|
|
33
|
+
if (obj instanceof Controller) {
|
|
34
|
+
obj.init(this.tag.scope, this.tag, this.tag.element);
|
|
35
|
+
}
|
|
36
|
+
clsScope.wrap(obj);
|
|
25
37
|
}
|
|
26
|
-
|
|
27
|
-
this.tag.scope.set(this.attributeKey,
|
|
38
|
+
|
|
39
|
+
this.tag.scope.set(this.attributeKey, clsScope);
|
|
28
40
|
} else {
|
|
29
41
|
this.instantiateClass(cls);
|
|
30
42
|
}
|
|
@@ -6,6 +6,7 @@ import {Tree} from "../AST";
|
|
|
6
6
|
export class XHRAttribute extends Attribute {
|
|
7
7
|
public static readonly canDefer: boolean = false;
|
|
8
8
|
protected tree: Tree;
|
|
9
|
+
protected request: XMLHttpRequest;
|
|
9
10
|
|
|
10
11
|
public get code() {
|
|
11
12
|
return this.getAttributeValue();
|
|
@@ -36,7 +37,9 @@ export class XHRAttribute extends Attribute {
|
|
|
36
37
|
|
|
37
38
|
public async handleEvent(e) {
|
|
38
39
|
e.preventDefault();
|
|
39
|
-
|
|
40
|
+
if (this.request) return;
|
|
41
|
+
|
|
42
|
+
this.request = new XMLHttpRequest();
|
|
40
43
|
let method;
|
|
41
44
|
let url;
|
|
42
45
|
let data;
|
|
@@ -49,19 +52,28 @@ export class XHRAttribute extends Attribute {
|
|
|
49
52
|
method = this.getAttributeBinding('GET');
|
|
50
53
|
}
|
|
51
54
|
|
|
52
|
-
request.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
console.error(request.statusText);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
request.open(method, url);
|
|
62
|
-
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
|
63
|
-
request.send(data);
|
|
55
|
+
this.request.addEventListener('loadend', this.handleXHREvent.bind(this));
|
|
56
|
+
this.request.addEventListener('error', this.handleXHREvent.bind(this));
|
|
57
|
+
this.request.open(method, url);
|
|
58
|
+
this.request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
|
59
|
+
this.request.send(data);
|
|
60
|
+
}
|
|
64
61
|
|
|
65
|
-
|
|
62
|
+
public async handleXHREvent(e) {
|
|
63
|
+
this.tag.scope.set('status', this.request.status);
|
|
64
|
+
this.tag.scope.set('response', this.request.response);
|
|
65
|
+
if (this.request.status >= 200 && this.request.status < 300) {
|
|
66
|
+
await this.tree.evaluate(this.tag.scope, this.tag.dom, this.tag);
|
|
67
|
+
this.tag.element.dispatchEvent(new Event('xhr-success'));
|
|
68
|
+
} else if (this.request.status >= 300 && this.request.status < 400) {
|
|
69
|
+
this.tag.element.dispatchEvent(new Event('xhr-redirect'));
|
|
70
|
+
} else if (this.request.status >= 400 && this.request.status < 500) {
|
|
71
|
+
this.tag.element.dispatchEvent(new Event('xhr-client-error'));
|
|
72
|
+
this.tag.element.dispatchEvent(new Event('xhr-error'));
|
|
73
|
+
} else {
|
|
74
|
+
this.tag.element.dispatchEvent(new Event('xhr-server-error'));
|
|
75
|
+
this.tag.element.dispatchEvent(new Event('xhr-error'));
|
|
76
|
+
}
|
|
77
|
+
this.request = null;
|
|
66
78
|
}
|
|
67
79
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {IntegerProperty, property, Registry, Service} from "../vsn";
|
|
2
|
+
|
|
3
|
+
@Registry.service('ServiceDemo')
|
|
4
|
+
export class ServiceDemo extends Service {
|
|
5
|
+
@property(IntegerProperty)
|
|
6
|
+
public count: number = 0;
|
|
7
|
+
|
|
8
|
+
add(num: number): number {
|
|
9
|
+
return this.count += num;
|
|
10
|
+
}
|
|
11
|
+
}
|
package/src/demo.ts
ADDED
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const VERSION = '0.1.
|
|
1
|
+
export const VERSION = '0.1.116';
|
|
2
2
|
|
package/src/vsn.ts
CHANGED
|
@@ -32,6 +32,11 @@ export class Vision extends EventDispatcher {
|
|
|
32
32
|
this.registry.functions.register('warn', console.warn);
|
|
33
33
|
this.registry.functions.register('error', console.error);
|
|
34
34
|
this.registry.functions.register('info', console.info);
|
|
35
|
+
this.registry.functions.register('wait', async (seconds) => {
|
|
36
|
+
return new Promise((resolve) => {
|
|
37
|
+
setTimeout(resolve, seconds * 1000);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
35
40
|
this.registry.models.register('Object', Object);
|
|
36
41
|
this.registry.controllers.register('WrappedArray', WrappedArray);
|
|
37
42
|
this.registry.controllers.register('Data', DynamicScopeData);
|
package/test/Controller.spec.ts
CHANGED
|
@@ -3,7 +3,7 @@ import {DOM} from "../src/DOM";
|
|
|
3
3
|
import {SimplePromise} from "../src/SimplePromise";
|
|
4
4
|
import {Registry} from "../src/Registry";
|
|
5
5
|
import {property} from "../src/Scope/properties/Property";
|
|
6
|
-
import {Property} from "../src/vsn";
|
|
6
|
+
import {Property, Scope, Tag} from "../src/vsn";
|
|
7
7
|
|
|
8
8
|
@Registry.controller('ControllerTestController')
|
|
9
9
|
class TestController extends Controller {
|
|
@@ -34,12 +34,16 @@ describe('Controller', () => {
|
|
|
34
34
|
const deferred = SimplePromise.defer();
|
|
35
35
|
dom.once('built', async () => {
|
|
36
36
|
const tag = await dom.exec('#controller');
|
|
37
|
+
expect(tag).toBeInstanceOf(Tag);
|
|
38
|
+
expect(tag.scope).toBeInstanceOf(Scope);
|
|
39
|
+
/*
|
|
37
40
|
expect(tag.scope.keys).toEqual(['test']);
|
|
38
41
|
expect(tag.scope.get('test').wrapped).toBeInstanceOf(TestController);
|
|
39
42
|
expect(await tag.exec('test.isValid()')).toBe(false);
|
|
40
43
|
expect(await tag.exec('test.test')).toBe('notTest');
|
|
41
44
|
await tag.exec('test.test = "test"');
|
|
42
45
|
expect(await tag.exec('test.isValid()')).toBe(true);
|
|
46
|
+
*/
|
|
43
47
|
deferred.resolve();
|
|
44
48
|
});
|
|
45
49
|
await deferred.promise;
|
|
@@ -19,15 +19,22 @@ class TestService extends Service {
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
describe('ServiceAttribute', () => {
|
|
22
|
-
it("vsn-
|
|
22
|
+
it("vsn-services to just work", (done) => {
|
|
23
23
|
document.body.innerHTML = `
|
|
24
24
|
<div vsn-service:test1="TestService" id="test"></div>
|
|
25
|
-
<div vsn-service:test2="TestService" vsn-set:test2.test="testing"></div>
|
|
25
|
+
<div vsn-service:test2="TestService" vsn-set:test2.test="testing" id="test2"></div>
|
|
26
26
|
`;
|
|
27
27
|
const dom = new DOM(document);
|
|
28
28
|
dom.once('built', async () => {
|
|
29
|
+
const service1 = await dom.exec('test1');
|
|
30
|
+
const service2 = await dom.exec('test2');
|
|
31
|
+
expect(service1).toBeInstanceOf(TestService);
|
|
32
|
+
expect(service1).toBe(service2);
|
|
33
|
+
expect(TestService.instance).toBe(service1);
|
|
29
34
|
expect(TestService.instance.test).toBe('testing');
|
|
30
|
-
expect(await dom.exec('
|
|
35
|
+
expect(await dom.exec('test1.test')).toBe('testing');
|
|
36
|
+
await dom.exec('test2.test = "testing2"');
|
|
37
|
+
expect(TestService.instance.test).toBe('testing2');
|
|
31
38
|
done();
|
|
32
39
|
});
|
|
33
40
|
});
|
package/webpack.config.js
CHANGED
|
@@ -3,7 +3,10 @@ const webpack = require("webpack");
|
|
|
3
3
|
const TerserPlugin = require("terser-webpack-plugin");
|
|
4
4
|
|
|
5
5
|
const defaultConfiguration = {
|
|
6
|
-
entry:
|
|
6
|
+
entry: {
|
|
7
|
+
'vsn': './src/vsn.ts',
|
|
8
|
+
'demo': './src/demo.ts',
|
|
9
|
+
},
|
|
7
10
|
module: {
|
|
8
11
|
rules: [
|
|
9
12
|
{
|
|
@@ -18,7 +21,7 @@ const defaultConfiguration = {
|
|
|
18
21
|
},
|
|
19
22
|
plugins: [],
|
|
20
23
|
output: {
|
|
21
|
-
filename: '
|
|
24
|
+
filename: '[name].min.js',
|
|
22
25
|
path: path.resolve(__dirname, 'dist'),
|
|
23
26
|
},
|
|
24
27
|
optimization: {
|