Everything to ES2020

This commit is contained in:
the-djmaze 2024-04-02 22:24:53 +02:00
parent 84ffe1e552
commit 78178ecc2f
16 changed files with 35 additions and 45 deletions

View file

@ -3,7 +3,7 @@ module.exports = {
// extends: ['eslint:recommended', 'plugin:prettier/recommended'],
extends: ['eslint:recommended'],
parserOptions: {
ecmaVersion: 6,
ecmaVersion: 11,
sourceType: 'module'
},
env: {

View file

@ -62,7 +62,7 @@ export const
* @returns {string}
*/
i18n = (key, valueList, defaulValue) => {
let result = null == defaulValue ? key : defaulValue;
let result = defaulValue ?? key;
let path = key.split('/');
if (I18N_DATA[path[0]] && path[1]) {
result = I18N_DATA[path[0]][path[1]] || result;

View file

@ -6,7 +6,7 @@ export class CheckboxComponent {
: ko.observable(!!params.value);
this.enable = ko.isObservable(params.enable) ? params.enable
: ko.observable(undefined === params.enable || !!params.enable);
: ko.observable(params.enable ?? 1);
this.label = params.label;
}

View file

@ -124,7 +124,7 @@ export class JCard {
// VCardProperty argument
else if (arg instanceof VCardProperty) {
let propArray = this.props.get(arg.getField());
if (!(propArray === null || propArray === void 0 ? void 0 : propArray.includes(arg)))
if (!propArray?.includes(arg))
throw Error("Attempted to remove VCardProperty VCard does not have: ".concat(arg));
propArray.splice(propArray.indexOf(arg), 1);
if (propArray.length === 0)

View file

@ -131,7 +131,7 @@ export class AbstractFetchRemote
fetchJSON(sAction, getURL(sGetAdd),
sGetAdd ? null : (params || {}),
undefined === iTimeout ? 30000 : pInt(iTimeout),
pInt(iTimeout ?? 30000),
async data => {
let iError = 0;
if (data) {

View file

@ -117,7 +117,7 @@ export class AbstractSettingsScreen extends AbstractScreen {
rules = {
subname: /^(.*)$/,
normalize_: (rquest, vals) => {
vals.subname = null == vals.subname ? defaultRoute : pString(vals.subname);
vals.subname = pString(vals.subname ?? defaultRoute);
return [vals.subname];
}
};

View file

@ -23,7 +23,7 @@ try {
data = data ? decodeURIComponent(data[2]) : null;
data = data ? JSON.parse(data) : {};
win[sName] = {
getItem: key => data[key] == null ? null : data[key],
getItem: key => data[key] ?? null,
setItem: (key, value) => {
data[key] = ''+value; // forces the value to a string
document.cookie = sName+'='+encodeURIComponent(JSON.stringify(data))

View file

@ -75,8 +75,8 @@
// create drag image from custom element or drag source
img = src.cloneNode(true);
copyStyle(src, img);
img._x = xOffset == null ? src.clientWidth / 2 : xOffset;
img._y = yOffset == null ? src.clientHeight / 2 : yOffset;
img._x = xOffset ?? src.clientWidth / 2;
img._y = yOffset ?? src.clientHeight / 2;
}
},

View file

@ -46,7 +46,7 @@ let terserConfig = {
},
keep_classnames: true, // Required for AbstractModel and AbstractCollectionModel
compress:{
ecma: 6,
ecma: 2020,
drop_console: true
/*
,hoist_props: false

View file

@ -530,7 +530,7 @@ ko.observable = initialValue => {
observable[observableLatestValue] = initialValue;
Object.defineProperty(observable, length, {
get: () => null == observable[observableLatestValue] ? undefined : observable[observableLatestValue][length]
get: () => observable[observableLatestValue]?.[length]
});
// Inherit from 'subscribable'
@ -1294,7 +1294,7 @@ ko.selectExtensions = {
break;
case 'SELECT':
// A blank string or null value will select the caption
var selection = -1, noValue = ("" === value || null == value),
var selection = -1, noValue = ("" === (value ?? "")),
i = element.options.length, optionValue;
while (i--) {
optionValue = ko.selectExtensions.readValue(element.options[i]);
@ -1309,7 +1309,7 @@ ko.selectExtensions = {
}
break;
default:
element.value = (value == null) ? "" : value;
element.value = value ?? "";
break;
}
}
@ -2660,7 +2660,6 @@ ko.bindingHandlers['options'] = {
previousScrollTop = (!selectWasPreviouslyEmpty && multiple) ? element.scrollTop : null,
unwrappedArray = ko.utils.unwrapObservable(valueAccessor()),
arrayToDomNodeChildrenOptions = {},
captionValue,
filteredArray,
previousSelectedValues = [],
@ -2701,7 +2700,7 @@ ko.bindingHandlers['options'] = {
unwrappedArray = [unwrappedArray];
// Filter out any entries marked as destroyed
filteredArray = unwrappedArray.filter(item => item || item == null);
filteredArray = unwrappedArray.filter(item => item ?? 1);
} else {
// If a falsy value is provided (e.g. null), we'll simply empty the select element
}
@ -2847,11 +2846,7 @@ ko.bindingHandlers['textInput'] = {
};
var updateView = () => {
var modelValue = ko.utils.unwrapObservable(valueAccessor());
if (modelValue == null) {
modelValue = '';
}
var modelValue = ko.utils.unwrapObservable(valueAccessor()) ?? '';
if (elementValueBeforeEvent !== undefined && modelValue === elementValueBeforeEvent) {
setTimeout(updateView, 4);

View file

@ -17,8 +17,8 @@ ca(d,b)),notify:(a,b)=>{a.ka="always"==b?null:L}};class ia{constructor(a,b,d){th
var g=new ia(e,b?a.bind(b):a,()=>{e.S.get(d).delete(g);e.Ia?.(d)});e.Ja?.(d);e.S.has(d)||e.S.set(d,new Set);e.S.get(d).add(g);return g},B(a,b){b=b||"change";"change"===b&&this.Ea();if(this.na(b)){b="change"===b&&this.Fb||new Set(this.S.get(b));try{c.u.ob(),b.forEach(d=>{d.Ha||d.eb(a)})}finally{c.u.end()}}},ya(){return this.jb},Rb(a){return this.ya()!==a},Ea(){++this.jb},Da(a){var b=this,d=c.W(b),e,g,l,f,h;b.ra||(b.ra=b.B,b.B=(n,p)=>{p&&"change"!==p?"beforeChange"===p?b.gb(n):b.ra(n,p):b.hb(n)});var k=
a(()=>{b.ea=!1;d&&f===b&&(f=b.fb?b.fb():b());var n=g||h&&b.Ba(l,f);h=g=e=!1;n&&b.ra(l=f)});b.hb=(n,p)=>{p&&b.ea||(h=!p);b.Fb=new Set(b.S.get("change"));b.ea=e=!0;f=n;k()};b.gb=n=>{e||(l=n,b.ra(n,"beforeChange"))};b.ib=()=>{h=!0};b.Hb=()=>{b.Ba(l,b.L(!0))&&(g=!0)}},na(a){return(this.S.get(a)||[]).size},Ba(a,b){return!this.ka||!this.ka(a,b)},toString:()=>"[object Object]",extend:function(a){var b=this;a&&c.g.K(a,(d,e)=>{d=c.extenders[d];"function"==typeof d&&(b=d(b,e)||b)});return b}};c.R.fn=Object.setPrototypeOf(O,
Function.prototype);c.Vb=a=>"function"==typeof a?.subscribe&&"function"==typeof a.B;(()=>{let a=[],b,d=0;c.u={ob:e=>{a.push(b);b=e},end:()=>b=a.pop(),Ab:e=>{if(b){if(!c.Vb(e))throw Error("Only subscribable things can act as dependencies");b.Jb.call(b.Kb,e,e.Gb||(e.Gb=++d))}},I(e,g,l){try{return a.push(b),b=void 0,e.apply(g,l||[])}finally{b=a.pop()}},ma:()=>b?.o.ma(),Ca:()=>b?.Ca,o:()=>b?.o}})();const B=Symbol("_latestValue");c.$=a=>{function b(){if(0<arguments.length)return b.Ba(b[B],arguments[0])&&
(b.cb(),b[B]=arguments[0],b.valueHasMutated()),this;c.u.Ab(b);return b[B]}b[B]=a;Object.defineProperty(b,"length",{get:()=>null==b[B]?void 0:b[B].length});c.R.fn.init(b);return Object.setPrototypeOf(b,H)};var H={toJSON:function(){let a=this[B];return a?.toJSON?.()||a},ka:L,L(){return this[B]},valueHasMutated:function(){this.B(this[B],"spectate");this.B(this[B])},cb(){this.B(this[B],"beforeChange")}};Object.setPrototypeOf(H,c.R.fn);var D=c.$.Zb="__ko_proto__";H[D]=c.$;c.W=a=>{if((a="function"==typeof a&&
a[D])&&a!==H[D]&&a!==c.o.fn[D])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!a};c.wb=a=>"function"==typeof a&&(a[D]===H[D]||a[D]===c.o.fn[D]&&a.Sb);c.P("observable",c.$);c.P("isObservable",c.W);c.P("observable.fn",H);c.observableArray=a=>{a=a||[];if(!Array.isArray(a))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return Object.setPrototypeOf(c.$(a),c.observableArray.fn).extend({trackArrayChanges:!0})};
(b.cb(),b[B]=arguments[0],b.valueHasMutated()),this;c.u.Ab(b);return b[B]}b[B]=a;Object.defineProperty(b,"length",{get:()=>b[B]?.length});c.R.fn.init(b);return Object.setPrototypeOf(b,H)};var H={toJSON:function(){let a=this[B];return a?.toJSON?.()||a},ka:L,L(){return this[B]},valueHasMutated:function(){this.B(this[B],"spectate");this.B(this[B])},cb(){this.B(this[B],"beforeChange")}};Object.setPrototypeOf(H,c.R.fn);var D=c.$.Zb="__ko_proto__";H[D]=c.$;c.W=a=>{if((a="function"==typeof a&&a[D])&&a!==
H[D]&&a!==c.o.fn[D])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!a};c.wb=a=>"function"==typeof a&&(a[D]===H[D]||a[D]===c.o.fn[D]&&a.Sb);c.P("observable",c.$);c.P("isObservable",c.W);c.P("observable.fn",H);c.observableArray=a=>{a=a||[];if(!Array.isArray(a))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return Object.setPrototypeOf(c.$(a),c.observableArray.fn).extend({trackArrayChanges:!0})};
const X=Symbol("IS_OBSERVABLE_ARRAY");c.observableArray.fn=Object.setPrototypeOf({[X]:1,remove:function(a){for(var b=this.L(),d=!1,e="function"!=typeof a||c.W(a)?f=>f===a:a,g=b.length;g--;){var l=b[g];if(e(l)){if(b[g]!==l)throw Error("Array modified during remove; cannot remove item");d||this.cb();d=!0;b.splice(g,1)}}d&&this.valueHasMutated()}},c.$.fn);Object.getOwnPropertyNames(Array.prototype).forEach(a=>{"function"===typeof Array.prototype[a]&&"constructor"!=a&&("copyWithin fill pop push reverse shift sort splice unshift".split(" ").includes(a)?
c.observableArray.fn[a]=function(...b){var d=this.L();this.cb();this.qb(d,a,b);b=d[a](...b);this.valueHasMutated();return b===d?this:b}:c.observableArray.fn[a]=function(...b){return this()[a](...b)})});c.isObservableArray=a=>!(!a||!a[X]);c.extenders.trackArrayChanges=(a,b)=>{function d(){if(k){var q=[].concat(a.L()||[]);if(a.na("arrayChange")){if(!l||1<k)l=c.g.rb(n,q,a.Ka);var r=l}n=q;l=null;k=0;r?.length&&a.B(r,"arrayChange")}}function e(){g?d():(g=!0,h=a.subscribe(()=>++k,null,"spectate"),n=[].concat(a.L()||
[]),l=null,f=a.subscribe(d))}a.Ka={};"object"==typeof b&&c.g.extend(a.Ka,b);a.Ka.sparse=!0;if(!a.qb){var g=!1,l=null,f,h,k=0,n,p=a.Ja,m=a.Ia;a.Ja=q=>{p?.call(a,q);"arrayChange"===q&&e()};a.Ia=q=>{m?.call(a,q);"arrayChange"!==q||a.na("arrayChange")||(f?.dispose(),h?.dispose(),h=f=null,g=!1,n=void 0)};a.qb=(q,r,t)=>{if(g&&!k){var u=[],y=q.length,v=t.length,z=0,A=(ja,ka,la)=>u[u.length]={status:ja,value:ka,index:la};switch(r){case "push":z=y;case "unshift":for(q=0;q<v;++q)A("added",t[q],z+q);break;case "pop":z=
@ -29,10 +29,10 @@ a)){var d=b[a];if(this.qa&&d.T.ea||d.T.Rb(d.ga))return!0}},dc(){this[x].Aa||this
c.u.ob({Kb:e,Jb:fa,o:this,Ca:d});b.v={};b.G=0;a:{try{var g=b.zb();break a}finally{c.u.end(),e.Ma&&!b.A&&c.g.K(e.va,ea),b.Y=b.V=!1}g=void 0}b.G?e=this.Ba(b.J,g):(this.dispose(),e=!0);e&&(b.A?this.Ea():this.B(b.J,"beforeChange"),b.J=g,this.B(b.J,"spectate"),!b.A&&a&&this.B(b.J),this.ib&&this.ib());d&&this.B(b.J,"awake");return e},L(a){var b=this[x];(b.V&&(a||!b.G)||b.A&&this.oa())&&this.U();return b.J},Da(a){var b=this;c.R.fn.Da.call(b,a);b.fb=()=>{b[x].A||(b[x].Y?b.U():b[x].V=!1);return b[x].J};b.qa=
d=>{b.gb(b[x].J);b[x].V=!0;d&&(b[x].Y=!0);b.hb(b,!d)}},dispose:function(){var a=this[x];!a.A&&a.v&&c.g.K(a.v,(b,d)=>d.dispose?.());a.s&&a.Oa&&c.g.N.Ya(a.s,a.Oa);a.v=void 0;a.G=0;a.X=!0;a.Y=!1;a.V=!1;a.A=!1;a.s=void 0;a.ia=void 0;a.zb=void 0}},ma={Ja(a){var b=this,d=b[x];if(!d.X&&d.A&&"change"==a){d.A=!1;if(d.Y||b.oa())d.v=null,d.G=0,b.U()&&b.Ea();else{var e=[];c.g.K(d.v,(g,l)=>e[l.fa]=g);e.forEach((g,l)=>{var f=d.v[g],h=b.Db(f.T);h.fa=l;h.ga=f.ga;d.v[g]=h});b.oa()&&b.U()&&b.Ea()}d.X||b.B(d.J,"awake")}},
Ia(a){var b=this[x];b.X||"change"!=a||this.na("change")||(c.g.K(b.v,(d,e)=>{e.dispose&&(b.v[d]={T:e.T,fa:e.fa,ga:e.ga},e.dispose())}),b.A=!0,this.B(void 0,"asleep"))},ya(){var a=this[x];a.A&&(a.Y||this.oa())&&this.U();return c.R.fn.ya.call(this)}};Object.setPrototypeOf(K,c.R.fn);var P=c.$.Zb;K[P]=c.o;c.o.fn=K;c.P("computed",c.o);c.isComputed=a=>"function"==typeof a&&a[P]===K[P];c.yb=a=>{if("function"===typeof a)return c.o(a,{pure:!0});a={...a,pure:!0};return c.o(a)};c.C={M:a=>{switch(a.nodeName){case "OPTION":return!0===
a.__ko__hasDomDataOptionValue__?c.g.l.get(a,c.i.options.Wa):a.value;case "SELECT":return 0<=a.selectedIndex?c.C.M(a.options[a.selectedIndex]):void 0;default:return a.value}},Fa:(a,b)=>{switch(a.nodeName){case "OPTION":"string"===typeof b?(c.g.l.set(a,c.i.options.Wa,void 0),delete a.__ko__hasDomDataOptionValue__,a.value=b):(c.g.l.set(a,c.i.options.Wa,b),a.__ko__hasDomDataOptionValue__=!0,a.value="number"===typeof b?b:"");break;case "SELECT":for(var d=-1,e=""===b||null==b,g=a.options.length,l;g--;)if(l=
c.C.M(a.options[g]),l==b||""===l&&e){d=g;break}if(0<=d||e&&1<a.size)a.selectedIndex=d;break;default:a.value=null==b?"":b}}};c.la=(()=>{var a=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),b=/[\])"'A-Za-z0-9_$]+$/,d={"in":1,"return":1,"typeof":1},e=g=>{g=c.g.Cb(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var l=[],f=g.match(a),h=[],k=0;if(1<f.length){for(var n=
0,p;p=f[n++];){var m=p.charCodeAt(0);if(44===m){if(0>=k){l.push(q&&h.length?{key:q,value:h.join("")}:{unknown:q||h.join("")});var q=k=0;h=[];continue}}else if(58===m){if(!k&&!q&&1===h.length){q=h.pop();continue}}else if(47===m&&1<p.length&&(47===p.charCodeAt(1)||42===p.charCodeAt(1)))continue;else 47===m&&n&&1<p.length?(m=f[n-1].match(b))&&!d[m[0]]&&(g=g.slice(g.indexOf(p)+1),f=g.match(a),n=-1,p="/"):40===m||123===m||91===m?++k:41===m||125===m||93===m?--k:q||h.length||34!==m&&39!==m||(p=p.slice(1,
-1));h.push(p)}if(0<k)throw Error("Unbalanced parentheses, braces, or brackets");}return l};return{ec:e,Yb:g=>{var l=[];e(g).forEach(f=>{l.push("'"+(f.key||f.unknown)+"':function(){return "+(f.value+" }"))});return l.join(",")},cc:(g,l)=>-1<g.findIndex(f=>f.key==l),Ga:(g,l,f,h,k)=>{if(g&&c.W(g))!c.wb(g)||k&&g.L()===h||g(h);else throw Error(`${f} , must be observable`);}}})();(()=>{function a(f){return 8==f.nodeType&&e.test(f.nodeValue)}function b(f){return 8==f.nodeType&&g.test(f.nodeValue)}function d(f,
a.__ko__hasDomDataOptionValue__?c.g.l.get(a,c.i.options.Wa):a.value;case "SELECT":return 0<=a.selectedIndex?c.C.M(a.options[a.selectedIndex]):void 0;default:return a.value}},Fa:(a,b)=>{switch(a.nodeName){case "OPTION":"string"===typeof b?(c.g.l.set(a,c.i.options.Wa,void 0),delete a.__ko__hasDomDataOptionValue__,a.value=b):(c.g.l.set(a,c.i.options.Wa,b),a.__ko__hasDomDataOptionValue__=!0,a.value="number"===typeof b?b:"");break;case "SELECT":for(var d=-1,e=""===(b??""),g=a.options.length,l;g--;)if(l=
c.C.M(a.options[g]),l==b||""===l&&e){d=g;break}if(0<=d||e&&1<a.size)a.selectedIndex=d;break;default:a.value=b??""}}};c.la=(()=>{var a=RegExp("\"(?:\\\\.|[^\"])*\"|'(?:\\\\.|[^'])*'|`(?:\\\\.|[^`])*`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.*\n|/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,\"'`{}()/:[\\]]*[^\\s,\"'`{}()/:[\\]]|[^\\s]","g"),b=/[\])"'A-Za-z0-9_$]+$/,d={"in":1,"return":1,"typeof":1},e=g=>{g=c.g.Cb(g);123===g.charCodeAt(0)&&(g=g.slice(1,-1));g+="\n,";var l=[],f=g.match(a),h=[],k=0;if(1<f.length){for(var n=0,
p;p=f[n++];){var m=p.charCodeAt(0);if(44===m){if(0>=k){l.push(q&&h.length?{key:q,value:h.join("")}:{unknown:q||h.join("")});var q=k=0;h=[];continue}}else if(58===m){if(!k&&!q&&1===h.length){q=h.pop();continue}}else if(47===m&&1<p.length&&(47===p.charCodeAt(1)||42===p.charCodeAt(1)))continue;else 47===m&&n&&1<p.length?(m=f[n-1].match(b))&&!d[m[0]]&&(g=g.slice(g.indexOf(p)+1),f=g.match(a),n=-1,p="/"):40===m||123===m||91===m?++k:41===m||125===m||93===m?--k:q||h.length||34!==m&&39!==m||(p=p.slice(1,-1));
h.push(p)}if(0<k)throw Error("Unbalanced parentheses, braces, or brackets");}return l};return{ec:e,Yb:g=>{var l=[];e(g).forEach(f=>{l.push("'"+(f.key||f.unknown)+"':function(){return "+(f.value+" }"))});return l.join(",")},cc:(g,l)=>-1<g.findIndex(f=>f.key==l),Ga:(g,l,f,h,k)=>{if(g&&c.W(g))!c.wb(g)||k&&g.L()===h||g(h);else throw Error(`${f} , must be observable`);}}})();(()=>{function a(f){return 8==f.nodeType&&e.test(f.nodeValue)}function b(f){return 8==f.nodeType&&g.test(f.nodeValue)}function d(f,
h){for(var k=f,n=1,p=[];k=k.nextSibling;){if(b(k)&&(c.g.l.set(k,l,!0),!--n))return p;p.push(k);a(k)&&++n}if(!h)throw Error("Cannot find closing comment tag to match: "+f.nodeValue);return null}var e=/^\s*ko(?:\s+([\s\S]+))?\s*$/,g=/^\s*\/ko\s*$/,l="__ko_matchedEndComment__";c.m={aa:{},childNodes:f=>a(f)?d(f):f.childNodes,ja:f=>{a(f)?(f=d(f))&&[...f].forEach(h=>c.removeNode(h)):c.g.Qa(f)},pa:(f,h)=>{a(f)?(c.m.ja(f),f.after(...h)):c.g.pa(f,h)},prepend:(f,h)=>{a(f)?f.nextSibling.before(h):f.prepend(h)},
Ub:(f,h,k)=>{k?k.after(h):c.m.prepend(f,h)},firstChild:f=>{if(a(f))return f=f.nextSibling,!f||b(f)?null:f;let h=f.firstChild;if(h&&b(h))throw Error("Found invalid end comment, as the first child of "+f);return h},nextSibling:f=>{if(a(f)){var h=d(f,void 0);f=h?(h.length?h[h.length-1]:f).nextSibling:null}if((h=f.nextSibling)&&b(h)){if(b(h)&&!c.g.l.get(h,l))throw Error("Found end comment without a matching opening comment, as child of "+f);return null}return h},Qb:a,ac:f=>(f=f.nodeValue.match(e))?f[1]:
null}})();const Y=new Map;c.pb=new class{Xb(a){switch(a.nodeType){case 1:return null!=a.getAttribute("data-bind");case 8:return c.m.Qb(a)}return!1}Ob(a,b){a:{switch(a.nodeType){case 1:var d=a.getAttribute("data-bind");break a;case 8:d=c.m.ac(a);break a}d=null}if(d)try{let g=Y.get(d);if(!g){var e="with($context){with($data||{}){return{"+c.la.Yb(d)+"}}}";g=new Function("$context","$element",e);Y.set(d,g)}return g(b,a)}catch(g){throw g.message="Unable to parse bindings.\nBindings value: "+d+"\nMessage: "+
@ -50,11 +50,11 @@ b,Q(a,b,!0))}};c.i.enable={update:(a,b)=>{(b=c.g.h(b()))&&a.disabled?a.removeAtt
c.i.foreach={init:(a,b)=>c.i.template.init(a,aa(b)),update:(a,b,d,e,g)=>c.i.template.update(a,aa(b),d,e,g)};c.m.aa.foreach=!0;c.i.hasfocus={init:(a,b,d)=>{var e=l=>{a.__ko_hasfocusUpdating=!0;l=a.ownerDocument.activeElement===a;c.la.Ga(b(),d,"hasfocus",l,!0);a.__ko_hasfocusLastValue=l;a.__ko_hasfocusUpdating=!1},g=e.bind(null,!0);e=e.bind(null,!1);a.addEventListener("focus",g);a.addEventListener("focusin",g);a.addEventListener("blur",e);a.addEventListener("focusout",e);a.__ko_hasfocusLastValue=!1},
update:(a,b)=>{b=!!c.g.h(b());a.__ko_hasfocusUpdating||a.__ko_hasfocusLastValue===b||(b?a.focus():a.blur())}};c.i.html={init:()=>({controlsDescendantBindings:!0}),update:(a,b)=>{c.g.Qa(a);b=c.g.h(b());if(null!=b){const d=G.createElement("template");d.innerHTML="string"!=typeof b?b.toString():b;a.appendChild(d.content)}}};(()=>{function a(b,d,e){c.i[b]={init:(g,l,f,h,k)=>{var n,p={};d&&(p={exportDependencies:!0});var m=f.has(c.j.ca);c.o(()=>{var q=c.g.h(l()),r=!e!==!q,t=!n;m&&(k=c.j.$a(g,k));if(r){p.dataDependency=
c.u.o();var u=d?k.createChildContext("function"==typeof q?q:l,p):c.u.ma()?k.extend(null,p):k}t&&c.u.ma()&&(n=c.g.ua(c.m.childNodes(g),!0));r?(t||c.m.pa(g,c.g.ua(n)),c.nb(u,g)):(c.m.ja(g),c.j.notify(g,c.j.F))},{s:g});return{controlsDescendantBindings:!0}}};c.m.aa[b]=!0}a("if");a("ifnot",!1,!0);a("with",!0)})();var ba={};c.i.options={init:a=>{if(!a.matches("SELECT"))throw Error("options binding applies only to SELECT elements");let b=a.length;for(;b--;)a.remove(b);return{controlsDescendantBindings:!0}},
update:(a,b,d)=>{var e=a.multiple,g=0!=a.length&&e?a.scrollTop:null,l=c.g.h(b()),f=[];b=()=>Array.from(a.options).filter(m=>m.selected);var h=(m,q,r)=>{var t=typeof q;return"function"==t?q(m):"string"==t?m[q]:r},k=(m,q)=>{f.length&&(m=f.includes(c.C.M(q[0])),q[0].selected=m,p&&!m&&c.u.I(c.g.Eb,null,[a,"change"]))};e?f=b().map(c.C.M):0<=a.selectedIndex&&f.push(c.C.M(a.options[a.selectedIndex]));if(l){Array.isArray(l)||(l=[l]);var n=l.filter(m=>m||null==m)}var p=!1;l=k;d.has("optionsAfterRender")&&
"function"==typeof d.get("optionsAfterRender")&&(l=(m,q)=>{k(m,q);c.u.I(d.get("optionsAfterRender"),null,[q[0],m!==ba?m:void 0])});c.g.Bb(a,n,(m,q,r)=>{r.length&&(f=r[0].selected?[c.C.M(r[0])]:[],p=!0);q=a.ownerDocument.createElement("option");m===ba?(c.g.Za(q),c.C.Fa(q,void 0)):(r=h(m,d.get("optionsValue"),m),c.C.Fa(q,c.g.h(r)),m=h(m,d.get("optionsText"),r),c.g.Za(q,m));return[q]},{},l);n=f.length;(e?n&&b().length<n:n&&0<=a.selectedIndex?c.C.M(a.options[a.selectedIndex])!==f[0]:n||0<=a.selectedIndex)&&
c.u.I(c.g.Eb,null,[a,"change"]);c.u.Ca()&&c.j.notify(a,c.j.F);g&&20<Math.abs(g-a.scrollTop)&&(a.scrollTop=g)}};c.i.options.Wa=c.g.l.Z();c.i.style={update:(a,b)=>{c.g.K(c.g.h(b()||{}),(d,e)=>{e=c.g.h(e);if(null==e||!1===e)e="";if(/^--/.test(d))a.style.setProperty(d,e);else{d=d.replace(/-(\w)/g,(l,f)=>f.toUpperCase());var g=a.style[d];a.style[d]=e;e===g||a.style[d]!=g||isNaN(e)||(a.style[d]=e+"px")}})}};c.i.submit={init:(a,b,d,e,g)=>{if("function"!=typeof b())throw Error("The value for a submit binding must be a function");
a.addEventListener("submit",l=>{var f=b();try{var h=f.call(g.$data,a)}finally{!0!==h&&l.preventDefault()}})}};c.i.text={init:()=>({controlsDescendantBindings:!0}),update:(a,b)=>{8===a.nodeType&&(a.text||a.after(a.text=G.createTextNode("")),a=a.text);c.g.Za(a,b())}};c.m.aa.text=!0;c.i.textInput={init:(a,b,d)=>{var e=a.value,g,l,f=()=>{clearTimeout(g);l=g=void 0;var k=a.value;e!==k&&(e=k,c.la.Ga(b(),d,"textInput",k))},h=()=>{var k=c.g.h(b());null==k&&(k="");void 0!==l&&k===l?setTimeout(h,4):a.value!==
k&&(a.value=k,e=a.value)};a.addEventListener("input",f);a.addEventListener("change",f);c.o(h,{s:a})}};c.i.value={init:(a,b,d)=>{var e=a.matches("SELECT"),g=a.matches("INPUT");if(!g||"checkbox"!=a.type&&"radio"!=a.type){var l=new Set,f=d.get("valueUpdate"),h=null,k=()=>{h=null;var m=b(),q=c.C.M(a);c.la.Ga(m,d,"value",q)};f&&("string"==typeof f?l.add(f):f.forEach(m=>l.add(m)),l.delete("change"));l.forEach(m=>{var q=k;(m||"").startsWith("after")&&(q=()=>{h=c.C.M(a);setTimeout(k,0)},m=m.slice(5));a.addEventListener(m,
update:(a,b,d)=>{var e=a.multiple,g=0!=a.length&&e?a.scrollTop:null,l=c.g.h(b()),f=[];b=()=>Array.from(a.options).filter(m=>m.selected);var h=(m,q,r)=>{var t=typeof q;return"function"==t?q(m):"string"==t?m[q]:r},k=(m,q)=>{f.length&&(m=f.includes(c.C.M(q[0])),q[0].selected=m,p&&!m&&c.u.I(c.g.Eb,null,[a,"change"]))};e?f=b().map(c.C.M):0<=a.selectedIndex&&f.push(c.C.M(a.options[a.selectedIndex]));if(l){Array.isArray(l)||(l=[l]);var n=l.filter(m=>m??1)}var p=!1;l=k;d.has("optionsAfterRender")&&"function"==
typeof d.get("optionsAfterRender")&&(l=(m,q)=>{k(m,q);c.u.I(d.get("optionsAfterRender"),null,[q[0],m!==ba?m:void 0])});c.g.Bb(a,n,(m,q,r)=>{r.length&&(f=r[0].selected?[c.C.M(r[0])]:[],p=!0);q=a.ownerDocument.createElement("option");m===ba?(c.g.Za(q),c.C.Fa(q,void 0)):(r=h(m,d.get("optionsValue"),m),c.C.Fa(q,c.g.h(r)),m=h(m,d.get("optionsText"),r),c.g.Za(q,m));return[q]},{},l);n=f.length;(e?n&&b().length<n:n&&0<=a.selectedIndex?c.C.M(a.options[a.selectedIndex])!==f[0]:n||0<=a.selectedIndex)&&c.u.I(c.g.Eb,
null,[a,"change"]);c.u.Ca()&&c.j.notify(a,c.j.F);g&&20<Math.abs(g-a.scrollTop)&&(a.scrollTop=g)}};c.i.options.Wa=c.g.l.Z();c.i.style={update:(a,b)=>{c.g.K(c.g.h(b()||{}),(d,e)=>{e=c.g.h(e);if(null==e||!1===e)e="";if(/^--/.test(d))a.style.setProperty(d,e);else{d=d.replace(/-(\w)/g,(l,f)=>f.toUpperCase());var g=a.style[d];a.style[d]=e;e===g||a.style[d]!=g||isNaN(e)||(a.style[d]=e+"px")}})}};c.i.submit={init:(a,b,d,e,g)=>{if("function"!=typeof b())throw Error("The value for a submit binding must be a function");
a.addEventListener("submit",l=>{var f=b();try{var h=f.call(g.$data,a)}finally{!0!==h&&l.preventDefault()}})}};c.i.text={init:()=>({controlsDescendantBindings:!0}),update:(a,b)=>{8===a.nodeType&&(a.text||a.after(a.text=G.createTextNode("")),a=a.text);c.g.Za(a,b())}};c.m.aa.text=!0;c.i.textInput={init:(a,b,d)=>{var e=a.value,g,l,f=()=>{clearTimeout(g);l=g=void 0;var k=a.value;e!==k&&(e=k,c.la.Ga(b(),d,"textInput",k))},h=()=>{var k=c.g.h(b())??"";void 0!==l&&k===l?setTimeout(h,4):a.value!==k&&(a.value=
k,e=a.value)};a.addEventListener("input",f);a.addEventListener("change",f);c.o(h,{s:a})}};c.i.value={init:(a,b,d)=>{var e=a.matches("SELECT"),g=a.matches("INPUT");if(!g||"checkbox"!=a.type&&"radio"!=a.type){var l=new Set,f=d.get("valueUpdate"),h=null,k=()=>{h=null;var m=b(),q=c.C.M(a);c.la.Ga(m,d,"value",q)};f&&("string"==typeof f?l.add(f):f.forEach(m=>l.add(m)),l.delete("change"));l.forEach(m=>{var q=k;(m||"").startsWith("after")&&(q=()=>{h=c.C.M(a);setTimeout(k,0)},m=m.slice(5));a.addEventListener(m,
q)});var n=g&&"file"==a.type?()=>{var m=c.g.h(b());null==m||""===m?a.value="":c.u.I(k)}:()=>{var m=c.g.h(b()),q=c.C.M(a);if(null!==h&&m===h)setTimeout(n,0);else if(m!==q||void 0===q)e?(c.C.Fa(a,m),m!==c.C.M(a)&&c.u.I(k)):c.C.Fa(a,m)};if(e){var p;c.j.subscribe(a,c.j.F,()=>{p?d.get("valueAllowUnset")?n():k():(a.addEventListener("change",k),p=c.o(n,{s:a}))},null,{notifyImmediately:!0})}else a.addEventListener("change",k),c.o(n,{s:a})}else c.applyBindingAccessorsToNode(a,{checkedValue:b})},update:()=>
{}};c.i.visible={update:(a,b)=>{b=c.g.h(b());var d="none"!=a.style.display;b&&!d?a.style.display="":d&&!b&&(a.style.display="none")}};c.i.hidden={update:(a,b)=>a.hidden=!!c.g.h(b())};(function(a){c.i[a]={init:function(b,d,e,g,l){return c.i.event.init.call(this,b,()=>({[a]:d()}),e,g,l)}}})("click");(()=>{let a=c.g.l.Z();class b{constructor(e){this.Na=e}Ua(...e){let g=this.Na;if(!e.length)return c.g.l.get(g,a)||(11===this.H?g.content:1===this.H?g:void 0);c.g.l.set(g,a,e[0])}}class d extends b{constructor(e){super(e);
e&&(this.H=e.matches("TEMPLATE")&&e.content?e.content.nodeType:1)}}c.bb={Na:d,lb:b}})();(()=>{const a=(h,k,n)=>{var p;for(k=c.m.nextSibling(k);h&&(p=h)!==k;)h=c.m.nextSibling(p),n(p,h)},b=(h,k)=>{if(h.length){var n=h[0],p=n.parentNode;a(n,h[h.length-1],m=>{1!==m.nodeType&&8!==m.nodeType||c.mb(k,m)});c.g.xa(h,p)}},d=(h,k,n,p)=>{var m=(h&&(h.nodeType?h:0<h.length?h[0]:null)||n||{}).ownerDocument;if("string"==typeof n){m=m||G;m=m.getElementById(n);if(!m)throw Error("Cannot find template with ID "+n);

View file

@ -20,10 +20,10 @@
"preprocess": "build/build.sh",
"html": "spec/runner.html?src=build/output/knockout-latest.js&testling=true",
"browsers": [
"chrome/69..latest",
"firefox/69..latest",
"safari/12..latest",
"opera/56..latest"
"chrome/80..latest",
"firefox/78..latest",
"safari/13..latest",
"opera/67..latest"
]
},
"licenses": [

View file

@ -20,7 +20,6 @@ ko.bindingHandlers['options'] = {
previousScrollTop = (!selectWasPreviouslyEmpty && multiple) ? element.scrollTop : null,
unwrappedArray = ko.utils.unwrapObservable(valueAccessor()),
arrayToDomNodeChildrenOptions = {},
captionValue,
filteredArray,
previousSelectedValues = [],
@ -61,7 +60,7 @@ ko.bindingHandlers['options'] = {
unwrappedArray = [unwrappedArray];
// Filter out any entries marked as destroyed
filteredArray = unwrappedArray.filter(item => item || item == null);
filteredArray = unwrappedArray.filter(item => item ?? 1);
} else {
// If a falsy value is provided (e.g. null), we'll simply empty the select element
}

View file

@ -18,11 +18,7 @@ ko.bindingHandlers['textInput'] = {
};
var updateView = () => {
var modelValue = ko.utils.unwrapObservable(valueAccessor());
if (modelValue == null) {
modelValue = '';
}
var modelValue = ko.utils.unwrapObservable(valueAccessor()) ?? '';
if (elementValueBeforeEvent !== undefined && modelValue === elementValueBeforeEvent) {
setTimeout(updateView, 4);

View file

@ -39,7 +39,7 @@ ko.selectExtensions = {
break;
case 'SELECT':
// A blank string or null value will select the caption
var selection = -1, noValue = ("" === value || null == value),
var selection = -1, noValue = ("" === (value ?? "")),
i = element.options.length, optionValue;
while (i--) {
optionValue = ko.selectExtensions.readValue(element.options[i]);
@ -54,7 +54,7 @@ ko.selectExtensions = {
}
break;
default:
element.value = (value == null) ? "" : value;
element.value = value ?? "";
break;
}
}

View file

@ -23,7 +23,7 @@ ko.observable = initialValue => {
observable[observableLatestValue] = initialValue;
Object.defineProperty(observable, length, {
get: () => null == observable[observableLatestValue] ? undefined : observable[observableLatestValue][length]
get: () => observable[observableLatestValue]?.[length]
});
// Inherit from 'subscribable'