From 7c736b511a6e8337f575149b86ff132d010e6bae Mon Sep 17 00:00:00 2001 From: Leo Horie Date: Fri, 29 Jul 2016 22:04:04 -0400 Subject: [PATCH] rename node to vnode --- api/router.js | 6 +++--- api/tests/index.html | 2 +- bundler/bundle.js | 6 +++++- docs/vnodes.md | 2 +- examples/animation/mosaic.html | 2 +- examples/dbmonster/mithril/index.html | 2 +- examples/editor/index.html | 2 +- examples/svg/clock.html | 2 +- examples/svg/ring.html | 2 +- examples/svg/tiger.html | 2 +- examples/threaditjs/index.html | 2 +- examples/todomvc/index.html | 2 +- render/hyperscript.js | 8 ++++---- render/node.js | 16 ---------------- render/render.js | 14 +++++++------- render/tests/index.html | 2 +- render/tests/test-normalize.js | 18 +++++++++--------- render/tests/test-normalizeChildren.js | 6 +++--- render/trust.js | 4 ++-- render/vnode.js | 16 ++++++++++++++++ 20 files changed, 60 insertions(+), 56 deletions(-) delete mode 100644 render/node.js create mode 100644 render/vnode.js diff --git a/api/router.js b/api/router.js index ea848a36..78c42375 100644 --- a/api/router.js +++ b/api/router.js @@ -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}) diff --git a/api/tests/index.html b/api/tests/index.html index cd27120d..71e26cdf 100644 --- a/api/tests/index.html +++ b/api/tests/index.html @@ -12,7 +12,7 @@ - + diff --git a/bundler/bundle.js b/bundler/bundle.js index 4ee3a9c3..b897ff38 100644 --- a/bundler/bundle.js +++ b/bundler/bundle.js @@ -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() + }) + } } diff --git a/docs/vnodes.md b/docs/vnodes.md index d363bd2d..a07683f9 100644 --- a/docs/vnodes.md +++ b/docs/vnodes.md @@ -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. diff --git a/examples/animation/mosaic.html b/examples/animation/mosaic.html index ba0e9b0b..7796f443 100644 --- a/examples/animation/mosaic.html +++ b/examples/animation/mosaic.html @@ -22,7 +22,7 @@
- + - + diff --git a/examples/editor/index.html b/examples/editor/index.html index 9ea3c931..2632b0a4 100644 --- a/examples/editor/index.html +++ b/examples/editor/index.html @@ -14,7 +14,7 @@ h1,h2,h3,h4,h5,h6,p {margin:0 0 10px;}
- + diff --git a/examples/svg/clock.html b/examples/svg/clock.html index 32d8b8da..5d716125 100644 --- a/examples/svg/clock.html +++ b/examples/svg/clock.html @@ -8,7 +8,7 @@
- + - + - + - + diff --git a/examples/todomvc/index.html b/examples/todomvc/index.html index 1f64e918..9c4c1982 100644 --- a/examples/todomvc/index.html +++ b/examples/todomvc/index.html @@ -13,7 +13,7 @@

Part of TodoMVC

- + diff --git a/render/hyperscript.js b/render/hyperscript.js index f5ea1f59..cd326056 100644 --- a/render/hyperscript.js +++ b/render/hyperscript.js @@ -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 diff --git a/render/node.js b/render/node.js deleted file mode 100644 index f9909744..00000000 --- a/render/node.js +++ /dev/null @@ -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 diff --git a/render/render.js b/render/render.js index eeffb3e1..c1829164 100644 --- a/render/render.js +++ b/render/render.js @@ -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() diff --git a/render/tests/index.html b/render/tests/index.html index 02962ec6..9c58d56b 100644 --- a/render/tests/index.html +++ b/render/tests/index.html @@ -9,7 +9,7 @@ - + diff --git a/render/tests/test-normalize.js b/render/tests/test-normalize.js index be1ae146..7a01af31 100644 --- a/render/tests/test-normalize.js +++ b/render/tests/test-normalize.js @@ -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) diff --git a/render/tests/test-normalizeChildren.js b/render/tests/test-normalizeChildren.js index 88d69e93..9ad2cd89 100644 --- a/render/tests/test-normalizeChildren.js +++ b/render/tests/test-normalizeChildren.js @@ -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") diff --git a/render/trust.js b/render/trust.js index 7fac3a76..b1215451 100644 --- a/render/trust.js +++ b/render/trust.js @@ -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) } diff --git a/render/vnode.js b/render/vnode.js new file mode 100644 index 00000000..7c0d5ce8 --- /dev/null +++ b/render/vnode.js @@ -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