marko
Version:
UI Components + streaming, async, high performance, HTML templating for Node.js and the browser.
61 lines (52 loc) • 1.77 kB
JavaScript
var eventDelegation = require("./event-delegation");
var delegateEvent = eventDelegation.___delegateEvent;
var getEventFromEl = eventDelegation.___getEventFromEl;
// var componentsUtil = require('@internal/components-util');
// var destroyNodeRecursive = componentsUtil.___destroyNodeRecursive;
// var destroyComponentForNode = componentsUtil.___destroyComponentForNode;
function handleNodeAttach(node, componentsContext) {
if (node.nodeType === 1) {
var eventName = "onattach";
var target = getEventFromEl(node, eventName);
if (target) {
var out = componentsContext.___out;
var data = out.data;
var attachTargets = data.___attachTargets;
if (!attachTargets) {
attachTargets = data.___attachTargets = [];
out.on("___componentsInitialized", function () {
for (var i = 0; i < attachTargets.length; i += 2) {
var node = attachTargets[i];
var target = attachTargets[i + 1];
delegateEvent(node, eventName, target, {});
}
});
}
attachTargets.push(node);
attachTargets.push(target);
}
}
}
function handleNodeDetach(node) {
if (node.nodeType === 1) {
var eventName = "ondetach";
var target = getEventFromEl(node, eventName);
if (target) {
var allowDetach;
delegateEvent(node, eventName, target, {
preventDefault: function () {
allowDetach = false;
},
detach: function () {
var parentNode = node.parentNode;
if (parentNode) {
parentNode.removeChild(node);
}
},
});
return allowDetach;
}
}
}
eventDelegation.___handleNodeAttach = handleNodeAttach;
eventDelegation.___handleNodeDetach = handleNodeDetach;