vsn 0.1.17 → 0.1.20
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/demo.html +9 -2
- package/demo/vision.js +1 -1
- package/dist/AST.d.ts +2 -1
- package/dist/AST.js +2107 -0
- package/dist/AST.js.map +1 -0
- package/dist/Attribute.js +187 -0
- package/dist/Attribute.js.map +1 -0
- package/dist/Bencmark.js +179 -0
- package/dist/Bencmark.js.map +1 -0
- package/dist/Configuration.js +64 -0
- package/dist/Configuration.js.map +1 -0
- package/dist/Controller.js +39 -0
- package/dist/Controller.js.map +1 -0
- package/dist/DOM/DOMObject.d.ts +1 -0
- package/dist/DOM/DOMObject.js +47 -0
- package/dist/DOM/DOMObject.js.map +1 -0
- package/dist/DOM/WrappedDocument.js +34 -0
- package/dist/DOM/WrappedDocument.js.map +1 -0
- package/dist/DOM/WrappedWindow.js +45 -0
- package/dist/DOM/WrappedWindow.js.map +1 -0
- package/dist/DOM.js +547 -0
- package/dist/DOM.js.map +1 -0
- package/dist/Formats.js +44 -0
- package/dist/Formats.js.map +1 -0
- package/dist/Query.js +66 -0
- package/dist/Query.js.map +1 -0
- package/dist/Registry.js +138 -0
- package/dist/Registry.js.map +1 -0
- package/dist/Scope.d.ts +2 -1
- package/dist/Scope.js +512 -0
- package/dist/Scope.js.map +1 -0
- package/dist/Tag/List.js +85 -0
- package/dist/Tag/List.js.map +1 -0
- package/dist/Tag.d.ts +3 -0
- package/dist/Tag.js +764 -0
- package/dist/Tag.js.map +1 -0
- package/dist/Types.js +48 -0
- package/dist/Types.js.map +1 -0
- package/dist/Vision.d.ts +1 -1
- package/dist/Vision.js +162 -0
- package/dist/Vision.js.map +1 -0
- package/dist/attributes/AddClassIf.js +93 -0
- package/dist/attributes/AddClassIf.js.map +1 -0
- package/dist/attributes/Bind.js +272 -0
- package/dist/attributes/Bind.js.map +1 -0
- package/dist/attributes/ClassConstructor.js +104 -0
- package/dist/attributes/ClassConstructor.js.map +1 -0
- package/dist/attributes/ClickRemoveClass.js +102 -0
- package/dist/attributes/ClickRemoveClass.js.map +1 -0
- package/dist/attributes/ClickToggleClass.js +102 -0
- package/dist/attributes/ClickToggleClass.js.map +1 -0
- package/dist/attributes/ControllerAttribute.js +28 -0
- package/dist/attributes/ControllerAttribute.js.map +1 -0
- package/dist/attributes/DisableIf.js +94 -0
- package/dist/attributes/DisableIf.js.map +1 -0
- package/dist/attributes/Exec.js +102 -0
- package/dist/attributes/Exec.js.map +1 -0
- package/dist/attributes/Format.js +96 -0
- package/dist/attributes/Format.js.map +1 -0
- package/dist/attributes/If.js +147 -0
- package/dist/attributes/If.js.map +1 -0
- package/dist/attributes/JSONAttribute.js +115 -0
- package/dist/attributes/JSONAttribute.js.map +1 -0
- package/dist/attributes/KeyAbstract.js +110 -0
- package/dist/attributes/KeyAbstract.js.map +1 -0
- package/dist/attributes/KeyDown.js +82 -0
- package/dist/attributes/KeyDown.js.map +1 -0
- package/dist/attributes/KeyUp.js +82 -0
- package/dist/attributes/KeyUp.js.map +1 -0
- package/dist/attributes/List.js +273 -0
- package/dist/attributes/List.js.map +1 -0
- package/dist/attributes/ListItem.js +135 -0
- package/dist/attributes/ListItem.js.map +1 -0
- package/dist/attributes/ListItemModel.js +39 -0
- package/dist/attributes/ListItemModel.js.map +1 -0
- package/dist/attributes/ModelAttribute.js +29 -0
- package/dist/attributes/ModelAttribute.js.map +1 -0
- package/dist/attributes/Name.js +88 -0
- package/dist/attributes/Name.js.map +1 -0
- package/dist/attributes/On.js +123 -0
- package/dist/attributes/On.js.map +1 -0
- package/dist/attributes/Radio.js +127 -0
- package/dist/attributes/Radio.js.map +1 -0
- package/dist/attributes/Referenced.js +38 -0
- package/dist/attributes/Referenced.js.map +1 -0
- package/dist/attributes/RootAttribute.js +85 -0
- package/dist/attributes/RootAttribute.js.map +1 -0
- package/dist/attributes/ScopeAttribute.js +40 -0
- package/dist/attributes/ScopeAttribute.js.map +1 -0
- package/dist/attributes/ScopeChange.js +124 -0
- package/dist/attributes/ScopeChange.js.map +1 -0
- package/dist/attributes/SetAttribute.js +130 -0
- package/dist/attributes/SetAttribute.js.map +1 -0
- package/dist/attributes/StandardAttribute.js +168 -0
- package/dist/attributes/StandardAttribute.js.map +1 -0
- package/dist/attributes/StyleAttribute.d.ts +11 -0
- package/dist/attributes/StyleAttribute.js +167 -0
- package/dist/attributes/StyleAttribute.js.map +1 -0
- package/dist/attributes/Template.js +39 -0
- package/dist/attributes/Template.js.map +1 -0
- package/dist/attributes/TypeAttribute.js +101 -0
- package/dist/attributes/TypeAttribute.js.map +1 -0
- package/dist/attributes/_imports.d.ts +1 -0
- package/dist/attributes/_imports.js +60 -0
- package/dist/attributes/_imports.js.map +1 -0
- package/dist/helpers/DOMHelper.js +81 -0
- package/dist/helpers/DOMHelper.js.map +1 -0
- package/dist/helpers/ElementHelper.js +25 -0
- package/dist/helpers/ElementHelper.js.map +1 -0
- package/dist/helpers/VisionHelper.js +71 -0
- package/dist/helpers/VisionHelper.js.map +1 -0
- package/dist/helpers/decorators.js +38 -0
- package/dist/helpers/decorators.js.map +1 -0
- package/package.json +1 -1
- package/src/AST.ts +70 -7
- package/src/DOM/DOMObject.ts +4 -0
- package/src/Scope.ts +11 -8
- package/src/Tag.ts +33 -0
- package/src/Vision.ts +1 -1
- package/src/attributes/StyleAttribute.ts +68 -0
- package/src/attributes/_imports.ts +1 -0
- package/test/attributes/Styles.spec.ts +32 -0
- package/dist/vision.min.js +0 -1
|
@@ -23,5 +23,6 @@ export { ScopeAttribute } from "./ScopeAttribute";
|
|
|
23
23
|
export { ScopeChange } from "./ScopeChange";
|
|
24
24
|
export { SetAttribute } from "./SetAttribute";
|
|
25
25
|
export { StandardAttribute } from "./StandardAttribute";
|
|
26
|
+
export { StyleAttribute } from "./StyleAttribute";
|
|
26
27
|
export { Template } from "./Template";
|
|
27
28
|
export { TypeAttribute } from "./TypeAttribute";
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TypeAttribute = exports.Template = exports.StyleAttribute = exports.StandardAttribute = exports.SetAttribute = exports.ScopeChange = exports.ScopeAttribute = exports.RootAttribute = exports.Referenced = exports.Radio = exports.On = exports.Name = exports.ModelAttribute = exports.ListItemModel = exports.ListItem = exports.List = exports.KeyUp = exports.KeyDown = exports.JSONAttribute = exports.If = exports.Format = exports.Exec = exports.DisableIf = exports.ControllerAttribute = exports.ClickToggleClass = exports.ClickRemoveClass = exports.Bind = exports.AddClassIf = void 0;
|
|
4
|
+
var AddClassIf_1 = require("./AddClassIf");
|
|
5
|
+
Object.defineProperty(exports, "AddClassIf", { enumerable: true, get: function () { return AddClassIf_1.AddClassIf; } });
|
|
6
|
+
var Bind_1 = require("./Bind");
|
|
7
|
+
Object.defineProperty(exports, "Bind", { enumerable: true, get: function () { return Bind_1.Bind; } });
|
|
8
|
+
var ClickRemoveClass_1 = require("./ClickRemoveClass");
|
|
9
|
+
Object.defineProperty(exports, "ClickRemoveClass", { enumerable: true, get: function () { return ClickRemoveClass_1.ClickRemoveClass; } });
|
|
10
|
+
var ClickToggleClass_1 = require("./ClickToggleClass");
|
|
11
|
+
Object.defineProperty(exports, "ClickToggleClass", { enumerable: true, get: function () { return ClickToggleClass_1.ClickToggleClass; } });
|
|
12
|
+
var ControllerAttribute_1 = require("./ControllerAttribute");
|
|
13
|
+
Object.defineProperty(exports, "ControllerAttribute", { enumerable: true, get: function () { return ControllerAttribute_1.ControllerAttribute; } });
|
|
14
|
+
var DisableIf_1 = require("./DisableIf");
|
|
15
|
+
Object.defineProperty(exports, "DisableIf", { enumerable: true, get: function () { return DisableIf_1.DisableIf; } });
|
|
16
|
+
var Exec_1 = require("./Exec");
|
|
17
|
+
Object.defineProperty(exports, "Exec", { enumerable: true, get: function () { return Exec_1.Exec; } });
|
|
18
|
+
var Format_1 = require("./Format");
|
|
19
|
+
Object.defineProperty(exports, "Format", { enumerable: true, get: function () { return Format_1.Format; } });
|
|
20
|
+
var If_1 = require("./If");
|
|
21
|
+
Object.defineProperty(exports, "If", { enumerable: true, get: function () { return If_1.If; } });
|
|
22
|
+
var JSONAttribute_1 = require("./JSONAttribute");
|
|
23
|
+
Object.defineProperty(exports, "JSONAttribute", { enumerable: true, get: function () { return JSONAttribute_1.JSONAttribute; } });
|
|
24
|
+
var KeyDown_1 = require("./KeyDown");
|
|
25
|
+
Object.defineProperty(exports, "KeyDown", { enumerable: true, get: function () { return KeyDown_1.KeyDown; } });
|
|
26
|
+
var KeyUp_1 = require("./KeyUp");
|
|
27
|
+
Object.defineProperty(exports, "KeyUp", { enumerable: true, get: function () { return KeyUp_1.KeyUp; } });
|
|
28
|
+
var List_1 = require("./List");
|
|
29
|
+
Object.defineProperty(exports, "List", { enumerable: true, get: function () { return List_1.List; } });
|
|
30
|
+
var ListItem_1 = require("./ListItem");
|
|
31
|
+
Object.defineProperty(exports, "ListItem", { enumerable: true, get: function () { return ListItem_1.ListItem; } });
|
|
32
|
+
var ListItemModel_1 = require("./ListItemModel");
|
|
33
|
+
Object.defineProperty(exports, "ListItemModel", { enumerable: true, get: function () { return ListItemModel_1.ListItemModel; } });
|
|
34
|
+
var ModelAttribute_1 = require("./ModelAttribute");
|
|
35
|
+
Object.defineProperty(exports, "ModelAttribute", { enumerable: true, get: function () { return ModelAttribute_1.ModelAttribute; } });
|
|
36
|
+
var Name_1 = require("./Name");
|
|
37
|
+
Object.defineProperty(exports, "Name", { enumerable: true, get: function () { return Name_1.Name; } });
|
|
38
|
+
var On_1 = require("./On");
|
|
39
|
+
Object.defineProperty(exports, "On", { enumerable: true, get: function () { return On_1.On; } });
|
|
40
|
+
var Radio_1 = require("./Radio");
|
|
41
|
+
Object.defineProperty(exports, "Radio", { enumerable: true, get: function () { return Radio_1.Radio; } });
|
|
42
|
+
var Referenced_1 = require("./Referenced");
|
|
43
|
+
Object.defineProperty(exports, "Referenced", { enumerable: true, get: function () { return Referenced_1.Referenced; } });
|
|
44
|
+
var RootAttribute_1 = require("./RootAttribute");
|
|
45
|
+
Object.defineProperty(exports, "RootAttribute", { enumerable: true, get: function () { return RootAttribute_1.RootAttribute; } });
|
|
46
|
+
var ScopeAttribute_1 = require("./ScopeAttribute");
|
|
47
|
+
Object.defineProperty(exports, "ScopeAttribute", { enumerable: true, get: function () { return ScopeAttribute_1.ScopeAttribute; } });
|
|
48
|
+
var ScopeChange_1 = require("./ScopeChange");
|
|
49
|
+
Object.defineProperty(exports, "ScopeChange", { enumerable: true, get: function () { return ScopeChange_1.ScopeChange; } });
|
|
50
|
+
var SetAttribute_1 = require("./SetAttribute");
|
|
51
|
+
Object.defineProperty(exports, "SetAttribute", { enumerable: true, get: function () { return SetAttribute_1.SetAttribute; } });
|
|
52
|
+
var StandardAttribute_1 = require("./StandardAttribute");
|
|
53
|
+
Object.defineProperty(exports, "StandardAttribute", { enumerable: true, get: function () { return StandardAttribute_1.StandardAttribute; } });
|
|
54
|
+
var StyleAttribute_1 = require("./StyleAttribute");
|
|
55
|
+
Object.defineProperty(exports, "StyleAttribute", { enumerable: true, get: function () { return StyleAttribute_1.StyleAttribute; } });
|
|
56
|
+
var Template_1 = require("./Template");
|
|
57
|
+
Object.defineProperty(exports, "Template", { enumerable: true, get: function () { return Template_1.Template; } });
|
|
58
|
+
var TypeAttribute_1 = require("./TypeAttribute");
|
|
59
|
+
Object.defineProperty(exports, "TypeAttribute", { enumerable: true, get: function () { return TypeAttribute_1.TypeAttribute; } });
|
|
60
|
+
//# sourceMappingURL=_imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_imports.js","sourceRoot":"","sources":["../../src/attributes/_imports.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,+BAA4B;AAApB,4FAAA,IAAI,OAAA;AACZ,uDAAoD;AAA5C,oHAAA,gBAAgB,OAAA;AACxB,uDAAoD;AAA5C,oHAAA,gBAAgB,OAAA;AACxB,6DAA0D;AAAlD,0HAAA,mBAAmB,OAAA;AAC3B,yCAAsC;AAA9B,sGAAA,SAAS,OAAA;AACjB,+BAA4B;AAApB,4FAAA,IAAI,OAAA;AACZ,mCAAgC;AAAxB,gGAAA,MAAM,OAAA;AACd,2BAAwB;AAAhB,wFAAA,EAAE,OAAA;AACV,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,qCAAkC;AAA1B,kGAAA,OAAO,OAAA;AACf,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,+BAA4B;AAApB,4FAAA,IAAI,OAAA;AACZ,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,+BAA4B;AAApB,4FAAA,IAAI,OAAA;AACZ,2BAAwB;AAAhB,wFAAA,EAAE,OAAA;AACV,iCAA8B;AAAtB,8FAAA,KAAK,OAAA;AACb,2CAAwC;AAAhC,wGAAA,UAAU,OAAA;AAClB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA;AACrB,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,6CAA0C;AAAlC,0GAAA,WAAW,OAAA;AACnB,+CAA4C;AAApC,4GAAA,YAAY,OAAA;AACpB,yDAAsD;AAA9C,sHAAA,iBAAiB,OAAA;AACzB,mDAAgD;AAAxC,gHAAA,cAAc,OAAA;AACtB,uCAAoC;AAA5B,oGAAA,QAAQ,OAAA;AAChB,iDAA8C;AAAtC,8GAAA,aAAa,OAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.DOMHelper = void 0;
|
|
40
|
+
var DOMHelper = /** @class */ (function () {
|
|
41
|
+
function DOMHelper() {
|
|
42
|
+
}
|
|
43
|
+
DOMHelper.walk = function (e, fnc, callOnBaseElement) {
|
|
44
|
+
if (callOnBaseElement === void 0) { callOnBaseElement = true; }
|
|
45
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
46
|
+
var len, i;
|
|
47
|
+
return __generator(this, function (_a) {
|
|
48
|
+
switch (_a.label) {
|
|
49
|
+
case 0:
|
|
50
|
+
if (!callOnBaseElement) return [3 /*break*/, 2];
|
|
51
|
+
return [4 /*yield*/, fnc(e)];
|
|
52
|
+
case 1:
|
|
53
|
+
_a.sent();
|
|
54
|
+
_a.label = 2;
|
|
55
|
+
case 2:
|
|
56
|
+
len = e.childNodes.length;
|
|
57
|
+
if (len <= 0)
|
|
58
|
+
return [2 /*return*/];
|
|
59
|
+
i = 0;
|
|
60
|
+
_a.label = 3;
|
|
61
|
+
case 3:
|
|
62
|
+
if (!(i < len)) return [3 /*break*/, 6];
|
|
63
|
+
if (!e.childNodes[i]) {
|
|
64
|
+
return [3 /*break*/, 5];
|
|
65
|
+
}
|
|
66
|
+
return [4 /*yield*/, DOMHelper.walk(e.childNodes[i], fnc, true)];
|
|
67
|
+
case 4:
|
|
68
|
+
_a.sent();
|
|
69
|
+
_a.label = 5;
|
|
70
|
+
case 5:
|
|
71
|
+
i++;
|
|
72
|
+
return [3 /*break*/, 3];
|
|
73
|
+
case 6: return [2 /*return*/];
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
return DOMHelper;
|
|
79
|
+
}());
|
|
80
|
+
exports.DOMHelper = DOMHelper;
|
|
81
|
+
//# sourceMappingURL=DOMHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DOMHelper.js","sourceRoot":"","sources":["../../src/helpers/DOMHelper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;IAAA;IAeA,CAAC;IAduB,cAAI,GAAxB,UAAyB,CAAc,EAAE,GAA6B,EAAE,iBAAiC;QAAjC,kCAAA,EAAA,wBAAiC;;;;;;6BACjG,iBAAiB,EAAjB,wBAAiB;wBACjB,qBAAM,GAAG,CAAC,CAAC,CAAC,EAAA;;wBAAZ,SAAY,CAAC;;;wBAEX,GAAG,GAAW,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;wBACxC,IAAI,GAAG,IAAI,CAAC;4BAAE,sBAAO;wBACZ,CAAC,GAAG,CAAC;;;6BAAE,CAAA,CAAC,GAAG,GAAG,CAAA;wBACnB,IAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAC;4BAChB,wBAAS;yBACZ;wBAED,qBAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,EAAA;;wBAA/D,SAA+D,CAAC;;;wBAL3C,CAAC,EAAE,CAAA;;;;;;KAO/B;IACL,gBAAC;AAAD,CAAC,AAfD,IAeC;AAfY,8BAAS"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ElementHelper = void 0;
|
|
4
|
+
var ElementHelper = /** @class */ (function () {
|
|
5
|
+
function ElementHelper() {
|
|
6
|
+
}
|
|
7
|
+
ElementHelper.hasVisionAttribute = function (element, testAttr) {
|
|
8
|
+
if (testAttr === void 0) { testAttr = 'vsn-'; }
|
|
9
|
+
if (!element.attributes || element.attributes.length <= 0)
|
|
10
|
+
return false;
|
|
11
|
+
for (var i = 0; i < element.attributes.length; i++) {
|
|
12
|
+
var attr = element.attributes[i];
|
|
13
|
+
if (attr.name.startsWith(testAttr)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
};
|
|
19
|
+
ElementHelper.normalizeElementID = function (id) {
|
|
20
|
+
return id ? id.replace(/-([a-zA-Z0-9])/g, function (g) { return g[1].toUpperCase(); }) : null;
|
|
21
|
+
};
|
|
22
|
+
return ElementHelper;
|
|
23
|
+
}());
|
|
24
|
+
exports.ElementHelper = ElementHelper;
|
|
25
|
+
//# sourceMappingURL=ElementHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ElementHelper.js","sourceRoot":"","sources":["../../src/helpers/ElementHelper.ts"],"names":[],"mappings":";;;AACA;IAAA;IAiBA,CAAC;IAhBiB,gCAAkB,GAAhC,UAAiC,OAA8B,EAAE,QAAyB;QAAzB,yBAAA,EAAA,iBAAyB;QACtF,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACxE,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxD,IAAM,IAAI,GAAS,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAClC;gBACI,OAAO,IAAI,CAAC;aACf;SACJ;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEa,gCAAkB,GAAhC,UAAiC,EAAU;QACvC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,CAAC;IACL,oBAAC;AAAD,CAAC,AAjBD,IAiBC;AAjBY,sCAAa"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VisionHelper = void 0;
|
|
4
|
+
var VisionHelper = /** @class */ (function () {
|
|
5
|
+
function VisionHelper() {
|
|
6
|
+
}
|
|
7
|
+
VisionHelper.isConstructor = function (obj) {
|
|
8
|
+
return obj &&
|
|
9
|
+
obj.hasOwnProperty("prototype") &&
|
|
10
|
+
!!obj.prototype &&
|
|
11
|
+
!!obj.prototype.constructor &&
|
|
12
|
+
!!obj.prototype.constructor.name;
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(VisionHelper, "document", {
|
|
15
|
+
get: function () {
|
|
16
|
+
return typeof document === 'object' ? document : null;
|
|
17
|
+
},
|
|
18
|
+
enumerable: false,
|
|
19
|
+
configurable: true
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(VisionHelper, "window", {
|
|
22
|
+
get: function () {
|
|
23
|
+
return typeof window === 'object' ? window : null;
|
|
24
|
+
},
|
|
25
|
+
enumerable: false,
|
|
26
|
+
configurable: true
|
|
27
|
+
});
|
|
28
|
+
VisionHelper.isMobile = function () {
|
|
29
|
+
var check = false;
|
|
30
|
+
if (navigator && VisionHelper.window) {
|
|
31
|
+
(function (a) {
|
|
32
|
+
if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)))
|
|
33
|
+
check = true;
|
|
34
|
+
})(navigator.userAgent || navigator.vendor || window['opera']);
|
|
35
|
+
}
|
|
36
|
+
return check;
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(VisionHelper, "inDevelopment", {
|
|
39
|
+
get: function () {
|
|
40
|
+
return IN_DEVELOPMENT;
|
|
41
|
+
},
|
|
42
|
+
enumerable: false,
|
|
43
|
+
configurable: true
|
|
44
|
+
});
|
|
45
|
+
Object.defineProperty(VisionHelper, "doBenchmark", {
|
|
46
|
+
get: function () {
|
|
47
|
+
return DO_BENCHMARK;
|
|
48
|
+
},
|
|
49
|
+
enumerable: false,
|
|
50
|
+
configurable: true
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(VisionHelper, "inLegacy", {
|
|
53
|
+
get: function () {
|
|
54
|
+
return process.env.BUILD_TARGET === 'es5';
|
|
55
|
+
},
|
|
56
|
+
enumerable: false,
|
|
57
|
+
configurable: true
|
|
58
|
+
});
|
|
59
|
+
VisionHelper.nice = function (callback, timeout) {
|
|
60
|
+
if (timeout === void 0) { timeout = 100; }
|
|
61
|
+
if (VisionHelper.window && window['requestIdleCallback']) {
|
|
62
|
+
window['requestIdleCallback'](callback);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
setTimeout(callback, timeout);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
return VisionHelper;
|
|
69
|
+
}());
|
|
70
|
+
exports.VisionHelper = VisionHelper;
|
|
71
|
+
//# sourceMappingURL=VisionHelper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VisionHelper.js","sourceRoot":"","sources":["../../src/helpers/VisionHelper.ts"],"names":[],"mappings":";;;AAGA;IAAA;IA8CA,CAAC;IA7CiB,0BAAa,GAA3B,UAA4B,GAAQ;QAChC,OAAO,GAAG;YACN,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC;YAC/B,CAAC,CAAC,GAAG,CAAC,SAAS;YACf,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW;YAC3B,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,sBAAkB,wBAAQ;aAA1B;YACI,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1D,CAAC;;;OAAA;IAED,sBAAkB,sBAAM;aAAxB;YACI,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACtD,CAAC;;;OAAA;IAEa,qBAAQ,GAAtB;QACI,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,SAAS,IAAI,YAAY,CAAC,MAAM,EAAE;YAClC,CAAC,UAAU,CAAC;gBACR,IAAI,0TAA0T,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,ykDAAykD,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAAE,KAAK,GAAG,IAAI,CAAC;YAC37D,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;SAClE;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,sBAAkB,6BAAa;aAA/B;YACI,OAAO,cAAc,CAAC;QAC1B,CAAC;;;OAAA;IAED,sBAAkB,2BAAW;aAA7B;YACI,OAAO,YAAY,CAAC;QACxB,CAAC;;;OAAA;IAED,sBAAkB,wBAAQ;aAA1B;YACI,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,KAAK,CAAC;QAC9C,CAAC;;;OAAA;IAEa,iBAAI,GAAlB,UAAmB,QAAQ,EAAE,OAAqB;QAArB,wBAAA,EAAA,aAAqB;QAC9C,IAAI,YAAY,CAAC,MAAM,IAAI,MAAM,CAAC,qBAAqB,CAAC,EAAE;YACtD,MAAM,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,CAAC;SAC3C;aAAM;YACH,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACjC;IACL,CAAC;IACL,mBAAC;AAAD,CAAC,AA9CD,IA8CC;AA9CY,oCAAY"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.extendsarray = void 0;
|
|
19
|
+
function extendsarray(target) {
|
|
20
|
+
return /** @class */ (function (_super) {
|
|
21
|
+
__extends(class_1, _super);
|
|
22
|
+
function class_1() {
|
|
23
|
+
var args = [];
|
|
24
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
25
|
+
args[_i] = arguments[_i];
|
|
26
|
+
}
|
|
27
|
+
var _this = _super.apply(this, args) || this;
|
|
28
|
+
for (var c in target.prototype) {
|
|
29
|
+
_this[c] = target.prototype[c];
|
|
30
|
+
}
|
|
31
|
+
return _this;
|
|
32
|
+
}
|
|
33
|
+
return class_1;
|
|
34
|
+
}(target));
|
|
35
|
+
;
|
|
36
|
+
}
|
|
37
|
+
exports.extendsarray = extendsarray;
|
|
38
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/helpers/decorators.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AACA,SAAgB,YAAY,CAAyC,MAAS;IAC1E;QAAqB,2BAAM;QACvB;YAAY,cAAO;iBAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;gBAAP,yBAAO;;YAAnB,+BACa,IAAI,UAIhB;YAHG,KAAK,IAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE;gBAC9B,KAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aACjC;;QACL,CAAC;QACL,cAAC;IAAD,CAAC,AAPM,CAAc,MAAM,GAOzB;IAAA,CAAC;AACP,CAAC;AATD,oCASC"}
|
package/package.json
CHANGED
package/src/AST.ts
CHANGED
|
@@ -77,6 +77,7 @@ export enum TokenType {
|
|
|
77
77
|
EXCLAMATION_POINT,
|
|
78
78
|
ELEMENT_REFERENCE,
|
|
79
79
|
ELEMENT_ATTRIBUTE,
|
|
80
|
+
ELEMENT_STYLE,
|
|
80
81
|
ELEMENT_QUERY
|
|
81
82
|
}
|
|
82
83
|
|
|
@@ -127,24 +128,28 @@ const TOKEN_PATTERNS: TokenPattern[] = [
|
|
|
127
128
|
},
|
|
128
129
|
{
|
|
129
130
|
type: TokenType.FOR,
|
|
130
|
-
pattern: /^for\s/
|
|
131
|
+
pattern: /^for\s?(?=\()/
|
|
131
132
|
},
|
|
132
133
|
{
|
|
133
134
|
type: TokenType.IF,
|
|
134
|
-
pattern: /^if\s/
|
|
135
|
+
pattern: /^if\s?(?=\()/
|
|
135
136
|
},
|
|
136
137
|
{
|
|
137
138
|
type: TokenType.ELSE_IF,
|
|
138
|
-
pattern: /^else if\s/
|
|
139
|
+
pattern: /^else if\s?(?=\()/
|
|
139
140
|
},
|
|
140
141
|
{
|
|
141
142
|
type: TokenType.ELSE,
|
|
142
|
-
pattern: /^else\s/
|
|
143
|
+
pattern: /^else\s?(?=\{)/
|
|
143
144
|
},
|
|
144
145
|
{
|
|
145
146
|
type: TokenType.ELEMENT_ATTRIBUTE,
|
|
146
147
|
pattern: /^\.?@[_a-zA-Z0-9]*/
|
|
147
148
|
},
|
|
149
|
+
{
|
|
150
|
+
type: TokenType.ELEMENT_STYLE,
|
|
151
|
+
pattern: /^\.?\$[a-zA-Z0-9]*/
|
|
152
|
+
},
|
|
148
153
|
{
|
|
149
154
|
type: TokenType.ELEMENT_REFERENCE,
|
|
150
155
|
pattern: /^#[-_a-zA-Z0-9]*/
|
|
@@ -155,7 +160,7 @@ const TOKEN_PATTERNS: TokenPattern[] = [
|
|
|
155
160
|
},
|
|
156
161
|
{
|
|
157
162
|
type: TokenType.NAME,
|
|
158
|
-
pattern: /^[
|
|
163
|
+
pattern: /^[_a-zA-Z][_a-zA-Z0-9]*/
|
|
159
164
|
},
|
|
160
165
|
{
|
|
161
166
|
type: TokenType.NUMBER_LITERAL,
|
|
@@ -872,7 +877,7 @@ class ArithmeticAssignmentNode extends Node implements TreeNode {
|
|
|
872
877
|
} else {
|
|
873
878
|
scopes.push(inner);
|
|
874
879
|
}
|
|
875
|
-
} else if (this.left instanceof ElementAttributeNode && this.left.elementRef) {
|
|
880
|
+
} else if ((this.left instanceof ElementAttributeNode || this.left instanceof ElementStyleNode) && this.left.elementRef) {
|
|
876
881
|
scopes = await this.left.elementRef.evaluate(scope, dom, tag);
|
|
877
882
|
} else
|
|
878
883
|
scopes.push(scope);
|
|
@@ -1014,7 +1019,7 @@ class ArithmeticAssignmentNode extends Node implements TreeNode {
|
|
|
1014
1019
|
}
|
|
1015
1020
|
|
|
1016
1021
|
public static parse(lastNode: any, token, tokens: Token[]): ArithmeticAssignmentNode {
|
|
1017
|
-
if (!(lastNode instanceof RootScopeMemberNode) && !(lastNode instanceof ScopeMemberNode) && !(lastNode instanceof ElementAttributeNode)) {
|
|
1022
|
+
if (!(lastNode instanceof RootScopeMemberNode) && !(lastNode instanceof ScopeMemberNode) && !(lastNode instanceof ElementAttributeNode) && !(lastNode instanceof ElementStyleNode)) {
|
|
1018
1023
|
throw SyntaxError(`Invalid assignment syntax near ${Tree.toCode(tokens.splice(0, 10))}`);
|
|
1019
1024
|
}
|
|
1020
1025
|
tokens.splice(0, 1); // consume =
|
|
@@ -1242,6 +1247,61 @@ class ElementAttributeNode extends Node implements TreeNode {
|
|
|
1242
1247
|
}
|
|
1243
1248
|
}
|
|
1244
1249
|
|
|
1250
|
+
class ElementStyleNode extends Node implements TreeNode {
|
|
1251
|
+
protected requiresPrep: boolean = true;
|
|
1252
|
+
|
|
1253
|
+
constructor(
|
|
1254
|
+
public readonly elementRef: ElementQueryNode | null,
|
|
1255
|
+
public readonly attr: string
|
|
1256
|
+
) {
|
|
1257
|
+
super();
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
public get name(): LiteralNode<string> {
|
|
1261
|
+
return new LiteralNode<string>(`$${this.attributeName}`);
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
protected _getChildNodes(): Node[] {
|
|
1265
|
+
let nodes = [];
|
|
1266
|
+
if (this.elementRef)
|
|
1267
|
+
nodes.push(this.elementRef)
|
|
1268
|
+
return nodes;
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
get attributeName(): string {
|
|
1272
|
+
if (this.attr.startsWith('.'))
|
|
1273
|
+
return this.attr.substring(2);
|
|
1274
|
+
return this.attr.substring(1);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
async evaluate(scope: Scope, dom: DOM, tag: Tag = null) {
|
|
1278
|
+
let tags: TagList;
|
|
1279
|
+
if (this.elementRef) {
|
|
1280
|
+
tags = await this.elementRef.evaluate(scope, dom, tag);
|
|
1281
|
+
} else if (tag) {
|
|
1282
|
+
tags = new TagList(tag)
|
|
1283
|
+
} else {
|
|
1284
|
+
return;
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
if (tags.length === 1)
|
|
1288
|
+
return tags[0].scope.get(`$${this.attributeName}`);
|
|
1289
|
+
|
|
1290
|
+
return tags.map((tag) => tag.scope.get(`$${this.attributeName}`));
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
async prepare(scope: Scope, dom: DOM, tag: Tag = null) {
|
|
1294
|
+
if (this.elementRef) {
|
|
1295
|
+
await this.elementRef.prepare(scope, dom, tag);
|
|
1296
|
+
const tags: TagList = await this.elementRef.evaluate(scope, dom, tag);
|
|
1297
|
+
for (const t of tags)
|
|
1298
|
+
await t.watchStyle(this.attributeName);
|
|
1299
|
+
} else if(tag) {
|
|
1300
|
+
await tag.watchStyle(this.attributeName);
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1245
1305
|
export interface IBlockInfo {
|
|
1246
1306
|
type: BlockType,
|
|
1247
1307
|
open: TokenType,
|
|
@@ -1387,6 +1447,9 @@ export class Tree {
|
|
|
1387
1447
|
} else if (tokens[0].type === TokenType.ELEMENT_ATTRIBUTE) {
|
|
1388
1448
|
node = new ElementAttributeNode(node as any, tokens[0].value);
|
|
1389
1449
|
tokens.splice(0, 1);
|
|
1450
|
+
} else if (tokens[0].type === TokenType.ELEMENT_STYLE) {
|
|
1451
|
+
node = new ElementStyleNode(node as any, tokens[0].value);
|
|
1452
|
+
tokens.splice(0, 1);
|
|
1390
1453
|
} else if (node !== null && token.type === TokenType.PERIOD && tokens[1].type === TokenType.NAME) {
|
|
1391
1454
|
node = new ScopeMemberNode(
|
|
1392
1455
|
node,
|
package/src/DOM/DOMObject.ts
CHANGED
package/src/Scope.ts
CHANGED
|
@@ -207,13 +207,12 @@ export class WrappedArray<T> extends Array<T> {
|
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
|
|
210
|
-
|
|
211
210
|
export class Scope extends EventDispatcher {
|
|
212
211
|
public wrapped: any;
|
|
213
212
|
protected data: DataModel;
|
|
214
213
|
protected types: {[key: string]: string;} = {};
|
|
215
214
|
protected children: Scope[];
|
|
216
|
-
protected
|
|
215
|
+
protected _keys: string[];
|
|
217
216
|
protected _parentScope: Scope;
|
|
218
217
|
|
|
219
218
|
constructor(
|
|
@@ -224,7 +223,7 @@ export class Scope extends EventDispatcher {
|
|
|
224
223
|
this.parentScope = parent;
|
|
225
224
|
this.children = [];
|
|
226
225
|
this.data = new DataModel({});
|
|
227
|
-
this.
|
|
226
|
+
this._keys = [];
|
|
228
227
|
}
|
|
229
228
|
|
|
230
229
|
public get parentScope(): Scope {
|
|
@@ -277,7 +276,7 @@ export class Scope extends EventDispatcher {
|
|
|
277
276
|
if (searchParents && this.parentScope)
|
|
278
277
|
return this.parentScope.get(key, searchParents);
|
|
279
278
|
|
|
280
|
-
return '';
|
|
279
|
+
return this._keys.indexOf(key) > -1 ? '' : undefined;
|
|
281
280
|
}
|
|
282
281
|
|
|
283
282
|
return value;
|
|
@@ -312,12 +311,16 @@ export class Scope extends EventDispatcher {
|
|
|
312
311
|
this.trigger('change', key, event);
|
|
313
312
|
}
|
|
314
313
|
|
|
315
|
-
if (this.
|
|
316
|
-
this.
|
|
314
|
+
if (this._keys.indexOf(key) === -1)
|
|
315
|
+
this._keys.push(key);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
get keys(): string[] {
|
|
319
|
+
return [...this._keys];
|
|
317
320
|
}
|
|
318
321
|
|
|
319
322
|
has(key: string): boolean {
|
|
320
|
-
return this.
|
|
323
|
+
return this._keys.indexOf(key) > -1;
|
|
321
324
|
}
|
|
322
325
|
|
|
323
326
|
setType(key: string, type: string) {
|
|
@@ -337,7 +340,7 @@ export class Scope extends EventDispatcher {
|
|
|
337
340
|
}
|
|
338
341
|
|
|
339
342
|
clear() {
|
|
340
|
-
for (const key of this.
|
|
343
|
+
for (const key of this._keys) {
|
|
341
344
|
if (['function', 'object'].indexOf(typeof this.get(key)) > -1) continue;
|
|
342
345
|
this.set(key, null);
|
|
343
346
|
}
|
package/src/Tag.ts
CHANGED
|
@@ -8,6 +8,8 @@ import {On} from "./attributes/On";
|
|
|
8
8
|
import {Registry} from "./Registry";
|
|
9
9
|
import {benchmarkEnd, benchmarkStart} from "./Bencmark";
|
|
10
10
|
import {DOMObject} from "./DOM/DOMObject";
|
|
11
|
+
import { Tree } from "./AST";
|
|
12
|
+
import {StyleAttribute} from "./attributes/StyleAttribute";
|
|
11
13
|
|
|
12
14
|
export enum TagState {
|
|
13
15
|
Instantiated,
|
|
@@ -104,6 +106,12 @@ export class Tag extends DOMObject {
|
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
108
|
|
|
109
|
+
public async eval(code: string) {
|
|
110
|
+
const tree = new Tree(code);
|
|
111
|
+
await tree.prepare(this.scope, this.dom, this);
|
|
112
|
+
return await tree.evaluate(this.scope, this.dom, this);
|
|
113
|
+
}
|
|
114
|
+
|
|
107
115
|
public async evaluate() {
|
|
108
116
|
for (const attr of this.nonDeferredAttributes) {
|
|
109
117
|
await attr.evaluate();
|
|
@@ -480,6 +488,31 @@ export class Tag extends DOMObject {
|
|
|
480
488
|
return standardAttribute;
|
|
481
489
|
}
|
|
482
490
|
|
|
491
|
+
async watchStyle(styleName: string) {
|
|
492
|
+
for (const attribute of this.attributes) {
|
|
493
|
+
if (attribute instanceof StyleAttribute) {
|
|
494
|
+
return attribute;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// Standard attribute requires a unique scope
|
|
499
|
+
// @todo: Does this cause any issues with attribute bindings on the parent scope prior to having its own scope? hmm...
|
|
500
|
+
if (!this.uniqueScope) {
|
|
501
|
+
this._uniqueScope = true;
|
|
502
|
+
this._scope = new Scope();
|
|
503
|
+
|
|
504
|
+
if (this.parentTag) {
|
|
505
|
+
this.scope.parentScope = this.parentTag.scope;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
const styleAttribute = new StyleAttribute(this, 'style');
|
|
510
|
+
this.attributes.push(styleAttribute);
|
|
511
|
+
await this.setupAttribute(styleAttribute);
|
|
512
|
+
|
|
513
|
+
return styleAttribute;
|
|
514
|
+
}
|
|
515
|
+
|
|
483
516
|
private async setupAttribute(attribute: Attribute) {
|
|
484
517
|
await attribute.compile();
|
|
485
518
|
await attribute.setup();
|
package/src/Vision.ts
CHANGED
|
@@ -72,5 +72,5 @@ export * from './Registry';
|
|
|
72
72
|
export * from './Attribute';
|
|
73
73
|
export * from './AST';
|
|
74
74
|
export {DOM} from './DOM';
|
|
75
|
-
export {WrappedArray, Scope} from './Scope';
|
|
75
|
+
export {WrappedArray, Scope, ScopeReference} from './Scope';
|
|
76
76
|
export const vision: Vision = Vision.instance;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import {Registry} from "../Registry";
|
|
2
|
+
import {Attribute} from "../Attribute";
|
|
3
|
+
import {Scope, ScopeReference} from "../Scope";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@Registry.attribute('vsn-styles')
|
|
7
|
+
export class StyleAttribute extends Attribute {
|
|
8
|
+
private scopeRef: ScopeReference;
|
|
9
|
+
private styleScope: Scope;
|
|
10
|
+
|
|
11
|
+
public async setup() {
|
|
12
|
+
const key = this.getAttributeValue() || null;
|
|
13
|
+
if (key) {
|
|
14
|
+
this.scopeRef = this.tag.scope.getReference(key, true);
|
|
15
|
+
const parentScope = await this.scopeRef.getScope();
|
|
16
|
+
const styleKey = await this.scopeRef.getKey();
|
|
17
|
+
this.styleScope = parentScope.get(styleKey);
|
|
18
|
+
if (!this.styleScope) {
|
|
19
|
+
this.styleScope = new Scope(parentScope);
|
|
20
|
+
parentScope.set(styleKey, this.styleScope);
|
|
21
|
+
}
|
|
22
|
+
} else {
|
|
23
|
+
this.styleScope = this.tag.scope;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
await super.setup();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public async connect() {
|
|
30
|
+
this.styleScope.bind(`change`, this.handleEvent.bind(this));
|
|
31
|
+
await super.connect();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public async extract() {
|
|
35
|
+
this.updateFrom();
|
|
36
|
+
await super.extract();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
updateFrom() {
|
|
40
|
+
const toSkip = [
|
|
41
|
+
'cssText',
|
|
42
|
+
'length'
|
|
43
|
+
]
|
|
44
|
+
for (const k in this.tag.style) {
|
|
45
|
+
if (toSkip.indexOf(k) > -1 || isFinite(k as any))
|
|
46
|
+
continue;
|
|
47
|
+
const value = this.tag.style[k];
|
|
48
|
+
const key = `$${k}`;
|
|
49
|
+
if (value && value !== this.styleScope.get(key))
|
|
50
|
+
this.styleScope.set(key, value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public mutate(mutation: MutationRecord) {
|
|
55
|
+
super.mutate(mutation);
|
|
56
|
+
this.updateFrom();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public async handleEvent(k, v) {
|
|
60
|
+
if (k.startsWith('$')) {
|
|
61
|
+
const key = k.substr(1);
|
|
62
|
+
|
|
63
|
+
if (v.value !== v.previousValue) {
|
|
64
|
+
this.tag.element.style[key] = v.value;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|