@tko/binding.if
Advanced tools
@@ -1,37 +0,10 @@ | ||
| // @tko/binding.if 🥊 4.0.0-beta1.3 ESM | ||
| var __async = (__this, __arguments, generator) => { | ||
| return new Promise((resolve, reject) => { | ||
| var fulfilled = (value) => { | ||
| try { | ||
| step(generator.next(value)); | ||
| } catch (e) { | ||
| reject(e); | ||
| } | ||
| }; | ||
| var rejected = (value) => { | ||
| try { | ||
| step(generator.throw(value)); | ||
| } catch (e) { | ||
| reject(e); | ||
| } | ||
| }; | ||
| var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); | ||
| step((generator = generator.apply(__this, __arguments)).next()); | ||
| }); | ||
| }; | ||
| import { | ||
| cloneNodes, | ||
| virtualElements, | ||
| cleanNode, | ||
| domData | ||
| } from "@tko/utils"; | ||
| import { | ||
| dependencyDetection, | ||
| observable | ||
| } from "@tko/observable"; | ||
| import { | ||
| applyBindingsToDescendants, | ||
| AsyncBindingHandler | ||
| } from "@tko/bind"; | ||
| // @tko/binding.if 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { cloneNodes, virtualElements, cleanNode, domData } from "@tko/utils"; | ||
| import { dependencyDetection, observable } from "@tko/observable"; | ||
| import { applyBindingsToDescendants, AsyncBindingHandler } from "@tko/bind"; | ||
| export default class ConditionalBindingHandler extends AsyncBindingHandler { | ||
| get bindingContext() { | ||
| throw new Error("bindingContext() must be implemented in the child class"); | ||
| } | ||
| constructor(params) { | ||
@@ -51,2 +24,5 @@ super(params); | ||
| } | ||
| renderStatus() { | ||
| throw new Error("renderStatus() must be implemented in the child class"); | ||
| } | ||
| render() { | ||
@@ -65,20 +41,28 @@ const isFirstRender = !this.ifElseNodes; | ||
| } | ||
| renderAndApplyBindings(nodes, useOriginalNodes) { | ||
| return __async(this, null, function* () { | ||
| if (!useOriginalNodes) { | ||
| virtualElements.setDomNodeChildren(this.$element, cloneNodes(nodes)); | ||
| } | ||
| const bound = yield applyBindingsToDescendants(this.bindingContext, this.$element); | ||
| this.completeBinding(bound); | ||
| }); | ||
| async renderAndApplyBindings(nodes, useOriginalNodes) { | ||
| if (!useOriginalNodes) { | ||
| virtualElements.setDomNodeChildren(this.$element, cloneNodes(nodes)); | ||
| } | ||
| const bound = await applyBindingsToDescendants(this.bindingContext, this.$element); | ||
| this.completeBinding(bound); | ||
| } | ||
| /** | ||
| * This may be truthy for the `else` binding. | ||
| */ | ||
| get elseChainIsAlreadySatisfied() { | ||
| return false; | ||
| } | ||
| /** | ||
| * Test a node for whether it represents an 'else' condition. | ||
| * @param {HTMLElement} node to be tested | ||
| * @return {Boolean} true when | ||
| * | ||
| * Matches <!-- else --> | ||
| */ | ||
| isElseNode(node) { | ||
| return node.nodeType === 8 && node.nodeValue.trim().toLowerCase() === "else"; | ||
| return node.nodeType === Node.COMMENT_NODE && node.nodeValue.trim().toLowerCase() === "else"; | ||
| } | ||
| detectElse(element) { | ||
| var children = virtualElements.childNodes(element); | ||
| for (var i = 0, j = children.length; i < j; ++i) { | ||
| const children = virtualElements.childNodes(element); | ||
| for (let i = 0, j = children.length; i < j; ++i) { | ||
| if (this.isElseNode(children[i])) { | ||
@@ -90,8 +74,14 @@ return true; | ||
| } | ||
| /** | ||
| * Clone the nodes, returning `ifNodes`, `elseNodes` | ||
| * @param {HTMLElement} element The nodes to be cloned | ||
| * @param {boolean} hasElse short-circuit to speed up the inner-loop. | ||
| * @return {object} Containing the cloned nodes. | ||
| */ | ||
| cloneIfElseNodes(element, hasElse) { | ||
| const children = virtualElements.childNodes(element); | ||
| const ifNodes = []; | ||
| const elseNodes = []; | ||
| const ifNodes = new Array(); | ||
| const elseNodes = new Array(); | ||
| let target = ifNodes; | ||
| for (var i = 0, j = children.length; i < j; ++i) { | ||
| for (let i = 0, j = children.length; i < j; ++i) { | ||
| if (hasElse && this.isElseNode(children[i])) { | ||
@@ -98,0 +88,0 @@ target = elseNodes; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/ConditionalBindingHandler.ts"], | ||
| "sourcesContent": ["import {\n cloneNodes, virtualElements, cleanNode, domData\n} from '@tko/utils'\n\nimport {\n dependencyDetection, observable\n} from '@tko/observable'\n\nimport {\n applyBindingsToDescendants, AsyncBindingHandler\n} from '@tko/bind'\n\n/**\n * Create a DOMbinding that controls DOM nodes presence\n *\n * Covers e.g.\n *\n * 1. DOM Nodes contents\n *\n * <div data-bind='if: x'>\n * <!-- else --> ... an optional 'if'\n * </div>\n *\n * 2. Virtual elements\n *\n * <!-- ko if: x -->\n * <!-- else -->\n * <!-- /ko -->\n *\n * 3. Else binding\n * <div data-bind='if: x'></div>\n * <div data-bind='else'></div>\n *\n * Requires `renderStatus` and `get bindingContext` to be overloaded,\n * and this.computed('render') must be called in the child constructor.\n */\nexport default class ConditionalBindingHandler extends AsyncBindingHandler {\n constructor (params) {\n super(params)\n this.hasElse = this.detectElse(this.$element)\n const elseChainSatisfied = this.completesElseChain = observable()\n domData.set(this.$element, 'conditional', { elseChainSatisfied })\n }\n\n getIfElseNodes () {\n if (this.ifElseNodes) { return this.ifElseNodes }\n if (dependencyDetection.getDependenciesCount() || this.hasElse) {\n return this.cloneIfElseNodes(this.$element, this.hasElse)\n }\n }\n\n render () {\n const isFirstRender = !this.ifElseNodes\n const {shouldDisplay} = this.renderStatus()\n\n // Save the nodes before we possibly remove them from the DOM.\n this.ifElseNodes = this.getIfElseNodes() || {}\n\n if (shouldDisplay) {\n const useOriginalNodes = isFirstRender && !this.hasElse\n this.renderAndApplyBindings(this.ifElseNodes.ifNodes, useOriginalNodes)\n } else if (this.hasElse) {\n this.renderAndApplyBindings(this.ifElseNodes.elseNodes)\n } else {\n virtualElements.emptyNode(this.$element)\n }\n }\n\n async renderAndApplyBindings (nodes, useOriginalNodes) {\n if (!useOriginalNodes) {\n virtualElements.setDomNodeChildren(this.$element, cloneNodes(nodes))\n }\n const bound = await applyBindingsToDescendants(this.bindingContext, this.$element)\n this.completeBinding(bound)\n }\n\n /**\n * This may be truthy for the `else` binding.\n */\n get elseChainIsAlreadySatisfied () { return false }\n\n /**\n * Test a node for whether it represents an 'else' condition.\n * @param {HTMLElement} node to be tested\n * @return {Boolean} true when\n *\n * Matches <!-- else -->\n */\n isElseNode (node) {\n return node.nodeType === 8 &&\n node.nodeValue.trim().toLowerCase() === 'else'\n }\n\n detectElse (element) {\n var children = virtualElements.childNodes(element)\n for (var i = 0, j = children.length; i < j; ++i) {\n if (this.isElseNode(children[i])) { return true }\n }\n return false\n }\n\n /**\n * Clone the nodes, returning `ifNodes`, `elseNodes`\n * @param {HTMLElement} element The nodes to be cloned\n * @param {boolean} hasElse short-circuit to speed up the inner-loop.\n * @return {object} Containing the cloned nodes.\n */\n cloneIfElseNodes (element, hasElse) {\n const children = virtualElements.childNodes(element)\n const ifNodes = []\n const elseNodes = []\n let target = ifNodes\n\n for (var i = 0, j = children.length; i < j; ++i) {\n if (hasElse && this.isElseNode(children[i])) {\n target = elseNodes\n hasElse = false\n } else {\n target.push(cleanNode(children[i].cloneNode(true)))\n }\n }\n\n return { ifNodes, elseNodes }\n }\n\n get controlsDescendants () { return true }\n static get allowVirtualElements () { return true }\n}\n"], | ||
| "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AA4BA,qBAAqB,kCAAkC,oBAAoB;AAAA,EACzE,YAAa,QAAQ;AACnB,UAAM,MAAM;AACZ,SAAK,UAAU,KAAK,WAAW,KAAK,QAAQ;AAC5C,UAAM,qBAAqB,KAAK,qBAAqB,WAAW;AAChE,YAAQ,IAAI,KAAK,UAAU,eAAe,EAAE,mBAAmB,CAAC;AAAA,EAClE;AAAA,EAEA,iBAAkB;AAChB,QAAI,KAAK,aAAa;AAAE,aAAO,KAAK;AAAA,IAAY;AAChD,QAAI,oBAAoB,qBAAqB,KAAK,KAAK,SAAS;AAC9D,aAAO,KAAK,iBAAiB,KAAK,UAAU,KAAK,OAAO;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,SAAU;AACR,UAAM,gBAAgB,CAAC,KAAK;AAC5B,UAAM,EAAC,kBAAiB,KAAK,aAAa;AAG1C,SAAK,cAAc,KAAK,eAAe,KAAK,CAAC;AAE7C,QAAI,eAAe;AACjB,YAAM,mBAAmB,iBAAiB,CAAC,KAAK;AAChD,WAAK,uBAAuB,KAAK,YAAY,SAAS,gBAAgB;AAAA,IACxE,WAAW,KAAK,SAAS;AACvB,WAAK,uBAAuB,KAAK,YAAY,SAAS;AAAA,IACxD,OAAO;AACL,sBAAgB,UAAU,KAAK,QAAQ;AAAA,IACzC;AAAA,EACF;AAAA,EAEM,uBAAwB,OAAO,kBAAkB;AAAA;AACrD,UAAI,CAAC,kBAAkB;AACrB,wBAAgB,mBAAmB,KAAK,UAAU,WAAW,KAAK,CAAC;AAAA,MACrE;AACA,YAAM,QAAQ,MAAM,2BAA2B,KAAK,gBAAgB,KAAK,QAAQ;AACjF,WAAK,gBAAgB,KAAK;AAAA,IAC5B;AAAA;AAAA,MAKI,8BAA+B;AAAE,WAAO;AAAA,EAAM;AAAA,EASlD,WAAY,MAAM;AAChB,WAAO,KAAK,aAAa,KACnB,KAAK,UAAU,KAAK,EAAE,YAAY,MAAM;AAAA,EAChD;AAAA,EAEA,WAAY,SAAS;AACnB,QAAI,WAAW,gBAAgB,WAAW,OAAO;AACjD,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC/C,UAAI,KAAK,WAAW,SAAS,EAAE,GAAG;AAAE,eAAO;AAAA,MAAK;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAAA,EAQA,iBAAkB,SAAS,SAAS;AAClC,UAAM,WAAW,gBAAgB,WAAW,OAAO;AACnD,UAAM,UAAU,CAAC;AACjB,UAAM,YAAY,CAAC;AACnB,QAAI,SAAS;AAEb,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC/C,UAAI,WAAW,KAAK,WAAW,SAAS,EAAE,GAAG;AAC3C,iBAAS;AACT,kBAAU;AAAA,MACZ,OAAO;AACL,eAAO,KAAK,UAAU,SAAS,GAAG,UAAU,IAAI,CAAC,CAAC;AAAA,MACpD;AAAA,IACF;AAEA,WAAO,EAAE,SAAS,UAAU;AAAA,EAC9B;AAAA,MAEI,sBAAuB;AAAE,WAAO;AAAA,EAAK;AAAA,aAC9B,uBAAwB;AAAE,WAAO;AAAA,EAAK;AACnD;", | ||
| "sourcesContent": ["import { cloneNodes, virtualElements, cleanNode, domData } from '@tko/utils'\n\nimport { dependencyDetection, observable } from '@tko/observable'\n\nimport type { Observable } from '@tko/observable'\n\nimport { applyBindingsToDescendants, AsyncBindingHandler } from '@tko/bind'\n\nimport type { BindingContext } from '@tko/bind'\n\n//todo signature of renderStatus but be discussed\nexport type RenderStatusKeys = 'shouldDisplay'\n\n/**\n * Create a DOMbinding that controls DOM nodes presence\n *\n * Covers e.g.\n *\n * 1. DOM Nodes contents\n *\n * <div data-bind='if: x'>\n * <!-- else --> ... an optional 'if'\n * </div>\n *\n * 2. Virtual elements\n *\n * <!-- ko if: x -->\n * <!-- else -->\n * <!-- /ko -->\n *\n * 3. Else binding\n * <div data-bind='if: x'></div>\n * <div data-bind='else'></div>\n *\n * Requires `renderStatus` and `get bindingContext` to be overloaded,\n * and this.computed('render') must be called in the child constructor.\n */\nexport default class ConditionalBindingHandler extends AsyncBindingHandler {\n get bindingContext(): BindingContext {\n throw new Error('bindingContext() must be implemented in the child class')\n }\n completesElseChain: Observable\n hasElse: boolean\n ifElseNodes?: any\n constructor(params) {\n super(params)\n this.hasElse = this.detectElse(this.$element)\n const elseChainSatisfied = (this.completesElseChain = observable())\n domData.set(this.$element, 'conditional', { elseChainSatisfied })\n }\n\n getIfElseNodes() {\n if (this.ifElseNodes) {\n return this.ifElseNodes\n }\n if (dependencyDetection.getDependenciesCount() || this.hasElse) {\n return this.cloneIfElseNodes(this.$element, this.hasElse)\n }\n }\n\n renderStatus(): Record<RenderStatusKeys, any> {\n throw new Error('renderStatus() must be implemented in the child class')\n }\n\n render() {\n const isFirstRender = !this.ifElseNodes\n const { shouldDisplay } = this.renderStatus()\n\n // Save the nodes before we possibly remove them from the DOM.\n this.ifElseNodes = this.getIfElseNodes() || {}\n\n if (shouldDisplay) {\n const useOriginalNodes = isFirstRender && !this.hasElse\n this.renderAndApplyBindings(this.ifElseNodes.ifNodes, useOriginalNodes)\n } else if (this.hasElse) {\n this.renderAndApplyBindings(this.ifElseNodes.elseNodes)\n } else {\n virtualElements.emptyNode(this.$element)\n }\n }\n\n async renderAndApplyBindings(nodes: ArrayLike<Node>, useOriginalNodes?: boolean) {\n if (!useOriginalNodes) {\n virtualElements.setDomNodeChildren(this.$element, cloneNodes(nodes))\n }\n const bound = await applyBindingsToDescendants(this.bindingContext, this.$element)\n this.completeBinding(bound)\n }\n\n /**\n * This may be truthy for the `else` binding.\n */\n get elseChainIsAlreadySatisfied() {\n return false\n }\n\n /**\n * Test a node for whether it represents an 'else' condition.\n * @param {HTMLElement} node to be tested\n * @return {Boolean} true when\n *\n * Matches <!-- else -->\n */\n isElseNode(node) {\n return node.nodeType === Node.COMMENT_NODE && node.nodeValue.trim().toLowerCase() === 'else'\n }\n\n detectElse(element) {\n const children = virtualElements.childNodes(element)\n for (let i = 0, j = children.length; i < j; ++i) {\n if (this.isElseNode(children[i])) {\n return true\n }\n }\n return false\n }\n\n /**\n * Clone the nodes, returning `ifNodes`, `elseNodes`\n * @param {HTMLElement} element The nodes to be cloned\n * @param {boolean} hasElse short-circuit to speed up the inner-loop.\n * @return {object} Containing the cloned nodes.\n */\n cloneIfElseNodes(element, hasElse) {\n const children = virtualElements.childNodes(element)\n const ifNodes = new Array()\n const elseNodes = new Array()\n let target = ifNodes\n\n for (let i = 0, j = children.length; i < j; ++i) {\n if (hasElse && this.isElseNode(children[i])) {\n target = elseNodes\n hasElse = false\n } else {\n target.push(cleanNode(children[i].cloneNode(true)))\n }\n }\n\n return { ifNodes, elseNodes }\n }\n\n override get controlsDescendants() {\n return true\n }\n static override get allowVirtualElements() {\n return true\n }\n}\n"], | ||
| "mappings": ";;AAAA,SAAS,YAAY,iBAAiB,WAAW,eAAe;AAEhE,SAAS,qBAAqB,kBAAkB;AAIhD,SAAS,4BAA4B,2BAA2B;AA+BhE,qBAAqB,kCAAkC,oBAAoB;AAAA,EACzE,IAAI,iBAAiC;AACnC,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AAAA,EAIA,YAAY,QAAQ;AAClB,UAAM,MAAM;AACZ,SAAK,UAAU,KAAK,WAAW,KAAK,QAAQ;AAC5C,UAAM,qBAAsB,KAAK,qBAAqB,WAAW;AACjE,YAAQ,IAAI,KAAK,UAAU,eAAe,EAAE,mBAAmB,CAAC;AAAA,EAClE;AAAA,EAEA,iBAAiB;AACf,QAAI,KAAK,aAAa;AACpB,aAAO,KAAK;AAAA,IACd;AACA,QAAI,oBAAoB,qBAAqB,KAAK,KAAK,SAAS;AAC9D,aAAO,KAAK,iBAAiB,KAAK,UAAU,KAAK,OAAO;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,eAA8C;AAC5C,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AAAA,EAEA,SAAS;AACP,UAAM,gBAAgB,CAAC,KAAK;AAC5B,UAAM,EAAE,cAAc,IAAI,KAAK,aAAa;AAG5C,SAAK,cAAc,KAAK,eAAe,KAAK,CAAC;AAE7C,QAAI,eAAe;AACjB,YAAM,mBAAmB,iBAAiB,CAAC,KAAK;AAChD,WAAK,uBAAuB,KAAK,YAAY,SAAS,gBAAgB;AAAA,IACxE,WAAW,KAAK,SAAS;AACvB,WAAK,uBAAuB,KAAK,YAAY,SAAS;AAAA,IACxD,OAAO;AACL,sBAAgB,UAAU,KAAK,QAAQ;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,uBAAuB,OAAwB,kBAA4B;AAC/E,QAAI,CAAC,kBAAkB;AACrB,sBAAgB,mBAAmB,KAAK,UAAU,WAAW,KAAK,CAAC;AAAA,IACrE;AACA,UAAM,QAAQ,MAAM,2BAA2B,KAAK,gBAAgB,KAAK,QAAQ;AACjF,SAAK,gBAAgB,KAAK;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,8BAA8B;AAChC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,WAAW,MAAM;AACf,WAAO,KAAK,aAAa,KAAK,gBAAgB,KAAK,UAAU,KAAK,EAAE,YAAY,MAAM;AAAA,EACxF;AAAA,EAEA,WAAW,SAAS;AAClB,UAAM,WAAW,gBAAgB,WAAW,OAAO;AACnD,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC/C,UAAI,KAAK,WAAW,SAAS,CAAC,CAAC,GAAG;AAChC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,SAAS,SAAS;AACjC,UAAM,WAAW,gBAAgB,WAAW,OAAO;AACnD,UAAM,UAAU,IAAI,MAAM;AAC1B,UAAM,YAAY,IAAI,MAAM;AAC5B,QAAI,SAAS;AAEb,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,EAAE,GAAG;AAC/C,UAAI,WAAW,KAAK,WAAW,SAAS,CAAC,CAAC,GAAG;AAC3C,iBAAS;AACT,kBAAU;AAAA,MACZ,OAAO;AACL,eAAO,KAAK,UAAU,SAAS,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;AAAA,MACpD;AAAA,IACF;AAEA,WAAO,EAAE,SAAS,UAAU;AAAA,EAC9B;AAAA,EAEA,IAAa,sBAAsB;AACjC,WAAO;AAAA,EACT;AAAA,EACA,WAAoB,uBAAuB;AACzC,WAAO;AAAA,EACT;AACF;", | ||
| "names": [] | ||
| } |
+11
-13
@@ -1,12 +0,6 @@ | ||
| // @tko/binding.if 🥊 4.0.0-beta1.3 ESM | ||
| import { | ||
| virtualElements, | ||
| domData | ||
| } from "@tko/utils"; | ||
| import { | ||
| unwrap | ||
| } from "@tko/observable"; | ||
| import { | ||
| IfBindingHandler | ||
| } from "./ifUnless"; | ||
| // @tko/binding.if 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { virtualElements, domData } from "@tko/utils"; | ||
| import { unwrap } from "@tko/observable"; | ||
| import { IfBindingHandler } from "./ifUnless"; | ||
| export class ElseBindingHandler extends IfBindingHandler { | ||
@@ -16,2 +10,6 @@ shouldDisplayIf() { | ||
| } | ||
| /** | ||
| * Return any conditional that precedes the given node. | ||
| * @return {object} { elseChainSatisfied: observable } | ||
| */ | ||
| get elseChainIsAlreadySatisfied() { | ||
@@ -27,7 +25,7 @@ if (!this._elseChain) { | ||
| node = node.previousSibling; | ||
| } while (node && node.nodeType !== 1 && node.nodeType !== 8); | ||
| } while (node && node.nodeType !== Node.ELEMENT_NODE && node.nodeType !== Node.COMMENT_NODE); | ||
| if (!node) { | ||
| return false; | ||
| } | ||
| if (node.nodeType === 8) { | ||
| if (node.nodeType === Node.COMMENT_NODE) { | ||
| node = virtualElements.previousSibling(node); | ||
@@ -34,0 +32,0 @@ } |
+2
-2
| { | ||
| "version": 3, | ||
| "sources": ["../src/else.ts"], | ||
| "sourcesContent": ["import {\n virtualElements, domData\n} from '@tko/utils'\n\nimport {\n unwrap\n} from '@tko/observable'\n\nimport {\n IfBindingHandler\n} from './ifUnless'\n\n/**\n * The `else` binding\n * (not to be mistaken for `<!-- else -->` inside if bindings.\n */\nexport class ElseBindingHandler extends IfBindingHandler {\n shouldDisplayIf () {\n return super.shouldDisplayIf() || this.value === undefined\n }\n\n /**\n * Return any conditional that precedes the given node.\n * @return {object} { elseChainSatisfied: observable }\n */\n get elseChainIsAlreadySatisfied () {\n if (!this._elseChain) { this._elseChain = this.readElseChain() }\n return unwrap(this._elseChain.elseChainSatisfied)\n }\n\n readElseChain () {\n let node = this.$element\n do {\n node = node.previousSibling\n } while (node && node.nodeType !== 1 && node.nodeType !== 8)\n\n if (!node) { return false }\n\n if (node.nodeType === 8) {\n node = virtualElements.previousSibling(node)\n }\n\n return domData.get(node, 'conditional') || {}\n }\n}\n"], | ||
| "mappings": ";AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA;AAAA;AAAA;AAQO,aAAM,2BAA2B,iBAAiB;AAAA,EACvD,kBAAmB;AACjB,WAAO,MAAM,gBAAgB,KAAK,KAAK,UAAU;AAAA,EACnD;AAAA,MAMI,8BAA+B;AACjC,QAAI,CAAC,KAAK,YAAY;AAAE,WAAK,aAAa,KAAK,cAAc;AAAA,IAAE;AAC/D,WAAO,OAAO,KAAK,WAAW,kBAAkB;AAAA,EAClD;AAAA,EAEA,gBAAiB;AACf,QAAI,OAAO,KAAK;AAChB,OAAG;AACD,aAAO,KAAK;AAAA,IACd,SAAS,QAAQ,KAAK,aAAa,KAAK,KAAK,aAAa;AAE1D,QAAI,CAAC,MAAM;AAAE,aAAO;AAAA,IAAM;AAE1B,QAAI,KAAK,aAAa,GAAG;AACvB,aAAO,gBAAgB,gBAAgB,IAAI;AAAA,IAC7C;AAEA,WAAO,QAAQ,IAAI,MAAM,aAAa,KAAK,CAAC;AAAA,EAC9C;AACF;", | ||
| "sourcesContent": ["import { virtualElements, domData } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport { IfBindingHandler } from './ifUnless'\n\n/**\n * The `else` binding\n * (not to be mistaken for `<!-- else -->` inside if bindings.\n */\nexport class ElseBindingHandler extends IfBindingHandler {\n _elseChain: any\n\n override shouldDisplayIf() {\n return super.shouldDisplayIf() || this.value === undefined\n }\n\n /**\n * Return any conditional that precedes the given node.\n * @return {object} { elseChainSatisfied: observable }\n */\n override get elseChainIsAlreadySatisfied() {\n if (!this._elseChain) {\n this._elseChain = this.readElseChain()\n }\n return unwrap(this._elseChain.elseChainSatisfied)\n }\n\n readElseChain() {\n let node: ChildNode | null = this.$element\n do {\n node = node.previousSibling\n } while (node && node.nodeType !== Node.ELEMENT_NODE && node.nodeType !== Node.COMMENT_NODE)\n\n if (!node) {\n return false\n }\n\n if (node.nodeType === Node.COMMENT_NODE) {\n node = virtualElements.previousSibling(node)\n }\n\n return domData.get(node as Node, 'conditional') || {}\n }\n}\n"], | ||
| "mappings": ";;AAAA,SAAS,iBAAiB,eAAe;AAEzC,SAAS,cAAc;AAEvB,SAAS,wBAAwB;AAM1B,aAAM,2BAA2B,iBAAiB;AAAA,EAG9C,kBAAkB;AACzB,WAAO,MAAM,gBAAgB,KAAK,KAAK,UAAU;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAa,8BAA8B;AACzC,QAAI,CAAC,KAAK,YAAY;AACpB,WAAK,aAAa,KAAK,cAAc;AAAA,IACvC;AACA,WAAO,OAAO,KAAK,WAAW,kBAAkB;AAAA,EAClD;AAAA,EAEA,gBAAgB;AACd,QAAI,OAAyB,KAAK;AAClC,OAAG;AACD,aAAO,KAAK;AAAA,IACd,SAAS,QAAQ,KAAK,aAAa,KAAK,gBAAgB,KAAK,aAAa,KAAK;AAE/E,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,aAAa,KAAK,cAAc;AACvC,aAAO,gBAAgB,gBAAgB,IAAI;AAAA,IAC7C;AAEA,WAAO,QAAQ,IAAI,MAAc,aAAa,KAAK,CAAC;AAAA,EACtD;AACF;", | ||
| "names": [] | ||
| } |
+3
-4
@@ -1,5 +0,4 @@ | ||
| // @tko/binding.if 🥊 4.0.0-beta1.3 ESM | ||
| import { | ||
| unwrap | ||
| } from "@tko/observable"; | ||
| // @tko/binding.if 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { unwrap } from "@tko/observable"; | ||
| import ConditionalBindingHandler from "./ConditionalBindingHandler"; | ||
@@ -6,0 +5,0 @@ export class IfBindingHandler extends ConditionalBindingHandler { |
| { | ||
| "version": 3, | ||
| "sources": ["../src/ifUnless.ts"], | ||
| "sourcesContent": ["\nimport {\n unwrap\n} from '@tko/observable'\n\nimport ConditionalBindingHandler from './ConditionalBindingHandler'\n\n/**\n * For the `if:` binding.\n */\nexport class IfBindingHandler extends ConditionalBindingHandler {\n constructor (...args) {\n super(...args)\n this.ifCondition = this.computed(() => !!unwrap(this.value))\n this.computed('render')\n }\n\n shouldDisplayIf () {\n return this.ifCondition()\n }\n\n get bindingContext () {\n return this.ifCondition.isActive()\n ? this.$context.extend(() => {\n // Ensure that this context is dependant upon the conditional, so the\n // order of binding application is: conditional before its children.\n // See https://github.com/knockout/kn\n // ockout/pull/2226\n this.ifCondition()\n return null\n })\n : this.$context\n }\n\n renderStatus () {\n let shouldDisplay = this.shouldDisplayIf()\n\n if (this.elseChainIsAlreadySatisfied) {\n shouldDisplay = false\n // needsRefresh = isFirstRender || this.didDisplayOnLastUpdate FIXME\n this.completesElseChain(true)\n } else {\n this.completesElseChain(shouldDisplay)\n }\n return {shouldDisplay}\n }\n}\n\nexport class UnlessBindingHandler extends IfBindingHandler {\n shouldDisplayIf () { return !super.shouldDisplayIf() }\n}\n"], | ||
| "mappings": ";AACA;AAAA;AAAA;AAIA;AAKO,aAAM,yBAAyB,0BAA0B;AAAA,EAC9D,eAAgB,MAAM;AACpB,UAAM,GAAG,IAAI;AACb,SAAK,cAAc,KAAK,SAAS,MAAM,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;AAC3D,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEA,kBAAmB;AACjB,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,MAEI,iBAAkB;AACpB,WAAO,KAAK,YAAY,SAAS,IAC7B,KAAK,SAAS,OAAO,MAAM;AAK3B,WAAK,YAAY;AACjB,aAAO;AAAA,IACT,CAAC,IACC,KAAK;AAAA,EACX;AAAA,EAEA,eAAgB;AACd,QAAI,gBAAgB,KAAK,gBAAgB;AAEzC,QAAI,KAAK,6BAA6B;AACpC,sBAAgB;AAEhB,WAAK,mBAAmB,IAAI;AAAA,IAC9B,OAAO;AACL,WAAK,mBAAmB,aAAa;AAAA,IACvC;AACA,WAAO,EAAC,cAAa;AAAA,EACvB;AACF;AAEO,aAAM,6BAA6B,iBAAiB;AAAA,EACzD,kBAAmB;AAAE,WAAO,CAAC,MAAM,gBAAgB;AAAA,EAAE;AACvD;", | ||
| "sourcesContent": ["import { unwrap } from '@tko/observable'\n\nimport ConditionalBindingHandler from './ConditionalBindingHandler'\n\n/**\n * For the `if:` binding.\n */\nexport class IfBindingHandler extends ConditionalBindingHandler {\n ifCondition: any\n constructor(...args: [any]) {\n super(...args)\n this.ifCondition = this.computed(() => !!unwrap(this.value))\n this.computed('render')\n }\n\n shouldDisplayIf() {\n return this.ifCondition()\n }\n\n override get bindingContext() {\n return this.ifCondition.isActive()\n ? this.$context.extend(() => {\n // Ensure that this context is dependant upon the conditional, so the\n // order of binding application is: conditional before its children.\n // See https://github.com/knockout/knockout/pull/2226\n this.ifCondition()\n return null\n })\n : this.$context\n }\n\n override renderStatus() {\n let shouldDisplay = this.shouldDisplayIf()\n\n if (this.elseChainIsAlreadySatisfied) {\n shouldDisplay = false\n // needsRefresh = isFirstRender || this.didDisplayOnLastUpdate FIXME\n this.completesElseChain(true)\n } else {\n this.completesElseChain(shouldDisplay)\n }\n return { shouldDisplay }\n }\n}\n\nexport class UnlessBindingHandler extends IfBindingHandler {\n override shouldDisplayIf() {\n return !super.shouldDisplayIf()\n }\n}\n"], | ||
| "mappings": ";;AAAA,SAAS,cAAc;AAEvB,OAAO,+BAA+B;AAK/B,aAAM,yBAAyB,0BAA0B;AAAA,EAE9D,eAAe,MAAa;AAC1B,UAAM,GAAG,IAAI;AACb,SAAK,cAAc,KAAK,SAAS,MAAM,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC;AAC3D,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEA,kBAAkB;AAChB,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA,EAEA,IAAa,iBAAiB;AAC5B,WAAO,KAAK,YAAY,SAAS,IAC7B,KAAK,SAAS,OAAO,MAAM;AAIzB,WAAK,YAAY;AACjB,aAAO;AAAA,IACT,CAAC,IACD,KAAK;AAAA,EACX;AAAA,EAES,eAAe;AACtB,QAAI,gBAAgB,KAAK,gBAAgB;AAEzC,QAAI,KAAK,6BAA6B;AACpC,sBAAgB;AAEhB,WAAK,mBAAmB,IAAI;AAAA,IAC9B,OAAO;AACL,WAAK,mBAAmB,aAAa;AAAA,IACvC;AACA,WAAO,EAAE,cAAc;AAAA,EACzB;AACF;AAEO,aAAM,6BAA6B,iBAAiB;AAAA,EAChD,kBAAkB;AACzB,WAAO,CAAC,MAAM,gBAAgB;AAAA,EAChC;AACF;", | ||
| "names": [] | ||
| } |
+9
-15
@@ -1,19 +0,13 @@ | ||
| // @tko/binding.if 🥊 4.0.0-beta1.3 ESM | ||
| import { | ||
| IfBindingHandler, | ||
| UnlessBindingHandler | ||
| } from "./ifUnless"; | ||
| import { | ||
| WithBindingHandler | ||
| } from "./with"; | ||
| import { | ||
| ElseBindingHandler | ||
| } from "./else"; | ||
| // @tko/binding.if 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { IfBindingHandler, UnlessBindingHandler } from "./ifUnless"; | ||
| import { WithBindingHandler } from "./with"; | ||
| import { ElseBindingHandler } from "./else"; | ||
| export const bindings = { | ||
| "if": IfBindingHandler, | ||
| "with": WithBindingHandler, | ||
| if: IfBindingHandler, | ||
| with: WithBindingHandler, | ||
| ifnot: UnlessBindingHandler, | ||
| unless: UnlessBindingHandler, | ||
| "else": ElseBindingHandler, | ||
| "elseif": ElseBindingHandler | ||
| else: ElseBindingHandler, | ||
| elseif: ElseBindingHandler | ||
| }; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["\nimport {\n IfBindingHandler,\n UnlessBindingHandler\n} from './ifUnless'\n\nimport {\n WithBindingHandler\n} from './with'\n\nimport {\n ElseBindingHandler\n} from './else'\n\nexport const bindings = {\n 'if': IfBindingHandler,\n 'with': WithBindingHandler,\n ifnot: UnlessBindingHandler,\n unless: UnlessBindingHandler,\n 'else': ElseBindingHandler,\n 'elseif': ElseBindingHandler\n}\n"], | ||
| "mappings": ";AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIO,aAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AACZ;", | ||
| "sourcesContent": ["import { IfBindingHandler, UnlessBindingHandler } from './ifUnless'\n\nimport { WithBindingHandler } from './with'\n\nimport { ElseBindingHandler } from './else'\n\nexport const bindings = {\n if: IfBindingHandler,\n with: WithBindingHandler,\n ifnot: UnlessBindingHandler,\n unless: UnlessBindingHandler,\n else: ElseBindingHandler,\n elseif: ElseBindingHandler\n}\n"], | ||
| "mappings": ";;AAAA,SAAS,kBAAkB,4BAA4B;AAEvD,SAAS,0BAA0B;AAEnC,SAAS,0BAA0B;AAE5B,aAAM,WAAW;AAAA,EACtB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AACV;", | ||
| "names": [] | ||
| } |
+9
-15
@@ -1,19 +0,13 @@ | ||
| // @tko/binding.if 🥊 4.0.0-beta1.3 MJS | ||
| import { | ||
| IfBindingHandler, | ||
| UnlessBindingHandler | ||
| } from "./ifUnless"; | ||
| import { | ||
| WithBindingHandler | ||
| } from "./with"; | ||
| import { | ||
| ElseBindingHandler | ||
| } from "./else"; | ||
| // @tko/binding.if 🥊 4.0.0 MJS | ||
| "use strict"; | ||
| import { IfBindingHandler, UnlessBindingHandler } from "./ifUnless"; | ||
| import { WithBindingHandler } from "./with"; | ||
| import { ElseBindingHandler } from "./else"; | ||
| export const bindings = { | ||
| "if": IfBindingHandler, | ||
| "with": WithBindingHandler, | ||
| if: IfBindingHandler, | ||
| with: WithBindingHandler, | ||
| ifnot: UnlessBindingHandler, | ||
| unless: UnlessBindingHandler, | ||
| "else": ElseBindingHandler, | ||
| "elseif": ElseBindingHandler | ||
| else: ElseBindingHandler, | ||
| elseif: ElseBindingHandler | ||
| }; |
| { | ||
| "version": 3, | ||
| "sources": ["../src/index.ts"], | ||
| "sourcesContent": ["\nimport {\n IfBindingHandler,\n UnlessBindingHandler\n} from './ifUnless'\n\nimport {\n WithBindingHandler\n} from './with'\n\nimport {\n ElseBindingHandler\n} from './else'\n\nexport const bindings = {\n 'if': IfBindingHandler,\n 'with': WithBindingHandler,\n ifnot: UnlessBindingHandler,\n unless: UnlessBindingHandler,\n 'else': ElseBindingHandler,\n 'elseif': ElseBindingHandler\n}\n"], | ||
| "mappings": ";AACA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIO,aAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AACZ;", | ||
| "sourcesContent": ["import { IfBindingHandler, UnlessBindingHandler } from './ifUnless'\n\nimport { WithBindingHandler } from './with'\n\nimport { ElseBindingHandler } from './else'\n\nexport const bindings = {\n if: IfBindingHandler,\n with: WithBindingHandler,\n ifnot: UnlessBindingHandler,\n unless: UnlessBindingHandler,\n else: ElseBindingHandler,\n elseif: ElseBindingHandler\n}\n"], | ||
| "mappings": ";;AAAA,SAAS,kBAAkB,4BAA4B;AAEvD,SAAS,0BAA0B;AAEnC,SAAS,0BAA0B;AAE5B,aAAM,WAAW;AAAA,EACtB,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AACV;", | ||
| "names": [] | ||
| } |
+4
-7
@@ -1,8 +0,5 @@ | ||
| // @tko/binding.if 🥊 4.0.0-beta1.3 ESM | ||
| import { | ||
| options | ||
| } from "@tko/utils"; | ||
| import { | ||
| unwrap | ||
| } from "@tko/observable"; | ||
| // @tko/binding.if 🥊 4.0.0 ESM | ||
| "use strict"; | ||
| import { options } from "@tko/utils"; | ||
| import { unwrap } from "@tko/observable"; | ||
| import ConditionalBindingHandler from "./ConditionalBindingHandler"; | ||
@@ -9,0 +6,0 @@ export class WithBindingHandler extends ConditionalBindingHandler { |
+2
-2
| { | ||
| "version": 3, | ||
| "sources": ["../src/with.ts"], | ||
| "sourcesContent": ["\nimport {\n options\n} from '@tko/utils'\n\nimport {\n unwrap\n} from '@tko/observable'\n\nimport ConditionalBindingHandler from './ConditionalBindingHandler'\n\n/**\n * The following fails somewhere in the `limit` functions of Observables i.e.\n * it's an issue related to async/deferUpdates.\n */\nexport class WithBindingHandler extends ConditionalBindingHandler {\n constructor (...args) {\n super(...args)\n this.asOption = this.allBindings.get('as')\n\n // If given `as`, reduce the condition to a boolean, so it does not\n // change & refresh when the value is updated.\n const conditionalFn = this.asOption && !options.createChildContextWithAs\n ? () => Boolean(unwrap(this.value)) : () => unwrap(this.value)\n this.conditional = this.computed(conditionalFn)\n\n this.computed('render')\n }\n\n get bindingContext () {\n if (!this.asOption) {\n return this.$context.createChildContext(this.valueAccessor)\n }\n return options.createChildContextWithAs\n ? this.$context.createChildContext(this.value, this.asOption)\n : this.$context.extend({[this.asOption]: this.value})\n }\n\n renderStatus () {\n const shouldDisplay = Boolean(this.conditional())\n return { shouldDisplay }\n }\n}\n"], | ||
| "mappings": ";AACA;AAAA;AAAA;AAIA;AAAA;AAAA;AAIA;AAMO,aAAM,2BAA2B,0BAA0B;AAAA,EAChE,eAAgB,MAAM;AACpB,UAAM,GAAG,IAAI;AACb,SAAK,WAAW,KAAK,YAAY,IAAI,IAAI;AAIzC,UAAM,gBAAgB,KAAK,YAAY,CAAC,QAAQ,2BAC5C,MAAM,QAAQ,OAAO,KAAK,KAAK,CAAC,IAAI,MAAM,OAAO,KAAK,KAAK;AAC/D,SAAK,cAAc,KAAK,SAAS,aAAa;AAE9C,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,MAEI,iBAAkB;AACpB,QAAI,CAAC,KAAK,UAAU;AAClB,aAAO,KAAK,SAAS,mBAAmB,KAAK,aAAa;AAAA,IAC5D;AACA,WAAO,QAAQ,2BACX,KAAK,SAAS,mBAAmB,KAAK,OAAO,KAAK,QAAQ,IAC1D,KAAK,SAAS,OAAO,GAAE,KAAK,WAAW,KAAK,MAAK,CAAC;AAAA,EACxD;AAAA,EAEA,eAAgB;AACd,UAAM,gBAAgB,QAAQ,KAAK,YAAY,CAAC;AAChD,WAAO,EAAE,cAAc;AAAA,EACzB;AACF;", | ||
| "sourcesContent": ["import { options } from '@tko/utils'\n\nimport { unwrap } from '@tko/observable'\n\nimport ConditionalBindingHandler from './ConditionalBindingHandler'\n\n/**\n * The following fails somewhere in the `limit` functions of Observables i.e.\n * it's an issue related to async/deferUpdates.\n */\nexport class WithBindingHandler extends ConditionalBindingHandler {\n asOption: any\n conditional: any\n constructor(...args: [any]) {\n super(...args)\n this.asOption = this.allBindings.get('as')\n\n // If given `as`, reduce the condition to a boolean, so it does not\n // change & refresh when the value is updated.\n const conditionalFn =\n this.asOption && !options.createChildContextWithAs ? () => Boolean(unwrap(this.value)) : () => unwrap(this.value)\n this.conditional = this.computed(conditionalFn)\n\n this.computed('render')\n }\n\n override get bindingContext() {\n if (!this.asOption) {\n return this.$context.createChildContext(this.valueAccessor)\n }\n return options.createChildContextWithAs\n ? this.$context.createChildContext(this.value, this.asOption)\n : this.$context.extend({ [this.asOption]: this.value })\n }\n\n override renderStatus() {\n const shouldDisplay = Boolean(this.conditional())\n return { shouldDisplay }\n }\n}\n"], | ||
| "mappings": ";;AAAA,SAAS,eAAe;AAExB,SAAS,cAAc;AAEvB,OAAO,+BAA+B;AAM/B,aAAM,2BAA2B,0BAA0B;AAAA,EAGhE,eAAe,MAAa;AAC1B,UAAM,GAAG,IAAI;AACb,SAAK,WAAW,KAAK,YAAY,IAAI,IAAI;AAIzC,UAAM,gBACJ,KAAK,YAAY,CAAC,QAAQ,2BAA2B,MAAM,QAAQ,OAAO,KAAK,KAAK,CAAC,IAAI,MAAM,OAAO,KAAK,KAAK;AAClH,SAAK,cAAc,KAAK,SAAS,aAAa;AAE9C,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA,EAEA,IAAa,iBAAiB;AAC5B,QAAI,CAAC,KAAK,UAAU;AAClB,aAAO,KAAK,SAAS,mBAAmB,KAAK,aAAa;AAAA,IAC5D;AACA,WAAO,QAAQ,2BACX,KAAK,SAAS,mBAAmB,KAAK,OAAO,KAAK,QAAQ,IAC1D,KAAK,SAAS,OAAO,EAAE,CAAC,KAAK,QAAQ,GAAG,KAAK,MAAM,CAAC;AAAA,EAC1D;AAAA,EAES,eAAe;AACtB,UAAM,gBAAgB,QAAQ,KAAK,YAAY,CAAC;AAChD,WAAO,EAAE,cAAc;AAAA,EACzB;AACF;", | ||
| "names": [] | ||
| } |
+6
-7
| { | ||
| "version": "4.0.0-beta1.3", | ||
| "version": "4.0.0", | ||
| "name": "@tko/binding.if", | ||
@@ -26,6 +26,6 @@ "description": "TKO conditional (if/ifnot/unless/with/else) bindings", | ||
| "dependencies": { | ||
| "@tko/bind": "^4.0.0-beta1.3", | ||
| "@tko/computed": "^4.0.0-beta1.3", | ||
| "@tko/observable": "^4.0.0-beta1.3", | ||
| "@tko/utils": "^4.0.0-beta1.3", | ||
| "@tko/bind": "^4.0.0", | ||
| "@tko/computed": "^4.0.0", | ||
| "@tko/observable": "^4.0.0", | ||
| "@tko/utils": "^4.0.0", | ||
| "tslib": "^2.2.0" | ||
@@ -50,4 +50,3 @@ }, | ||
| "./helpers/*": "./helpers/*" | ||
| }, | ||
| "gitHead": "a8843acb8ae085915115e53a4e057b30731c635e" | ||
| } | ||
| } |
-22
| The MIT License (MIT) - http://www.opensource.org/licenses/mit-license.php | ||
| Copyright (c) Steven Sanderson, the Knockout.js team, and other contributors | ||
| http://knockoutjs.com/ | ||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
| The above copyright notice and this permission notice shall be included in | ||
| all copies or substantial portions of the Software. | ||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
| THE SOFTWARE. |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
315911
5.18%3272
5.75%0
-100%15
-6.25%Updated
Updated
Updated
Updated