rename node to vnode
This commit is contained in:
parent
09a0464a01
commit
7c736b511a
20 changed files with 60 additions and 56 deletions
|
|
@ -1,6 +1,6 @@
|
|||
"use strict"
|
||||
|
||||
var Node = require("../render/node")
|
||||
var Vnode = require("../render/vnode")
|
||||
var coreRouter = require("../router/router")
|
||||
var autoredraw = require("../api/autoredraw")
|
||||
|
||||
|
|
@ -13,14 +13,14 @@ module.exports = function($window, renderer, pubsub) {
|
|||
if (typeof payload.render !== "function") payload.render = function(vnode) {return vnode}
|
||||
var render = function(component) {
|
||||
current.route = route, current.component = component
|
||||
renderer.render(root, payload.render(Node(component, null, args, undefined, undefined, undefined)))
|
||||
renderer.render(root, payload.render(Vnode(component, null, args, undefined, undefined, undefined)))
|
||||
}
|
||||
if (typeof payload.resolve !== "function") payload.resolve = function() {render(current.component)}
|
||||
if (route !== current.route) payload.resolve(render, args, path, route)
|
||||
else render(current.component)
|
||||
}
|
||||
else {
|
||||
renderer.render(root, Node(payload, null, args, undefined, undefined, undefined))
|
||||
renderer.render(root, Vnode(payload, null, args, undefined, undefined, undefined))
|
||||
}
|
||||
}, function() {
|
||||
router.setPath(defaultRoute, null, {replace: true})
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
<script src="../../test-utils/pushStateMock.js"></script>
|
||||
|
||||
<script src="../../util/stream.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/trust.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
|
|
|
|||
|
|
@ -86,5 +86,9 @@ module.exports = function(input, output, options) {
|
|||
}
|
||||
run()
|
||||
|
||||
if (options && options.watch) fs.watch(process.cwd(), {recursive: true}, run)
|
||||
if (options && options.watch) {
|
||||
fs.watch(process.cwd(), {recursive: true}, function(type, file) {
|
||||
if (path.resolve(output) !== path.resolve(file)) run()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,6 +97,6 @@ Only element tag names and components can be the first argument of the `m()` fun
|
|||
|
||||
### Monomorphic class
|
||||
|
||||
The `mithril/render/node` module is used by Mithril to generate all vnodes. This ensures modern Javascript engines can optimize virtual dom diffing by always compiling vnodes to the same hidden class.
|
||||
The `mithril/render/vnode` module is used by Mithril to generate all vnodes. This ensures modern Javascript engines can optimize virtual dom diffing by always compiling vnodes to the same hidden class.
|
||||
|
||||
When creating libraries that emit vnodes, you should use this module instead of writing naked Javascript objects in order to ensure a high level of rendering performance.
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
<body>
|
||||
<div id="root"></div>
|
||||
<script src="../../module/module.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<body>
|
||||
<div id="app"></div>
|
||||
<script src="../../../module/module.js"></script>
|
||||
<script src="../../../render/node.js"></script>
|
||||
<script src="../../../render/vnode.js"></script>
|
||||
<script src="../../../render/hyperscript.js"></script>
|
||||
<script src="../../../render/render.js"></script>
|
||||
<script src="../ENV.js"></script>
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ h1,h2,h3,h4,h5,h6,p {margin:0 0 10px;}
|
|||
<div id="editor"></div>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.2/marked.min.js"></script>
|
||||
<script src="../../module/module.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
<script src="../../render/trust.js"></script>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<body>
|
||||
<div id="root"></div>
|
||||
<script src="../../module/module.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<body>
|
||||
<div id="root"></div>
|
||||
<script src="../../module/module.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<body>
|
||||
<div id="root"></div>
|
||||
<script src="../../module/module.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
<script>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<div id="app"></div>
|
||||
<script src="http://threaditjs.com/shared.js"></script>
|
||||
<script src="../../module/module.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/trust.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@
|
|||
<p>Part of <a href="http://todomvc.com">TodoMVC</a></p>
|
||||
</footer>
|
||||
<script src="../../module/module.js"></script>
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
<script src="../../querystring/build.js"></script>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
"use strict"
|
||||
|
||||
var Node = require("../render/node")
|
||||
var Vnode = require("../render/vnode")
|
||||
|
||||
var selectorParser = /(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g
|
||||
var selectorCache = {}
|
||||
|
|
@ -40,7 +40,7 @@ function hyperscript(selector) {
|
|||
if (children instanceof Array && children.length == 1 && children[0] != null && children[0].tag === "#") text = children[0].children
|
||||
else childList = children
|
||||
|
||||
return Node(tag || "div", attrs.key, hasAttrs ? attrs : undefined, childList, text, undefined)
|
||||
return Vnode(tag || "div", attrs.key, hasAttrs ? attrs : undefined, childList, text, undefined)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -58,9 +58,9 @@ function hyperscript(selector) {
|
|||
for (var i = childrenIndex; i < arguments.length; i++) children.push(arguments[i])
|
||||
}
|
||||
|
||||
if (typeof selector === "string") return selectorCache[selector](attrs || {}, Node.normalizeChildren(children))
|
||||
if (typeof selector === "string") return selectorCache[selector](attrs || {}, Vnode.normalizeChildren(children))
|
||||
|
||||
return Node(selector, attrs && attrs.key, attrs || {}, Node.normalizeChildren(children), undefined, undefined)
|
||||
return Vnode(selector, attrs && attrs.key, attrs || {}, Vnode.normalizeChildren(children), undefined, undefined)
|
||||
}
|
||||
|
||||
module.exports = hyperscript
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
function Node(tag, key, attrs, children, text, dom) {
|
||||
return {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: {}, events: undefined, instance: undefined}
|
||||
}
|
||||
Node.normalize = function(node) {
|
||||
if (node instanceof Array) return Node("[", undefined, undefined, Node.normalizeChildren(node), undefined, undefined)
|
||||
else if (node != null && typeof node !== "object") return Node("#", undefined, undefined, node, undefined, undefined)
|
||||
return node
|
||||
}
|
||||
Node.normalizeChildren = function normalizeChildren(children) {
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
children[i] = Node.normalize(children[i])
|
||||
}
|
||||
return children
|
||||
}
|
||||
|
||||
module.exports = Node
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
"use strict"
|
||||
|
||||
var Node = require("../render/node")
|
||||
var Vnode = require("../render/vnode")
|
||||
|
||||
module.exports = function($window) {
|
||||
var $doc = $window.document
|
||||
|
|
@ -80,7 +80,7 @@ module.exports = function($window) {
|
|||
|
||||
if (vnode.text != null) {
|
||||
if (vnode.text !== "") element.textContent = vnode.text
|
||||
else vnode.children = [Node("#", undefined, undefined, vnode.text, undefined, undefined)]
|
||||
else vnode.children = [Vnode("#", undefined, undefined, vnode.text, undefined, undefined)]
|
||||
}
|
||||
|
||||
if (vnode.children != null) {
|
||||
|
|
@ -94,7 +94,7 @@ module.exports = function($window) {
|
|||
vnode.state = copy(vnode.tag)
|
||||
|
||||
initLifecycle(vnode.tag, vnode, hooks)
|
||||
vnode.instance = Node.normalize(vnode.tag.view.call(vnode.state, vnode))
|
||||
vnode.instance = Vnode.normalize(vnode.tag.view.call(vnode.state, vnode))
|
||||
if (vnode.instance != null) {
|
||||
var element = createNode(vnode.instance, hooks, ns)
|
||||
vnode.dom = vnode.instance.dom
|
||||
|
|
@ -248,13 +248,13 @@ module.exports = function($window) {
|
|||
if (old.text.toString() !== vnode.text.toString()) old.dom.firstChild.nodeValue = vnode.text
|
||||
}
|
||||
else {
|
||||
if (old.text != null) old.children = [Node("#", undefined, undefined, old.text, undefined, old.dom.firstChild)]
|
||||
if (vnode.text != null) vnode.children = [Node("#", undefined, undefined, vnode.text, undefined, undefined)]
|
||||
if (old.text != null) old.children = [Vnode("#", undefined, undefined, old.text, undefined, old.dom.firstChild)]
|
||||
if (vnode.text != null) vnode.children = [Vnode("#", undefined, undefined, vnode.text, undefined, undefined)]
|
||||
updateNodes(element, old.children, vnode.children, hooks, null, ns)
|
||||
}
|
||||
}
|
||||
function updateComponent(parent, old, vnode, hooks, nextSibling, recycling, ns) {
|
||||
vnode.instance = Node.normalize(vnode.tag.view.call(vnode.state, vnode))
|
||||
vnode.instance = Vnode.normalize(vnode.tag.view.call(vnode.state, vnode))
|
||||
updateLifecycle(vnode.tag, vnode, hooks, recycling)
|
||||
if (vnode.instance != null) {
|
||||
if (old.instance == null) insertNode(parent, createNode(vnode.instance, hooks, ns), nextSibling)
|
||||
|
|
@ -517,7 +517,7 @@ module.exports = function($window) {
|
|||
if (dom.vnodes == null) dom.vnodes = []
|
||||
|
||||
if (!(vnodes instanceof Array)) vnodes = [vnodes]
|
||||
updateNodes(dom, dom.vnodes, Node.normalizeChildren(vnodes), hooks, null, undefined)
|
||||
updateNodes(dom, dom.vnodes, Vnode.normalizeChildren(vnodes), hooks, null, undefined)
|
||||
dom.vnodes = vnodes
|
||||
for (var i = 0; i < hooks.length; i++) hooks[i]()
|
||||
if ($doc.activeElement !== active) active.focus()
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
<script src="../../test-utils/callAsync.js"></script>
|
||||
<script src="../../test-utils/domMock.js"></script>
|
||||
|
||||
<script src="../../render/node.js"></script>
|
||||
<script src="../../render/vnode.js"></script>
|
||||
<script src="../../render/trust.js"></script>
|
||||
<script src="../../render/hyperscript.js"></script>
|
||||
<script src="../../render/render.js"></script>
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
"use strict"
|
||||
|
||||
var o = require("../../ospec/ospec")
|
||||
var Node = require("../../render/node")
|
||||
var Vnode = require("../../render/vnode")
|
||||
|
||||
o.spec("normalize", function() {
|
||||
o("normalizes array into fragment", function() {
|
||||
var node = Node.normalize([])
|
||||
var node = Vnode.normalize([])
|
||||
|
||||
o(node.tag).equals("[")
|
||||
o(node.children.length).equals(0)
|
||||
})
|
||||
o("normalizes nested array into fragment", function() {
|
||||
var node = Node.normalize([[]])
|
||||
var node = Vnode.normalize([[]])
|
||||
|
||||
o(node.tag).equals("[")
|
||||
o(node.children.length).equals(1)
|
||||
|
|
@ -19,37 +19,37 @@ o.spec("normalize", function() {
|
|||
o(node.children[0].children.length).equals(0)
|
||||
})
|
||||
o("normalizes string into text node", function() {
|
||||
var node = Node.normalize("a")
|
||||
var node = Vnode.normalize("a")
|
||||
|
||||
o(node.tag).equals("#")
|
||||
o(node.children).equals("a")
|
||||
})
|
||||
o("normalizes falsy string into text node", function() {
|
||||
var node = Node.normalize("")
|
||||
var node = Vnode.normalize("")
|
||||
|
||||
o(node.tag).equals("#")
|
||||
o(node.children).equals("")
|
||||
})
|
||||
o("normalizes number into text node", function() {
|
||||
var node = Node.normalize(1)
|
||||
var node = Vnode.normalize(1)
|
||||
|
||||
o(node.tag).equals("#")
|
||||
o(node.children).equals(1)
|
||||
})
|
||||
o("normalizes falsy number into text node", function() {
|
||||
var node = Node.normalize(0)
|
||||
var node = Vnode.normalize(0)
|
||||
|
||||
o(node.tag).equals("#")
|
||||
o(node.children).equals(0)
|
||||
})
|
||||
o("normalizes boolean into text node", function() {
|
||||
var node = Node.normalize(true)
|
||||
var node = Vnode.normalize(true)
|
||||
|
||||
o(node.tag).equals("#")
|
||||
o(node.children).equals(true)
|
||||
})
|
||||
o("normalizes falsy boolean into text node", function() {
|
||||
var node = Node.normalize(false)
|
||||
var node = Vnode.normalize(false)
|
||||
|
||||
o(node.tag).equals("#")
|
||||
o(node.children).equals(false)
|
||||
|
|
|
|||
|
|
@ -1,17 +1,17 @@
|
|||
"use strict"
|
||||
|
||||
var o = require("../../ospec/ospec")
|
||||
var Node = require("../../render/node")
|
||||
var Vnode = require("../../render/vnode")
|
||||
|
||||
o.spec("normalizeChildren", function() {
|
||||
o("normalizes arrays into fragments", function() {
|
||||
var children = Node.normalizeChildren([[]])
|
||||
var children = Vnode.normalizeChildren([[]])
|
||||
|
||||
o(children[0].tag).equals("[")
|
||||
o(children[0].children.length).equals(0)
|
||||
})
|
||||
o("normalizes strings into text nodes", function() {
|
||||
var children = Node.normalizeChildren(["a"])
|
||||
var children = Vnode.normalizeChildren(["a"])
|
||||
|
||||
o(children[0].tag).equals("#")
|
||||
o(children[0].children).equals("a")
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
"use strict"
|
||||
|
||||
var Node = require("../render/node")
|
||||
var Vnode = require("../render/vnode")
|
||||
|
||||
module.exports = function(html) {
|
||||
return Node("<", undefined, undefined, html, undefined, undefined)
|
||||
return Vnode("<", undefined, undefined, html, undefined, undefined)
|
||||
}
|
||||
|
|
|
|||
16
render/vnode.js
Normal file
16
render/vnode.js
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
function Vnode(tag, key, attrs, children, text, dom) {
|
||||
return {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: {}, events: undefined, instance: undefined}
|
||||
}
|
||||
Vnode.normalize = function(node) {
|
||||
if (node instanceof Array) return Vnode("[", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined)
|
||||
else if (node != null && typeof node !== "object") return Vnode("#", undefined, undefined, node, undefined, undefined)
|
||||
return node
|
||||
}
|
||||
Vnode.normalizeChildren = function normalizeChildren(children) {
|
||||
for (var i = 0; i < children.length; i++) {
|
||||
children[i] = Vnode.normalize(children[i])
|
||||
}
|
||||
return children
|
||||
}
|
||||
|
||||
module.exports = Vnode
|
||||
Loading…
Add table
Add a link
Reference in a new issue