Skip to content

Commit 50bbcaa

Browse files
committed
[ Add ] Async rendering based on Model setters
[ Add ] Getting started document [ Optimize ] Babel configuration
1 parent a7fd66a commit 50bbcaa

File tree

12 files changed

+1994
-183
lines changed

12 files changed

+1994
-183
lines changed

.babelrc

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"presets": [
3+
[
4+
"@babel/preset-env",
5+
{
6+
"targets": {
7+
"node": "6.3.0"
8+
}
9+
}
10+
]
11+
],
12+
"plugins": [
13+
[
14+
"babel-plugin-inline-import",
15+
{
16+
"extensions": [
17+
".html",
18+
".css",
19+
".json"
20+
]
21+
}
22+
]
23+
],
24+
"env": {
25+
"pack": {
26+
"presets": [
27+
"@babel/preset-env"
28+
]
29+
}
30+
}
31+
}

.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
.editorconfig
22
.eslintrc.json
3+
.babelrc
34
test/
45
.esdoc.json
56
docs/

ReadMe.md

Lines changed: 182 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,188 @@
33
**Template engine** based on **HTML 5** & **ECMAScript 6**
44

55
[![NPM Dependency](https://david-dm.org/EasyWebApp/DOM-Renderer.svg)](https://david-dm.org/EasyWebApp/DOM-Renderer)
6-
76
[![Build Status](https://travis-ci.com/EasyWebApp/DOM-Renderer.svg?branch=master)](https://travis-ci.com/EasyWebApp/DOM-Renderer)
7+
[![](https://data.jsdelivr.com/v1/package/npm/dom-renderer/badge?style=rounded)](https://www.jsdelivr.com/package/npm/dom-renderer)
88

99
[![NPM](https://nodei.co/npm/dom-renderer.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/dom-renderer/)
10+
11+
## Data binding
12+
13+
[`index.json`](https://github.com/EasyWebApp/DOM-Renderer/blob/master/test/source/index.json)
14+
15+
```JSON
16+
{
17+
"name": "TechQuery",
18+
"profile": {
19+
"URL": "https://tech-query.me/",
20+
"title": "Web/JavaScript full-stack engineer"
21+
},
22+
"job": [
23+
{ "title": "freeCodeCamp" },
24+
{ "title": "MVP" },
25+
{ "title": "KaiYuanShe" }
26+
]
27+
}
28+
```
29+
30+
[`index.html`](https://github.com/EasyWebApp/DOM-Renderer/blob/master/test/source/index.html)
31+
32+
```HTML
33+
<template>
34+
<h1 hidden="${! view.name}">
35+
Hello, ${view.name} !
36+
</h1>
37+
38+
<ul data-view="profile">
39+
<template>
40+
<li title="${scope.name}">
41+
${view.URL}
42+
</li>
43+
<li>${view.title}</li>
44+
</template>
45+
</ul>
46+
47+
<ol data-view="job">
48+
<template>
49+
<li>${view.title}</li>
50+
</template>
51+
</ol>
52+
</template>
53+
```
54+
55+
`index.js`
56+
57+
```JavaScript
58+
import View from 'dom-renderer';
59+
60+
import template from './index.html';
61+
import data from './index.json';
62+
63+
const view = new View( template );
64+
65+
view.render( data ).then(() => console.log(view + ''));
66+
```
67+
68+
**Console output** (formatted)
69+
70+
```HTML
71+
<h1>TechQuery</h1>
72+
73+
<ul data-view="profile">
74+
<template>
75+
<li title="${scope.name}">
76+
${view.URL}
77+
</li>
78+
<li>${view.title}</li>
79+
</template>
80+
<li title="TechQuery">https://tech-query.me/</li>
81+
<li>Web/JavaScript full-stack engineer</li>
82+
</ul>
83+
84+
<ol data-view="job">
85+
<template>
86+
<li>${view.title}</li>
87+
</template>
88+
<li>freeCodeCamp</li>
89+
<li>MVP</li>
90+
<li>KaiYuanShe</li>
91+
</ol>
92+
```
93+
94+
## Installation
95+
96+
### Web browser
97+
98+
```HTML
99+
<script src="https://cdn.jsdelivr.net/npm/@babel/polyfill@7.2.5/dist/polyfill.min.js"></script>
100+
<script src="https://cdn.jsdelivr.net/npm/dom-renderer"></script>
101+
```
102+
103+
### Node.JS
104+
105+
```Shell
106+
npm install dom-renderer @babel/polyfill jsdom
107+
```
108+
109+
```JavaScript
110+
import '@babel/ployfill';
111+
import 'dom-renderer/dist/polyfill';
112+
import View from 'dom-renderer';
113+
```
114+
115+
## Babel configuration
116+
117+
```Shell
118+
npm install -D \
119+
@babel/cli \
120+
@babel/core \
121+
@babel/preset-env \
122+
babel-plugin-inline-import
123+
```
124+
125+
`.babelrc`
126+
127+
```JSON
128+
{
129+
"presets": [
130+
"@babel/preset-env"
131+
],
132+
"plugins": [
133+
[
134+
"babel-plugin-inline-import",
135+
{
136+
"extensions": [
137+
".html",
138+
".css",
139+
".json"
140+
]
141+
}
142+
]
143+
]
144+
}
145+
```
146+
147+
## Advanced usage
148+
149+
Follow [the example above](#data-binding)
150+
151+
### Updating
152+
153+
```JavaScript
154+
data.profile = null; // Remove a Sub view
155+
156+
data.job.unshift({ // Reuse all Sub views of the list,
157+
title: 'FYClub' // then add a new Sub view at end
158+
});
159+
160+
view.render( data );
161+
```
162+
163+
### Getter
164+
165+
```JavaScript
166+
console.log( view.name ); // 'TechQuery'
167+
168+
console.log( view.profile ); // View {}
169+
170+
console.log( view.job ); // [View {}, View {}, View {}]
171+
```
172+
173+
### Setter
174+
175+
```JavaScript
176+
import { nextTick } from 'dom-renderer';
177+
178+
document.body.append(... view.topNodes);
179+
180+
view.name = 'tech-query';
181+
182+
nextTick().then(() => {
183+
184+
console.log( document.querySelector('h1').textContent ); // 'tech-query'
185+
});
186+
```
187+
188+
## Typical cases
189+
190+
https://www.npmjs.com/browse/depended/dom-renderer

0 commit comments

Comments
 (0)