142 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
"use strict";
 | 
						|
Object.defineProperty(exports, "__esModule", { value: true });
 | 
						|
exports.isCustomElement = exports.isSlotElement = exports.isSelectElement = exports.isTextareaElement = exports.isScriptElement = exports.isStyleElement = exports.isIFrameElement = exports.isImageElement = exports.isVideoElement = exports.isCanvasElement = exports.isBodyElement = exports.isSVGElement = exports.isHTMLElement = exports.isInputElement = exports.isOLElement = exports.isLIElement = exports.isSVGElementNode = exports.isHTMLElementNode = exports.isElementNode = exports.isTextNode = exports.parseTree = void 0;
 | 
						|
var element_container_1 = require("./element-container");
 | 
						|
var text_container_1 = require("./text-container");
 | 
						|
var image_element_container_1 = require("./replaced-elements/image-element-container");
 | 
						|
var canvas_element_container_1 = require("./replaced-elements/canvas-element-container");
 | 
						|
var svg_element_container_1 = require("./replaced-elements/svg-element-container");
 | 
						|
var li_element_container_1 = require("./elements/li-element-container");
 | 
						|
var ol_element_container_1 = require("./elements/ol-element-container");
 | 
						|
var input_element_container_1 = require("./replaced-elements/input-element-container");
 | 
						|
var select_element_container_1 = require("./elements/select-element-container");
 | 
						|
var textarea_element_container_1 = require("./elements/textarea-element-container");
 | 
						|
var iframe_element_container_1 = require("./replaced-elements/iframe-element-container");
 | 
						|
var LIST_OWNERS = ['OL', 'UL', 'MENU'];
 | 
						|
