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
 |