@cycle/dom
Version:
The standard DOM Driver for Cycle.js, based on Snabbdom
47 lines • 2.16 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var snabbdom_1 = require("snabbdom");
var snabbdom_selector_1 = require("snabbdom-selector");
var utils_1 = require("./utils");
var VNodeWrapper = /** @class */ (function () {
function VNodeWrapper(rootElement) {
this.rootElement = rootElement;
}
VNodeWrapper.prototype.call = function (vnode) {
if (utils_1.isDocFrag(this.rootElement)) {
return this.wrapDocFrag(vnode === null ? [] : [vnode]);
}
if (vnode === null) {
return this.wrap([]);
}
var _a = snabbdom_selector_1.selectorParser(vnode), selTagName = _a.tagName, selId = _a.id;
var vNodeClassName = snabbdom_selector_1.classNameFromVNode(vnode);
var vNodeData = vnode.data || {};
var vNodeDataProps = vNodeData.props || {};
var _b = vNodeDataProps.id, vNodeId = _b === void 0 ? selId : _b;
var isVNodeAndRootElementIdentical = typeof vNodeId === 'string' &&
vNodeId.toUpperCase() === this.rootElement.id.toUpperCase() &&
selTagName.toUpperCase() === this.rootElement.tagName.toUpperCase() &&
vNodeClassName.toUpperCase() === this.rootElement.className.toUpperCase();
if (isVNodeAndRootElementIdentical) {
return vnode;
}
return this.wrap([vnode]);
};
VNodeWrapper.prototype.wrapDocFrag = function (children) {
return snabbdom_1.vnode('', { isolate: [] }, children, undefined, this
.rootElement);
};
VNodeWrapper.prototype.wrap = function (children) {
var _a = this.rootElement, tagName = _a.tagName, id = _a.id, className = _a.className;
var selId = id ? "#" + id : '';
var selClass = className ? "." + className.split(" ").join(".") : '';
var vnode = snabbdom_1.h("" + tagName.toLowerCase() + selId + selClass, {}, children);
vnode.data = vnode.data || {};
vnode.data.isolate = vnode.data.isolate || [];
return vnode;
};
return VNodeWrapper;
}());
exports.VNodeWrapper = VNodeWrapper;
//# sourceMappingURL=VNodeWrapper.js.map
;