maquette 3.5.3 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache.d.ts +9 -9
- package/dist/cache.js +31 -31
- package/dist/cache.js.map +1 -1
- package/dist/dom.d.ts +59 -59
- package/dist/dom.js +95 -95
- package/dist/dom.js.map +1 -1
- package/dist/h.d.ts +34 -34
- package/dist/h.js +55 -55
- package/dist/h.js.map +1 -1
- package/dist/index.d.ts +11 -11
- package/dist/index.js +12 -12
- package/dist/interfaces.d.ts +474 -441
- package/dist/interfaces.js +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/mapping.d.ts +13 -13
- package/dist/mapping.js +50 -50
- package/dist/mapping.js.map +1 -1
- package/dist/maquette.cjs.js +914 -896
- package/dist/maquette.umd.js +914 -896
- package/dist/maquette.umd.min.js +1 -1
- package/dist/projection.d.ts +8 -8
- package/dist/projection.js +557 -539
- package/dist/projection.js.map +1 -1
- package/dist/projector.d.ts +26 -26
- package/dist/projector.js +134 -132
- package/dist/projector.js.map +1 -1
- package/dist/utilities/window-performance-projector-logger.d.ts +7 -7
- package/dist/utilities/window-performance-projector-logger.js +31 -31
- package/dist/utilities/window-performance-projector-logger.js.map +1 -1
- package/package.json +13 -12
package/dist/projection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Exports here are NOT re-exported to maquette\n */\nimport { Projection, ProjectionOptions, VNode, VNodeProperties } from \"./interfaces\";\n\nconst NAMESPACE_W3 = \"http://www.w3.org/\";\nconst NAMESPACE_SVG = `${NAMESPACE_W3}2000/svg`;\nconst NAMESPACE_XLINK = `${NAMESPACE_W3}1999/xlink`;\n\nlet emptyArray = <VNode[]>[];\n\nexport let extend = <T>(base: T, overrides: any): T => {\n let result = {} as any;\n Object.keys(base).forEach((key) => {\n result[key] = (base as any)[key];\n });\n if (overrides) {\n Object.keys(overrides).forEach((key) => {\n result[key] = overrides[key];\n });\n }\n return result;\n};\n\nlet same = (vnode1: VNode, vnode2: VNode) => {\n if (vnode1.vnodeSelector !== vnode2.vnodeSelector) {\n return false;\n }\n if (vnode1.properties && vnode2.properties) {\n if (vnode1.properties.key !== vnode2.properties.key) {\n return false;\n }\n return vnode1.properties.bind === vnode2.properties.bind;\n }\n return !vnode1.properties && !vnode2.properties;\n};\n\nlet checkStyleValue = (styleValue: unknown) => {\n if (typeof styleValue !== \"string\") {\n throw new Error(\"Style values must be strings\");\n }\n};\n\nlet findIndexOfChild = (children: VNode[], sameAs: VNode, start: number) => {\n if (sameAs.vnodeSelector !== \"\") {\n // Never scan for text-nodes\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n }\n return -1;\n};\n\nlet checkDistinguishable = (\n childNodes: VNode[],\n indexToCheck: number,\n parentVNode: VNode,\n operation: string\n) => {\n let childNode = childNodes[indexToCheck];\n if (childNode.vnodeSelector === \"\") {\n return; // Text nodes need not be distinguishable\n }\n let properties = childNode.properties;\n let key = properties\n ? properties.key === undefined\n ? properties.bind\n : properties.key\n : undefined;\n if (!key) {\n // A key is just assumed to be unique\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n let node = childNodes[i];\n if (same(node, childNode)) {\n throw {\n error: new Error(\n `${parentVNode.vnodeSelector} had a ${childNode.vnodeSelector} child ${\n operation === \"added\" ? operation : \"removed\"\n }, but there is now more than one. You must add unique key properties to make them distinguishable.`\n ),\n parentNode: parentVNode,\n childNode,\n };\n }\n }\n }\n }\n};\n\nlet nodeAdded = (vNode: VNode) => {\n if (vNode.properties) {\n let enterAnimation = vNode.properties.enterAnimation;\n if (enterAnimation) {\n enterAnimation(vNode.domNode as Element, vNode.properties);\n }\n }\n};\n\nlet removedNodes: VNode[] = [];\nlet requestedIdleCallback = false;\n\nlet visitRemovedNode = (node: VNode) => {\n (node.children || []).forEach(visitRemovedNode);\n\n if (node.properties && node.properties.afterRemoved) {\n node.properties.afterRemoved.apply(node.properties.bind || node.properties, [\n <Element>node.domNode,\n ]);\n }\n};\n\nlet processPendingNodeRemovals = (): void => {\n requestedIdleCallback = false;\n\n removedNodes.forEach(visitRemovedNode);\n removedNodes.length = 0;\n};\n\nlet scheduleNodeRemoval = (vNode: VNode): void => {\n removedNodes.push(vNode);\n\n if (!requestedIdleCallback) {\n requestedIdleCallback = true;\n if (typeof window !== \"undefined\" && \"requestIdleCallback\" in window) {\n window.requestIdleCallback(processPendingNodeRemovals, { timeout: 16 });\n } else {\n setTimeout(processPendingNodeRemovals, 16);\n }\n }\n};\n\nlet nodeToRemove = (vNode: VNode) => {\n let domNode: Node = vNode.domNode!;\n if (vNode.properties) {\n let exitAnimation = vNode.properties.exitAnimation;\n if (exitAnimation) {\n (domNode as HTMLElement).style.pointerEvents = \"none\";\n let removeDomNode = () => {\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n };\n exitAnimation(domNode as Element, removeDomNode, vNode.properties);\n return;\n }\n }\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n};\n\nlet setProperties = (\n domNode: Node,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;\n let propNames = Object.keys(properties);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n let propValue = properties[propName];\n if (propName === \"className\") {\n throw new Error('Property \"className\" is not supported, use \"class\".');\n } else if (propName === \"class\") {\n toggleClasses(domNode as HTMLElement, propValue as string, true);\n } else if (propName === \"classes\") {\n // object with string keys and boolean values\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n if (propValue[className]) {\n (domNode as Element).classList.add(className);\n }\n }\n } else if (propName === \"styles\") {\n // object with string keys and string (!) values\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let styleValue = propValue[styleName];\n if (styleValue) {\n checkStyleValue(styleValue);\n projectionOptions.styleApplyer!(<HTMLElement>domNode, styleName, styleValue);\n }\n }\n } else if (propName !== \"key\" && propValue !== null && propValue !== undefined) {\n let type = typeof propValue;\n if (type === \"function\") {\n if (propName.lastIndexOf(\"on\", 0) === 0) {\n // lastIndexOf(,0)===0 -> startsWith\n if (eventHandlerInterceptor) {\n propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers\n }\n if (propName === \"oninput\") {\n (function () {\n // record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput\n let oldPropValue = propValue;\n propValue = function (this: HTMLElement, evt: Event) {\n oldPropValue.apply(this, [evt]);\n (evt.target as any)[\"oninput-value\"] = (evt.target as HTMLInputElement).value; // may be HTMLTextAreaElement as well\n };\n })();\n }\n }\n (domNode as any)[propName] = propValue;\n } else if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"value\" && propName !== \"innerHTML\") {\n (domNode as Element).setAttribute(propName, propValue);\n } else {\n (domNode as any)[propName] = propValue;\n }\n }\n }\n};\n\nlet addChildren = (\n domNode: Node,\n children: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!children) {\n return;\n }\n for (let child of children) {\n createDom(child, domNode, undefined, projectionOptions);\n }\n};\n\nexport let initPropertiesAndChildren = (\n domNode: Node,\n vnode: VNode,\n projectionOptions: ProjectionOptions\n): void => {\n addChildren(domNode, vnode.children, projectionOptions); // children before properties, needed for value property of <select>.\n if (vnode.text) {\n domNode.textContent = vnode.text;\n }\n setProperties(domNode, vnode.properties, projectionOptions);\n if (vnode.properties && vnode.properties.afterCreate) {\n vnode.properties.afterCreate.apply(vnode.properties.bind || vnode.properties, [\n domNode as Element,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n};\n\nexport let createDom = (\n vnode: VNode,\n parentNode: Node,\n insertBefore: Node | null | undefined,\n projectionOptions: ProjectionOptions\n): void => {\n let domNode: Node | undefined;\n let start = 0;\n let vnodeSelector = vnode.vnodeSelector;\n let doc = parentNode.ownerDocument!;\n if (vnodeSelector === \"\") {\n if (vnode.domNode) {\n vnode.domNode.nodeValue = vnode.text!;\n } else {\n domNode = vnode.domNode = doc.createTextNode(vnode.text!);\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else {\n parentNode.appendChild(domNode);\n }\n }\n } else {\n for (let i = 0; i <= vnodeSelector.length; ++i) {\n let c = vnodeSelector.charAt(i);\n if (i === vnodeSelector.length || c === \".\" || c === \"#\") {\n let type = vnodeSelector.charAt(start - 1);\n let found = vnodeSelector.slice(start, i);\n if (type === \".\") {\n (domNode! as HTMLElement).classList.add(found);\n } else if (type === \"#\") {\n (domNode! as Element).id = found;\n } else {\n if (found === \"svg\") {\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = vnode.domNode = doc.createElementNS(projectionOptions.namespace, found);\n } else {\n domNode = vnode.domNode = vnode.domNode || doc.createElement(found);\n if (found === \"input\" && vnode.properties && vnode.properties.type !== undefined) {\n // IE8 and older don't support setting input type after the DOM Node has been added to the document\n (domNode as Element).setAttribute(\"type\", vnode.properties.type);\n }\n }\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else if (domNode.parentNode !== parentNode) {\n parentNode.appendChild(domNode);\n }\n }\n start = i + 1;\n }\n }\n initPropertiesAndChildren(domNode!, vnode, projectionOptions);\n }\n};\n\nlet updateDom: (previous: VNode, vnode: VNode, projectionOptions: ProjectionOptions) => boolean;\n\n/**\n * Adds or removes classes from an Element\n * @param domNode the element\n * @param classes a string separated list of classes\n * @param on true means add classes, false means remove\n */\nlet toggleClasses = (domNode: HTMLElement, classes: string | null | undefined, on: boolean) => {\n if (!classes) {\n return;\n }\n classes.split(\" \").forEach((classToToggle) => {\n if (classToToggle) {\n domNode.classList.toggle(classToToggle, on);\n }\n });\n};\n\nlet updateProperties = (\n domNode: Node,\n previousProperties: VNodeProperties | undefined,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let propertiesUpdated = false;\n let propNames = Object.keys(properties);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n // assuming that properties will be nullified instead of missing is by design\n let propValue = properties[propName];\n let previousValue = previousProperties![propName];\n if (propName === \"class\") {\n if (previousValue !== propValue) {\n toggleClasses(domNode as HTMLElement, previousValue, false);\n toggleClasses(domNode as HTMLElement, propValue, true);\n }\n } else if (propName === \"classes\") {\n let classList = (domNode as Element).classList;\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n let on = !!propValue[className];\n let previousOn = !!previousValue[className];\n if (on === previousOn) {\n continue;\n }\n propertiesUpdated = true;\n if (on) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n } else if (propName === \"styles\") {\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let newStyleValue = propValue[styleName];\n let oldStyleValue = previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, newStyleValue);\n } else {\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, \"\");\n }\n }\n } else {\n if (!propValue && typeof previousValue === \"string\") {\n propValue = \"\";\n }\n if (propName === \"value\") {\n // value can be manipulated by the user directly and using event.preventDefault() is not an option\n let domValue = (domNode as any)[propName];\n if (\n domValue !== propValue && // The 'value' in the DOM tree !== newValue\n ((domNode as any)[\"oninput-value\"]\n ? domValue === (domNode as any)[\"oninput-value\"] // If the last reported value to 'oninput' does not match domValue, do nothing and wait for oninput\n : propValue !== previousValue) // Only update the value if the vdom changed\n ) {\n // The edge cases are described in the tests\n (domNode as any)[propName] = propValue; // Reset the value, even if the virtual DOM did not change\n (domNode as any)[\"oninput-value\"] = undefined;\n } // else do not update the domNode, otherwise the cursor position would be changed\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n } else if (propValue !== previousValue) {\n let type = typeof propValue;\n if (type !== \"function\" || !projectionOptions.eventHandlerInterceptor) {\n // Function updates are expected to be handled by the EventHandlerInterceptor\n if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"innerHTML\") {\n if (propName === \"role\" && propValue === \"\") {\n (domNode as any).removeAttribute(propName);\n } else {\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if ((domNode as any)[propName] !== propValue) {\n // Comparison is here for side-effects in Edge with scrollLeft and scrollTop\n (domNode as any)[propName] = propValue;\n }\n\n propertiesUpdated = true;\n }\n }\n }\n }\n return propertiesUpdated;\n};\n\nlet updateChildren = (\n vnode: VNode,\n domNode: Node,\n oldChildren: VNode[] | undefined,\n newChildren: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (oldChildren === newChildren) {\n return false;\n }\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren || emptyArray;\n let oldChildrenLength = oldChildren.length;\n let newChildrenLength = newChildren.length;\n\n let oldIndex = 0;\n let newIndex = 0;\n let i: number;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n let newChild = newChildren[newIndex];\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions) || textUpdated;\n oldIndex++;\n } else {\n let findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n if (findOldIndex >= 0) {\n // Remove preceding missing children\n for (i = oldIndex; i < findOldIndex; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n textUpdated =\n updateDom(oldChildren[findOldIndex], newChild, projectionOptions) || textUpdated;\n oldIndex = findOldIndex + 1;\n } else {\n // New child\n createDom(\n newChild,\n domNode,\n oldIndex < oldChildrenLength ? oldChildren[oldIndex].domNode : undefined,\n projectionOptions\n );\n nodeAdded(newChild);\n checkDistinguishable(newChildren, newIndex, vnode, \"added\");\n }\n }\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n }\n return textUpdated;\n};\n\nupdateDom = (previous, vnode, projectionOptions) => {\n let domNode = previous.domNode!;\n let textUpdated = false;\n if (previous === vnode) {\n return false; // By contract, VNode objects may not be modified anymore after passing them to maquette\n }\n let updated = false;\n if (vnode.vnodeSelector === \"\") {\n if (vnode.text !== previous.text) {\n let newTextNode = domNode.ownerDocument!.createTextNode(vnode.text!);\n domNode.parentNode!.replaceChild(newTextNode, domNode);\n vnode.domNode = newTextNode;\n textUpdated = true;\n return textUpdated;\n }\n vnode.domNode = domNode;\n } else {\n if (vnode.vnodeSelector.lastIndexOf(\"svg\", 0) === 0) {\n // lastIndexOf(needle,0)===0 means StartsWith\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (previous.text !== vnode.text) {\n updated = true;\n if (vnode.text === undefined) {\n domNode.removeChild(domNode.firstChild!); // the only textnode presumably\n } else {\n domNode.textContent = vnode.text;\n }\n }\n vnode.domNode = domNode;\n updated =\n updateChildren(vnode, domNode, previous.children, vnode.children, projectionOptions) ||\n updated;\n updated =\n updateProperties(domNode, previous.properties, vnode.properties, projectionOptions) ||\n updated;\n if (vnode.properties && vnode.properties.afterUpdate) {\n vnode.properties.afterUpdate.apply(vnode.properties.bind || vnode.properties, [\n <Element>domNode,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n }\n if (updated && vnode.properties && vnode.properties.updateAnimation) {\n vnode.properties.updateAnimation(<Element>domNode, vnode.properties, previous.properties);\n }\n return textUpdated;\n};\n\nexport let createProjection = (vnode: VNode, projectionOptions: ProjectionOptions): Projection => {\n return {\n getLastRender: () => vnode,\n update: (updatedVnode: VNode) => {\n if (vnode.vnodeSelector !== updatedVnode.vnodeSelector) {\n throw new Error(\n \"The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)\"\n );\n }\n let previousVNode = vnode;\n vnode = updatedVnode;\n updateDom(previousVNode, updatedVnode, projectionOptions);\n },\n domNode: <Element>vnode.domNode,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Exports here are NOT re-exported to maquette\n */\nimport { EventHandler, Projection, ProjectionOptions, VNode, VNodeProperties } from \"./interfaces\";\n\nconst NAMESPACE_W3 = \"http://www.w3.org/\";\nconst NAMESPACE_SVG = `${NAMESPACE_W3}2000/svg`;\nconst NAMESPACE_XLINK = `${NAMESPACE_W3}1999/xlink`;\n\nlet emptyArray = <VNode[]>[];\n\nexport let extend = <T extends object>(base: T, overrides: any): T => {\n let result = {} as any;\n Object.keys(base).forEach((key) => {\n result[key] = (base as any)[key];\n });\n if (overrides) {\n Object.keys(overrides).forEach((key) => {\n result[key] = overrides[key];\n });\n }\n return result;\n};\n\nlet same = (vnode1: VNode, vnode2: VNode) => {\n if (vnode1.vnodeSelector !== vnode2.vnodeSelector) {\n return false;\n }\n if (vnode1.properties && vnode2.properties) {\n if (vnode1.properties.key !== vnode2.properties.key) {\n return false;\n }\n return vnode1.properties.bind === vnode2.properties.bind;\n }\n return !vnode1.properties && !vnode2.properties;\n};\n\nlet checkStyleValue = (styleValue: unknown) => {\n if (typeof styleValue !== \"string\") {\n throw new Error(\"Style values must be strings\");\n }\n};\n\nlet findIndexOfChild = (children: VNode[], sameAs: VNode, start: number) => {\n if (sameAs.vnodeSelector !== \"\") {\n // Never scan for text-nodes\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n }\n return -1;\n};\n\nlet checkDistinguishable = (\n childNodes: VNode[],\n indexToCheck: number,\n parentVNode: VNode,\n operation: string\n) => {\n let childNode = childNodes[indexToCheck];\n if (childNode.vnodeSelector === \"\") {\n return; // Text nodes need not be distinguishable\n }\n let properties = childNode.properties;\n let key = properties\n ? properties.key === undefined\n ? properties.bind\n : properties.key\n : undefined;\n if (!key) {\n // A key is just assumed to be unique\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n let node = childNodes[i];\n if (same(node, childNode)) {\n throw {\n error: new Error(\n `${parentVNode.vnodeSelector} had a ${childNode.vnodeSelector} child ${\n operation === \"added\" ? operation : \"removed\"\n }, but there is now more than one. You must add unique key properties to make them distinguishable.`\n ),\n parentNode: parentVNode,\n childNode,\n };\n }\n }\n }\n }\n};\n\nlet nodeAdded = (vNode: VNode) => {\n if (vNode.properties) {\n let enterAnimation = vNode.properties.enterAnimation;\n if (enterAnimation) {\n enterAnimation(vNode.domNode as Element, vNode.properties);\n }\n }\n};\n\nlet removedNodes: VNode[] = [];\nlet requestedIdleCallback = false;\n\nlet visitRemovedNode = (node: VNode) => {\n (node.children || []).forEach(visitRemovedNode);\n\n if (node.properties && node.properties.afterRemoved) {\n node.properties.afterRemoved.apply(node.properties.bind || node.properties, [\n <Element>node.domNode,\n ]);\n }\n};\n\nlet processPendingNodeRemovals = (): void => {\n requestedIdleCallback = false;\n\n removedNodes.forEach(visitRemovedNode);\n removedNodes.length = 0;\n};\n\nlet scheduleNodeRemoval = (vNode: VNode): void => {\n removedNodes.push(vNode);\n\n if (!requestedIdleCallback) {\n requestedIdleCallback = true;\n if (typeof window !== \"undefined\" && \"requestIdleCallback\" in window) {\n window.requestIdleCallback(processPendingNodeRemovals, { timeout: 16 });\n } else {\n setTimeout(processPendingNodeRemovals, 16);\n }\n }\n};\n\nlet nodeToRemove = (vNode: VNode) => {\n let domNode: Node = vNode.domNode!;\n if (vNode.properties) {\n let exitAnimation = vNode.properties.exitAnimation;\n if (exitAnimation) {\n (domNode as HTMLElement).style.pointerEvents = \"none\";\n let removeDomNode = () => {\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n };\n exitAnimation(domNode as Element, removeDomNode, vNode.properties);\n return;\n }\n }\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n};\n\nlet setProperties = (\n domNode: Node,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;\n let propNames = Object.keys(properties);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n let propValue = properties[propName];\n if (propName === \"className\") {\n throw new Error('Property \"className\" is not supported, use \"class\".');\n } else if (propName === \"class\") {\n toggleClasses(domNode as HTMLElement, propValue as string, true);\n } else if (propName === \"classes\") {\n // object with string keys and boolean values\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n if (propValue[className]) {\n (domNode as Element).classList.add(className);\n }\n }\n } else if (propName === \"styles\") {\n // object with string keys and string (!) values\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let styleValue = propValue[styleName];\n if (styleValue) {\n checkStyleValue(styleValue);\n projectionOptions.styleApplyer!(<HTMLElement>domNode, styleName, styleValue);\n }\n }\n } else if (propName === \"on\" && propValue) {\n // object with string keys and function values\n for (let [key, handler] of Object.entries(properties.on!)) {\n let listener: EventHandler | undefined =\n typeof handler === \"function\" ? handler : handler.listener;\n if (eventHandlerInterceptor) {\n listener = eventHandlerInterceptor(key, listener, domNode, properties);\n }\n if (listener) {\n domNode.addEventListener(\n key,\n listener,\n typeof handler === \"function\" ? undefined : handler.options\n );\n }\n }\n } else if (propName !== \"key\" && propValue !== null && propValue !== undefined) {\n let type = typeof propValue;\n if (type === \"function\") {\n if (propName.lastIndexOf(\"on\", 0) === 0) {\n // lastIndexOf(,0)===0 -> startsWith\n if (eventHandlerInterceptor) {\n propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers\n }\n if (propName === \"oninput\") {\n (function () {\n // record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput\n let oldPropValue = propValue;\n propValue = function (this: HTMLElement, evt: Event) {\n oldPropValue.apply(this, [evt]);\n (evt.target as any)[\"oninput-value\"] = (evt.target as HTMLInputElement).value; // may be HTMLTextAreaElement as well\n };\n })();\n }\n }\n (domNode as any)[propName] = propValue;\n } else if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"value\" && propName !== \"innerHTML\") {\n (domNode as Element).setAttribute(propName, propValue);\n } else {\n (domNode as any)[propName] = propValue;\n }\n }\n }\n};\n\nlet addChildren = (\n domNode: Node,\n children: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!children) {\n return;\n }\n for (let child of children) {\n createDom(child, domNode, undefined, projectionOptions);\n }\n};\n\nexport let initPropertiesAndChildren = (\n domNode: Node,\n vnode: VNode,\n projectionOptions: ProjectionOptions\n): void => {\n addChildren(domNode, vnode.children, projectionOptions); // children before properties, needed for value property of <select>.\n if (vnode.text) {\n domNode.textContent = vnode.text;\n }\n setProperties(domNode, vnode.properties, projectionOptions);\n if (vnode.properties && vnode.properties.afterCreate) {\n vnode.properties.afterCreate.apply(vnode.properties.bind || vnode.properties, [\n domNode as Element,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n};\n\nexport let createDom = (\n vnode: VNode,\n parentNode: Node,\n insertBefore: Node | null | undefined,\n projectionOptions: ProjectionOptions\n): void => {\n let domNode: Node | undefined;\n let start = 0;\n let vnodeSelector = vnode.vnodeSelector;\n let doc = parentNode.ownerDocument!;\n if (vnodeSelector === \"\") {\n if (vnode.domNode) {\n vnode.domNode.nodeValue = vnode.text!;\n } else {\n domNode = vnode.domNode = doc.createTextNode(vnode.text!);\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else {\n parentNode.appendChild(domNode);\n }\n }\n } else {\n for (let i = 0; i <= vnodeSelector.length; ++i) {\n let c = vnodeSelector.charAt(i);\n if (i === vnodeSelector.length || c === \".\" || c === \"#\") {\n let type = vnodeSelector.charAt(start - 1);\n let found = vnodeSelector.slice(start, i);\n if (type === \".\") {\n (domNode! as HTMLElement).classList.add(found);\n } else if (type === \"#\") {\n (domNode! as Element).id = found;\n } else {\n if (found === \"svg\") {\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = vnode.domNode = doc.createElementNS(projectionOptions.namespace, found);\n } else {\n domNode = vnode.domNode =\n vnode.domNode ||\n (vnode.properties?.is\n ? doc.createElement(found, { is: vnode.properties.is })\n : doc.createElement(found));\n if (found === \"input\" && vnode.properties && vnode.properties.type !== undefined) {\n // IE8 and older don't support setting input type after the DOM Node has been added to the document\n (domNode as Element).setAttribute(\"type\", vnode.properties.type);\n }\n }\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else if (domNode.parentNode !== parentNode) {\n parentNode.appendChild(domNode);\n }\n }\n start = i + 1;\n }\n }\n initPropertiesAndChildren(domNode!, vnode, projectionOptions);\n }\n};\n\nlet updateDom: (previous: VNode, vnode: VNode, projectionOptions: ProjectionOptions) => boolean;\n\n/**\n * Adds or removes classes from an Element\n * @param domNode the element\n * @param classes a string separated list of classes\n * @param on true means add classes, false means remove\n */\nlet toggleClasses = (domNode: HTMLElement, classes: string | null | undefined, on: boolean) => {\n if (!classes) {\n return;\n }\n classes.split(\" \").forEach((classToToggle) => {\n if (classToToggle) {\n domNode.classList.toggle(classToToggle, on);\n }\n });\n};\n\nlet updateProperties = (\n domNode: Node,\n previousProperties: VNodeProperties | undefined,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let propertiesUpdated = false;\n let propNames = Object.keys(properties);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n // assuming that properties will be nullified instead of missing is by design\n let propValue = properties[propName];\n let previousValue = previousProperties![propName];\n if (propName === \"class\") {\n if (previousValue !== propValue) {\n toggleClasses(domNode as HTMLElement, previousValue, false);\n toggleClasses(domNode as HTMLElement, propValue, true);\n }\n } else if (propName === \"classes\") {\n let classList = (domNode as Element).classList;\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n let on = !!propValue[className];\n let previousOn = !!previousValue[className];\n if (on === previousOn) {\n continue;\n }\n propertiesUpdated = true;\n if (on) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n } else if (propName === \"styles\") {\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let newStyleValue = propValue[styleName];\n let oldStyleValue = previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, newStyleValue);\n } else {\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, \"\");\n }\n }\n } else {\n if (!propValue && typeof previousValue === \"string\") {\n propValue = \"\";\n }\n if (propName === \"value\") {\n // value can be manipulated by the user directly and using event.preventDefault() is not an option\n let domValue = (domNode as any)[propName];\n if (\n domValue !== propValue && // The 'value' in the DOM tree !== newValue\n ((domNode as any)[\"oninput-value\"]\n ? domValue === (domNode as any)[\"oninput-value\"] // If the last reported value to 'oninput' does not match domValue, do nothing and wait for oninput\n : propValue !== previousValue) // Only update the value if the vdom changed\n ) {\n // The edge cases are described in the tests\n (domNode as any)[propName] = propValue; // Reset the value, even if the virtual DOM did not change\n (domNode as any)[\"oninput-value\"] = undefined;\n } // else do not update the domNode, otherwise the cursor position would be changed\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n } else if (propValue !== previousValue) {\n let type = typeof propValue;\n if (type !== \"function\" || !projectionOptions.eventHandlerInterceptor) {\n // Function updates are expected to be handled by the EventHandlerInterceptor\n if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"innerHTML\") {\n if (propName === \"role\" && propValue === \"\") {\n (domNode as any).removeAttribute(propName);\n } else {\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if ((domNode as any)[propName] !== propValue) {\n // Comparison is here for side-effects in Edge with scrollLeft and scrollTop\n (domNode as any)[propName] = propValue;\n }\n\n propertiesUpdated = true;\n }\n }\n }\n }\n return propertiesUpdated;\n};\n\nlet updateChildren = (\n vnode: VNode,\n domNode: Node,\n oldChildren: VNode[] | undefined,\n newChildren: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (oldChildren === newChildren) {\n return false;\n }\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren || emptyArray;\n let oldChildrenLength = oldChildren.length;\n let newChildrenLength = newChildren.length;\n\n let oldIndex = 0;\n let newIndex = 0;\n let i: number;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n let newChild = newChildren[newIndex];\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions) || textUpdated;\n oldIndex++;\n } else {\n let findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n if (findOldIndex >= 0) {\n // Remove preceding missing children\n for (i = oldIndex; i < findOldIndex; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n textUpdated =\n updateDom(oldChildren[findOldIndex], newChild, projectionOptions) || textUpdated;\n oldIndex = findOldIndex + 1;\n } else {\n // New child\n createDom(\n newChild,\n domNode,\n oldIndex < oldChildrenLength ? oldChildren[oldIndex].domNode : undefined,\n projectionOptions\n );\n nodeAdded(newChild);\n checkDistinguishable(newChildren, newIndex, vnode, \"added\");\n }\n }\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n }\n return textUpdated;\n};\n\nupdateDom = (previous, vnode, projectionOptions) => {\n let domNode = previous.domNode!;\n let textUpdated = false;\n if (previous === vnode) {\n return false; // By contract, VNode objects may not be modified anymore after passing them to maquette\n }\n let updated = false;\n if (vnode.vnodeSelector === \"\") {\n if (vnode.text !== previous.text) {\n let newTextNode = domNode.ownerDocument!.createTextNode(vnode.text!);\n domNode.parentNode!.replaceChild(newTextNode, domNode);\n vnode.domNode = newTextNode;\n textUpdated = true;\n return textUpdated;\n }\n vnode.domNode = domNode;\n } else {\n if (vnode.vnodeSelector.lastIndexOf(\"svg\", 0) === 0) {\n // lastIndexOf(needle,0)===0 means StartsWith\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (previous.text !== vnode.text) {\n updated = true;\n if (vnode.text === undefined) {\n domNode.removeChild(domNode.firstChild!); // the only textnode presumably\n } else {\n domNode.textContent = vnode.text;\n }\n }\n vnode.domNode = domNode;\n updated =\n updateChildren(vnode, domNode, previous.children, vnode.children, projectionOptions) ||\n updated;\n updated =\n updateProperties(domNode, previous.properties, vnode.properties, projectionOptions) ||\n updated;\n if (vnode.properties && vnode.properties.afterUpdate) {\n vnode.properties.afterUpdate.apply(vnode.properties.bind || vnode.properties, [\n <Element>domNode,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n }\n if (updated && vnode.properties && vnode.properties.updateAnimation) {\n vnode.properties.updateAnimation(<Element>domNode, vnode.properties, previous.properties);\n }\n return textUpdated;\n};\n\nexport let createProjection = (vnode: VNode, projectionOptions: ProjectionOptions): Projection => {\n return {\n getLastRender: () => vnode,\n update: (updatedVnode: VNode) => {\n if (vnode.vnodeSelector !== updatedVnode.vnodeSelector) {\n throw new Error(\n \"The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)\"\n );\n }\n let previousVNode = vnode;\n vnode = updatedVnode;\n updateDom(previousVNode, updatedVnode, projectionOptions);\n },\n domNode: <Element>vnode.domNode,\n };\n};\n"]}
|
package/dist/projector.d.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A projector is used to create the real DOM from the the virtual DOM and to keep it up-to-date afterwards.
|
|
3
|
-
*
|
|
4
|
-
* You can call [[append]], [[merge]], [[insertBefore]] and [[replace]] to add the virtual DOM to the real DOM.
|
|
5
|
-
* The `renderFunction` callbacks will be called to create the real DOM immediately.
|
|
6
|
-
* Afterwards, the `renderFunction` callbacks will be called again to update the DOM on the next animation-frame after:
|
|
7
|
-
*
|
|
8
|
-
* - The Projector's [[scheduleRender]] function was called
|
|
9
|
-
* - An event handler (like `onclick`) on a rendered [[VNode]] was called.
|
|
10
|
-
*
|
|
11
|
-
* The projector stops when [[stop]] is called or when an error is thrown during rendering.
|
|
12
|
-
* It is possible to use `window.onerror` to handle these errors.
|
|
13
|
-
* Instances of [[Projector]] can be created using [[createProjector]].
|
|
14
|
-
*
|
|
15
|
-
* If you need a customized projector, please check the maquette-advanced-projector project which provides a
|
|
16
|
-
* versatile stand-in replacement.
|
|
17
|
-
*/
|
|
18
|
-
import { Projector, ProjectorOptions } from "./interfaces";
|
|
19
|
-
/**
|
|
20
|
-
* Creates a [[Projector]] instance using the provided projectionOptions.
|
|
21
|
-
*
|
|
22
|
-
* For more information, see [[Projector]].
|
|
23
|
-
*
|
|
24
|
-
* @param projectorOptions Options that influence how the DOM is rendered and updated.
|
|
25
|
-
*/
|
|
26
|
-
export declare let createProjector: (projectorOptions?: ProjectorOptions) => Projector;
|
|
1
|
+
/**
|
|
2
|
+
* A projector is used to create the real DOM from the the virtual DOM and to keep it up-to-date afterwards.
|
|
3
|
+
*
|
|
4
|
+
* You can call [[append]], [[merge]], [[insertBefore]] and [[replace]] to add the virtual DOM to the real DOM.
|
|
5
|
+
* The `renderFunction` callbacks will be called to create the real DOM immediately.
|
|
6
|
+
* Afterwards, the `renderFunction` callbacks will be called again to update the DOM on the next animation-frame after:
|
|
7
|
+
*
|
|
8
|
+
* - The Projector's [[scheduleRender]] function was called
|
|
9
|
+
* - An event handler (like `onclick`) on a rendered [[VNode]] was called.
|
|
10
|
+
*
|
|
11
|
+
* The projector stops when [[stop]] is called or when an error is thrown during rendering.
|
|
12
|
+
* It is possible to use `window.onerror` to handle these errors.
|
|
13
|
+
* Instances of [[Projector]] can be created using [[createProjector]].
|
|
14
|
+
*
|
|
15
|
+
* If you need a customized projector, please check the maquette-advanced-projector project which provides a
|
|
16
|
+
* versatile stand-in replacement.
|
|
17
|
+
*/
|
|
18
|
+
import { Projector, ProjectorOptions } from "./interfaces";
|
|
19
|
+
/**
|
|
20
|
+
* Creates a [[Projector]] instance using the provided projectionOptions.
|
|
21
|
+
*
|
|
22
|
+
* For more information, see [[Projector]].
|
|
23
|
+
*
|
|
24
|
+
* @param projectorOptions Options that influence how the DOM is rendered and updated.
|
|
25
|
+
*/
|
|
26
|
+
export declare let createProjector: (projectorOptions?: ProjectorOptions) => Projector;
|
package/dist/projector.js
CHANGED
|
@@ -1,133 +1,135 @@
|
|
|
1
|
-
import { applyDefaultProjectionOptions, dom } from "./dom";
|
|
2
|
-
var createParentNodePath = function (node, rootNode) {
|
|
3
|
-
var parentNodePath = [];
|
|
4
|
-
while (node && node !== rootNode) {
|
|
5
|
-
parentNodePath.push(node);
|
|
6
|
-
node = node.parentNode;
|
|
7
|
-
}
|
|
8
|
-
return parentNodePath;
|
|
9
|
-
};
|
|
10
|
-
var find;
|
|
11
|
-
if (Array.prototype.find) {
|
|
12
|
-
find = function (items, predicate) { return items.find(predicate); };
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
find = function (items, predicate) { return items.filter(predicate)[0]; };
|
|
16
|
-
}
|
|
17
|
-
var findVNodeByParentNodePath = function (vnode, parentNodePath) {
|
|
18
|
-
var result = vnode;
|
|
19
|
-
parentNodePath.forEach(function (node) {
|
|
20
|
-
result =
|
|
21
|
-
result && result.children
|
|
22
|
-
? find(result.children, function (child) { return child.domNode === node; })
|
|
23
|
-
: undefined;
|
|
24
|
-
});
|
|
25
|
-
return result;
|
|
26
|
-
};
|
|
27
|
-
var createEventHandlerInterceptor = function (projector, getProjection, performanceLogger) {
|
|
28
|
-
return function (propertyName, eventHandler, domNode, properties) { return modifiedEventHandler; };
|
|
29
|
-
function modifiedEventHandler(evt) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
var
|
|
33
|
-
parentNodePath.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
var
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
var
|
|
60
|
-
var
|
|
61
|
-
var
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
/*
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
performanceLogger("
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
};
|
|
1
|
+
import { applyDefaultProjectionOptions, dom } from "./dom";
|
|
2
|
+
var createParentNodePath = function (node, rootNode) {
|
|
3
|
+
var parentNodePath = [];
|
|
4
|
+
while (node && node !== rootNode) {
|
|
5
|
+
parentNodePath.push(node);
|
|
6
|
+
node = node.parentNode;
|
|
7
|
+
}
|
|
8
|
+
return parentNodePath;
|
|
9
|
+
};
|
|
10
|
+
var find;
|
|
11
|
+
if (Array.prototype.find) {
|
|
12
|
+
find = function (items, predicate) { return items.find(predicate); };
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
find = function (items, predicate) { return items.filter(predicate)[0]; };
|
|
16
|
+
}
|
|
17
|
+
var findVNodeByParentNodePath = function (vnode, parentNodePath) {
|
|
18
|
+
var result = vnode;
|
|
19
|
+
parentNodePath.forEach(function (node) {
|
|
20
|
+
result =
|
|
21
|
+
result && result.children
|
|
22
|
+
? find(result.children, function (child) { return child.domNode === node; })
|
|
23
|
+
: undefined;
|
|
24
|
+
});
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
var createEventHandlerInterceptor = function (projector, getProjection, performanceLogger) {
|
|
28
|
+
return function (propertyName, eventHandler, domNode, properties) { return modifiedEventHandler; };
|
|
29
|
+
function modifiedEventHandler(evt) {
|
|
30
|
+
var _a, _b;
|
|
31
|
+
performanceLogger("domEvent", evt);
|
|
32
|
+
var projection = getProjection();
|
|
33
|
+
var parentNodePath = createParentNodePath(evt.currentTarget, projection.domNode);
|
|
34
|
+
parentNodePath.reverse();
|
|
35
|
+
var matchingVNode = findVNodeByParentNodePath(projection.getLastRender(), parentNodePath);
|
|
36
|
+
projector.scheduleRender();
|
|
37
|
+
var result;
|
|
38
|
+
if (matchingVNode) {
|
|
39
|
+
/* eslint-disable prefer-rest-params */
|
|
40
|
+
var listener = (_b = (_a = matchingVNode.properties["on".concat(evt.type)]) !== null && _a !== void 0 ? _a : matchingVNode.properties.on[evt.type].listener) !== null && _b !== void 0 ? _b : matchingVNode.properties.on[evt.type];
|
|
41
|
+
result = listener.apply(matchingVNode.properties.bind || this, arguments);
|
|
42
|
+
/* eslint-enable prefer-rest-params */
|
|
43
|
+
}
|
|
44
|
+
performanceLogger("domEventProcessed", evt);
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Creates a [[Projector]] instance using the provided projectionOptions.
|
|
50
|
+
*
|
|
51
|
+
* For more information, see [[Projector]].
|
|
52
|
+
*
|
|
53
|
+
* @param projectorOptions Options that influence how the DOM is rendered and updated.
|
|
54
|
+
*/
|
|
55
|
+
export var createProjector = function (projectorOptions) {
|
|
56
|
+
var projector;
|
|
57
|
+
var projectionOptions = applyDefaultProjectionOptions(projectorOptions);
|
|
58
|
+
var performanceLogger = projectionOptions.performanceLogger;
|
|
59
|
+
var renderCompleted = true;
|
|
60
|
+
var scheduled;
|
|
61
|
+
var stopped = false;
|
|
62
|
+
var projections = [];
|
|
63
|
+
var renderFunctions = []; // matches the projections array
|
|
64
|
+
var addProjection = function (
|
|
65
|
+
/* one of: dom.append, dom.insertBefore, dom.replace, dom.merge */
|
|
66
|
+
domFunction,
|
|
67
|
+
/* the parameter of the domFunction */
|
|
68
|
+
node, renderFunction) {
|
|
69
|
+
var projection;
|
|
70
|
+
var getProjection = function () { return projection; };
|
|
71
|
+
projectionOptions.eventHandlerInterceptor = createEventHandlerInterceptor(projector, getProjection, performanceLogger);
|
|
72
|
+
projection = domFunction(node, renderFunction(), projectionOptions);
|
|
73
|
+
projections.push(projection);
|
|
74
|
+
renderFunctions.push(renderFunction);
|
|
75
|
+
};
|
|
76
|
+
var doRender = function () {
|
|
77
|
+
scheduled = undefined;
|
|
78
|
+
if (!renderCompleted) {
|
|
79
|
+
return; // The last render threw an error, it should have been logged in the browser console.
|
|
80
|
+
}
|
|
81
|
+
renderCompleted = false;
|
|
82
|
+
performanceLogger("renderStart", undefined);
|
|
83
|
+
for (var i = 0; i < projections.length; i++) {
|
|
84
|
+
var updatedVnode = renderFunctions[i]();
|
|
85
|
+
performanceLogger("rendered", undefined);
|
|
86
|
+
projections[i].update(updatedVnode);
|
|
87
|
+
performanceLogger("patched", undefined);
|
|
88
|
+
}
|
|
89
|
+
performanceLogger("renderDone", undefined);
|
|
90
|
+
renderCompleted = true;
|
|
91
|
+
};
|
|
92
|
+
projector = {
|
|
93
|
+
renderNow: doRender,
|
|
94
|
+
scheduleRender: function () {
|
|
95
|
+
if (!scheduled && !stopped) {
|
|
96
|
+
scheduled = requestAnimationFrame(doRender);
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
stop: function () {
|
|
100
|
+
if (scheduled) {
|
|
101
|
+
cancelAnimationFrame(scheduled);
|
|
102
|
+
scheduled = undefined;
|
|
103
|
+
}
|
|
104
|
+
stopped = true;
|
|
105
|
+
},
|
|
106
|
+
resume: function () {
|
|
107
|
+
stopped = false;
|
|
108
|
+
renderCompleted = true;
|
|
109
|
+
projector.scheduleRender();
|
|
110
|
+
},
|
|
111
|
+
append: function (parentNode, renderFunction) {
|
|
112
|
+
addProjection(dom.append, parentNode, renderFunction);
|
|
113
|
+
},
|
|
114
|
+
insertBefore: function (beforeNode, renderFunction) {
|
|
115
|
+
addProjection(dom.insertBefore, beforeNode, renderFunction);
|
|
116
|
+
},
|
|
117
|
+
merge: function (domNode, renderFunction) {
|
|
118
|
+
addProjection(dom.merge, domNode, renderFunction);
|
|
119
|
+
},
|
|
120
|
+
replace: function (domNode, renderFunction) {
|
|
121
|
+
addProjection(dom.replace, domNode, renderFunction);
|
|
122
|
+
},
|
|
123
|
+
detach: function (renderFunction) {
|
|
124
|
+
for (var i = 0; i < renderFunctions.length; i++) {
|
|
125
|
+
if (renderFunctions[i] === renderFunction) {
|
|
126
|
+
renderFunctions.splice(i, 1);
|
|
127
|
+
return projections.splice(i, 1)[0];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
throw new Error("renderFunction was not found");
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
return projector;
|
|
134
|
+
};
|
|
133
135
|
//# sourceMappingURL=projector.js.map
|
package/dist/projector.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projector.js","sourceRoot":"","sources":["../src/projector.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyDefaultProjectionOptions, dom } from \"./dom\";\n/**\n * A projector is used to create the real DOM from the the virtual DOM and to keep it up-to-date afterwards.\n *\n * You can call [[append]], [[merge]], [[insertBefore]] and [[replace]] to add the virtual DOM to the real DOM.\n * The `renderFunction` callbacks will be called to create the real DOM immediately.\n * Afterwards, the `renderFunction` callbacks will be called again to update the DOM on the next animation-frame after:\n *\n * - The Projector's [[scheduleRender]] function was called\n * - An event handler (like `onclick`) on a rendered [[VNode]] was called.\n *\n * The projector stops when [[stop]] is called or when an error is thrown during rendering.\n * It is possible to use `window.onerror` to handle these errors.\n * Instances of [[Projector]] can be created using [[createProjector]].\n *\n * If you need a customized projector, please check the maquette-advanced-projector project which provides a\n * versatile stand-in replacement.\n */\nimport {\n EventHandler,\n EventHandlerInterceptor,\n Projection,\n ProjectionOptions,\n Projector,\n ProjectorOptions,\n ProjectorPerformanceLogger,\n VNode,\n VNodeProperties,\n} from \"./interfaces\";\n\nlet createParentNodePath = (node: Node | null, rootNode: Element) => {\n let parentNodePath: Node[] = [];\n while (node && node !== rootNode) {\n parentNodePath.push(node);\n node = node.parentNode;\n }\n return parentNodePath;\n};\n\nlet find: <T>(items: T[], predicate: (item: T) => boolean) => T | undefined;\nif ((Array.prototype as any).find) {\n find = (items, predicate) => items.find(predicate);\n} else {\n find = (items, predicate) => items.filter(predicate)[0];\n}\n\nlet findVNodeByParentNodePath = (vnode: VNode, parentNodePath: Node[]): VNode | undefined => {\n let result: VNode | undefined = vnode;\n parentNodePath.forEach((node) => {\n result =\n result && result.children\n ? find(result.children, (child) => child.domNode === node)\n : undefined;\n });\n return result;\n};\n\nlet createEventHandlerInterceptor = (\n projector: Projector,\n getProjection: () => Projection | undefined,\n performanceLogger: ProjectorPerformanceLogger\n): EventHandlerInterceptor => {\n return (\n propertyName: string,\n eventHandler: EventHandler,\n domNode: Node,\n properties: VNodeProperties\n ) => modifiedEventHandler;\n\n function modifiedEventHandler(this: Node, evt: Event): boolean | undefined | void {\n performanceLogger(\"domEvent\", evt);\n let projection = getProjection()!;\n let parentNodePath = createParentNodePath(evt.currentTarget as Element, projection.domNode);\n parentNodePath.reverse();\n let matchingVNode = findVNodeByParentNodePath(projection.getLastRender(), parentNodePath);\n\n projector.scheduleRender();\n\n let result: any;\n if (matchingVNode) {\n /* eslint-disable prefer-rest-params */\n result = matchingVNode.properties![`on${evt.type}`].apply(\n matchingVNode.properties!.bind || this,\n arguments\n );\n /* eslint-enable prefer-rest-params */\n }\n performanceLogger(\"domEventProcessed\", evt);\n return result;\n }\n};\n\n/**\n * Creates a [[Projector]] instance using the provided projectionOptions.\n *\n * For more information, see [[Projector]].\n *\n * @param projectorOptions Options that influence how the DOM is rendered and updated.\n */\nexport let createProjector = (projectorOptions?: ProjectorOptions): Projector => {\n let projector: Projector;\n let projectionOptions = applyDefaultProjectionOptions(projectorOptions);\n let performanceLogger = projectionOptions.performanceLogger!;\n let renderCompleted = true;\n let scheduled: number | undefined;\n let stopped = false;\n let projections = [] as Projection[];\n let renderFunctions = [] as (() => VNode)[]; // matches the projections array\n\n let addProjection = (\n /* one of: dom.append, dom.insertBefore, dom.replace, dom.merge */\n domFunction: (node: Element, vnode: VNode, projectionOptions: ProjectionOptions) => Projection,\n /* the parameter of the domFunction */\n node: Element,\n renderFunction: () => VNode\n ): void => {\n let projection: Projection | undefined;\n let getProjection = () => projection;\n projectionOptions.eventHandlerInterceptor = createEventHandlerInterceptor(\n projector,\n getProjection,\n performanceLogger\n );\n projection = domFunction(node, renderFunction(), projectionOptions);\n projections.push(projection);\n renderFunctions.push(renderFunction);\n };\n\n let doRender = () => {\n scheduled = undefined;\n if (!renderCompleted) {\n return; // The last render threw an error, it should have been logged in the browser console.\n }\n renderCompleted = false;\n performanceLogger(\"renderStart\", undefined);\n for (let i = 0; i < projections.length; i++) {\n let updatedVnode = renderFunctions[i]();\n performanceLogger(\"rendered\", undefined);\n projections[i].update(updatedVnode);\n performanceLogger(\"patched\", undefined);\n }\n performanceLogger(\"renderDone\", undefined);\n renderCompleted = true;\n };\n\n projector = {\n renderNow: doRender,\n scheduleRender: () => {\n if (!scheduled && !stopped) {\n scheduled = requestAnimationFrame(doRender);\n }\n },\n stop: () => {\n if (scheduled) {\n cancelAnimationFrame(scheduled);\n scheduled = undefined;\n }\n stopped = true;\n },\n\n resume: () => {\n stopped = false;\n renderCompleted = true;\n projector.scheduleRender();\n },\n\n append: (parentNode, renderFunction) => {\n addProjection(dom.append, parentNode, renderFunction);\n },\n\n insertBefore: (beforeNode, renderFunction) => {\n addProjection(dom.insertBefore, beforeNode, renderFunction);\n },\n\n merge: (domNode, renderFunction) => {\n addProjection(dom.merge, domNode, renderFunction);\n },\n\n replace: (domNode, renderFunction) => {\n addProjection(dom.replace, domNode, renderFunction);\n },\n\n detach: (renderFunction) => {\n for (let i = 0; i < renderFunctions.length; i++) {\n if (renderFunctions[i] === renderFunction) {\n renderFunctions.splice(i, 1);\n return projections.splice(i, 1)[0];\n }\n }\n throw new Error(\"renderFunction was not found\");\n },\n };\n return projector;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"projector.js","sourceRoot":"","sources":["../src/projector.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyDefaultProjectionOptions, dom } from \"./dom\";\n/**\n * A projector is used to create the real DOM from the the virtual DOM and to keep it up-to-date afterwards.\n *\n * You can call [[append]], [[merge]], [[insertBefore]] and [[replace]] to add the virtual DOM to the real DOM.\n * The `renderFunction` callbacks will be called to create the real DOM immediately.\n * Afterwards, the `renderFunction` callbacks will be called again to update the DOM on the next animation-frame after:\n *\n * - The Projector's [[scheduleRender]] function was called\n * - An event handler (like `onclick`) on a rendered [[VNode]] was called.\n *\n * The projector stops when [[stop]] is called or when an error is thrown during rendering.\n * It is possible to use `window.onerror` to handle these errors.\n * Instances of [[Projector]] can be created using [[createProjector]].\n *\n * If you need a customized projector, please check the maquette-advanced-projector project which provides a\n * versatile stand-in replacement.\n */\nimport {\n EventHandler,\n EventHandlerInterceptor,\n Projection,\n ProjectionOptions,\n Projector,\n ProjectorOptions,\n ProjectorPerformanceLogger,\n VNode,\n VNodeProperties,\n} from \"./interfaces\";\n\nlet createParentNodePath = (node: Node | null, rootNode: Element) => {\n let parentNodePath: Node[] = [];\n while (node && node !== rootNode) {\n parentNodePath.push(node);\n node = node.parentNode;\n }\n return parentNodePath;\n};\n\nlet find: <T>(items: T[], predicate: (item: T) => boolean) => T | undefined;\nif ((Array.prototype as any).find) {\n find = (items, predicate) => items.find(predicate);\n} else {\n find = (items, predicate) => items.filter(predicate)[0];\n}\n\nlet findVNodeByParentNodePath = (vnode: VNode, parentNodePath: Node[]): VNode | undefined => {\n let result: VNode | undefined = vnode;\n parentNodePath.forEach((node) => {\n result =\n result && result.children\n ? find(result.children, (child) => child.domNode === node)\n : undefined;\n });\n return result;\n};\n\nlet createEventHandlerInterceptor = (\n projector: Projector,\n getProjection: () => Projection | undefined,\n performanceLogger: ProjectorPerformanceLogger\n): EventHandlerInterceptor => {\n return (\n propertyName: string,\n eventHandler: EventHandler,\n domNode: Node,\n properties: VNodeProperties\n ) => modifiedEventHandler;\n\n function modifiedEventHandler(this: Node, evt: Event): boolean | undefined | void {\n performanceLogger(\"domEvent\", evt);\n let projection = getProjection()!;\n let parentNodePath = createParentNodePath(evt.currentTarget as Element, projection.domNode);\n parentNodePath.reverse();\n let matchingVNode = findVNodeByParentNodePath(projection.getLastRender(), parentNodePath);\n\n projector.scheduleRender();\n\n let result: any;\n if (matchingVNode) {\n /* eslint-disable prefer-rest-params */\n let listener =\n matchingVNode.properties![`on${evt.type}`] ??\n (matchingVNode.properties!.on![evt.type] as { listener: EventHandler }).listener ??\n (matchingVNode.properties!.on![evt.type] as EventHandler);\n result = listener.apply(matchingVNode.properties!.bind || this, arguments);\n /* eslint-enable prefer-rest-params */\n }\n performanceLogger(\"domEventProcessed\", evt);\n return result;\n }\n};\n\n/**\n * Creates a [[Projector]] instance using the provided projectionOptions.\n *\n * For more information, see [[Projector]].\n *\n * @param projectorOptions Options that influence how the DOM is rendered and updated.\n */\nexport let createProjector = (projectorOptions?: ProjectorOptions): Projector => {\n let projector: Projector;\n let projectionOptions = applyDefaultProjectionOptions(projectorOptions);\n let performanceLogger = projectionOptions.performanceLogger!;\n let renderCompleted = true;\n let scheduled: number | undefined;\n let stopped = false;\n let projections = [] as Projection[];\n let renderFunctions = [] as (() => VNode)[]; // matches the projections array\n\n let addProjection = (\n /* one of: dom.append, dom.insertBefore, dom.replace, dom.merge */\n domFunction: (node: Element, vnode: VNode, projectionOptions: ProjectionOptions) => Projection,\n /* the parameter of the domFunction */\n node: Element,\n renderFunction: () => VNode\n ): void => {\n let projection: Projection | undefined;\n let getProjection = () => projection;\n projectionOptions.eventHandlerInterceptor = createEventHandlerInterceptor(\n projector,\n getProjection,\n performanceLogger\n );\n projection = domFunction(node, renderFunction(), projectionOptions);\n projections.push(projection);\n renderFunctions.push(renderFunction);\n };\n\n let doRender = () => {\n scheduled = undefined;\n if (!renderCompleted) {\n return; // The last render threw an error, it should have been logged in the browser console.\n }\n renderCompleted = false;\n performanceLogger(\"renderStart\", undefined);\n for (let i = 0; i < projections.length; i++) {\n let updatedVnode = renderFunctions[i]();\n performanceLogger(\"rendered\", undefined);\n projections[i].update(updatedVnode);\n performanceLogger(\"patched\", undefined);\n }\n performanceLogger(\"renderDone\", undefined);\n renderCompleted = true;\n };\n\n projector = {\n renderNow: doRender,\n scheduleRender: () => {\n if (!scheduled && !stopped) {\n scheduled = requestAnimationFrame(doRender);\n }\n },\n stop: () => {\n if (scheduled) {\n cancelAnimationFrame(scheduled);\n scheduled = undefined;\n }\n stopped = true;\n },\n\n resume: () => {\n stopped = false;\n renderCompleted = true;\n projector.scheduleRender();\n },\n\n append: (parentNode, renderFunction) => {\n addProjection(dom.append, parentNode, renderFunction);\n },\n\n insertBefore: (beforeNode, renderFunction) => {\n addProjection(dom.insertBefore, beforeNode, renderFunction);\n },\n\n merge: (domNode, renderFunction) => {\n addProjection(dom.merge, domNode, renderFunction);\n },\n\n replace: (domNode, renderFunction) => {\n addProjection(dom.replace, domNode, renderFunction);\n },\n\n detach: (renderFunction) => {\n for (let i = 0; i < renderFunctions.length; i++) {\n if (renderFunctions[i] === renderFunction) {\n renderFunctions.splice(i, 1);\n return projections.splice(i, 1)[0];\n }\n }\n throw new Error(\"renderFunction was not found\");\n },\n };\n return projector;\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ProjectorPerformanceLogger } from "../interfaces";
|
|
2
|
-
/**
|
|
3
|
-
* A `ProjectorPerformanceLogger` that reports measurements to window.performance.measure
|
|
4
|
-
*
|
|
5
|
-
* Can be passed to `createProjector` to get more insights into the virtual DOM performance.
|
|
6
|
-
*/
|
|
7
|
-
export declare let windowPerformanceProjectorLogger: ProjectorPerformanceLogger;
|
|
1
|
+
import { ProjectorPerformanceLogger } from "../interfaces";
|
|
2
|
+
/**
|
|
3
|
+
* A `ProjectorPerformanceLogger` that reports measurements to window.performance.measure
|
|
4
|
+
*
|
|
5
|
+
* Can be passed to `createProjector` to get more insights into the virtual DOM performance.
|
|
6
|
+
*/
|
|
7
|
+
export declare let windowPerformanceProjectorLogger: ProjectorPerformanceLogger;
|