var parseNodeTree = function (context, node, parent, root) {
 | 
						|
    for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {
 | 
						|
        nextNode = childNode.nextSibling;
 | 
						|
        if (exports.isTextNode(childNode) && childNode.data.trim().length > 0) {
 | 
						|
            parent.textNodes.push(new text_container_1.TextContainer(context, childNode, parent.styles));
 | 
						|
        }
 | 
						|
        else if (exports.isElementNode(childNode)) {
 | 
						|
            if (exports.isSlotElement(childNode) && childNode.assignedNodes) {
 | 
						|
                childNode.assignedNodes().forEach(function (childNode) { return parseNodeTree(context, childNode, parent, root); });
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                var container = createContainer(context, childNode);
 | 
						|
                if (container.styles.isVisible()) {
 | 
						|
                    if (createsRealStackingContext(childNode, container, root)) {
 | 
						|
                        container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;
 | 
						|
                    }
 | 
						|
                    else if (createsStackingContext(container.styles)) {
 | 
						|
                        container.flags |= 2 /* CREATES_STACKING_CONTEXT */;
 | 
						|
                    }
 | 
						|
                    if (LIST_OWNERS.indexOf(childNode.tagName) !== -1) {
 | 
						|
                        container.flags |= 8 /* IS_LIST_OWNER */;
 | 
						|
                    }
 | 
						|
                    parent.elements.push(container);
 | 
						|
                    childNode.slot;
 | 
						|
                    if (childNode.shadowRoot) {
 | 
						|
                        parseNodeTree(context, childNode.shadowRoot, container, root);
 | 
						|
                    }
 | 
						|
                    else if (!exports.isTextareaElement(childNode) &&
 | 
						|
                        !exports.isSVGElement(childNode) &&
 | 
						|
                        !exports.isSelectElement(childNode)) {
 | 
						|
                        parseNodeTree(context, childNode, container, root);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
};
 | 
						|
var createContainer = function (context, element) {
 | 
						|
    if (exports.isImageElement(element)) {
 | 
						|
        return new image_element_container_1.ImageElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isCanvasElement(element)) {
 | 
						|
        return new canvas_element_container_1.CanvasElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isSVGElement(element)) {
 | 
						|
        return new svg_element_container_1.SVGElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isLIElement(element)) {
 | 
						|
        return new li_element_container_1.LIElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isOLElement(element)) {
 | 
						|
        return new ol_element_container_1.OLElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isInputElement(element)) {
 | 
						|
        return new input_element_container_1.InputElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isSelectElement(element)) {
 | 
						|
        return new select_element_container_1.SelectElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isTextareaElement(element)) {
 | 
						|
        return new textarea_element_container_1.TextareaElementContainer(context, element);
 | 
						|
    }
 | 
						|
    if (exports.isIFrameElement(element)) {
 | 
						|
        return new iframe_element_container_1.IFrameElementContainer(context, element);
 | 
						|
    }
 | 
						|
    return new element_container_1.ElementContainer(context, element);
 | 
						|
};
 | 
						|
var parseTree = function (context, element) {
 | 
						|
    var container = createContainer(context, element);
 | 
						|
    container.flags |= 4 /* CREATES_REAL_STACKING_CONTEXT */;
 | 
						|
    parseNodeTree(context, element, container, container);
 | 
						|
    return container;
 | 
						|
};
 | 
						|
exports.parseTree = parseTree;
 | 
						|
var createsRealStackingContext = function (node, container, root) {
 | 
						|
    return (container.styles.isPositionedWithZIndex() ||
 | 
						|
        container.styles.opacity < 1 ||
 | 
						|
        container.styles.isTransformed() ||
 | 
						|
        (exports.isBodyElement(node) && root.styles.isTransparent()));
 | 
						|
};
 | 
						|
var createsStackingContext = function (styles) { return styles.isPositioned() || styles.isFloating(); };
 | 
						|
var isTextNode = function (node) { return node.nodeType === Node.TEXT_NODE; };
 | 
						|
exports.isTextNode = isTextNode;
 | 
						|
var isElementNode = function (node) { return node.nodeType === Node.ELEMENT_NODE; };
 | 
						|
exports.isElementNode = isElementNode;
 | 
						|
var isHTMLElementNode = function (node) {
 | 
						|
    return exports.isElementNode(node) && typeof node.style !== 'undefined' && !exports.isSVGElementNode(node);
 | 
						|
};
 | 
						|
exports.isHTMLElementNode = isHTMLElementNode;
 | 
						|
var isSVGElementNode = function (element) {
 | 
						|
    return typeof element.className === 'object';
 | 
						|
};
 | 
						|
exports.isSVGElementNode = isSVGElementNode;
 | 
						|
var isLIElement = function (node) { return node.tagName === 'LI'; };
 | 
						|
exports.isLIElement = isLIElement;
 | 
						|
var isOLElement = function (node) { return node.tagName === 'OL'; };
 | 
						|
exports.isOLElement = isOLElement;
 | 
						|
var isInputElement = function (node) { return node.tagName === 'INPUT'; };
 | 
						|
exports.isInputElement = isInputElement;
 | 
						|
var isHTMLElement = function (node) { return node.tagName === 'HTML'; };
 | 
						|
exports.isHTMLElement = isHTMLElement;
 | 
						|
var isSVGElement = function (node) { return node.tagName === 'svg'; };
 | 
						|
exports.isSVGElement = isSVGElement;
 | 
						|
var isBodyElement = function (node) { return node.tagName === 'BODY'; };
 | 
						|
exports.isBodyElement = isBodyElement;
 | 
						|
var isCanvasElement = function (node) { return node.tagName === 'CANVAS'; };
 | 
						|
exports.isCanvasElement = isCanvasElement;
 | 
						|
var isVideoElement = function (node) { return node.tagName === 'VIDEO'; };
 | 
						|
exports.isVideoElement = isVideoElement;
 | 
						|
var isImageElement = function (node) { return node.tagName === 'IMG'; };
 | 
						|
exports.isImageElement = isImageElement;
 | 
						|
var isIFrameElement = function (node) { return node.tagName === 'IFRAME'; };
 | 
						|
exports.isIFrameElement = isIFrameElement;
 | 
						|
var isStyleElement = function (node) { return node.tagName === 'STYLE'; };
 | 
						|
exports.isStyleElement = isStyleElement;
 | 
						|
var isScriptElement = function (node) { return node.tagName === 'SCRIPT'; };
 | 
						|
exports.isScriptElement = isScriptElement;
 | 
						|
var isTextareaElement = function (node) { return node.tagName === 'TEXTAREA'; };
 | 
						|
exports.isTextareaElement = isTextareaElement;
 | 
						|
var isSelectElement = function (node) { return node.tagName === 'SELECT'; };
 | 
						|
exports.isSelectElement = isSelectElement;
 | 
						|
var isSlotElement = function (node) { return node.tagName === 'SLOT'; };
 | 
						|
exports.isSlotElement = isSlotElement;
 | 
						|
// https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name
 | 
						|
var isCustomElement = function (node) { return node.tagName.indexOf('-') > 0; };
 | 
						|
exports.isCustomElement = isCustomElement;
 | 
						|
//# sourceMappingURL=node-parser.js.map
 |