render-core 1.0.0 → 1.0.2
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/class/component.d.ts +0 -3
- package/class/component.js +0 -10
- package/class/controller.d.ts +0 -1
- package/class/controller.js +0 -1
- package/class/pageController.d.ts +8 -0
- package/class/pageController.js +17 -0
- package/core/mixin/mixin.d.ts +0 -0
- package/core/mixin/mixin.js +0 -0
- package/core/render/initRender.d.ts +3 -2
- package/core/render/initRender.js +26 -75
- package/core/render/updateRender.d.ts +1 -1
- package/core/render/updateRender.js +20 -29
- package/core/utility/injectUtility.d.ts +3 -2
- package/core/utility/miscUtility.d.ts +0 -2
- package/core/utility/miscUtility.js +0 -4
- package/core/utility/styleUtility.d.ts +2 -0
- package/core/utility/styleUtility.js +11 -0
- package/index.d.ts +6 -21
- package/index.js +37 -26
- package/library/cmd/cmd.d.ts +6 -0
- package/library/cmd/cmd.js +32 -0
- package/library/inject/inject.d.ts +2 -0
- package/library/inject/inject.js +12 -0
- package/library/loader/loader.d.ts +1 -1
- package/library/loader/loader.js +3 -2
- package/library/render/render.d.ts +7 -0
- package/library/render/render.js +118 -0
- package/library/style/style.d.ts +1 -0
- package/library/style/style.js +12 -0
- package/library/template/template.d.ts +3 -0
- package/library/template/template.js +9 -0
- package/meta/meta.d.ts +1 -0
- package/meta/meta.js +1 -0
- package/package.json +6 -2
- package/runtime/runtime.d.ts +2 -2
- package/runtime/runtime.js +4 -4
- package/core/render/apiRender.d.ts +0 -4
- package/core/render/apiRender.js +0 -60
- package/core/render/depthRender.d.ts +0 -5
- package/core/render/depthRender.js +0 -198
package/class/component.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ interface RenderBase {
|
|
|
6
6
|
getComputed(): {};
|
|
7
7
|
getMethods(): {};
|
|
8
8
|
getWatcher(): {};
|
|
9
|
-
getExecutor(): {};
|
|
10
9
|
getBeforeRender(): () => void;
|
|
11
10
|
getAfterRender(): () => void;
|
|
12
11
|
getBeforeUpdate(): () => void;
|
|
@@ -22,7 +21,6 @@ export declare class Component implements RenderBase {
|
|
|
22
21
|
private readonly methods?;
|
|
23
22
|
private readonly computed?;
|
|
24
23
|
private readonly watcher?;
|
|
25
|
-
private readonly executor?;
|
|
26
24
|
private readonly beforeRender?;
|
|
27
25
|
private readonly afterRender?;
|
|
28
26
|
private readonly beforeUpdate?;
|
|
@@ -52,7 +50,6 @@ export declare class Component implements RenderBase {
|
|
|
52
50
|
getMethods(): {};
|
|
53
51
|
getComputed(): {};
|
|
54
52
|
getWatcher(): {};
|
|
55
|
-
getExecutor(): {};
|
|
56
53
|
getBeforeRender(): () => void;
|
|
57
54
|
getAfterRender(): () => void;
|
|
58
55
|
getBeforeUpdate(): () => void;
|
package/class/component.js
CHANGED
|
@@ -39,13 +39,6 @@ var Component = /** @class */ (function () {
|
|
|
39
39
|
else {
|
|
40
40
|
this.watcher = config.watcher;
|
|
41
41
|
}
|
|
42
|
-
//添加处理器属性
|
|
43
|
-
if (typeof config.executor == "undefined") {
|
|
44
|
-
this.executor = {};
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
this.executor = config.executor;
|
|
48
|
-
}
|
|
49
42
|
//生命周期函数
|
|
50
43
|
if (typeof config.beforeRender == "undefined") {
|
|
51
44
|
this.beforeRender = function () { };
|
|
@@ -105,9 +98,6 @@ var Component = /** @class */ (function () {
|
|
|
105
98
|
Component.prototype.getWatcher = function () {
|
|
106
99
|
return this.watcher;
|
|
107
100
|
};
|
|
108
|
-
Component.prototype.getExecutor = function () {
|
|
109
|
-
return this.executor;
|
|
110
|
-
};
|
|
111
101
|
Component.prototype.getBeforeRender = function () {
|
|
112
102
|
return this.beforeRender;
|
|
113
103
|
};
|
package/class/controller.d.ts
CHANGED
package/class/controller.js
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var PageController = /** @class */ (function () {
|
|
2
|
+
//构造函数
|
|
3
|
+
function PageController() {
|
|
4
|
+
//注入系统方法
|
|
5
|
+
this.methods = Reflect.get(window, "pageMethods");
|
|
6
|
+
this.link = new Map();
|
|
7
|
+
}
|
|
8
|
+
//接收器
|
|
9
|
+
PageController.prototype.receiver = function (method) {
|
|
10
|
+
var args = [];
|
|
11
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
12
|
+
args[_i - 1] = arguments[_i];
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
return PageController;
|
|
16
|
+
}());
|
|
17
|
+
export { PageController };
|
|
File without changes
|
|
File without changes
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Controller } from "../../class/controller";
|
|
2
2
|
import { Component } from "../../class/component";
|
|
3
3
|
import { ApiController } from "../../class/apiController";
|
|
4
|
-
|
|
5
|
-
export declare function
|
|
4
|
+
import { PageController } from "../../class/pageController";
|
|
5
|
+
export declare function Render(proto: Component, parent: ParentNode, child: Element, link: Controller | ApiController | PageController): void;
|
|
6
|
+
export declare function findComponent(collection: HTMLCollection, link: Controller | ApiController | PageController): void;
|
|
@@ -1,87 +1,38 @@
|
|
|
1
|
-
import { loadStyle } from "../../library/loader/loader";
|
|
2
|
-
import { addLabel } from "../utility/miscUtility";
|
|
3
|
-
import { getProxyObject } from "../proxy/getProxy";
|
|
4
|
-
import { Controller } from "../../class/controller";
|
|
5
|
-
import { getCodeSpaceForProps, getCodeSpaceForPublish, getCodeSpaceForQuery, getCodeSpaceForRef, getPublishMethod } from "../utility/injectUtility";
|
|
6
|
-
import { resolveProps } from "../resolver/props";
|
|
7
|
-
import { resolve_Queries } from "../resolver/query";
|
|
8
|
-
import { resolver_event } from "../cmd/v-on";
|
|
9
|
-
import { resolver_html } from "../cmd/v-html";
|
|
10
|
-
import { resolver_txt } from "../cmd/v-txt";
|
|
11
|
-
import { resolver_model } from "../cmd/v-model";
|
|
12
|
-
import { resolver_Ref } from "../cmd/v-ref";
|
|
13
1
|
import { isUnKnown } from "../utility/checkUtility";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
2
|
+
import { getTemplate } from "../../library/template/template";
|
|
3
|
+
import { styleResolve } from "../../library/style/style";
|
|
4
|
+
import { init_render, post_render, raw_render } from "../../library/render/render";
|
|
16
5
|
//渲染自定义标签
|
|
17
|
-
export function
|
|
18
|
-
//生成DOM
|
|
19
|
-
var temp = document.createElement("div");
|
|
20
|
-
temp.innerHTML = proto.getTemplate();
|
|
21
|
-
var template = temp.getElementsByTagName("template")[0];
|
|
22
|
-
var content = template.content;
|
|
6
|
+
export function Render(proto, parent, child, link) {
|
|
23
7
|
//获得模板元素
|
|
24
|
-
var tagTemplate =
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
//数据渲染对象
|
|
43
|
-
controller.proxyForMethods = getProxyObject(controller.raw_data, controller);
|
|
44
|
-
//注入receiver
|
|
45
|
-
getCodeSpaceForPublish(controller.raw_data, getPublishMethod(controller));
|
|
46
|
-
//beforeRender
|
|
47
|
-
var beforeRender = proto.getBeforeRender().bind(controller.raw_data);
|
|
48
|
-
beforeRender();
|
|
49
|
-
//给所有元素添加上npm=tag标志
|
|
50
|
-
addLabel(tagTemplate.children, proto.getName());
|
|
51
|
-
//将元素事件绑定到元素上
|
|
52
|
-
resolver_event(tagTemplate.children, proto.getMethods(), controller.proxyForMethods);
|
|
53
|
-
//渲染html
|
|
54
|
-
resolver_html(tagTemplate.children, controller.proxyForMethods);
|
|
55
|
-
//渲染text
|
|
56
|
-
resolver_txt(tagTemplate.children, controller.proxyForMethods);
|
|
57
|
-
//绑定数据
|
|
58
|
-
resolver_model(tagTemplate.children, controller.proxyForMethods);
|
|
59
|
-
//渲染属性
|
|
60
|
-
resolver_bind(tagTemplate.children, controller.proxyForMethods);
|
|
61
|
-
//beforeMount
|
|
62
|
-
var beforeMount = proto.getBeforeMount().bind(controller.raw_data);
|
|
63
|
-
beforeMount();
|
|
64
|
-
//mount
|
|
65
|
-
var renderSpace = document.createElement("div");
|
|
66
|
-
controller.root = renderSpace;
|
|
67
|
-
parent.replaceChild(renderSpace, child);
|
|
68
|
-
while (tagTemplate.hasChildNodes()) {
|
|
69
|
-
renderSpace.append(tagTemplate.firstChild);
|
|
8
|
+
var tagTemplate = getTemplate(proto);
|
|
9
|
+
//解析样式
|
|
10
|
+
styleResolve(proto.getName());
|
|
11
|
+
//两种渲染方式
|
|
12
|
+
if (child.hasAttribute("name")) {
|
|
13
|
+
//需要保持状态的渲染
|
|
14
|
+
if (link.link.has(child.getAttribute("name"))) {
|
|
15
|
+
//该name元素存在旧数据,是更新渲染
|
|
16
|
+
init_render(proto, parent, child, link, tagTemplate);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
//该name元素不存在旧数据,是第一次渲染
|
|
20
|
+
post_render(proto, parent, child, link, tagTemplate);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
//不需要保持状态的渲染
|
|
25
|
+
raw_render(proto, parent, child, link, tagTemplate);
|
|
70
26
|
}
|
|
71
|
-
//afterRender
|
|
72
|
-
var afterRender = proto.getAfterRender().bind(controller.raw_data);
|
|
73
|
-
afterRender();
|
|
74
|
-
//深度渲染
|
|
75
|
-
findComponent(controller.root.children, tagLib, controller);
|
|
76
27
|
}
|
|
77
|
-
|
|
78
|
-
export function findComponent(collection,
|
|
28
|
+
//拓展标签深度渲染
|
|
29
|
+
export function findComponent(collection, link) {
|
|
79
30
|
for (var i = 0; i < collection.length; i++) {
|
|
80
31
|
if (isUnKnown(collection[i].nodeName)) {
|
|
81
|
-
|
|
32
|
+
Render(Reflect.get(window, "tagLib").get(collection[i].nodeName.toUpperCase()), collection[i].parentNode, collection[i], link);
|
|
82
33
|
}
|
|
83
34
|
else {
|
|
84
|
-
findComponent(collection[i].children,
|
|
35
|
+
findComponent(collection[i].children, link);
|
|
85
36
|
}
|
|
86
37
|
}
|
|
87
38
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { Controller } from "../../class/controller";
|
|
2
|
-
export declare function updateRender(
|
|
2
|
+
export declare function updateRender(controller: Controller): void;
|
|
@@ -1,50 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
import { depthFindComponent } from "./depthRender";
|
|
7
|
-
export function updateRender(updater) {
|
|
1
|
+
import { bindModelForUpdater } from "../utility/miscUtility";
|
|
2
|
+
import { findComponent } from "./initRender";
|
|
3
|
+
import { getTemplate } from "../../library/template/template";
|
|
4
|
+
import { cmdForUpdate } from "../../library/cmd/cmd";
|
|
5
|
+
export function updateRender(controller) {
|
|
8
6
|
//生成DOM
|
|
9
|
-
var
|
|
10
|
-
|
|
11
|
-
var template = temp.getElementsByTagName("template")[0];
|
|
12
|
-
var tagTemplate = template.content.children[0];
|
|
13
|
-
var updateRawData = updater.proxyForMethods;
|
|
7
|
+
var tagTemplate = getTemplate(controller.proto);
|
|
8
|
+
var controllerawData = controller.proxyForMethods;
|
|
14
9
|
//beforeRender
|
|
15
|
-
var beforeRender =
|
|
10
|
+
var beforeRender = controller.proto.getBeforeRender().bind(controllerawData);
|
|
16
11
|
beforeRender();
|
|
17
12
|
//beforeUpdate
|
|
18
|
-
var beforeUpdate =
|
|
13
|
+
var beforeUpdate = controller.proto.getBeforeUpdate().bind(controllerawData);
|
|
19
14
|
beforeUpdate();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
resolver_event(tagTemplate.children, updater.proto.getMethods(), updater.proxyForMethods);
|
|
23
|
-
resolver_html(tagTemplate.children, updater.proxyForMethods);
|
|
24
|
-
resolver_txt(tagTemplate.children, updater.proxyForMethods);
|
|
25
|
-
resolver_bind(tagTemplate.children, updater.proxyForMethods);
|
|
15
|
+
//解析指令
|
|
16
|
+
cmdForUpdate(tagTemplate, controller.proto, controller);
|
|
26
17
|
//afterUpdate
|
|
27
|
-
var afterUpdate =
|
|
18
|
+
var afterUpdate = controller.proto.getAfterUpdate().bind(controllerawData);
|
|
28
19
|
afterUpdate();
|
|
29
20
|
//beforeUnmount
|
|
30
|
-
var beforeUnmount =
|
|
21
|
+
var beforeUnmount = controller.proto.getBeforeUnmount().bind(controllerawData);
|
|
31
22
|
beforeUnmount();
|
|
32
23
|
//unmount
|
|
33
|
-
while (
|
|
34
|
-
|
|
24
|
+
while (controller.root.hasChildNodes()) {
|
|
25
|
+
controller.root.removeChild(controller.root.firstChild);
|
|
35
26
|
}
|
|
36
27
|
//beforeMount
|
|
37
|
-
var beforeMount =
|
|
28
|
+
var beforeMount = controller.proto.getBeforeMount().bind(controllerawData);
|
|
38
29
|
beforeMount();
|
|
39
30
|
//mount
|
|
40
31
|
while (tagTemplate.hasChildNodes()) {
|
|
41
|
-
|
|
32
|
+
controller.root.appendChild(tagTemplate.firstChild);
|
|
42
33
|
}
|
|
43
34
|
//afterRender
|
|
44
|
-
var afterRender =
|
|
35
|
+
var afterRender = controller.proto.getAfterRender().bind(controllerawData);
|
|
45
36
|
afterRender();
|
|
46
37
|
//获取定位
|
|
47
|
-
bindModelForUpdater(
|
|
38
|
+
bindModelForUpdater(controller.root.children, controller.proxyForMethods);
|
|
48
39
|
//深度渲染
|
|
49
|
-
|
|
40
|
+
findComponent(controller.root.children, controller);
|
|
50
41
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Controller } from "../../class/controller";
|
|
2
2
|
import { ApiController } from "../../class/apiController";
|
|
3
|
+
import { PageController } from "../../class/pageController";
|
|
3
4
|
export declare function getCodeSpaceForProps(data: {}, $props: {}): void;
|
|
4
5
|
export declare function getCodeSpaceForQuery(data: {}, $query: {}): void;
|
|
5
6
|
export declare function getCodeSpaceForRef(data: {}, $ref: Map<string, Element>): void;
|
|
6
7
|
export declare function getApiCodeSpace(data: {}, method: {}): void;
|
|
7
|
-
export declare function getCommitMethod(controller: Controller | ApiController): any;
|
|
8
|
+
export declare function getCommitMethod(controller: Controller | ApiController | PageController): any;
|
|
8
9
|
export declare function getCodeSpaceForCommit(data: {}, commit: any): void;
|
|
9
|
-
export declare function getPublishMethod(controller: Controller | ApiController): any;
|
|
10
|
+
export declare function getPublishMethod(controller: Controller | ApiController | PageController): any;
|
|
10
11
|
export declare function getCodeSpaceForPublish(data: {}, publisher: any): void;
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
import { Component } from "../../class/component";
|
|
2
1
|
export declare function addLabel(nodes: HTMLCollection, component: string): void;
|
|
3
|
-
export declare function resolver(element: Element, tagLib: Map<string, Component>): void;
|
|
4
2
|
export declare function bindModelForUpdater(nodes: HTMLCollection, data: {}): void;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { initRender } from "../render/initRender";
|
|
2
1
|
export function addLabel(nodes, component) {
|
|
3
2
|
for (var i = 0; i < nodes.length; i++) {
|
|
4
3
|
nodes[i].setAttribute("cpn", component);
|
|
@@ -6,9 +5,6 @@ export function addLabel(nodes, component) {
|
|
|
6
5
|
addLabel(kk, component);
|
|
7
6
|
}
|
|
8
7
|
}
|
|
9
|
-
export function resolver(element, tagLib) {
|
|
10
|
-
initRender(tagLib.get(element.nodeName.toUpperCase()), element.parentNode, element, tagLib);
|
|
11
|
-
}
|
|
12
8
|
export function bindModelForUpdater(nodes, data) {
|
|
13
9
|
for (var i = 0; i < nodes.length; i++) {
|
|
14
10
|
var result = nodes[i].hasAttribute("v-model");
|
|
@@ -10,3 +10,14 @@ export function checkStyleLabel(tag) {
|
|
|
10
10
|
//样式未加载
|
|
11
11
|
return false;
|
|
12
12
|
}
|
|
13
|
+
export function themeStyle(component, styleLib) {
|
|
14
|
+
var template = component.getTemplate();
|
|
15
|
+
var dom = document.createElement("div");
|
|
16
|
+
dom.innerHTML = template;
|
|
17
|
+
var styles = dom.getElementsByTagName("template")[0].content.querySelectorAll("style");
|
|
18
|
+
var kk = new Map();
|
|
19
|
+
for (var i = 0; i < styles.length; i++) {
|
|
20
|
+
kk.set(styles[i].getAttribute("theme"), styles[i].nodeValue);
|
|
21
|
+
}
|
|
22
|
+
styleLib.set(component.getName(), kk);
|
|
23
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -1,28 +1,13 @@
|
|
|
1
1
|
import { Component } from "./class/component";
|
|
2
|
+
import { routerController } from "render-security/class/Router";
|
|
2
3
|
export declare class RenderJS {
|
|
3
|
-
readonly
|
|
4
|
+
readonly config: {};
|
|
4
5
|
readonly tagLib: Map<string, Component>;
|
|
6
|
+
private routerC;
|
|
7
|
+
private readonly page;
|
|
5
8
|
constructor();
|
|
9
|
+
addRouter(router: routerController): void;
|
|
6
10
|
addTag(component: Component | Component[]): void;
|
|
7
11
|
run(): void;
|
|
8
|
-
|
|
9
|
-
export declare class EmbedRenderJs {
|
|
10
|
-
private readonly apiComponent;
|
|
11
|
-
private controller;
|
|
12
|
-
constructor(config: {
|
|
13
|
-
name: string;
|
|
14
|
-
template: string;
|
|
15
|
-
data?: {};
|
|
16
|
-
computed?: {};
|
|
17
|
-
methods?: {};
|
|
18
|
-
watcher?: {};
|
|
19
|
-
beforeRender?: () => void;
|
|
20
|
-
afterRender?: () => void;
|
|
21
|
-
beforeUpdate?: () => void;
|
|
22
|
-
afterUpdate?: () => void;
|
|
23
|
-
beforeMount?: () => void;
|
|
24
|
-
beforeUnmount?: () => void;
|
|
25
|
-
});
|
|
26
|
-
render(selector: string): void;
|
|
27
|
-
commit(method: string, ...args: any[]): any;
|
|
12
|
+
private render;
|
|
28
13
|
}
|
package/index.js
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { Component } from "./class/component";
|
|
2
|
-
import ApiComponent from "./class/apiComponent";
|
|
3
2
|
import meta from "./meta/meta";
|
|
4
3
|
import { renderHtml } from "./runtime/runtime";
|
|
5
|
-
import {
|
|
6
|
-
|
|
4
|
+
import { themeStyle } from "./core/utility/styleUtility";
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
import { redirect } from "render-security/utility/redirect";
|
|
7
|
+
import { PageController } from "./class/pageController";
|
|
7
8
|
//页面RenderJs
|
|
8
9
|
var RenderJS = /** @class */ (function () {
|
|
9
10
|
//构造函数
|
|
10
11
|
function RenderJS() {
|
|
11
12
|
this.tagLib = new Map();
|
|
12
|
-
this.
|
|
13
|
+
this.page = new PageController();
|
|
14
|
+
Reflect.set(this.config, "version", meta.version);
|
|
15
|
+
Reflect.set(this.config, "theme", meta.style);
|
|
13
16
|
}
|
|
17
|
+
//添加路由器
|
|
18
|
+
RenderJS.prototype.addRouter = function (router) {
|
|
19
|
+
this.routerC = router;
|
|
20
|
+
};
|
|
14
21
|
//添加自定义标签
|
|
15
22
|
RenderJS.prototype.addTag = function (component) {
|
|
16
23
|
var _this = this;
|
|
@@ -35,30 +42,34 @@ var RenderJS = /** @class */ (function () {
|
|
|
35
42
|
};
|
|
36
43
|
//运行renderJs
|
|
37
44
|
RenderJS.prototype.run = function () {
|
|
45
|
+
if (this.routerC) {
|
|
46
|
+
this.routerC.data.beforeRouter();
|
|
47
|
+
if (typeof this.routerC.getRule(location.href) === "boolean") {
|
|
48
|
+
this.render();
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
if (this.routerC.getRule(location.href).beforeRouter()) {
|
|
52
|
+
this.render();
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
redirect("/http/400.html");
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
this.routerC.data.afterRouter();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.render();
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
RenderJS.prototype.render = function () {
|
|
38
65
|
Reflect.set(window, "tagLib", this.tagLib);
|
|
39
|
-
|
|
66
|
+
var styleLib = new Map();
|
|
67
|
+
for (var tagLibKey in this.tagLib) {
|
|
68
|
+
themeStyle(tagLibKey[tagLibKey], styleLib);
|
|
69
|
+
}
|
|
70
|
+
Reflect.set(window, "styleLib", styleLib);
|
|
71
|
+
renderHtml(document.body.children, this.page);
|
|
40
72
|
};
|
|
41
73
|
return RenderJS;
|
|
42
74
|
}());
|
|
43
75
|
export { RenderJS };
|
|
44
|
-
//嵌入式RenderJs
|
|
45
|
-
var EmbedRenderJs = /** @class */ (function () {
|
|
46
|
-
//构造函数
|
|
47
|
-
function EmbedRenderJs(config) {
|
|
48
|
-
this.apiComponent = new ApiComponent(config);
|
|
49
|
-
}
|
|
50
|
-
//渲染嵌入式app
|
|
51
|
-
EmbedRenderJs.prototype.render = function (selector) {
|
|
52
|
-
this.controller = apiRender(this.apiComponent, document.getElementById(selector), this.apiComponent.getName(), Reflect.get(window, "tagLib"), new ApiController());
|
|
53
|
-
};
|
|
54
|
-
//与嵌入式app交互
|
|
55
|
-
EmbedRenderJs.prototype.commit = function (method) {
|
|
56
|
-
var args = [];
|
|
57
|
-
for (var _i = 1; _i < arguments.length; _i++) {
|
|
58
|
-
args[_i - 1] = arguments[_i];
|
|
59
|
-
}
|
|
60
|
-
return this.controller[method](args);
|
|
61
|
-
};
|
|
62
|
-
return EmbedRenderJs;
|
|
63
|
-
}());
|
|
64
|
-
export { EmbedRenderJs };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Component } from "../../class/component";
|
|
2
|
+
import { Controller } from "../../class/controller";
|
|
3
|
+
import { ApiController } from "../../class/apiController";
|
|
4
|
+
import ApiComponent from "../../class/apiComponent";
|
|
5
|
+
export declare function cmd(tagTemplate: Element, proto: Component | ApiComponent, controller: Controller | ApiController): void;
|
|
6
|
+
export declare function cmdForUpdate(tagTemplate: Element, proto: Component, controller: Controller | ApiController): void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { addLabel } from "../../core/utility/miscUtility";
|
|
2
|
+
import { resolver_event } from "../../core/cmd/v-on";
|
|
3
|
+
import { resolver_html } from "../../core/cmd/v-html";
|
|
4
|
+
import { resolver_txt } from "../../core/cmd/v-txt";
|
|
5
|
+
import { resolver_model } from "../../core/cmd/v-model";
|
|
6
|
+
import { resolver_bind } from "../../core/cmd/v-bind";
|
|
7
|
+
export function cmd(tagTemplate, proto, controller) {
|
|
8
|
+
//给所有元素添加上npm=tag标志
|
|
9
|
+
addLabel(tagTemplate.children, proto.getName());
|
|
10
|
+
//将元素事件绑定到元素上
|
|
11
|
+
resolver_event(tagTemplate.children, proto.getMethods(), controller.proxyForMethods);
|
|
12
|
+
//渲染html
|
|
13
|
+
resolver_html(tagTemplate.children, controller.proxyForMethods);
|
|
14
|
+
//渲染text
|
|
15
|
+
resolver_txt(tagTemplate.children, controller.proxyForMethods);
|
|
16
|
+
//绑定数据
|
|
17
|
+
resolver_model(tagTemplate.children, controller.proxyForMethods);
|
|
18
|
+
//渲染属性
|
|
19
|
+
resolver_bind(tagTemplate.children, controller.proxyForMethods);
|
|
20
|
+
}
|
|
21
|
+
export function cmdForUpdate(tagTemplate, proto, controller) {
|
|
22
|
+
//给所有元素添加上npm=tag标志
|
|
23
|
+
addLabel(tagTemplate.children, proto.getName());
|
|
24
|
+
//将元素事件绑定到元素上
|
|
25
|
+
resolver_event(tagTemplate.children, proto.getMethods(), controller.proxyForMethods);
|
|
26
|
+
//渲染html
|
|
27
|
+
resolver_html(tagTemplate.children, controller.proxyForMethods);
|
|
28
|
+
//渲染text
|
|
29
|
+
resolver_txt(tagTemplate.children, controller.proxyForMethods);
|
|
30
|
+
//绑定数据
|
|
31
|
+
resolver_model(tagTemplate.children, controller.proxyForMethods);
|
|
32
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getCodeSpaceForProps, getCodeSpaceForQuery, getCodeSpaceForRef, } from "../../core/utility/injectUtility";
|
|
2
|
+
import { resolveProps } from "../../core/resolver/props";
|
|
3
|
+
import { resolve_Queries } from "../../core/resolver/query";
|
|
4
|
+
import { resolver_Ref } from "../../core/cmd/v-ref";
|
|
5
|
+
export function inject(controller, tagTemplate) {
|
|
6
|
+
//注入props
|
|
7
|
+
getCodeSpaceForProps(controller.raw_data, resolveProps(tagTemplate, controller.proto.getProps()));
|
|
8
|
+
//注入query
|
|
9
|
+
getCodeSpaceForQuery(controller.raw_data, resolve_Queries());
|
|
10
|
+
//注入ref
|
|
11
|
+
getCodeSpaceForRef(controller.raw_data, resolver_Ref(tagTemplate.children));
|
|
12
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function loadStyle(
|
|
1
|
+
export declare function loadStyle(tag: string, theme: string, styleData: string): void;
|
package/library/loader/loader.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { checkStyleLabel } from "../../core/utility/styleUtility";
|
|
2
|
-
export function loadStyle(
|
|
2
|
+
export function loadStyle(tag, theme, styleData) {
|
|
3
3
|
if (!checkStyleLabel(tag)) {
|
|
4
4
|
var style = document.createElement('style');
|
|
5
|
-
var text = document.createTextNode(
|
|
5
|
+
var text = document.createTextNode(styleData);
|
|
6
6
|
style.appendChild(text);
|
|
7
7
|
style.setAttribute("tag", tag.toUpperCase());
|
|
8
|
+
style.setAttribute("theme", theme);
|
|
8
9
|
var head = document.getElementsByTagName('head')[0];
|
|
9
10
|
head.appendChild(style);
|
|
10
11
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Controller } from "../../class/controller";
|
|
2
|
+
import { Component } from "../../class/component";
|
|
3
|
+
import { ApiController } from "../../class/apiController";
|
|
4
|
+
import { PageController } from "../../class/pageController";
|
|
5
|
+
export declare function init_render(proto: Component, parent: ParentNode, child: Element, link: Controller | ApiController | PageController, tagTemplate: Element): void;
|
|
6
|
+
export declare function post_render(proto: Component, parent: ParentNode, child: Element, link: Controller | ApiController | PageController, tagTemplate: Element): void;
|
|
7
|
+
export declare function raw_render(proto: Component, parent: ParentNode, child: Element, link: Controller | ApiController | PageController, tagTemplate: Element): void;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Controller } from "../../class/controller";
|
|
2
|
+
import { getCodeSpaceForCommit, getCodeSpaceForPublish, getCommitMethod, getPublishMethod } from "../../core/utility/injectUtility";
|
|
3
|
+
import { getProxyObject } from "../../core/proxy/getProxy";
|
|
4
|
+
import { findComponent } from "../../core/render/initRender";
|
|
5
|
+
import { inject } from "../inject/inject";
|
|
6
|
+
import { cmd } from "../cmd/cmd";
|
|
7
|
+
export function init_render(proto, parent, child, link, tagTemplate) {
|
|
8
|
+
//获取控制对象
|
|
9
|
+
var controller = new Controller();
|
|
10
|
+
//保持控制器模板对象
|
|
11
|
+
controller.proto = proto;
|
|
12
|
+
//复制原始数据对象到控制对象
|
|
13
|
+
controller.raw_data = link.link.get(child.getAttribute("name"));
|
|
14
|
+
//向raw_data中注入元数据
|
|
15
|
+
inject(controller, tagTemplate);
|
|
16
|
+
//数据渲染代理对象
|
|
17
|
+
controller.proxyForMethods = getProxyObject(controller.raw_data, controller);
|
|
18
|
+
//注入commit
|
|
19
|
+
getCodeSpaceForCommit(controller.raw_data, getCommitMethod(link));
|
|
20
|
+
//注入receiver
|
|
21
|
+
getCodeSpaceForPublish(controller.raw_data, getPublishMethod(controller));
|
|
22
|
+
//beforeRender
|
|
23
|
+
var beforeRender = proto.getBeforeRender().bind(controller.raw_data);
|
|
24
|
+
beforeRender();
|
|
25
|
+
//解析指令
|
|
26
|
+
cmd(tagTemplate, proto, controller);
|
|
27
|
+
//beforeMount
|
|
28
|
+
var beforeMount = proto.getBeforeMount().bind(controller.raw_data);
|
|
29
|
+
beforeMount();
|
|
30
|
+
//mount
|
|
31
|
+
var renderSpace = document.createElement("div");
|
|
32
|
+
parent.replaceChild(renderSpace, child);
|
|
33
|
+
while (tagTemplate.hasChildNodes()) {
|
|
34
|
+
renderSpace.append(tagTemplate.firstChild);
|
|
35
|
+
}
|
|
36
|
+
//afterRender
|
|
37
|
+
var afterRender = proto.getAfterRender().bind(controller.raw_data);
|
|
38
|
+
afterRender();
|
|
39
|
+
//指定渲染空间
|
|
40
|
+
controller.root = renderSpace;
|
|
41
|
+
link.to.push(controller);
|
|
42
|
+
//深度渲染
|
|
43
|
+
findComponent(tagTemplate.children, controller);
|
|
44
|
+
}
|
|
45
|
+
export function post_render(proto, parent, child, link, tagTemplate) {
|
|
46
|
+
//获取控制对象
|
|
47
|
+
var controller = new Controller();
|
|
48
|
+
//保持控制器模板对象
|
|
49
|
+
controller.proto = proto;
|
|
50
|
+
//复制原始数据对象到控制对象
|
|
51
|
+
controller.raw_data = Object.create(proto.getData());
|
|
52
|
+
//向raw_data中注入元数据
|
|
53
|
+
inject(controller, tagTemplate);
|
|
54
|
+
//保持数据代理对象
|
|
55
|
+
controller.proxyForMethods = getProxyObject(controller.raw_data, controller);
|
|
56
|
+
//注入commit
|
|
57
|
+
getCodeSpaceForCommit(controller.raw_data, getCommitMethod(link));
|
|
58
|
+
//注入receiver
|
|
59
|
+
getCodeSpaceForPublish(controller.raw_data, getPublishMethod(controller));
|
|
60
|
+
//beforeRender
|
|
61
|
+
var beforeRender = proto.getBeforeRender().bind(controller.raw_data);
|
|
62
|
+
beforeRender();
|
|
63
|
+
//解析指令
|
|
64
|
+
cmd(tagTemplate, proto, controller);
|
|
65
|
+
//beforeMount
|
|
66
|
+
var beforeMount = proto.getBeforeMount().bind(controller.raw_data);
|
|
67
|
+
beforeMount();
|
|
68
|
+
//mount
|
|
69
|
+
var renderSpace = document.createElement("div");
|
|
70
|
+
controller.root = renderSpace;
|
|
71
|
+
parent.replaceChild(renderSpace, child);
|
|
72
|
+
while (tagTemplate.hasChildNodes()) {
|
|
73
|
+
renderSpace.append(tagTemplate.firstChild);
|
|
74
|
+
}
|
|
75
|
+
//afterRender
|
|
76
|
+
var afterRender = proto.getAfterRender().bind(controller.raw_data);
|
|
77
|
+
afterRender();
|
|
78
|
+
link.to.push(controller);
|
|
79
|
+
//深度渲染
|
|
80
|
+
findComponent(controller.root.children, controller);
|
|
81
|
+
}
|
|
82
|
+
export function raw_render(proto, parent, child, link, tagTemplate) {
|
|
83
|
+
//获取控制对象
|
|
84
|
+
var controller = new Controller();
|
|
85
|
+
//保持控制对象原型对象
|
|
86
|
+
controller.proto = proto;
|
|
87
|
+
//向raw_data中注入元数据
|
|
88
|
+
inject(controller, tagTemplate);
|
|
89
|
+
//复制原始数据对象到控制对象
|
|
90
|
+
controller.raw_data = Object.create(proto.getData());
|
|
91
|
+
//数据渲染对象
|
|
92
|
+
controller.proxyForMethods = getProxyObject(controller.raw_data, controller);
|
|
93
|
+
//注入commit
|
|
94
|
+
getCodeSpaceForCommit(controller.raw_data, getCommitMethod(link));
|
|
95
|
+
//注入receiver
|
|
96
|
+
getCodeSpaceForPublish(controller.raw_data, getPublishMethod(controller));
|
|
97
|
+
//beforeRender
|
|
98
|
+
var beforeRender = proto.getBeforeRender().bind(controller.raw_data);
|
|
99
|
+
beforeRender();
|
|
100
|
+
//解析指令
|
|
101
|
+
cmd(tagTemplate, proto, controller);
|
|
102
|
+
//beforeMount
|
|
103
|
+
var beforeMount = proto.getBeforeMount().bind(controller.raw_data);
|
|
104
|
+
beforeMount();
|
|
105
|
+
//mount
|
|
106
|
+
var renderSpace = document.createElement("div");
|
|
107
|
+
controller.root = renderSpace;
|
|
108
|
+
parent.replaceChild(renderSpace, child);
|
|
109
|
+
while (tagTemplate.hasChildNodes()) {
|
|
110
|
+
renderSpace.append(tagTemplate.firstChild);
|
|
111
|
+
}
|
|
112
|
+
//afterRender
|
|
113
|
+
var afterRender = proto.getAfterRender().bind(controller.raw_data);
|
|
114
|
+
afterRender();
|
|
115
|
+
link.to.push(controller);
|
|
116
|
+
//深度渲染
|
|
117
|
+
findComponent(controller.root.children, controller);
|
|
118
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function styleResolve(tag: string): void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import { sessionStorageEngin_read } from "render-status/read/read";
|
|
3
|
+
import { loadStyle } from "../loader/loader";
|
|
4
|
+
export function styleResolve(tag) {
|
|
5
|
+
var theme = sessionStorageEngin_read("theme");
|
|
6
|
+
if (Reflect.get(window, "styleLib").get(tag).get(theme) === undefined) {
|
|
7
|
+
console.log("tag:" + tag + "has no them" + theme);
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
loadStyle(tag, theme, Reflect.get(window, "styleLib").get(tag).get(theme));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function getTemplate(proto) {
|
|
2
|
+
//生成DOM
|
|
3
|
+
var temp = document.createElement("div");
|
|
4
|
+
temp.innerHTML = proto.getTemplate();
|
|
5
|
+
var template = temp.getElementsByTagName("template")[0];
|
|
6
|
+
var content = template.content;
|
|
7
|
+
//获得模板元素
|
|
8
|
+
return content.firstElementChild;
|
|
9
|
+
}
|
package/meta/meta.d.ts
CHANGED
package/meta/meta.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "render-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "The router for render-js",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -12,5 +12,9 @@
|
|
|
12
12
|
"url": "https://github.com//render-js/render.git"
|
|
13
13
|
},
|
|
14
14
|
"author": "mutian",
|
|
15
|
-
"license": "MIT"
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"render-security": "^1.0.4",
|
|
18
|
+
"render-status": "^1.0.0"
|
|
19
|
+
}
|
|
16
20
|
}
|
package/runtime/runtime.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function renderHtml(collection: HTMLCollection,
|
|
1
|
+
import { PageController } from "../class/pageController";
|
|
2
|
+
export declare function renderHtml(collection: HTMLCollection, link: PageController): void;
|
package/runtime/runtime.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { isUnKnown } from "../core/utility/checkUtility";
|
|
2
|
-
import {
|
|
2
|
+
import { Render } from "../core/render/initRender";
|
|
3
3
|
//检查元素是否为基元素
|
|
4
|
-
export function renderHtml(collection,
|
|
4
|
+
export function renderHtml(collection, link) {
|
|
5
5
|
//遍历element节点,判断是否为自定义标签
|
|
6
6
|
for (var i = 0; i < collection.length; i++) {
|
|
7
7
|
if (isUnKnown(collection[i].nodeName.toUpperCase())) {
|
|
8
8
|
//自定义标签
|
|
9
|
-
|
|
9
|
+
Render(Reflect.get(window, "tagLib").get(collection[i].nodeName.toUpperCase()), collection[i].parentNode, collection[i], link);
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
12
|
//非自定义标签,深度解析
|
|
13
|
-
renderHtml(collection[i].children,
|
|
13
|
+
renderHtml(collection[i].children, link);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { Component } from "../../class/component";
|
|
2
|
-
import ApiComponent from "../../class/apiComponent";
|
|
3
|
-
import { ApiController } from "../../class/apiController";
|
|
4
|
-
export declare function apiRender(proto: ApiComponent, parent: ParentNode, attr: string, tagLib: Map<string, Component>, link: ApiController): any;
|
package/core/render/apiRender.js
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { loadStyle } from "../../library/loader/loader";
|
|
2
|
-
import { addLabel } from "../utility/miscUtility";
|
|
3
|
-
import { getProxyObjectForApi } from "../proxy/getProxy";
|
|
4
|
-
import { ApiController } from "../../class/apiController";
|
|
5
|
-
import { getApiCodeSpace, getCodeSpaceForRef } from "../utility/injectUtility";
|
|
6
|
-
import { findComponent } from "./initRender";
|
|
7
|
-
import { resolver_Ref } from "../cmd/v-ref";
|
|
8
|
-
import { resolver_html } from "../cmd/v-html";
|
|
9
|
-
import { resolver_txt } from "../cmd/v-txt";
|
|
10
|
-
import { resolver_model } from "../cmd/v-model";
|
|
11
|
-
import { resolver_bind } from "../cmd/v-bind";
|
|
12
|
-
import { resolver_event } from "../cmd/v-on";
|
|
13
|
-
//渲染自定义标签
|
|
14
|
-
export function apiRender(proto, parent, attr, tagLib, link) {
|
|
15
|
-
//获取控制对象
|
|
16
|
-
var apiController = new ApiController();
|
|
17
|
-
apiController.proto = proto;
|
|
18
|
-
//复制原始数据对象到控制对象
|
|
19
|
-
apiController.raw_data = Object.create(proto.getData());
|
|
20
|
-
//数据渲染对象
|
|
21
|
-
apiController.proxyForMethods = getProxyObjectForApi(apiController.raw_data, apiController);
|
|
22
|
-
//beforeRender
|
|
23
|
-
var beforeRender = proto.getBeforeRender().bind(apiController.raw_data);
|
|
24
|
-
beforeRender();
|
|
25
|
-
//Render
|
|
26
|
-
var temp = document.createElement("div");
|
|
27
|
-
temp.innerHTML = proto.getTemplate();
|
|
28
|
-
var template = temp.getElementsByTagName("template")[0];
|
|
29
|
-
var content = template.content;
|
|
30
|
-
//获取到模板
|
|
31
|
-
var tagTemplate = content.firstElementChild;
|
|
32
|
-
addLabel(tagTemplate.children, proto.getName());
|
|
33
|
-
resolver_event(tagTemplate.children, proto.getMethods(), apiController.proxyForMethods);
|
|
34
|
-
resolver_html(tagTemplate.children, apiController.proxyForMethods);
|
|
35
|
-
resolver_txt(tagTemplate.children, apiController.proxyForMethods);
|
|
36
|
-
resolver_model(tagTemplate.children, apiController.proxyForMethods);
|
|
37
|
-
resolver_bind(tagTemplate.children, apiController.proxyForMethods);
|
|
38
|
-
//获取到模板样式
|
|
39
|
-
var tagStyle = content.lastElementChild;
|
|
40
|
-
loadStyle(tagStyle.childNodes[0].nodeValue, proto.getName());
|
|
41
|
-
//注入ref
|
|
42
|
-
getCodeSpaceForRef(apiController.raw_data, resolver_Ref(tagTemplate.children));
|
|
43
|
-
//mount
|
|
44
|
-
while (parent.hasChildNodes()) {
|
|
45
|
-
parent.removeChild(parent.firstChild);
|
|
46
|
-
}
|
|
47
|
-
while (tagTemplate.hasChildNodes()) {
|
|
48
|
-
parent.append(tagTemplate.firstChild);
|
|
49
|
-
}
|
|
50
|
-
//afterRender
|
|
51
|
-
var afterRender = proto.getAfterRender().bind(apiController.raw_data);
|
|
52
|
-
afterRender();
|
|
53
|
-
//切换根组件
|
|
54
|
-
apiController.root = parent;
|
|
55
|
-
//深度渲染
|
|
56
|
-
findComponent(tagTemplate.children, tagLib, link);
|
|
57
|
-
//返回api对象
|
|
58
|
-
getApiCodeSpace(apiController.raw_data, proto.getMethods());
|
|
59
|
-
return apiController.raw_data;
|
|
60
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Controller } from "../../class/controller";
|
|
2
|
-
import { Component } from "../../class/component";
|
|
3
|
-
import { ApiController } from "../../class/apiController";
|
|
4
|
-
export declare function depthRender(proto: Component, parent: ParentNode, child: Element, tagLib: Map<string, Component>, link: Controller | ApiController): void;
|
|
5
|
-
export declare function depthFindComponent(collection: HTMLCollection, tagLib: Map<string, Component>, link: Controller | ApiController): void;
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
import { loadStyle } from "../../library/loader/loader";
|
|
2
|
-
import { addLabel } from "../utility/miscUtility";
|
|
3
|
-
import { getProxyForInject, getProxyObject } from "../proxy/getProxy";
|
|
4
|
-
import { Controller } from "../../class/controller";
|
|
5
|
-
import { getCodeSpaceForCommit, getCodeSpaceForProps, getCodeSpaceForPublish, getCodeSpaceForQuery, getCodeSpaceForRef, getCommitMethod, getPublishMethod, } from "../utility/injectUtility";
|
|
6
|
-
import { resolveProps } from "../resolver/props";
|
|
7
|
-
import { resolve_Queries, } from "../resolver/query";
|
|
8
|
-
import { resolver_event } from "../cmd/v-on";
|
|
9
|
-
import { resolver_html } from "../cmd/v-html";
|
|
10
|
-
import { resolver_txt } from "../cmd/v-txt";
|
|
11
|
-
import { resolver_model } from "../cmd/v-model";
|
|
12
|
-
import { resolver_Ref } from "../cmd/v-ref";
|
|
13
|
-
import { isUnKnown } from "../utility/checkUtility";
|
|
14
|
-
import { resolver_bind } from "../cmd/v-bind";
|
|
15
|
-
//渲染自定义标签
|
|
16
|
-
export function depthRender(proto, parent, child, tagLib, link) {
|
|
17
|
-
//生成DOM
|
|
18
|
-
var temp = document.createElement("div");
|
|
19
|
-
temp.innerHTML = proto.getTemplate();
|
|
20
|
-
var template = temp.getElementsByTagName("template")[0];
|
|
21
|
-
var content = template.content;
|
|
22
|
-
//获得模板元素
|
|
23
|
-
var tagTemplate = content.firstElementChild;
|
|
24
|
-
//解析元素上的静态属性
|
|
25
|
-
var props = resolveProps(tagTemplate, proto);
|
|
26
|
-
//获得模板样式元素
|
|
27
|
-
var tagStyle = content.lastElementChild;
|
|
28
|
-
//向head位置添加该组件的样式
|
|
29
|
-
loadStyle(tagStyle.childNodes[0].nodeValue, proto.getName());
|
|
30
|
-
//两种渲染方式
|
|
31
|
-
if (child.hasAttribute("name")) {
|
|
32
|
-
if (link.link.has(child.getAttribute("name"))) {
|
|
33
|
-
//获取控制对象
|
|
34
|
-
var controller = new Controller();
|
|
35
|
-
controller.proto = proto;
|
|
36
|
-
//复制原始数据对象到控制对象
|
|
37
|
-
controller.raw_data = link.link.get(child.getAttribute("name"));
|
|
38
|
-
//注入props
|
|
39
|
-
getCodeSpaceForProps(controller.raw_data, resolveProps(tagTemplate.firstElementChild, controller.proto.getProps()));
|
|
40
|
-
//注入query
|
|
41
|
-
getCodeSpaceForQuery(controller.raw_data, resolve_Queries());
|
|
42
|
-
//注入ref
|
|
43
|
-
getCodeSpaceForRef(controller.raw_data, resolver_Ref(tagTemplate.children));
|
|
44
|
-
//数据渲染对象
|
|
45
|
-
controller.proxyForMethods = getProxyObject(controller.raw_data, controller);
|
|
46
|
-
//注入commit
|
|
47
|
-
getCodeSpaceForCommit(controller.raw_data, getCommitMethod(link));
|
|
48
|
-
//注入receiver
|
|
49
|
-
getCodeSpaceForPublish(controller.raw_data, getPublishMethod(controller));
|
|
50
|
-
//beforeRender
|
|
51
|
-
var beforeRender = proto.getBeforeRender().bind(controller.raw_data);
|
|
52
|
-
beforeRender();
|
|
53
|
-
//给所有元素添加上npm=tag标志
|
|
54
|
-
addLabel(tagTemplate.children, proto.getName());
|
|
55
|
-
//将元素事件绑定到元素上
|
|
56
|
-
resolver_event(tagTemplate.children, proto.getMethods(), controller.proxyForMethods);
|
|
57
|
-
//渲染html
|
|
58
|
-
resolver_html(tagTemplate.children, controller.proxyForMethods);
|
|
59
|
-
//渲染text
|
|
60
|
-
resolver_txt(tagTemplate.children, controller.proxyForMethods);
|
|
61
|
-
//绑定数据
|
|
62
|
-
resolver_model(tagTemplate.children, controller.proxyForMethods);
|
|
63
|
-
//渲染属性
|
|
64
|
-
resolver_bind(tagTemplate.children, controller.proxyForMethods);
|
|
65
|
-
//beforeMount
|
|
66
|
-
var beforeMount = proto.getBeforeMount().bind(controller.raw_data);
|
|
67
|
-
beforeMount();
|
|
68
|
-
//mount
|
|
69
|
-
var renderSpace = document.createElement("div");
|
|
70
|
-
parent.replaceChild(renderSpace, child);
|
|
71
|
-
while (tagTemplate.hasChildNodes()) {
|
|
72
|
-
renderSpace.append(tagTemplate.firstChild);
|
|
73
|
-
}
|
|
74
|
-
//afterRender
|
|
75
|
-
var afterRender = proto.getAfterRender().bind(controller.raw_data);
|
|
76
|
-
afterRender();
|
|
77
|
-
//指定渲染空间
|
|
78
|
-
controller.root = renderSpace;
|
|
79
|
-
link.to.push(controller);
|
|
80
|
-
//深度渲染
|
|
81
|
-
depthFindComponent(tagTemplate.children, tagLib, controller);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
//获取控制对象
|
|
85
|
-
var controller = new Controller();
|
|
86
|
-
controller.proto = proto;
|
|
87
|
-
controller.preRender = true;
|
|
88
|
-
//复制原始数据对象到控制对象
|
|
89
|
-
controller.raw_data = Object.create(proto.getData());
|
|
90
|
-
//注入props
|
|
91
|
-
getCodeSpaceForProps(controller.raw_data, resolveProps(tagTemplate.firstElementChild, controller.proto.getProps()));
|
|
92
|
-
//注入query
|
|
93
|
-
getCodeSpaceForQuery(controller.raw_data, resolve_Queries());
|
|
94
|
-
//注入ref
|
|
95
|
-
getCodeSpaceForRef(controller.raw_data, resolver_Ref(tagTemplate.children));
|
|
96
|
-
//数据渲染对象
|
|
97
|
-
controller.proxyForMethods = getProxyObject(controller.raw_data, controller);
|
|
98
|
-
getCodeSpaceForCommit(controller.raw_data, getCommitMethod(link));
|
|
99
|
-
//注入receiver
|
|
100
|
-
getCodeSpaceForPublish(controller.raw_data, getPublishMethod(controller));
|
|
101
|
-
//beforeRender
|
|
102
|
-
var beforeRender = proto.getBeforeRender().bind(controller.raw_data);
|
|
103
|
-
beforeRender();
|
|
104
|
-
//给所有元素添加上npm=tag标志
|
|
105
|
-
addLabel(tagTemplate.children, proto.getName());
|
|
106
|
-
//将元素事件绑定到元素上
|
|
107
|
-
resolver_event(tagTemplate.children, proto.getMethods(), controller.proxyForMethods);
|
|
108
|
-
//渲染html
|
|
109
|
-
resolver_html(tagTemplate.children, controller.proxyForMethods);
|
|
110
|
-
//渲染text
|
|
111
|
-
resolver_txt(tagTemplate.children, controller.proxyForMethods);
|
|
112
|
-
//绑定数据
|
|
113
|
-
resolver_model(tagTemplate.children, controller.proxyForMethods);
|
|
114
|
-
//渲染属性
|
|
115
|
-
resolver_bind(tagTemplate.children, controller.proxyForMethods);
|
|
116
|
-
//beforeMount
|
|
117
|
-
var beforeMount = proto.getBeforeMount().bind(controller.raw_data);
|
|
118
|
-
beforeMount();
|
|
119
|
-
//mount
|
|
120
|
-
var renderSpace = document.createElement("div");
|
|
121
|
-
controller.root = renderSpace;
|
|
122
|
-
parent.replaceChild(renderSpace, child);
|
|
123
|
-
while (tagTemplate.hasChildNodes()) {
|
|
124
|
-
renderSpace.append(tagTemplate.firstChild);
|
|
125
|
-
}
|
|
126
|
-
//afterRender
|
|
127
|
-
var afterRender = proto.getAfterRender().bind(controller.raw_data);
|
|
128
|
-
afterRender();
|
|
129
|
-
if (controller.preRender) {
|
|
130
|
-
link.link.set(child.getAttribute("name"), controller.raw_data);
|
|
131
|
-
}
|
|
132
|
-
link.to.push(controller);
|
|
133
|
-
//深度渲染
|
|
134
|
-
depthFindComponent(controller.root.children, tagLib, controller);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
//获取控制对象
|
|
139
|
-
var controller = new Controller();
|
|
140
|
-
controller.proto = proto;
|
|
141
|
-
//复制原始数据对象到控制对象
|
|
142
|
-
controller.raw_data = Object.create(proto.getData());
|
|
143
|
-
//数据渲染对象
|
|
144
|
-
controller.proxyForMethods = getProxyObject(controller.raw_data, controller);
|
|
145
|
-
//注入commit
|
|
146
|
-
getCodeSpaceForCommit(controller.raw_data, getCommitMethod(link));
|
|
147
|
-
//注入receiver
|
|
148
|
-
getCodeSpaceForPublish(controller.raw_data, getPublishMethod(controller));
|
|
149
|
-
//beforeRender
|
|
150
|
-
var beforeRender = proto.getBeforeRender().bind(controller.raw_data);
|
|
151
|
-
beforeRender();
|
|
152
|
-
//注入props
|
|
153
|
-
getCodeSpaceForProps(controller.raw_data, getProxyForInject(props));
|
|
154
|
-
//注入query
|
|
155
|
-
getCodeSpaceForQuery(controller.raw_data, resolve_Queries());
|
|
156
|
-
//注入ref
|
|
157
|
-
getCodeSpaceForRef(controller.raw_data, resolver_Ref(tagTemplate.children));
|
|
158
|
-
//给所有元素添加上npm=tag标志
|
|
159
|
-
addLabel(tagTemplate.children, proto.getName());
|
|
160
|
-
//将元素事件绑定到元素上
|
|
161
|
-
resolver_event(tagTemplate.children, proto.getMethods(), controller.proxyForMethods);
|
|
162
|
-
//渲染html
|
|
163
|
-
resolver_html(tagTemplate.children, controller.proxyForMethods);
|
|
164
|
-
//渲染text
|
|
165
|
-
resolver_txt(tagTemplate.children, controller.proxyForMethods);
|
|
166
|
-
//绑定数据
|
|
167
|
-
resolver_model(tagTemplate.children, controller.proxyForMethods);
|
|
168
|
-
//渲染属性
|
|
169
|
-
resolver_bind(tagTemplate.children, controller.proxyForMethods);
|
|
170
|
-
//beforeMount
|
|
171
|
-
var beforeMount = proto.getBeforeMount().bind(controller.raw_data);
|
|
172
|
-
beforeMount();
|
|
173
|
-
//mount
|
|
174
|
-
var renderSpace = document.createElement("div");
|
|
175
|
-
controller.root = renderSpace;
|
|
176
|
-
parent.replaceChild(renderSpace, child);
|
|
177
|
-
while (tagTemplate.hasChildNodes()) {
|
|
178
|
-
renderSpace.append(tagTemplate.firstChild);
|
|
179
|
-
}
|
|
180
|
-
//afterRender
|
|
181
|
-
var afterRender = proto.getAfterRender().bind(controller.raw_data);
|
|
182
|
-
afterRender();
|
|
183
|
-
link.to.push(controller);
|
|
184
|
-
//深度渲染
|
|
185
|
-
depthFindComponent(controller.root.children, tagLib, controller);
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
//继续渲染
|
|
189
|
-
export function depthFindComponent(collection, tagLib, link) {
|
|
190
|
-
for (var i = 0; i < collection.length; i++) {
|
|
191
|
-
if (isUnKnown(collection[i].nodeName)) {
|
|
192
|
-
depthRender(tagLib.get(collection[i].nodeName.toUpperCase()), collection[i].parentNode, collection[i], tagLib, link);
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
depthFindComponent(collection[i].children, tagLib, link);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|