Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@tko/binding.if

Package Overview
Dependencies
Maintainers
1
Versions
23
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@tko/binding.if - npm Package Compare versions

Comparing version
4.0.0-beta1.3
to
4.0.0
+39
-49
dist/ConditionalBindingHandler.js

@@ -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": []
}

@@ -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 @@ }

{
"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": []
}

@@ -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": []
}

@@ -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": []
}

@@ -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": []
}

@@ -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 {

{
"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": []
}
{
"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"
}
}
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