-
Notifications
You must be signed in to change notification settings - Fork 0
/
function.js
81 lines (72 loc) · 2 KB
/
function.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
;(function () {
'use strict'
var templateInput = document.getElementById('template')
var dataInput = document.getElementById('data')
var resultNode = document.getElementById('result')
var templateDemoNode = document.getElementById('tmpl-demo')
var templateDataNode = document.getElementById('tmpl-data')
/**
* Renders error messages
*
* @param {string} title Error title
* @param {Error} error Error object
*/
function renderError(title, error) {
resultNode.innerHTML = tmpl('tmpl-error', { title: title, error: error })
}
/**
* Renders the templating result
*
* @param {event} event Click event
*/
function render(event) {
event.preventDefault()
var data
try {
data = JSON.parse(dataInput.value)
} catch (e) {
renderError('JSON parsing failed', e)
return
}
try {
resultNode.innerHTML = tmpl(templateInput.value, data)
} catch (e) {
renderError('Template rendering failed', e)
}
}
/*
* Removes all child elements from a Node
*
* @param {HTMLElement} node HTML element node
*/
function empty(node) {
while (node.lastChild) {
node.removeChild(node.lastChild)
}
}
/*
* Initialization function
*
* @param {event} [event] Initialixation event
*/
function init(event) {
if (event) {
event.preventDefault()
}
templateInput.value = templateDemoNode.innerHTML.replace(
// Replace unnecessary whitespace:
/^\n|\s+$| {6}/g,
''
)
dataInput.value = JSON.stringify(
JSON.parse(templateDataNode.innerHTML),
null,
2
)
empty(resultNode)
}
document.getElementById('render').addEventListener('click', render)
document.getElementById('render2').addEventListener('click', render)
document.getElementById('reset').addEventListener('click', init)
init()
})()