snabbdom-virtualize
Advanced tools
Comparing version 0.5.4 to 0.6.0
@@ -23,2 +23,5 @@ 'use strict'; | ||
var context = options.context || document; | ||
if (!element) { | ||
@@ -29,3 +32,3 @@ return null; | ||
var createdVNodes = []; | ||
var vnode = convertNode(element, createdVNodes); | ||
var vnode = convertNode(element, createdVNodes, context); | ||
options.hooks && options.hooks.create && createdVNodes.forEach(function (node) { | ||
@@ -37,7 +40,8 @@ options.hooks.create(node); | ||
function convertNode(element, createdVNodes) { | ||
function convertNode(element, createdVNodes, context) { | ||
// If our node is a text node, then we only want to set the `text` part of | ||
// the VNode. | ||
if (element.nodeType === Node.TEXT_NODE) { | ||
var _newNode = (0, _utils.createTextVNode)(element.textContent); | ||
if (element.nodeType === context.defaultView.Node.TEXT_NODE) { | ||
var _newNode = (0, _utils.createTextVNode)(element.textContent, context); | ||
_newNode.elm = element; | ||
createdVNodes.push(_newNode); | ||
@@ -92,6 +96,7 @@ return _newNode; | ||
for (var i = 0; i < children.length; i++) { | ||
childNodes.push(convertNode(children.item(i), createdVNodes)); | ||
childNodes.push(convertNode(children.item(i), createdVNodes, context)); | ||
} | ||
} | ||
var newNode = (0, _h2.default)(element.tagName.toLowerCase(), data, childNodes); | ||
newNode.elm = element; | ||
createdVNodes.push(newNode); | ||
@@ -98,0 +103,0 @@ return newNode; |
@@ -10,2 +10,5 @@ 'use strict'; | ||
var context = options.context || document; | ||
// If there's nothing here, return null; | ||
@@ -20,3 +23,3 @@ if (!html) { | ||
// Parse the string into the AST and convert to VNodes. | ||
var vnodes = convertNodes((0, _parse2.default)(html), createdVNodes); | ||
var vnodes = convertNodes((0, _parse2.default)(html), createdVNodes, context); | ||
@@ -28,3 +31,3 @@ var res = void 0; | ||
// text (since the AST parser didn't find any well-formed HTML). | ||
res = toVNode({ type: 'text', content: html }, createdVNodes); | ||
res = toVNode({ type: 'text', content: html }, createdVNodes, context); | ||
} else if (vnodes.length === 1) { | ||
@@ -59,6 +62,6 @@ // If there's only one root node, just return it as opposed to an array. | ||
function convertNodes(nodes, createdVNodes) { | ||
function convertNodes(nodes, createdVNodes, context) { | ||
if (nodes instanceof Array && nodes.length > 0) { | ||
return nodes.map(function (node) { | ||
return toVNode(node, createdVNodes); | ||
return toVNode(node, createdVNodes, context); | ||
}); | ||
@@ -70,8 +73,8 @@ } else { | ||
function toVNode(node, createdVNodes) { | ||
function toVNode(node, createdVNodes, context) { | ||
var newNode = void 0; | ||
if (node.type === 'text') { | ||
newNode = (0, _utils.createTextVNode)(node.content); | ||
newNode = (0, _utils.createTextVNode)(node.content, context); | ||
} else { | ||
newNode = (0, _h2.default)(node.name, buildVNodeData(node), convertNodes(node.children, createdVNodes)); | ||
newNode = (0, _h2.default)(node.name, buildVNodeData(node, context), convertNodes(node.children, createdVNodes, context)); | ||
} | ||
@@ -82,3 +85,3 @@ createdVNodes.push(newNode); | ||
function buildVNodeData(node) { | ||
function buildVNodeData(node, context) { | ||
var data = {}; | ||
@@ -91,3 +94,3 @@ if (!node.attrs) { | ||
if (name !== 'style' && name !== 'class') { | ||
var val = node.attrs[name]; | ||
var val = (0, _utils.unescapeEntities)(node.attrs[name], context); | ||
memo ? memo[name] = val : memo = _defineProperty({}, name, val); | ||
@@ -94,0 +97,0 @@ } |
@@ -8,2 +8,3 @@ 'use strict'; | ||
exports.transformName = transformName; | ||
exports.unescapeEntities = unescapeEntities; | ||
@@ -16,4 +17,4 @@ var _vnode = require('snabbdom/vnode'); | ||
function createTextVNode(text) { | ||
return (0, _vnode2.default)(undefined, undefined, undefined, unescape(text)); | ||
function createTextVNode(text, context) { | ||
return (0, _vnode2.default)(undefined, undefined, undefined, unescapeEntities(text, context)); | ||
} | ||
@@ -34,5 +35,9 @@ | ||
// Element for setting innerHTML for transforming entities. | ||
var el = document.createElement('div'); | ||
var el = null; | ||
function unescape(text) { | ||
function unescapeEntities(text, context) { | ||
// Create the element using the context if it doesn't exist. | ||
if (!el) { | ||
el = context.createElement('div'); | ||
} | ||
return text.replace(entityRegex, function (entity) { | ||
@@ -39,0 +44,0 @@ el.innerHTML = entity; |
{ | ||
"name": "snabbdom-virtualize", | ||
"version": "0.5.4", | ||
"version": "0.6.0", | ||
"description": "Library for turning strings and DOM nodes into virtual DOM nodes compatible with snabbdom.", | ||
@@ -19,3 +19,3 @@ "author": { | ||
"watch": "npm run build -- --watch", | ||
"test": "karma start test/karma.conf.js" | ||
"test": "npm run build && karma start test/karma.conf.js && mocha test/nodejs_tests.js" | ||
}, | ||
@@ -28,2 +28,3 @@ "main": "lib/index.js", | ||
"chai": "^3.5.0", | ||
"jsdom": "^9.4.2", | ||
"karma": "^0.13.19", | ||
@@ -30,0 +31,0 @@ "karma-chai": "^0.1.0", |
@@ -19,3 +19,3 @@ # snabbdom-virtualize [![Build Status](https://travis-ci.org/appcues/snabbdom-virtualize.svg?branch=master)](https://travis-ci.org/appcues/snabbdom-virtualize) | ||
// Require. | ||
let virtualize = require('snabbdom-virtualize'); | ||
let virtualize = require('snabbdom-virtualize').default; | ||
``` | ||
@@ -22,0 +22,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
16287
275
21