projen
Version:
CDK for software projects
266 lines • 9.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.dom_runRemovingSteps = dom_runRemovingSteps;
exports.dom_runCloningSteps = dom_runCloningSteps;
exports.dom_runAdoptingSteps = dom_runAdoptingSteps;
exports.dom_runAttributeChangeSteps = dom_runAttributeChangeSteps;
exports.dom_runInsertionSteps = dom_runInsertionSteps;
exports.dom_runNodeIteratorPreRemovingSteps = dom_runNodeIteratorPreRemovingSteps;
exports.dom_hasSupportedTokens = dom_hasSupportedTokens;
exports.dom_getSupportedTokens = dom_getSupportedTokens;
exports.dom_runEventConstructingSteps = dom_runEventConstructingSteps;
exports.dom_runChildTextContentChangeSteps = dom_runChildTextContentChangeSteps;
const DOMImpl_1 = require("../dom/DOMImpl");
const TreeAlgorithm_1 = require("./TreeAlgorithm");
const util_1 = require("../util");
const ShadowTreeAlgorithm_1 = require("./ShadowTreeAlgorithm");
const supportedTokens = new Map();
/**
* Runs removing steps for node.
*
* @param removedNode - removed node
* @param oldParent - old parent node
*/
function dom_runRemovingSteps(removedNode, oldParent) {
// No steps defined
}
/**
* Runs cloning steps for node.
*
* @param copy - node clone
* @param node - node
* @param document - document to own the cloned node
* @param cloneChildrenFlag - whether child nodes are cloned
*/
function dom_runCloningSteps(copy, node, document, cloneChildrenFlag) {
// No steps defined
}
/**
* Runs adopting steps for node.
*
* @param node - node
* @param oldDocument - old document
*/
function dom_runAdoptingSteps(node, oldDocument) {
// No steps defined
}
/**
* Runs attribute change steps for an element node.
*
* @param element - element node owning the attribute
* @param localName - attribute's local name
* @param oldValue - attribute's old value
* @param value - attribute's new value
* @param namespace - attribute's namespace
*/
function dom_runAttributeChangeSteps(element, localName, oldValue, value, namespace) {
// run default steps
if (DOMImpl_1.dom.features.slots) {
updateASlotablesName.call(element, element, localName, oldValue, value, namespace);
updateASlotsName.call(element, element, localName, oldValue, value, namespace);
}
updateAnElementID.call(element, element, localName, value, namespace);
// run custom steps
for (const step of element._attributeChangeSteps) {
step.call(element, element, localName, oldValue, value, namespace);
}
}
/**
* Runs insertion steps for a node.
*
* @param insertedNode - inserted node
*/
function dom_runInsertionSteps(insertedNode) {
// No steps defined
}
/**
* Runs pre-removing steps for a node iterator and node.
*
* @param nodeIterator - a node iterator
* @param toBeRemoved - node to be removed
*/
function dom_runNodeIteratorPreRemovingSteps(nodeIterator, toBeRemoved) {
removeNodeIterator.call(nodeIterator, nodeIterator, toBeRemoved);
}
/**
* Determines if there are any supported tokens defined for the given
* attribute name.
*
* @param attributeName - an attribute name
*/
function dom_hasSupportedTokens(attributeName) {
return supportedTokens.has(attributeName);
}
/**
* Returns the set of supported tokens defined for the given attribute name.
*
* @param attributeName - an attribute name
*/
function dom_getSupportedTokens(attributeName) {
return supportedTokens.get(attributeName) || new Set();
}
/**
* Runs event construction steps.
*
* @param event - an event
*/
function dom_runEventConstructingSteps(event) {
// No steps defined
}
/**
* Runs child text content change steps for a parent node.
*
* @param parent - parent node with text node child nodes
*/
function dom_runChildTextContentChangeSteps(parent) {
// No steps defined
}
/**
* Defines pre-removing steps for a node iterator.
*/
function removeNodeIterator(nodeIterator, toBeRemovedNode) {
/**
* 1. If toBeRemovedNode is not an inclusive ancestor of nodeIterator’s
* reference, or toBeRemovedNode is nodeIterator’s root, then return.
*/
if (toBeRemovedNode === nodeIterator._root ||
!(0, TreeAlgorithm_1.tree_isAncestorOf)(nodeIterator._reference, toBeRemovedNode, true)) {
return;
}
/**
* 2. If nodeIterator’s pointer before reference is true, then:
*/
if (nodeIterator._pointerBeforeReference) {
/**
* 2.1. Let next be toBeRemovedNode’s first following node that is an
* inclusive descendant of nodeIterator’s root and is not an inclusive
* descendant of toBeRemovedNode, and null if there is no such node.
*/
while (true) {
const nextNode = (0, TreeAlgorithm_1.tree_getFollowingNode)(nodeIterator._root, toBeRemovedNode);
if (nextNode !== null &&
(0, TreeAlgorithm_1.tree_isDescendantOf)(nodeIterator._root, nextNode, true) &&
!(0, TreeAlgorithm_1.tree_isDescendantOf)(toBeRemovedNode, nextNode, true)) {
/**
* 2.2. If next is non-null, then set nodeIterator’s reference to next
* and return.
*/
nodeIterator._reference = nextNode;
return;
}
else if (nextNode === null) {
/**
* 2.3. Otherwise, set nodeIterator’s pointer before reference to false.
*/
nodeIterator._pointerBeforeReference = false;
return;
}
}
}
/**
* 3. Set nodeIterator’s reference to toBeRemovedNode’s parent, if
* toBeRemovedNode’s previous sibling is null, and to the inclusive
* descendant of toBeRemovedNode’s previous sibling that appears last in
* tree order otherwise.
*/
if (toBeRemovedNode._previousSibling === null) {
if (toBeRemovedNode._parent !== null) {
nodeIterator._reference = toBeRemovedNode._parent;
}
}
else {
let referenceNode = toBeRemovedNode._previousSibling;
let childNode = (0, TreeAlgorithm_1.tree_getFirstDescendantNode)(toBeRemovedNode._previousSibling, true, false);
while (childNode !== null) {
if (childNode !== null) {
referenceNode = childNode;
}
// loop through to get the last descendant node
childNode = (0, TreeAlgorithm_1.tree_getNextDescendantNode)(toBeRemovedNode._previousSibling, childNode, true, false);
}
nodeIterator._reference = referenceNode;
}
}
/**
* Defines attribute change steps to update a slot’s name.
*/
function updateASlotsName(element, localName, oldValue, value, namespace) {
/**
* 1. If element is a slot, localName is name, and namespace is null, then:
* 1.1. If value is oldValue, then return.
* 1.2. If value is null and oldValue is the empty string, then return.
* 1.3. If value is the empty string and oldValue is null, then return.
* 1.4. If value is null or the empty string, then set element’s name to the
* empty string.
* 1.5. Otherwise, set element’s name to value.
* 1.6. Run assign slotables for a tree with element’s root.
*/
if (util_1.Guard.isSlot(element) && localName === "name" && namespace === null) {
if (value === oldValue)
return;
if (value === null && oldValue === '')
return;
if (value === '' && oldValue === null)
return;
if ((value === null || value === '')) {
element._name = '';
}
else {
element._name = value;
}
(0, ShadowTreeAlgorithm_1.shadowTree_assignSlotablesForATree)((0, TreeAlgorithm_1.tree_rootNode)(element));
}
}
/**
* Defines attribute change steps to update a slotable’s name.
*/
function updateASlotablesName(element, localName, oldValue, value, namespace) {
/**
* 1. If localName is slot and namespace is null, then:
* 1.1. If value is oldValue, then return.
* 1.2. If value is null and oldValue is the empty string, then return.
* 1.3. If value is the empty string and oldValue is null, then return.
* 1.4. If value is null or the empty string, then set element’s name to
* the empty string.
* 1.5. Otherwise, set element’s name to value.
* 1.6. If element is assigned, then run assign slotables for element’s
* assigned slot.
* 1.7. Run assign a slot for element.
*/
if (util_1.Guard.isSlotable(element) && localName === "slot" && namespace === null) {
if (value === oldValue)
return;
if (value === null && oldValue === '')
return;
if (value === '' && oldValue === null)
return;
if ((value === null || value === '')) {
element._name = '';
}
else {
element._name = value;
}
if ((0, ShadowTreeAlgorithm_1.shadowTree_isAssigned)(element)) {
(0, ShadowTreeAlgorithm_1.shadowTree_assignSlotables)(element._assignedSlot);
}
(0, ShadowTreeAlgorithm_1.shadowTree_assignASlot)(element);
}
}
/**
* Defines attribute change steps to update an element's ID.
*/
function updateAnElementID(element, localName, value, namespace) {
/**
* 1. If localName is id, namespace is null, and value is null or the empty
* string, then unset element’s ID.
* 2. Otherwise, if localName is id, namespace is null, then set element’s
* ID to value.
*/
if (localName === "id" && namespace === null) {
if (!value)
element._uniqueIdentifier = undefined;
else
element._uniqueIdentifier = value;
}
}
//# sourceMappingURL=DOMAlgorithm.js.map