@tko/binding.component
Advanced tools
| // @tko/binding.component 🥊 4.0.0-beta1.0 ESM | ||
| import { | ||
| virtualElements, | ||
| makeArray, | ||
| cloneNodes | ||
| } from "@tko/utils"; | ||
| import { | ||
| unwrap | ||
| } from "@tko/observable"; | ||
| import { | ||
| DescendantBindingHandler | ||
| } from "@tko/bind"; | ||
| import { | ||
| JsxObserver, | ||
| maybeJsx | ||
| } from "@tko/utils.jsx"; | ||
| import { | ||
| NativeProvider | ||
| } from "@tko/provider.native"; | ||
| import { LifeCycle } from "@tko/lifecycle"; | ||
| import registry from "@tko/utils.component"; | ||
| var componentLoadingOperationUniqueId = 0; | ||
| export default class ComponentBinding extends DescendantBindingHandler { | ||
| constructor(params) { | ||
| super(params); | ||
| this.originalChildNodes = makeArray(virtualElements.childNodes(this.$element)); | ||
| this.computed("computeApplyComponent"); | ||
| } | ||
| cloneTemplateIntoElement(componentName, template, element) { | ||
| if (!template) { | ||
| throw new Error("Component '" + componentName + "' has no template"); | ||
| } | ||
| if (maybeJsx(template)) { | ||
| virtualElements.emptyNode(element); | ||
| this.addDisposable(new JsxObserver(template, element, null, void 0, true)); | ||
| } else { | ||
| const clonedNodesArray = cloneNodes(template); | ||
| virtualElements.setDomNodeChildren(element, clonedNodesArray); | ||
| } | ||
| } | ||
| createViewModel(componentDefinition, element, originalChildNodes, componentParams) { | ||
| const componentViewModelFactory = componentDefinition.createViewModel; | ||
| return componentViewModelFactory ? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes }) : componentParams; | ||
| } | ||
| makeTemplateSlotNodes(originalChildNodes) { | ||
| return Object.assign({}, ...this.genSlotsByName(originalChildNodes)); | ||
| } | ||
| *genSlotsByName(templateNodes) { | ||
| for (const node of templateNodes) { | ||
| if (node.nodeType !== 1) { | ||
| continue; | ||
| } | ||
| const slotName = node.getAttribute("slot"); | ||
| if (!slotName) { | ||
| continue; | ||
| } | ||
| yield { [slotName]: node }; | ||
| } | ||
| } | ||
| computeApplyComponent() { | ||
| const value = unwrap(this.value); | ||
| let componentName; | ||
| let componentParams; | ||
| if (typeof value === "string") { | ||
| componentName = value; | ||
| } else { | ||
| componentName = unwrap(value.name); | ||
| componentParams = NativeProvider.getNodeValues(this.$element) || unwrap(value.params); | ||
| } | ||
| this.latestComponentName = componentName; | ||
| if (!componentName) { | ||
| throw new Error("No component name specified"); | ||
| } | ||
| this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId; | ||
| registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn)); | ||
| } | ||
| makeChildBindingContext($component) { | ||
| const ctxExtender = (ctx) => Object.assign(ctx, { | ||
| $component, | ||
| $componentTemplateNodes: this.originalChildNodes, | ||
| $componentTemplateSlotNodes: this.makeTemplateSlotNodes(this.originalChildNodes) | ||
| }); | ||
| return this.$context.createChildContext($component, void 0, ctxExtender); | ||
| } | ||
| applyComponentDefinition(componentName, componentParams, componentDefinition) { | ||
| if (this.currentLoadingOperationId !== this.loadingOperationId || this.latestComponentName !== componentName) { | ||
| return; | ||
| } | ||
| this.cleanUpState(); | ||
| const element = this.$element; | ||
| if (!componentDefinition) { | ||
| throw new Error("Unknown component '" + componentName + "'"); | ||
| } | ||
| if (componentDefinition.template) { | ||
| this.cloneTemplateIntoElement(componentName, componentDefinition.template, element); | ||
| } | ||
| const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams); | ||
| this.childBindingContext = this.makeChildBindingContext(componentViewModel); | ||
| const viewTemplate = componentViewModel && componentViewModel.template; | ||
| if (!viewTemplate && !componentDefinition.template) { | ||
| throw new Error("Component '" + componentName + "' has no template"); | ||
| } | ||
| if (!componentDefinition.template) { | ||
| this.cloneTemplateIntoElement(componentName, viewTemplate, element); | ||
| } | ||
| if (componentViewModel instanceof LifeCycle) { | ||
| componentViewModel.anchorTo(this.$element); | ||
| } | ||
| this.currentViewModel = componentViewModel; | ||
| const onBinding = this.onBindingComplete.bind(this, componentViewModel); | ||
| this.applyBindingsToDescendants(this.childBindingContext, onBinding); | ||
| } | ||
| onBindingComplete(componentViewModel, bindingResult) { | ||
| if (componentViewModel && componentViewModel.koDescendantsComplete) { | ||
| componentViewModel.koDescendantsComplete(this.$element); | ||
| } | ||
| this.completeBinding(bindingResult); | ||
| } | ||
| cleanUpState() { | ||
| const currentView = this.currentViewModel; | ||
| const currentViewDispose = currentView && currentView.dispose; | ||
| if (typeof currentViewDispose === "function") { | ||
| currentViewDispose.call(currentView); | ||
| } | ||
| this.currentViewModel = null; | ||
| this.currentLoadingOperationId = null; | ||
| } | ||
| dispose() { | ||
| this.cleanUpState(); | ||
| super.dispose(); | ||
| } | ||
| get controlsDescendants() { | ||
| return true; | ||
| } | ||
| static get allowVirtualElements() { | ||
| return true; | ||
| } | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../src/componentBinding.ts"], | ||
| "sourcesContent": ["//\n// Binding Handler for Components\n//\n\nimport {\n virtualElements, makeArray, cloneNodes\n} from '@tko/utils'\n\nimport {\n unwrap, isObservable\n} from '@tko/observable'\n\nimport {\n DescendantBindingHandler, applyBindingsToDescendants\n} from '@tko/bind'\n\nimport {\n JsxObserver, maybeJsx\n} from '@tko/utils.jsx'\n\nimport {\n NativeProvider\n} from '@tko/provider.native'\n\nimport {LifeCycle} from '@tko/lifecycle'\n\nimport registry from '@tko/utils.component'\n\nvar componentLoadingOperationUniqueId = 0\n\nexport default class ComponentBinding extends DescendantBindingHandler {\n constructor (params) {\n super(params)\n this.originalChildNodes = makeArray(\n virtualElements.childNodes(this.$element)\n )\n this.computed('computeApplyComponent')\n }\n\n cloneTemplateIntoElement (componentName, template, element) {\n if (!template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (maybeJsx(template)) {\n virtualElements.emptyNode(element)\n this.addDisposable(new JsxObserver(template, element, null, undefined, true))\n\n } else {\n const clonedNodesArray = cloneNodes(template)\n virtualElements.setDomNodeChildren(element, clonedNodesArray)\n }\n }\n\n createViewModel (componentDefinition, element, originalChildNodes, componentParams) {\n const componentViewModelFactory = componentDefinition.createViewModel\n return componentViewModelFactory\n ? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes })\n : componentParams // Template-only component\n }\n\n /**\n * Return the $componentTemplateSlotNodes for the given template\n * @param {HTMLElement|jsx} template\n */\n makeTemplateSlotNodes (originalChildNodes) {\n return Object.assign({}, ...this.genSlotsByName(originalChildNodes))\n }\n\n /**\n * Iterate over the templateNodes, yielding each '<element slot=name>'\n * as an object * of {name: element}.\n * @param {HTMLElement} templateNodes\n */\n * genSlotsByName (templateNodes) {\n for (const node of templateNodes) {\n if (node.nodeType !== 1) { continue }\n const slotName = node.getAttribute('slot')\n if (!slotName) { continue }\n yield {[slotName]: node}\n }\n }\n\n computeApplyComponent () {\n const value = unwrap(this.value)\n let componentName\n let componentParams\n\n if (typeof value === 'string') {\n componentName = value\n } else {\n componentName = unwrap(value.name)\n componentParams = NativeProvider.getNodeValues(this.$element) ||\n unwrap(value.params)\n }\n\n this.latestComponentName = componentName\n\n if (!componentName) {\n throw new Error('No component name specified')\n }\n\n this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId\n registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn))\n }\n\n makeChildBindingContext ($component) {\n const ctxExtender = (ctx) => Object.assign(ctx, {\n $component,\n $componentTemplateNodes: this.originalChildNodes,\n $componentTemplateSlotNodes: this.makeTemplateSlotNodes(\n this.originalChildNodes)\n })\n\n return this.$context.createChildContext($component, undefined, ctxExtender)\n }\n\n applyComponentDefinition (componentName, componentParams, componentDefinition) {\n // If this is not the current load operation for this element, ignore it.\n if (this.currentLoadingOperationId !== this.loadingOperationId ||\n this.latestComponentName !== componentName) { return }\n\n // Clean up previous state\n this.cleanUpState()\n\n const element = this.$element\n\n // Instantiate and bind new component. Implicitly this cleans any old DOM nodes.\n if (!componentDefinition) {\n throw new Error('Unknown component \\'' + componentName + '\\'')\n }\n\n if (componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, componentDefinition.template, element)\n }\n\n const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams)\n\n this.childBindingContext = this.makeChildBindingContext(componentViewModel)\n\n const viewTemplate = componentViewModel && componentViewModel.template\n\n if (!viewTemplate && !componentDefinition.template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (!componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, viewTemplate, element)\n }\n\n if (componentViewModel instanceof LifeCycle) {\n componentViewModel.anchorTo(this.$element)\n }\n\n this.currentViewModel = componentViewModel\n\n const onBinding = this.onBindingComplete.bind(this, componentViewModel)\n this.applyBindingsToDescendants(this.childBindingContext, onBinding)\n }\n\n onBindingComplete (componentViewModel, bindingResult) {\n if (componentViewModel && componentViewModel.koDescendantsComplete) {\n componentViewModel.koDescendantsComplete(this.$element)\n }\n this.completeBinding(bindingResult)\n }\n\n cleanUpState () {\n const currentView = this.currentViewModel\n const currentViewDispose = currentView && currentView.dispose\n if (typeof currentViewDispose === 'function') {\n currentViewDispose.call(currentView)\n }\n this.currentViewModel = null\n // Any in-flight loading operation is no longer relevant, so make sure we ignore its completion\n this.currentLoadingOperationId = null\n }\n\n dispose () {\n this.cleanUpState()\n super.dispose()\n }\n\n get controlsDescendants () { return true }\n static get allowVirtualElements () { return true }\n}\n"], | ||
| "mappings": "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", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| // @tko/binding.component 🥊 4.0.0-beta1.0 ESM | ||
| import component from "./componentBinding"; | ||
| import slot from "./slotBinding"; | ||
| export var bindings = { component, slot }; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["\nimport component from './componentBinding'\nimport slot from './slotBinding'\nexport var bindings = { component, slot }\n"], | ||
| "mappings": ";AACA;AACA;AACO,WAAI,WAAW,EAAE,WAAW,KAAK;", | ||
| "names": [] | ||
| } |
| // @tko/binding.component 🥊 4.0.0-beta1.0 MJS | ||
| import component from "./componentBinding"; | ||
| import slot from "./slotBinding"; | ||
| export var bindings = { component, slot }; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["\nimport component from './componentBinding'\nimport slot from './slotBinding'\nexport var bindings = { component, slot }\n"], | ||
| "mappings": ";AACA;AACA;AACO,WAAI,WAAW,EAAE,WAAW,KAAK;", | ||
| "names": [] | ||
| } |
| // @tko/binding.component 🥊 4.0.0-beta1.0 ESM | ||
| import { | ||
| virtualElements | ||
| } from "@tko/utils"; | ||
| import { | ||
| JsxObserver, | ||
| getOriginalJsxForNode | ||
| } from "@tko/utils.jsx"; | ||
| import { | ||
| DescendantBindingHandler, | ||
| contextFor | ||
| } from "@tko/bind"; | ||
| export default class SlotBinding extends DescendantBindingHandler { | ||
| constructor(...params) { | ||
| super(...params); | ||
| const slotNode = this.getSlot(this.value); | ||
| const $slotContext = contextFor(slotNode); | ||
| const childContext = this.$context.extend({ | ||
| $slotContext, | ||
| $slotData: $slotContext && $slotContext.$data | ||
| }); | ||
| this.replaceSlotWithNode(this.$element, slotNode); | ||
| this.applyBindingsToDescendants(childContext); | ||
| } | ||
| replaceSlotWithNode(nodeInComponentTemplate, slotNode) { | ||
| const nodes = this.cloneNodeFromOriginal(slotNode); | ||
| virtualElements.emptyNode(nodeInComponentTemplate); | ||
| this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, void 0, void 0, true)); | ||
| } | ||
| cloneNodeFromOriginal(node) { | ||
| if (!node) { | ||
| return []; | ||
| } | ||
| const jsx = getOriginalJsxForNode(node); | ||
| if (jsx) { | ||
| return jsx.children; | ||
| } | ||
| if ("content" in node) { | ||
| const clone = document.importNode(node.content, true); | ||
| return [...clone.childNodes]; | ||
| } | ||
| const nodeArray = Array.isArray(node) ? node : [node]; | ||
| return nodeArray.map((n) => n.cloneNode(true)); | ||
| } | ||
| getSlot(slotName) { | ||
| const { $componentTemplateSlotNodes } = this.$context; | ||
| if (!slotName) { | ||
| return $componentTemplateSlotNodes[""] || [...this.$context.$componentTemplateNodes].filter((n) => !n.getAttribute || !n.getAttribute("slot")); | ||
| } | ||
| return $componentTemplateSlotNodes[slotName]; | ||
| } | ||
| static get allowVirtualElements() { | ||
| return true; | ||
| } | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../src/slotBinding.ts"], | ||
| "sourcesContent": ["/**\n * Slots work as follows (you'll note a similarity to vue).\n *\n * Component template definitions have <slot name='abc'> tags.\n *\n * <template id='custom-component-template'>\n * <slot name='abc'>\n *\n * Component use these slots with e.g.\n *\n * <custom-component>\n * <template slot='abc'>\n *\n * When the component template is rendered, the `slot` binding will map\n * every binding to its respective slot.\n */\nimport {\n virtualElements\n} from '@tko/utils'\n\nimport {\n JsxObserver, getOriginalJsxForNode\n} from '@tko/utils.jsx'\n\nimport {\n DescendantBindingHandler, contextFor\n} from '@tko/bind'\n\n/**\n * SlotBinding replaces a slot with\n */\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor (...params) {\n super(...params)\n const slotNode = this.getSlot(this.value)\n const $slotContext = contextFor(slotNode)\n\n const childContext = this.$context.extend({\n $slotContext,\n $slotData: $slotContext && $slotContext.$data\n })\n\n this.replaceSlotWithNode(this.$element, slotNode)\n\n this.applyBindingsToDescendants(childContext)\n }\n\n /**\n *\n * @param {HTMLElement} nodeToReplace\n * @param {HTMLElement}} slotValue\n */\n replaceSlotWithNode (nodeInComponentTemplate, slotNode) {\n const nodes = this.cloneNodeFromOriginal(slotNode)\n virtualElements.emptyNode(nodeInComponentTemplate)\n this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true))\n }\n\n cloneNodeFromOriginal (node) {\n if (!node) { return [] }\n const jsx = getOriginalJsxForNode(node)\n if (jsx) { return jsx.children }\n\n if ('content' in node) {\n const clone = document.importNode(node.content, true)\n return [...clone.childNodes]\n }\n\n const nodeArray = Array.isArray(node) ? node : [node]\n return nodeArray.map(n => n.cloneNode(true))\n }\n\n\n getSlot (slotName) {\n const {$componentTemplateSlotNodes} = this.$context\n\n if (!slotName) {\n return $componentTemplateSlotNodes[''] ||\n [...this.$context.$componentTemplateNodes]\n .filter(n => !n.getAttribute || !n.getAttribute('slot'))\n }\n\n return $componentTemplateSlotNodes[slotName]\n }\n\n static get allowVirtualElements () { return true }\n}\n"], | ||
| "mappings": ";AAgBA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAOA,qBAAqB,oBAAoB,yBAAyB;AAAA,EAChE,eAAgB,QAAQ;AACtB,UAAM,GAAG,MAAM;AACf,UAAM,WAAW,KAAK,QAAQ,KAAK,KAAK;AACxC,UAAM,eAAe,WAAW,QAAQ;AAExC,UAAM,eAAe,KAAK,SAAS,OAAO;AAAA,MACxC;AAAA,MACA,WAAW,gBAAgB,aAAa;AAAA,IAC1C,CAAC;AAED,SAAK,oBAAoB,KAAK,UAAU,QAAQ;AAEhD,SAAK,2BAA2B,YAAY;AAAA,EAC9C;AAAA,EAOA,oBAAqB,yBAAyB,UAAU;AACtD,UAAM,QAAQ,KAAK,sBAAsB,QAAQ;AACjD,oBAAgB,UAAU,uBAAuB;AACjD,SAAK,cAAc,IAAI,YAAY,OAAO,yBAAyB,QAAW,QAAW,IAAI,CAAC;AAAA,EAChG;AAAA,EAEA,sBAAuB,MAAM;AAC3B,QAAI,CAAC,MAAM;AAAE,aAAO,CAAC;AAAA,IAAE;AACvB,UAAM,MAAM,sBAAsB,IAAI;AACtC,QAAI,KAAK;AAAE,aAAO,IAAI;AAAA,IAAS;AAE/B,QAAI,aAAa,MAAM;AACrB,YAAM,QAAQ,SAAS,WAAW,KAAK,SAAS,IAAI;AACpD,aAAO,CAAC,GAAG,MAAM,UAAU;AAAA,IAC7B;AAEA,UAAM,YAAY,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACpD,WAAO,UAAU,IAAI,OAAK,EAAE,UAAU,IAAI,CAAC;AAAA,EAC7C;AAAA,EAGA,QAAS,UAAU;AACjB,UAAM,EAAC,gCAA+B,KAAK;AAE3C,QAAI,CAAC,UAAU;AACb,aAAO,4BAA4B,OACjC,CAAC,GAAG,KAAK,SAAS,uBAAuB,EACtC,OAAO,OAAK,CAAC,EAAE,gBAAgB,CAAC,EAAE,aAAa,MAAM,CAAC;AAAA,IAC7D;AAEA,WAAO,4BAA4B;AAAA,EACrC;AAAA,aAEW,uBAAwB;AAAE,WAAO;AAAA,EAAK;AACnD;", | ||
| "names": [] | ||
| } |
+26
-27
| { | ||
| "version": "4.0.0-beta1.0", | ||
| "name": "@tko/binding.component", | ||
| "version": "4.0.0-alpha9.0", | ||
| "description": "component: binding for web components", | ||
@@ -8,9 +8,10 @@ "module": "dist/binding.component.js", | ||
| "dependencies": { | ||
| "@tko/bind": "^4.0.0-alpha9.0", | ||
| "@tko/lifecycle": "^4.0.0-alpha9.0", | ||
| "@tko/observable": "^4.0.0-alpha8.0", | ||
| "@tko/provider": "^4.0.0-alpha8.4", | ||
| "@tko/utils": "^4.0.0-alpha8.0", | ||
| "@tko/utils.component": "^4.0.0-alpha9.0", | ||
| "tslib": "^1.8.0" | ||
| "@tko/bind": "^4.0.0-beta1.0", | ||
| "@tko/lifecycle": "^4.0.0-beta1.0", | ||
| "@tko/observable": "^4.0.0-beta1.0", | ||
| "@tko/provider": "^4.0.0-beta1.0", | ||
| "@tko/utils": "^4.0.0-beta1.0", | ||
| "@tko/utils.component": "^4.0.0-beta1.0", | ||
| "@tko/utils.jsx": "^4.0.0-beta1.0", | ||
| "tslib": "^2.2.0" | ||
| }, | ||
@@ -26,19 +27,2 @@ "files": [ | ||
| }, | ||
| "__about__shared.package.json": "These properties are copied into all packages/*/package.json. Run `yarn repackage`", | ||
| "standard": { | ||
| "env": [ | ||
| "browser", | ||
| "jasmine", | ||
| "mocha" | ||
| ] | ||
| }, | ||
| "scripts": { | ||
| "test": "npx karma start ../../karma.conf.js --once", | ||
| "build": "npx rollup -c ../../rollup.config.js", | ||
| "watch": "npx karma start ../../karma.conf.js", | ||
| "prepare": "npx rollup -c ../../rollup.config.js" | ||
| }, | ||
| "publishConfig": { | ||
| "access": "public" | ||
| }, | ||
| "homepage": "https://tko.io", | ||
@@ -48,6 +32,21 @@ "licenses": [ | ||
| "type": "MIT", | ||
| "url": "http://www.opensource.org/licenses/mit-license.php" | ||
| "url": "https://opensource.org/licenses/MIT" | ||
| } | ||
| ], | ||
| "gitHead": "90cdb597db01d50725c567810af092e70a5b32d9" | ||
| "exports": { | ||
| ".": { | ||
| "require": "./dist/index.cjs", | ||
| "import": "./dist/index.js" | ||
| }, | ||
| "./helpers/*": "./helpers/*" | ||
| }, | ||
| "bugs": { | ||
| "url": "https://github.com/knockout/tko/issues" | ||
| }, | ||
| "author": "The Knockout Team", | ||
| "repository": { | ||
| "type": "git", | ||
| "url": "git+https://github.com/knockout/tko.git" | ||
| }, | ||
| "gitHead": "99114c4deded3fc5dbddd5c7c9c63c845a18263b" | ||
| } |
| /*! | ||
| * component: binding for web components 🥊 @tko/binding.component@4.0.0-alpha9.0 | ||
| * (c) The Knockout.js Team - https://tko.io | ||
| * License: MIT (http://www.opensource.org/licenses/mit-license.php) | ||
| */ | ||
| import { virtualElements, makeArray, cloneNodes } from '@tko/utils'; | ||
| import { unwrap } from '@tko/observable'; | ||
| import { DescendantBindingHandler, contextFor } from '@tko/bind'; | ||
| import { JsxObserver, maybeJsx, getOriginalJsxForNode } from '@tko/utils.jsx'; | ||
| import { NativeProvider } from '@tko/provider.native'; | ||
| import { LifeCycle } from '@tko/lifecycle'; | ||
| import registry from '@tko/utils.component'; | ||
| // | ||
| var componentLoadingOperationUniqueId = 0; | ||
| class ComponentBinding extends DescendantBindingHandler { | ||
| constructor (params) { | ||
| super(params); | ||
| this.originalChildNodes = makeArray( | ||
| virtualElements.childNodes(this.$element) | ||
| ); | ||
| this.computed('computeApplyComponent'); | ||
| } | ||
| cloneTemplateIntoElement (componentName, template, element) { | ||
| if (!template) { | ||
| throw new Error('Component \'' + componentName + '\' has no template') | ||
| } | ||
| if (maybeJsx(template)) { | ||
| virtualElements.emptyNode(element); | ||
| this.addDisposable(new JsxObserver(template, element, null, undefined, true)); | ||
| } else { | ||
| const clonedNodesArray = cloneNodes(template); | ||
| virtualElements.setDomNodeChildren(element, clonedNodesArray); | ||
| } | ||
| } | ||
| createViewModel (componentDefinition, element, originalChildNodes, componentParams) { | ||
| const componentViewModelFactory = componentDefinition.createViewModel; | ||
| return componentViewModelFactory | ||
| ? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes }) | ||
| : componentParams // Template-only component | ||
| } | ||
| /** | ||
| * Return the $componentTemplateSlotNodes for the given template | ||
| * @param {HTMLElement|jsx} template | ||
| */ | ||
| makeTemplateSlotNodes (originalChildNodes) { | ||
| return Object.assign({}, ...this.genSlotsByName(originalChildNodes)) | ||
| } | ||
| /** | ||
| * Iterate over the templateNodes, yielding each '<element slot=name>' | ||
| * as an object * of {name: element}. | ||
| * @param {HTMLElement} templateNodes | ||
| */ | ||
| * genSlotsByName (templateNodes) { | ||
| for (const node of templateNodes) { | ||
| if (node.nodeType !== 1) { continue } | ||
| const slotName = node.getAttribute('slot'); | ||
| if (!slotName) { continue } | ||
| yield {[slotName]: node}; | ||
| } | ||
| } | ||
| computeApplyComponent () { | ||
| const value = unwrap(this.value); | ||
| let componentName; | ||
| let componentParams; | ||
| if (typeof value === 'string') { | ||
| componentName = value; | ||
| } else { | ||
| componentName = unwrap(value.name); | ||
| componentParams = NativeProvider.getNodeValues(this.$element) || | ||
| unwrap(value.params); | ||
| } | ||
| this.latestComponentName = componentName; | ||
| if (!componentName) { | ||
| throw new Error('No component name specified') | ||
| } | ||
| this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId; | ||
| registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn)); | ||
| } | ||
| makeChildBindingContext ($component) { | ||
| const ctxExtender = (ctx) => Object.assign(ctx, { | ||
| $component, | ||
| $componentTemplateNodes: this.originalChildNodes, | ||
| $componentTemplateSlotNodes: this.makeTemplateSlotNodes( | ||
| this.originalChildNodes) | ||
| }); | ||
| return this.$context.createChildContext($component, undefined, ctxExtender) | ||
| } | ||
| applyComponentDefinition (componentName, componentParams, componentDefinition) { | ||
| // If this is not the current load operation for this element, ignore it. | ||
| if (this.currentLoadingOperationId !== this.loadingOperationId || | ||
| this.latestComponentName !== componentName) { return } | ||
| // Clean up previous state | ||
| this.cleanUpState(); | ||
| const element = this.$element; | ||
| // Instantiate and bind new component. Implicitly this cleans any old DOM nodes. | ||
| if (!componentDefinition) { | ||
| throw new Error('Unknown component \'' + componentName + '\'') | ||
| } | ||
| if (componentDefinition.template) { | ||
| this.cloneTemplateIntoElement(componentName, componentDefinition.template, element); | ||
| } | ||
| const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams); | ||
| this.childBindingContext = this.makeChildBindingContext(componentViewModel); | ||
| const viewTemplate = componentViewModel && componentViewModel.template; | ||
| if (!viewTemplate && !componentDefinition.template) { | ||
| throw new Error('Component \'' + componentName + '\' has no template') | ||
| } | ||
| if (!componentDefinition.template) { | ||
| this.cloneTemplateIntoElement(componentName, viewTemplate, element); | ||
| } | ||
| if (componentViewModel instanceof LifeCycle) { | ||
| componentViewModel.anchorTo(this.$element); | ||
| } | ||
| this.currentViewModel = componentViewModel; | ||
| const onBinding = this.onBindingComplete.bind(this, componentViewModel); | ||
| this.applyBindingsToDescendants(this.childBindingContext, onBinding); | ||
| } | ||
| onBindingComplete (componentViewModel, bindingResult) { | ||
| if (componentViewModel && componentViewModel.koDescendantsComplete) { | ||
| componentViewModel.koDescendantsComplete(this.$element); | ||
| } | ||
| this.completeBinding(bindingResult); | ||
| } | ||
| cleanUpState () { | ||
| const currentView = this.currentViewModel; | ||
| const currentViewDispose = currentView && currentView.dispose; | ||
| if (typeof currentViewDispose === 'function') { | ||
| currentViewDispose.call(currentView); | ||
| } | ||
| this.currentViewModel = null; | ||
| // Any in-flight loading operation is no longer relevant, so make sure we ignore its completion | ||
| this.currentLoadingOperationId = null; | ||
| } | ||
| dispose () { | ||
| this.cleanUpState(); | ||
| super.dispose(); | ||
| } | ||
| get controlsDescendants () { return true } | ||
| static get allowVirtualElements () { return true } | ||
| } | ||
| /** | ||
| * Slots work as follows (you'll note a similarity to vue). | ||
| * | ||
| * Component template definitions have <slot name='abc'> tags. | ||
| * | ||
| * <template id='custom-component-template'> | ||
| * <slot name='abc'> | ||
| * | ||
| * Component use these slots with e.g. | ||
| * | ||
| * <custom-component> | ||
| * <template slot='abc'> | ||
| * | ||
| * When the component template is rendered, the `slot` binding will map | ||
| * every binding to its respective slot. | ||
| */ | ||
| /** | ||
| * SlotBinding replaces a slot with | ||
| */ | ||
| class SlotBinding extends DescendantBindingHandler { | ||
| constructor (...params) { | ||
| super(...params); | ||
| const slotNode = this.getSlot(this.value); | ||
| const $slotContext = contextFor(slotNode); | ||
| const childContext = this.$context.extend({ | ||
| $slotContext, | ||
| $slotData: $slotContext && $slotContext.$data | ||
| }); | ||
| this.replaceSlotWithNode(this.$element, slotNode); | ||
| this.applyBindingsToDescendants(childContext); | ||
| } | ||
| /** | ||
| * | ||
| * @param {HTMLElement} nodeToReplace | ||
| * @param {HTMLElement}} slotValue | ||
| */ | ||
| replaceSlotWithNode (nodeInComponentTemplate, slotNode) { | ||
| const nodes = this.cloneNodeFromOriginal(slotNode); | ||
| virtualElements.emptyNode(nodeInComponentTemplate); | ||
| this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true)); | ||
| } | ||
| cloneNodeFromOriginal (node) { | ||
| if (!node) { return [] } | ||
| const jsx = getOriginalJsxForNode(node); | ||
| if (jsx) { return jsx.children } | ||
| if ('content' in node) { | ||
| const clone = document.importNode(node.content, true); | ||
| return [...clone.childNodes] | ||
| } | ||
| const nodeArray = Array.isArray(node) ? node : [node]; | ||
| return nodeArray.map(n => n.cloneNode(true)) | ||
| } | ||
| getSlot (slotName) { | ||
| const {$componentTemplateSlotNodes} = this.$context; | ||
| if (!slotName) { | ||
| return $componentTemplateSlotNodes[''] || | ||
| [...this.$context.$componentTemplateNodes] | ||
| .filter(n => !n.getAttribute || !n.getAttribute('slot')) | ||
| } | ||
| return $componentTemplateSlotNodes[slotName] | ||
| } | ||
| static get allowVirtualElements () { return true } | ||
| } | ||
| var bindings = { component: ComponentBinding, slot: SlotBinding }; | ||
| export { bindings }; | ||
| //# sourceMappingURL=binding.component.es6.js.map |
| {"version":3,"file":"binding.component.es6.js","sources":["../src/componentBinding.js","../src/slotBinding.js","../src/index.js"],"sourcesContent":["//\n// Binding Handler for Components\n//\n\nimport {\n virtualElements, makeArray, cloneNodes\n} from '@tko/utils'\n\nimport {\n unwrap, isObservable\n} from '@tko/observable'\n\nimport {\n DescendantBindingHandler, applyBindingsToDescendants\n} from '@tko/bind'\n\nimport {\n JsxObserver, maybeJsx\n} from '@tko/utils.jsx'\n\nimport {\n NativeProvider\n} from '@tko/provider.native'\n\nimport {LifeCycle} from '@tko/lifecycle'\n\nimport registry from '@tko/utils.component'\n\nvar componentLoadingOperationUniqueId = 0\n\nexport default class ComponentBinding extends DescendantBindingHandler {\n constructor (params) {\n super(params)\n this.originalChildNodes = makeArray(\n virtualElements.childNodes(this.$element)\n )\n this.computed('computeApplyComponent')\n }\n\n cloneTemplateIntoElement (componentName, template, element) {\n if (!template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (maybeJsx(template)) {\n virtualElements.emptyNode(element)\n this.addDisposable(new JsxObserver(template, element, null, undefined, true))\n\n } else {\n const clonedNodesArray = cloneNodes(template)\n virtualElements.setDomNodeChildren(element, clonedNodesArray)\n }\n }\n\n createViewModel (componentDefinition, element, originalChildNodes, componentParams) {\n const componentViewModelFactory = componentDefinition.createViewModel\n return componentViewModelFactory\n ? componentViewModelFactory.call(componentDefinition, componentParams, { element, templateNodes: originalChildNodes })\n : componentParams // Template-only component\n }\n\n /**\n * Return the $componentTemplateSlotNodes for the given template\n * @param {HTMLElement|jsx} template\n */\n makeTemplateSlotNodes (originalChildNodes) {\n return Object.assign({}, ...this.genSlotsByName(originalChildNodes))\n }\n\n /**\n * Iterate over the templateNodes, yielding each '<element slot=name>'\n * as an object * of {name: element}.\n * @param {HTMLElement} templateNodes\n */\n * genSlotsByName (templateNodes) {\n for (const node of templateNodes) {\n if (node.nodeType !== 1) { continue }\n const slotName = node.getAttribute('slot')\n if (!slotName) { continue }\n yield {[slotName]: node}\n }\n }\n\n computeApplyComponent () {\n const value = unwrap(this.value)\n let componentName\n let componentParams\n\n if (typeof value === 'string') {\n componentName = value\n } else {\n componentName = unwrap(value.name)\n componentParams = NativeProvider.getNodeValues(this.$element) ||\n unwrap(value.params)\n }\n\n this.latestComponentName = componentName\n\n if (!componentName) {\n throw new Error('No component name specified')\n }\n\n this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId\n registry.get(componentName, (defn) => this.applyComponentDefinition(componentName, componentParams, defn))\n }\n\n makeChildBindingContext ($component) {\n const ctxExtender = (ctx) => Object.assign(ctx, {\n $component,\n $componentTemplateNodes: this.originalChildNodes,\n $componentTemplateSlotNodes: this.makeTemplateSlotNodes(\n this.originalChildNodes)\n })\n\n return this.$context.createChildContext($component, undefined, ctxExtender)\n }\n\n applyComponentDefinition (componentName, componentParams, componentDefinition) {\n // If this is not the current load operation for this element, ignore it.\n if (this.currentLoadingOperationId !== this.loadingOperationId ||\n this.latestComponentName !== componentName) { return }\n\n // Clean up previous state\n this.cleanUpState()\n\n const element = this.$element\n\n // Instantiate and bind new component. Implicitly this cleans any old DOM nodes.\n if (!componentDefinition) {\n throw new Error('Unknown component \\'' + componentName + '\\'')\n }\n\n if (componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, componentDefinition.template, element)\n }\n\n const componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams)\n\n this.childBindingContext = this.makeChildBindingContext(componentViewModel)\n\n const viewTemplate = componentViewModel && componentViewModel.template\n\n if (!viewTemplate && !componentDefinition.template) {\n throw new Error('Component \\'' + componentName + '\\' has no template')\n }\n\n if (!componentDefinition.template) {\n this.cloneTemplateIntoElement(componentName, viewTemplate, element)\n }\n\n if (componentViewModel instanceof LifeCycle) {\n componentViewModel.anchorTo(this.$element)\n }\n\n this.currentViewModel = componentViewModel\n\n const onBinding = this.onBindingComplete.bind(this, componentViewModel)\n this.applyBindingsToDescendants(this.childBindingContext, onBinding)\n }\n\n onBindingComplete (componentViewModel, bindingResult) {\n if (componentViewModel && componentViewModel.koDescendantsComplete) {\n componentViewModel.koDescendantsComplete(this.$element)\n }\n this.completeBinding(bindingResult)\n }\n\n cleanUpState () {\n const currentView = this.currentViewModel\n const currentViewDispose = currentView && currentView.dispose\n if (typeof currentViewDispose === 'function') {\n currentViewDispose.call(currentView)\n }\n this.currentViewModel = null\n // Any in-flight loading operation is no longer relevant, so make sure we ignore its completion\n this.currentLoadingOperationId = null\n }\n\n dispose () {\n this.cleanUpState()\n super.dispose()\n }\n\n get controlsDescendants () { return true }\n static get allowVirtualElements () { return true }\n}\n","/**\n * Slots work as follows (you'll note a similarity to vue).\n *\n * Component template definitions have <slot name='abc'> tags.\n *\n * <template id='custom-component-template'>\n * <slot name='abc'>\n *\n * Component use these slots with e.g.\n *\n * <custom-component>\n * <template slot='abc'>\n *\n * When the component template is rendered, the `slot` binding will map\n * every binding to its respective slot.\n */\nimport {\n virtualElements\n} from '@tko/utils'\n\nimport {\n JsxObserver, getOriginalJsxForNode\n} from '@tko/utils.jsx'\n\nimport {\n DescendantBindingHandler, contextFor\n} from '@tko/bind'\n\n/**\n * SlotBinding replaces a slot with\n */\nexport default class SlotBinding extends DescendantBindingHandler {\n constructor (...params) {\n super(...params)\n const slotNode = this.getSlot(this.value)\n const $slotContext = contextFor(slotNode)\n\n const childContext = this.$context.extend({\n $slotContext,\n $slotData: $slotContext && $slotContext.$data\n })\n\n this.replaceSlotWithNode(this.$element, slotNode)\n\n this.applyBindingsToDescendants(childContext)\n }\n\n /**\n *\n * @param {HTMLElement} nodeToReplace\n * @param {HTMLElement}} slotValue\n */\n replaceSlotWithNode (nodeInComponentTemplate, slotNode) {\n const nodes = this.cloneNodeFromOriginal(slotNode)\n virtualElements.emptyNode(nodeInComponentTemplate)\n this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true))\n }\n\n cloneNodeFromOriginal (node) {\n if (!node) { return [] }\n const jsx = getOriginalJsxForNode(node)\n if (jsx) { return jsx.children }\n\n if ('content' in node) {\n const clone = document.importNode(node.content, true)\n return [...clone.childNodes]\n }\n\n const nodeArray = Array.isArray(node) ? node : [node]\n return nodeArray.map(n => n.cloneNode(true))\n }\n\n\n getSlot (slotName) {\n const {$componentTemplateSlotNodes} = this.$context\n\n if (!slotName) {\n return $componentTemplateSlotNodes[''] ||\n [...this.$context.$componentTemplateNodes]\n .filter(n => !n.getAttribute || !n.getAttribute('slot'))\n }\n\n return $componentTemplateSlotNodes[slotName]\n }\n\n static get allowVirtualElements () { return true }\n}\n","\nimport component from './componentBinding'\nimport slot from './slotBinding'\nexport var bindings = { component, slot }\n"],"names":["component","slot"],"mappings":"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"} |
| /*! | ||
| * component: binding for web components 🥊 @tko/binding.component@4.0.0-alpha9.0 | ||
| * (c) The Knockout.js Team - https://tko.io | ||
| * License: MIT (http://www.opensource.org/licenses/mit-license.php) | ||
| */ | ||
| import { virtualElements, makeArray, cloneNodes } from '@tko/utils'; | ||
| import { unwrap } from '@tko/observable'; | ||
| import { DescendantBindingHandler, contextFor } from '@tko/bind'; | ||
| import { JsxObserver, maybeJsx, getOriginalJsxForNode } from '@tko/utils.jsx'; | ||
| import { NativeProvider } from '@tko/provider.native'; | ||
| import { LifeCycle } from '@tko/lifecycle'; | ||
| import registry from '@tko/utils.component'; | ||
| /*! ***************************************************************************** | ||
| Copyright (c) Microsoft Corporation. All rights reserved. | ||
| Licensed under the Apache License, Version 2.0 (the "License"); you may not use | ||
| this file except in compliance with the License. You may obtain a copy of the | ||
| License at http://www.apache.org/licenses/LICENSE-2.0 | ||
| THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
| KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED | ||
| WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, | ||
| MERCHANTABLITY OR NON-INFRINGEMENT. | ||
| See the Apache Version 2.0 License for specific language governing permissions | ||
| and limitations under the License. | ||
| ***************************************************************************** */ | ||
| /* global Reflect, Promise */ | ||
| var extendStatics = function(d, b) { | ||
| extendStatics = Object.setPrototypeOf || | ||
| ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
| function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | ||
| return extendStatics(d, b); | ||
| }; | ||
| function __extends(d, b) { | ||
| extendStatics(d, b); | ||
| function __() { this.constructor = d; } | ||
| d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
| } | ||
| function __generator(thisArg, body) { | ||
| var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; | ||
| return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; | ||
| function verb(n) { return function (v) { return step([n, v]); }; } | ||
| function step(op) { | ||
| if (f) throw new TypeError("Generator is already executing."); | ||
| while (_) try { | ||
| if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; | ||
| if (y = 0, t) op = [op[0] & 2, t.value]; | ||
| switch (op[0]) { | ||
| case 0: case 1: t = op; break; | ||
| case 4: _.label++; return { value: op[1], done: false }; | ||
| case 5: _.label++; y = op[1]; op = [0]; continue; | ||
| case 7: op = _.ops.pop(); _.trys.pop(); continue; | ||
| default: | ||
| if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } | ||
| if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } | ||
| if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } | ||
| if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } | ||
| if (t[2]) _.ops.pop(); | ||
| _.trys.pop(); continue; | ||
| } | ||
| op = body.call(thisArg, _); | ||
| } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } | ||
| if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; | ||
| } | ||
| } | ||
| function __values(o) { | ||
| var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0; | ||
| if (m) return m.call(o); | ||
| return { | ||
| next: function () { | ||
| if (o && i >= o.length) o = void 0; | ||
| return { value: o && o[i++], done: !o }; | ||
| } | ||
| }; | ||
| } | ||
| function __read(o, n) { | ||
| var m = typeof Symbol === "function" && o[Symbol.iterator]; | ||
| if (!m) return o; | ||
| var i = m.call(o), r, ar = [], e; | ||
| try { | ||
| while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); | ||
| } | ||
| catch (error) { e = { error: error }; } | ||
| finally { | ||
| try { | ||
| if (r && !r.done && (m = i["return"])) m.call(i); | ||
| } | ||
| finally { if (e) throw e.error; } | ||
| } | ||
| return ar; | ||
| } | ||
| function __spread() { | ||
| for (var ar = [], i = 0; i < arguments.length; i++) | ||
| ar = ar.concat(__read(arguments[i])); | ||
| return ar; | ||
| } | ||
| // | ||
| var componentLoadingOperationUniqueId = 0; | ||
| var ComponentBinding = /** @class */ (function (_super) { | ||
| __extends(ComponentBinding, _super); | ||
| function ComponentBinding(params) { | ||
| var _this = _super.call(this, params) || this; | ||
| _this.originalChildNodes = makeArray(virtualElements.childNodes(_this.$element)); | ||
| _this.computed('computeApplyComponent'); | ||
| return _this; | ||
| } | ||
| ComponentBinding.prototype.cloneTemplateIntoElement = function (componentName, template, element) { | ||
| if (!template) { | ||
| throw new Error('Component \'' + componentName + '\' has no template'); | ||
| } | ||
| if (maybeJsx(template)) { | ||
| virtualElements.emptyNode(element); | ||
| this.addDisposable(new JsxObserver(template, element, null, undefined, true)); | ||
| } | ||
| else { | ||
| var clonedNodesArray = cloneNodes(template); | ||
| virtualElements.setDomNodeChildren(element, clonedNodesArray); | ||
| } | ||
| }; | ||
| ComponentBinding.prototype.createViewModel = function (componentDefinition, element, originalChildNodes, componentParams) { | ||
| var componentViewModelFactory = componentDefinition.createViewModel; | ||
| return componentViewModelFactory | ||
| ? componentViewModelFactory.call(componentDefinition, componentParams, { element: element, templateNodes: originalChildNodes }) | ||
| : componentParams; // Template-only component | ||
| }; | ||
| /** | ||
| * Return the $componentTemplateSlotNodes for the given template | ||
| * @param {HTMLElement|jsx} template | ||
| */ | ||
| ComponentBinding.prototype.makeTemplateSlotNodes = function (originalChildNodes) { | ||
| return Object.assign.apply(Object, __spread([{}], this.genSlotsByName(originalChildNodes))); | ||
| }; | ||
| /** | ||
| * Iterate over the templateNodes, yielding each '<element slot=name>' | ||
| * as an object * of {name: element}. | ||
| * @param {HTMLElement} templateNodes | ||
| */ | ||
| ComponentBinding.prototype.genSlotsByName = function (templateNodes) { | ||
| var e_1, _a, _b, templateNodes_1, templateNodes_1_1, node, slotName, e_1_1; | ||
| return __generator(this, function (_c) { | ||
| switch (_c.label) { | ||
| case 0: | ||
| _c.trys.push([0, 5, 6, 7]); | ||
| templateNodes_1 = __values(templateNodes), templateNodes_1_1 = templateNodes_1.next(); | ||
| _c.label = 1; | ||
| case 1: | ||
| if (!!templateNodes_1_1.done) return [3 /*break*/, 4]; | ||
| node = templateNodes_1_1.value; | ||
| if (node.nodeType !== 1) { | ||
| return [3 /*break*/, 3]; | ||
| } | ||
| slotName = node.getAttribute('slot'); | ||
| if (!slotName) { | ||
| return [3 /*break*/, 3]; | ||
| } | ||
| return [4 /*yield*/, (_b = {}, _b[slotName] = node, _b)]; | ||
| case 2: | ||
| _c.sent(); | ||
| _c.label = 3; | ||
| case 3: | ||
| templateNodes_1_1 = templateNodes_1.next(); | ||
| return [3 /*break*/, 1]; | ||
| case 4: return [3 /*break*/, 7]; | ||
| case 5: | ||
| e_1_1 = _c.sent(); | ||
| e_1 = { error: e_1_1 }; | ||
| return [3 /*break*/, 7]; | ||
| case 6: | ||
| try { | ||
| if (templateNodes_1_1 && !templateNodes_1_1.done && (_a = templateNodes_1["return"])) _a.call(templateNodes_1); | ||
| } | ||
| finally { if (e_1) throw e_1.error; } | ||
| return [7 /*endfinally*/]; | ||
| case 7: return [2 /*return*/]; | ||
| } | ||
| }); | ||
| }; | ||
| ComponentBinding.prototype.computeApplyComponent = function () { | ||
| var _this = this; | ||
| var value = unwrap(this.value); | ||
| var componentName; | ||
| var componentParams; | ||
| if (typeof value === 'string') { | ||
| componentName = value; | ||
| } | ||
| else { | ||
| componentName = unwrap(value.name); | ||
| componentParams = NativeProvider.getNodeValues(this.$element) || | ||
| unwrap(value.params); | ||
| } | ||
| this.latestComponentName = componentName; | ||
| if (!componentName) { | ||
| throw new Error('No component name specified'); | ||
| } | ||
| this.loadingOperationId = this.currentLoadingOperationId = ++componentLoadingOperationUniqueId; | ||
| registry.get(componentName, function (defn) { return _this.applyComponentDefinition(componentName, componentParams, defn); }); | ||
| }; | ||
| ComponentBinding.prototype.makeChildBindingContext = function ($component) { | ||
| var _this = this; | ||
| var ctxExtender = function (ctx) { return Object.assign(ctx, { | ||
| $component: $component, | ||
| $componentTemplateNodes: _this.originalChildNodes, | ||
| $componentTemplateSlotNodes: _this.makeTemplateSlotNodes(_this.originalChildNodes) | ||
| }); }; | ||
| return this.$context.createChildContext($component, undefined, ctxExtender); | ||
| }; | ||
| ComponentBinding.prototype.applyComponentDefinition = function (componentName, componentParams, componentDefinition) { | ||
| // If this is not the current load operation for this element, ignore it. | ||
| if (this.currentLoadingOperationId !== this.loadingOperationId || | ||
| this.latestComponentName !== componentName) { | ||
| return; | ||
| } | ||
| // Clean up previous state | ||
| this.cleanUpState(); | ||
| var element = this.$element; | ||
| // Instantiate and bind new component. Implicitly this cleans any old DOM nodes. | ||
| if (!componentDefinition) { | ||
| throw new Error('Unknown component \'' + componentName + '\''); | ||
| } | ||
| if (componentDefinition.template) { | ||
| this.cloneTemplateIntoElement(componentName, componentDefinition.template, element); | ||
| } | ||
| var componentViewModel = this.createViewModel(componentDefinition, element, this.originalChildNodes, componentParams); | ||
| this.childBindingContext = this.makeChildBindingContext(componentViewModel); | ||
| var viewTemplate = componentViewModel && componentViewModel.template; | ||
| if (!viewTemplate && !componentDefinition.template) { | ||
| throw new Error('Component \'' + componentName + '\' has no template'); | ||
| } | ||
| if (!componentDefinition.template) { | ||
| this.cloneTemplateIntoElement(componentName, viewTemplate, element); | ||
| } | ||
| if (componentViewModel instanceof LifeCycle) { | ||
| componentViewModel.anchorTo(this.$element); | ||
| } | ||
| this.currentViewModel = componentViewModel; | ||
| var onBinding = this.onBindingComplete.bind(this, componentViewModel); | ||
| this.applyBindingsToDescendants(this.childBindingContext, onBinding); | ||
| }; | ||
| ComponentBinding.prototype.onBindingComplete = function (componentViewModel, bindingResult) { | ||
| if (componentViewModel && componentViewModel.koDescendantsComplete) { | ||
| componentViewModel.koDescendantsComplete(this.$element); | ||
| } | ||
| this.completeBinding(bindingResult); | ||
| }; | ||
| ComponentBinding.prototype.cleanUpState = function () { | ||
| var currentView = this.currentViewModel; | ||
| var currentViewDispose = currentView && currentView.dispose; | ||
| if (typeof currentViewDispose === 'function') { | ||
| currentViewDispose.call(currentView); | ||
| } | ||
| this.currentViewModel = null; | ||
| // Any in-flight loading operation is no longer relevant, so make sure we ignore its completion | ||
| this.currentLoadingOperationId = null; | ||
| }; | ||
| ComponentBinding.prototype.dispose = function () { | ||
| this.cleanUpState(); | ||
| _super.prototype.dispose.call(this); | ||
| }; | ||
| Object.defineProperty(ComponentBinding.prototype, "controlsDescendants", { | ||
| get: function () { return true; }, | ||
| enumerable: true, | ||
| configurable: true | ||
| }); | ||
| Object.defineProperty(ComponentBinding, "allowVirtualElements", { | ||
| get: function () { return true; }, | ||
| enumerable: true, | ||
| configurable: true | ||
| }); | ||
| return ComponentBinding; | ||
| }(DescendantBindingHandler)); | ||
| /** | ||
| * SlotBinding replaces a slot with | ||
| */ | ||
| var SlotBinding = /** @class */ (function (_super) { | ||
| __extends(SlotBinding, _super); | ||
| function SlotBinding() { | ||
| var params = []; | ||
| for (var _i = 0; _i < arguments.length; _i++) { | ||
| params[_i] = arguments[_i]; | ||
| } | ||
| var _this = _super.apply(this, __spread(params)) || this; | ||
| var slotNode = _this.getSlot(_this.value); | ||
| var $slotContext = contextFor(slotNode); | ||
| var childContext = _this.$context.extend({ | ||
| $slotContext: $slotContext, | ||
| $slotData: $slotContext && $slotContext.$data | ||
| }); | ||
| _this.replaceSlotWithNode(_this.$element, slotNode); | ||
| _this.applyBindingsToDescendants(childContext); | ||
| return _this; | ||
| } | ||
| /** | ||
| * | ||
| * @param {HTMLElement} nodeToReplace | ||
| * @param {HTMLElement}} slotValue | ||
| */ | ||
| SlotBinding.prototype.replaceSlotWithNode = function (nodeInComponentTemplate, slotNode) { | ||
| var nodes = this.cloneNodeFromOriginal(slotNode); | ||
| virtualElements.emptyNode(nodeInComponentTemplate); | ||
| this.addDisposable(new JsxObserver(nodes, nodeInComponentTemplate, undefined, undefined, true)); | ||
| }; | ||
| SlotBinding.prototype.cloneNodeFromOriginal = function (node) { | ||
| if (!node) { | ||
| return []; | ||
| } | ||
| var jsx = getOriginalJsxForNode(node); | ||
| if (jsx) { | ||
| return jsx.children; | ||
| } | ||
| if ('content' in node) { | ||
| var clone = document.importNode(node.content, true); | ||
| return __spread(clone.childNodes); | ||
| } | ||
| var nodeArray = Array.isArray(node) ? node : [node]; | ||
| return nodeArray.map(function (n) { return n.cloneNode(true); }); | ||
| }; | ||
| SlotBinding.prototype.getSlot = function (slotName) { | ||
| var $componentTemplateSlotNodes = this.$context.$componentTemplateSlotNodes; | ||
| if (!slotName) { | ||
| return $componentTemplateSlotNodes[''] || | ||
| __spread(this.$context.$componentTemplateNodes).filter(function (n) { return !n.getAttribute || !n.getAttribute('slot'); }); | ||
| } | ||
| return $componentTemplateSlotNodes[slotName]; | ||
| }; | ||
| Object.defineProperty(SlotBinding, "allowVirtualElements", { | ||
| get: function () { return true; }, | ||
| enumerable: true, | ||
| configurable: true | ||
| }); | ||
| return SlotBinding; | ||
| }(DescendantBindingHandler)); | ||
| var bindings = { component: ComponentBinding, slot: SlotBinding }; | ||
| export { bindings }; | ||
| //# sourceMappingURL=binding.component.js.map |
| {"version":3,"file":"binding.component.js","sources":["../../../node_modules/tslib/tslib.es6.js"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n"],"names":[],"mappings":"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"} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Mixed license
LicensePackage contains multiple licenses.
Found 1 instance in 1 package
No contributors or author data
MaintenancePackage does not specify a list of contributors or an author in package.json.
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
385787
590.9%12
100%0
-100%3962
636.43%0
-100%8
14.29%1
Infinity%+ Added
+ Added
+ Added
- Removed
Updated
Updated
Updated
Updated