mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
37 lines
981 B
JavaScript
37 lines
981 B
JavaScript
var Text = require('./Text');
|
|
var DocumentFragment = require('./DocumentFragment');
|
|
var virtualize = require('./virtualize');
|
|
var specialHtmlRegexp = /[&<]/;
|
|
|
|
var range;
|
|
|
|
module.exports = function virtualizeHTML(html, doc) {
|
|
if (!specialHtmlRegexp.test(html)) {
|
|
return new Text(html);
|
|
}
|
|
|
|
if (!range && doc.createRange) {
|
|
range = doc.createRange();
|
|
range.selectNode(doc.body);
|
|
}
|
|
|
|
var vdomFragment;
|
|
|
|
var fragment;
|
|
if (range && range.createContextualFragment) {
|
|
fragment = range.createContextualFragment(html);
|
|
vdomFragment = virtualize(fragment);
|
|
} else {
|
|
var container = doc.createElement('body');
|
|
container.innerHTML = html;
|
|
vdomFragment = new DocumentFragment();
|
|
|
|
var curChild = container.firstChild;
|
|
while(curChild) {
|
|
vdomFragment.appendChild(virtualize(curChild));
|
|
curChild = curChild.nextSibling;
|
|
}
|
|
}
|
|
|
|
return vdomFragment;
|
|
}; |