maquette 4.1.0 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -127,14 +127,25 @@ var nodeToRemove = function (vNode) {
127
127
  scheduleNodeRemoval(vNode);
128
128
  }
129
129
  };
130
+ var vnodeOnlyProps = [
131
+ "afterCreate",
132
+ "afterUpdate",
133
+ "afterRemoved",
134
+ "enterAnimation",
135
+ "exitAnimation",
136
+ "updateAnimation",
137
+ ];
138
+ function filterVNodeOnlyProps(name) {
139
+ return !vnodeOnlyProps.includes(name);
140
+ }
130
141
  var setProperties = function (domNode, properties, projectionOptions) {
131
142
  if (!properties) {
132
143
  return;
133
144
  }
134
145
  var eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;
135
- var propNames = Object.keys(properties);
146
+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
136
147
  var propCount = propNames.length;
137
- var _loop_1 = function (i) {
148
+ for (var i = 0; i < propCount; i++) {
138
149
  var propName = propNames[i];
139
150
  var propValue = properties[propName];
140
151
  if (propName === "className") {
@@ -188,18 +199,8 @@ var setProperties = function (domNode, properties, projectionOptions) {
188
199
  if (eventHandlerInterceptor) {
189
200
  propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers
190
201
  }
191
- if (propName === "oninput") {
192
- (function () {
193
- // record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput
194
- var oldPropValue = propValue;
195
- propValue = function (evt) {
196
- oldPropValue.apply(this, [evt]);
197
- evt.target["oninput-value"] = evt.target.value; // may be HTMLTextAreaElement as well
198
- };
199
- })();
200
- }
201
- domNode[propName] = propValue;
202
202
  }
203
+ domNode[propName] = propValue;
203
204
  }
204
205
  else if (projectionOptions.namespace === NAMESPACE_SVG) {
205
206
  if (propName === "href") {
@@ -217,9 +218,6 @@ var setProperties = function (domNode, properties, projectionOptions) {
217
218
  domNode[propName] = propValue;
218
219
  }
219
220
  }
220
- };
221
- for (var i = 0; i < propCount; i++) {
222
- _loop_1(i);
223
221
  }
224
222
  };
225
223
  var addChildren = function (domNode, children, projectionOptions) {
@@ -334,7 +332,7 @@ var updateProperties = function (domNode, previousProperties, properties, projec
334
332
  return;
335
333
  }
336
334
  var propertiesUpdated = false;
337
- var propNames = Object.keys(properties);
335
+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
338
336
  var propCount = propNames.length;
339
337
  for (var i = 0; i < propCount; i++) {
340
338
  var propName = propNames[i];
@@ -395,13 +393,10 @@ var updateProperties = function (domNode, previousProperties, properties, projec
395
393
  // value can be manipulated by the user directly and using event.preventDefault() is not an option
396
394
  var domValue = domNode[propName];
397
395
  if (domValue !== propValue && // The 'value' in the DOM tree !== newValue
398
- (domNode["oninput-value"]
399
- ? domValue === domNode["oninput-value"] // If the last reported value to 'oninput' does not match domValue, do nothing and wait for oninput
400
- : propValue !== previousValue) // Only update the value if the vdom changed
396
+ propValue !== previousValue // Only update the value if the vdom changed
401
397
  ) {
402
398
  // The edge cases are described in the tests
403
399
  domNode[propName] = propValue; // Reset the value, even if the virtual DOM did not change
404
- domNode["oninput-value"] = undefined;
405
400
  } // else do not update the domNode, otherwise the cursor position would be changed
406
401
  if (propValue !== previousValue) {
407
402
  propertiesUpdated = true;
@@ -131,14 +131,25 @@
131
131
  scheduleNodeRemoval(vNode);
132
132
  }
133
133
  };
134
+ var vnodeOnlyProps = [
135
+ "afterCreate",
136
+ "afterUpdate",
137
+ "afterRemoved",
138
+ "enterAnimation",
139
+ "exitAnimation",
140
+ "updateAnimation",
141
+ ];
142
+ function filterVNodeOnlyProps(name) {
143
+ return !vnodeOnlyProps.includes(name);
144
+ }
134
145
  var setProperties = function (domNode, properties, projectionOptions) {
135
146
  if (!properties) {
136
147
  return;
137
148
  }
138
149
  var eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;
139
- var propNames = Object.keys(properties);
150
+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
140
151
  var propCount = propNames.length;
141
- var _loop_1 = function (i) {
152
+ for (var i = 0; i < propCount; i++) {
142
153
  var propName = propNames[i];
143
154
  var propValue = properties[propName];
144
155
  if (propName === "className") {
@@ -192,18 +203,8 @@
192
203
  if (eventHandlerInterceptor) {
193
204
  propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers
194
205
  }
195
- if (propName === "oninput") {
196
- (function () {
197
- // record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput
198
- var oldPropValue = propValue;
199
- propValue = function (evt) {
200
- oldPropValue.apply(this, [evt]);
201
- evt.target["oninput-value"] = evt.target.value; // may be HTMLTextAreaElement as well
202
- };
203
- })();
204
- }
205
- domNode[propName] = propValue;
206
206
  }
207
+ domNode[propName] = propValue;
207
208
  }
208
209
  else if (projectionOptions.namespace === NAMESPACE_SVG) {
209
210
  if (propName === "href") {
@@ -221,9 +222,6 @@
221
222
  domNode[propName] = propValue;
222
223
  }
223
224
  }
224
- };
225
- for (var i = 0; i < propCount; i++) {
226
- _loop_1(i);
227
225
  }
228
226
  };
229
227
  var addChildren = function (domNode, children, projectionOptions) {
@@ -338,7 +336,7 @@
338
336
  return;
339
337
  }
340
338
  var propertiesUpdated = false;
341
- var propNames = Object.keys(properties);
339
+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
342
340
  var propCount = propNames.length;
343
341
  for (var i = 0; i < propCount; i++) {
344
342
  var propName = propNames[i];
@@ -399,13 +397,10 @@
399
397
  // value can be manipulated by the user directly and using event.preventDefault() is not an option
400
398
  var domValue = domNode[propName];
401
399
  if (domValue !== propValue && // The 'value' in the DOM tree !== newValue
402
- (domNode["oninput-value"]
403
- ? domValue === domNode["oninput-value"] // If the last reported value to 'oninput' does not match domValue, do nothing and wait for oninput
404
- : propValue !== previousValue) // Only update the value if the vdom changed
400
+ propValue !== previousValue // Only update the value if the vdom changed
405
401
  ) {
406
402
  // The edge cases are described in the tests
407
403
  domNode[propName] = propValue; // Reset the value, even if the virtual DOM did not change
408
- domNode["oninput-value"] = undefined;
409
404
  } // else do not update the domNode, otherwise the cursor position would be changed
410
405
  if (propValue !== previousValue) {
411
406
  propertiesUpdated = true;
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).maquette={})}(this,function(e){"use strict";function l(t,r){var o={};return Object.keys(t).forEach(function(e){o[e]=t[e]}),r&&Object.keys(r).forEach(function(e){o[e]=r[e]}),o}function t(e){(e.children||[]).forEach(t),e.properties&&e.properties.afterRemoved&&e.properties.afterRemoved.call(e.properties.bind||e.properties,e.domNode)}function r(){p=!1,a.forEach(t),a.length=0}function o(e){a.push(e),p||(p=!0,"undefined"!=typeof window&&"requestIdleCallback"in window?window.requestIdleCallback(r,{timeout:16}):setTimeout(r,16))}function f(e,t,r){c(e,t.children,r),t.text&&(e.textContent=t.text),s(e,t.properties,r),t.properties&&t.properties.afterCreate&&t.properties.afterCreate.call(t.properties.bind||t.properties,e,r,t.vnodeSelector,t.properties,t.children)}function n(t,r){return{getLastRender:function(){return t},update:function(e){if(t.vnodeSelector!==e.vnodeSelector)throw Error("The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)");x(t,t=e,r)},domNode:t.domNode}}function d(e){return l(u,e)}var i="http://www.w3.org/",S="".concat(i,"2000/svg"),w="".concat(i,"1999/xlink"),v=[],h=function(e,t){return e.vnodeSelector===t.vnodeSelector&&(e.properties&&t.properties?e.properties.key===t.properties.key&&e.properties.bind===t.properties.bind:!e.properties&&!t.properties)},E=function(e){if("string"!=typeof e)throw Error("Style values must be strings")},m=function(e,t,r){if(""!==t.vnodeSelector)for(var o=r;o<e.length;o++)if(h(e[o],t))return o;return-1},g=function(e,t,r,o){var n=e[t];if(""!==n.vnodeSelector){var i=n.properties;if(!(i&&(void 0===i.key?i.bind:i.key)))for(var d=0;d<e.length;d++)if(d!==t){var a=e[d];if(h(a,n))throw{error:Error("".concat(r.vnodeSelector," had a ").concat(n.vnodeSelector," child ").concat("added"===o?o:"removed",", but there is now more than one. You must add unique key properties to make them distinguishable.")),parentNode:r,childNode:n}}}},y=function(e){var t;e.properties&&(t=e.properties.enterAnimation)&&t(e.domNode,e.properties)},a=[],p=!1,N=function(e){var t=e.domNode;if(e.properties){var r=e.properties.exitAnimation;if(r)return t.style.pointerEvents="none",void r(t,function(){t.parentNode&&(t.parentNode.removeChild(t),o(e))},e.properties)}t.parentNode&&(t.parentNode.removeChild(t),o(e))},s=function(g,y,N){if(y)for(var b=N.eventHandlerInterceptor,x=Object.keys(y),e=x.length,A=0;A<e;A++)!function(){var e,t,r=x[A],o=y[r];if("className"===r)throw Error('Property "className" is not supported, use "class".');if("class"===r)k(g,o,!0);else if("classes"===r)for(var n=Object.keys(o),i=n.length,d=0;d<i;d++){var a=n[d];o[a]&&g.classList.add(a)}else if("styles"===r)for(var p=Object.keys(o),s=p.length,d=0;d<s;d++){var c=p[d],l=o[c];l&&(E(l),N.styleApplyer(g,c,l))}else if("on"===r&&o)for(var f=0,u=Object.entries(y.on);f<u.length;f++){var v=u[f],h=v[0],v=v[1],m="function"==typeof v?v:v.listener;(m=b?b(h,m,g,y):m)&&g.addEventListener(h,m,"function"==typeof v?void 0:v.options)}else"key"!==r&&null!=o&&("function"==(e=typeof o)?r.lastIndexOf("on",0)||(b&&(o=b(r,o,g,y)),"oninput"===r&&(t=o,o=function(e){t.call(this,e),e.target["oninput-value"]=e.target.value}),g[r]=o):N.namespace===S?"href"===r?g.setAttributeNS(w,r,o):g.setAttribute(r,o):"string"==e&&"value"!==r&&"innerHTML"!==r?g.setAttribute(r,o):g[r]=o)}()},c=function(e,t,r){if(t)for(var o=0,n=t;o<n.length;o++){var i=n[o];b(i,e,void 0,r)}},b=function(e,t,r,o){var n,i=0,d=e.vnodeSelector,a=t.ownerDocument;if(""===d)e.domNode?e.domNode.nodeValue=e.text:(n=e.domNode=a.createTextNode(e.text),void 0!==r?t.insertBefore(n,r):t.appendChild(n));else{for(var p=0;p<=d.length;++p){var s,c=d[0|p]||"";p!==d.length&&"."!=c&&"#"!=c||(c=d[0|i-1]||"",s=d.slice(i,p),"."==c?n.classList.add(s):"#"==c?n.id=s:(void 0!==(o="svg"===s?l(o,{namespace:S}):o).namespace?n=e.domNode=a.createElementNS(o.namespace,s):(n=e.domNode=e.domNode||(null!=(c=e.properties)&&c.is?a.createElement(s,{is:e.properties.is}):a.createElement(s)),"input"===s&&e.properties&&void 0!==e.properties.type&&n.setAttribute("type",e.properties.type)),void 0!==r?t.insertBefore(n,r):n.parentNode!==t&&t.appendChild(n)),i=p+1)}f(n,e,o)}},k=function(t,e,r){e&&e.split(" ").forEach(function(e){e&&t.classList.toggle(e,r)})},x=function(e,t,r){var o=e.domNode;if(e!==t){var n,i=!1;if(""===t.vnodeSelector){if(t.text!==e.text)return n=o.ownerDocument.createTextNode(t.text),o.parentNode.replaceChild(n,o),t.domNode=n,!0;t.domNode=o}else t.vnodeSelector.lastIndexOf("svg",0)||(r=l(r,{namespace:S})),e.text!==t.text&&(i=!0,void 0===t.text?o.removeChild(o.firstChild):o.textContent=t.text),t.domNode=o,i=function(e,t,r,o,n){if(r===o)return!1;for(var i,d=(r=r||v).length,a=(o=o||v).length,p=0,s=0,c=!1;s<a;){var l=p<d?r[p]:void 0,f=o[s];if(void 0!==l&&h(l,f))c=x(l,f,n)||c,p++;else{var u=m(r,f,p+1);if(u<0)b(f,t,p<d?r[p].domNode:void 0,n),y(f),g(o,s,e,"added");else{for(i=p;i<u;i++)N(r[i]),g(r,i,e,"removed");c=x(r[u],f,n)||c,p=u+1}}s++}if(p<d)for(i=p;i<d;i++)N(r[i]),g(r,i,e,"removed");return c}(t,o,e.children,t.children,r)||i,i=function(e,t,r,o){if(r){for(var n=!1,i=Object.keys(r),d=i.length,a=0;a<d;a++){var p,s=i[a],c=r[s],l=t[s];if("class"===s)l!==c&&(k(e,l,!1),k(e,c,!0));else if("classes"===s)for(var f=e.classList,u=Object.keys(c),v=u.length,h=0;h<v;h++){var m=u[h],g=!!c[m];g!=!!l[m]&&(n=!0,g?f.add(m):f.remove(m))}else if("styles"===s)for(var y=Object.keys(c),N=y.length,h=0;h<N;h++){var b=y[h],x=c[b];x!==l[b]&&(n=!0,x?(E(x),o.styleApplyer(e,b,x)):o.styleApplyer(e,b,""))}else c||"string"!=typeof l||(c=""),"value"===s?((p=e[s])!==c&&(e["oninput-value"]?p===e["oninput-value"]:c!==l)&&(e[s]=c,e["oninput-value"]=void 0),c!==l&&(n=!0)):c===l||"function"==(p=typeof c)&&o.eventHandlerInterceptor||(o.namespace===S?"href"===s?e.setAttributeNS(w,s,c):e.setAttribute(s,c):"string"==p&&"innerHTML"!==s?"role"===s&&""===c?e.removeAttribute(s):e.setAttribute(s,c):e[s]!==c&&(e[s]=c),n=!0)}return n}}(o,e.properties,t.properties,r)||i,t.properties&&t.properties.afterUpdate&&t.properties.afterUpdate.call(t.properties.bind||t.properties,o,r,t.vnodeSelector,t.properties,t.children);i&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(o,t.properties,e.properties)}return!1},u={namespace:void 0,performanceLogger:function(){},eventHandlerInterceptor:void 0,styleApplyer:function(e,t,r){"-"==(t[0]||"")?e.style.setProperty(t,r):e.style[t]=r}},A={create:function(e,t){return t=d(t),b(e,document.createElement("div"),void 0,t),n(e,t)},append:function(e,t,r){return r=d(r),b(t,e,void 0,r),n(t,r)},insertBefore:function(e,t,r){return r=d(r),b(t,e.parentNode,e,r),n(t,r)},merge:function(e,t,r){return r=d(r),f(t.domNode=e,t,r),n(t,r)},replace:function(e,t,r){return r=d(r),b(t,e.parentNode,e,r),e.parentNode.removeChild(e),n(t,r)}},C=Array.prototype.find?function(e,t){return e.find(t)}:function(e,t){return e.filter(t)[0]};e.createCache=function(){var o,n;return{invalidate:function(){o=n=void 0},result:function(e,t){if(o)for(var r=0;r<e.length;r++)o[r]!==e[r]&&(n=void 0);return n||(n=t(),o=e),n}}},e.createMapping=function(c,l,f){var u=[],v=[];return{results:v,map:function(e){for(var t=e.map(c),r=v.slice(),o=0,n=0;n<e.length;n++){var i=e[n],d=t[n];if(d===u[o])v[n]=r[o],f(i,r[o],n),o++;else{for(var a=!1,p=1;p<u.length+1;p++){var s=(o+p)%u.length;if(u[s]===d){v[n]=r[s],f(e[n],r[s],n),o=1+s,a=!0;break}}a||(v[n]=l(i,n))}}v.length=e.length,u=t}}},e.createProjector=function(e){function r(e,t,r){var i,d,a;function n(e){a("domEvent",e);var t,r,o=i,n=function(e,t){for(var r=[];e&&e!==t;)r.push(e),e=e.parentNode;return r}(e.currentTarget,o.domNode),o=(n.reverse(),o=o.getLastRender(),r=o,n.forEach(function(t){r=r&&r.children?C(r.children,function(e){return e.domNode===t}):void 0}),r);return d.scheduleRender(),o&&(t=(null!=(n=null!=(n=o.properties["on".concat(e.type)])?n:o.properties.on[e.type].listener)?n:o.properties.on[e.type]).apply(o.properties.bind||this,arguments)),a("domEventProcessed",e),t}p.eventHandlerInterceptor=(d=f,a=s,function(e,t,r,o){return n}),i=e(t,r(),p),c.push(i),l.push(r)}function t(){if(o=void 0,n){n=!1,s("renderStart",void 0);for(var e=0;e<c.length;e++){var t=l[e]();s("rendered",void 0),c[e].update(t),s("patched",void 0)}s("renderDone",void 0),n=!0}}var o,p=d(e),s=p.performanceLogger,n=!0,i=!1,c=[],l=[],f={renderNow:t,scheduleRender:function(){o||i||(o=requestAnimationFrame(t))},stop:function(){o&&(cancelAnimationFrame(o),o=void 0),i=!0},resume:function(){n=!(i=!1),f.scheduleRender()},append:function(e,t){r(A.append,e,t)},insertBefore:function(e,t){r(A.insertBefore,e,t)},merge:function(e,t){r(A.merge,e,t)},replace:function(e,t){r(A.replace,e,t)},detach:function(e){for(var t=0;t<l.length;t++)if(l[t]===e)return l.splice(t,1),c.splice(t,1)[0];throw Error("renderFunction was not found")}};return f},e.dom=A,e.h=function(e,t,r){if(Array.isArray(t))r=t,t=void 0;else if(t&&("string"==typeof t||t.vnodeSelector)||r&&("string"==typeof r||r.vnodeSelector))throw Error("h called with invalid arguments");var o,n;return r&&1===r.length&&"string"==typeof r[0]?o=r[0]:r&&(function e(t,r,o){for(var n=0,i=r.length;n<i;n++){var d=r[n];Array.isArray(d)?e(t,d,o):null!=d&&!1!==d&&("string"==typeof d&&(d={vnodeSelector:"",properties:void 0,children:void 0,text:d.toString(),domNode:null}),o.push(d))}}(e,r,n=[]),0===n.length)&&(n=void 0),{vnodeSelector:e,properties:t,children:n,text:""===o?void 0:o,domNode:null}}});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).maquette={})}(this,function(e){"use strict";function l(t,r){var o={};return Object.keys(t).forEach(function(e){o[e]=t[e]}),r&&Object.keys(r).forEach(function(e){o[e]=r[e]}),o}function t(e){(e.children||[]).forEach(t),e.properties&&e.properties.afterRemoved&&e.properties.afterRemoved.call(e.properties.bind||e.properties,e.domNode)}function r(){d=!1,i.forEach(t),i.length=0}function o(e){i.push(e),d||(d=!0,"undefined"!=typeof window&&"requestIdleCallback"in window?window.requestIdleCallback(r,{timeout:16}):setTimeout(r,16))}var n="http://www.w3.org/",S="".concat(n,"2000/svg"),w="".concat(n,"1999/xlink"),v=[],h=function(e,t){return e.vnodeSelector===t.vnodeSelector&&(e.properties&&t.properties?e.properties.key===t.properties.key&&e.properties.bind===t.properties.bind:!e.properties&&!t.properties)},E=function(e){if("string"!=typeof e)throw Error("Style values must be strings")},m=function(e,t,r){if(""!==t.vnodeSelector)for(var o=r;o<e.length;o++)if(h(e[o],t))return o;return-1},g=function(e,t,r,o){var n=e[t];if(""!==n.vnodeSelector){var i=n.properties;if(!(i&&(void 0===i.key?i.bind:i.key)))for(var d=0;d<e.length;d++)if(d!==t){var a=e[d];if(h(a,n))throw{error:Error("".concat(r.vnodeSelector," had a ").concat(n.vnodeSelector," child ").concat("added"===o?o:"removed",", but there is now more than one. You must add unique key properties to make them distinguishable.")),parentNode:r,childNode:n}}}},y=function(e){var t;e.properties&&(t=e.properties.enterAnimation)&&t(e.domNode,e.properties)},i=[],d=!1,N=function(e){var t=e.domNode;if(e.properties){var r=e.properties.exitAnimation;if(r)return t.style.pointerEvents="none",void r(t,function(){t.parentNode&&(t.parentNode.removeChild(t),o(e))},e.properties)}t.parentNode&&(t.parentNode.removeChild(t),o(e))},a=["afterCreate","afterUpdate","afterRemoved","enterAnimation","exitAnimation","updateAnimation"];function k(e){return!a.includes(e)}function f(e,t,r){c(e,t.children,r),t.text&&(e.textContent=t.text),p(e,t.properties,r),t.properties&&t.properties.afterCreate&&t.properties.afterCreate.call(t.properties.bind||t.properties,e,r,t.vnodeSelector,t.properties,t.children)}function s(t,r){return{getLastRender:function(){return t},update:function(e){if(t.vnodeSelector!==e.vnodeSelector)throw Error("The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)");x(t,t=e,r)},domNode:t.domNode}}function u(e){return l(A,e)}var p=function(e,t,r){if(t)for(var o=r.eventHandlerInterceptor,n=Object.keys(t).filter(k),i=n.length,d=0;d<i;d++){var a,s=n[d],p=t[s];if("className"===s)throw Error('Property "className" is not supported, use "class".');if("class"===s)C(e,p,!0);else if("classes"===s)for(var c=Object.keys(p),l=c.length,f=0;f<l;f++){var u=c[f];p[u]&&e.classList.add(u)}else if("styles"===s)for(var v=Object.keys(p),h=v.length,f=0;f<h;f++){var m=v[f],g=p[m];g&&(E(g),r.styleApplyer(e,m,g))}else if("on"===s&&p)for(var y=0,N=Object.entries(t.on);y<N.length;y++){var b=N[y],x=b[0],b=b[1],A="function"==typeof b?b:b.listener;(A=o?o(x,A,e,t):A)&&e.addEventListener(x,A,"function"==typeof b?void 0:b.options)}else"key"!==s&&null!=p&&("function"==(a=typeof p)?(s.lastIndexOf("on",0)||o&&(p=o(s,p,e,t)),e[s]=p):r.namespace===S?"href"===s?e.setAttributeNS(w,s,p):e.setAttribute(s,p):"string"==a&&"value"!==s&&"innerHTML"!==s?e.setAttribute(s,p):e[s]=p)}},c=function(e,t,r){if(t)for(var o=0,n=t;o<n.length;o++){var i=n[o];b(i,e,void 0,r)}},b=function(e,t,r,o){var n,i=0,d=e.vnodeSelector,a=t.ownerDocument;if(""===d)e.domNode?e.domNode.nodeValue=e.text:(n=e.domNode=a.createTextNode(e.text),void 0!==r?t.insertBefore(n,r):t.appendChild(n));else{for(var s=0;s<=d.length;++s){var p,c=d[0|s]||"";s!==d.length&&"."!=c&&"#"!=c||(c=d[0|i-1]||"",p=d.slice(i,s),"."==c?n.classList.add(p):"#"==c?n.id=p:(void 0!==(o="svg"===p?l(o,{namespace:S}):o).namespace?n=e.domNode=a.createElementNS(o.namespace,p):(n=e.domNode=e.domNode||(null!=(c=e.properties)&&c.is?a.createElement(p,{is:e.properties.is}):a.createElement(p)),"input"===p&&e.properties&&void 0!==e.properties.type&&n.setAttribute("type",e.properties.type)),void 0!==r?t.insertBefore(n,r):n.parentNode!==t&&t.appendChild(n)),i=s+1)}f(n,e,o)}},C=function(t,e,r){e&&e.split(" ").forEach(function(e){e&&t.classList.toggle(e,r)})},x=function(e,t,r){var o=e.domNode;if(e!==t){var n,i=!1;if(""===t.vnodeSelector){if(t.text!==e.text)return n=o.ownerDocument.createTextNode(t.text),o.parentNode.replaceChild(n,o),t.domNode=n,!0;t.domNode=o}else t.vnodeSelector.lastIndexOf("svg",0)||(r=l(r,{namespace:S})),e.text!==t.text&&(i=!0,void 0===t.text?o.removeChild(o.firstChild):o.textContent=t.text),t.domNode=o,i=function(e,t,r,o,n){if(r===o)return!1;for(var i,d=(r=r||v).length,a=(o=o||v).length,s=0,p=0,c=!1;p<a;){var l=s<d?r[s]:void 0,f=o[p];if(void 0!==l&&h(l,f))c=x(l,f,n)||c,s++;else{var u=m(r,f,s+1);if(u<0)b(f,t,s<d?r[s].domNode:void 0,n),y(f),g(o,p,e,"added");else{for(i=s;i<u;i++)N(r[i]),g(r,i,e,"removed");c=x(r[u],f,n)||c,s=u+1}}p++}if(s<d)for(i=s;i<d;i++)N(r[i]),g(r,i,e,"removed");return c}(t,o,e.children,t.children,r)||i,i=function(e,t,r,o){if(r){for(var n=!1,i=Object.keys(r).filter(k),d=i.length,a=0;a<d;a++){var s,p=i[a],c=r[p],l=t[p];if("class"===p)l!==c&&(C(e,l,!1),C(e,c,!0));else if("classes"===p)for(var f=e.classList,u=Object.keys(c),v=u.length,h=0;h<v;h++){var m=u[h],g=!!c[m];g!=!!l[m]&&(n=!0,g?f.add(m):f.remove(m))}else if("styles"===p)for(var y=Object.keys(c),N=y.length,h=0;h<N;h++){var b=y[h],x=c[b];x!==l[b]&&(n=!0,x?(E(x),o.styleApplyer(e,b,x)):o.styleApplyer(e,b,""))}else c||"string"!=typeof l||(c=""),"value"===p?(e[p]!==c&&c!==l&&(e[p]=c),c!==l&&(n=!0)):c===l||"function"==(s=typeof c)&&o.eventHandlerInterceptor||(o.namespace===S?"href"===p?e.setAttributeNS(w,p,c):e.setAttribute(p,c):"string"==s&&"innerHTML"!==p?"role"===p&&""===c?e.removeAttribute(p):e.setAttribute(p,c):e[p]!==c&&(e[p]=c),n=!0)}return n}}(o,e.properties,t.properties,r)||i,t.properties&&t.properties.afterUpdate&&t.properties.afterUpdate.call(t.properties.bind||t.properties,o,r,t.vnodeSelector,t.properties,t.children);i&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(o,t.properties,e.properties)}return!1},A={namespace:void 0,performanceLogger:function(){},eventHandlerInterceptor:void 0,styleApplyer:function(e,t,r){"-"==(t[0]||"")?e.style.setProperty(t,r):e.style[t]=r}},O={create:function(e,t){return t=u(t),b(e,document.createElement("div"),void 0,t),s(e,t)},append:function(e,t,r){return r=u(r),b(t,e,void 0,r),s(t,r)},insertBefore:function(e,t,r){return r=u(r),b(t,e.parentNode,e,r),s(t,r)},merge:function(e,t,r){return r=u(r),f(t.domNode=e,t,r),s(t,r)},replace:function(e,t,r){return r=u(r),b(t,e.parentNode,e,r),e.parentNode.removeChild(e),s(t,r)}},j=Array.prototype.find?function(e,t){return e.find(t)}:function(e,t){return e.filter(t)[0]};e.createCache=function(){var o,n;return{invalidate:function(){o=n=void 0},result:function(e,t){if(o)for(var r=0;r<e.length;r++)o[r]!==e[r]&&(n=void 0);return n||(n=t(),o=e),n}}},e.createMapping=function(c,l,f){var u=[],v=[];return{results:v,map:function(e){for(var t=e.map(c),r=v.slice(),o=0,n=0;n<e.length;n++){var i=e[n],d=t[n];if(d===u[o])v[n]=r[o],f(i,r[o],n),o++;else{for(var a=!1,s=1;s<u.length+1;s++){var p=(o+s)%u.length;if(u[p]===d){v[n]=r[p],f(e[n],r[p],n),o=1+p,a=!0;break}}a||(v[n]=l(i,n))}}v.length=e.length,u=t}}},e.createProjector=function(e){function r(e,t,r){var i,d,a;function n(e){a("domEvent",e);var t,r,o=i,n=function(e,t){for(var r=[];e&&e!==t;)r.push(e),e=e.parentNode;return r}(e.currentTarget,o.domNode),o=(n.reverse(),o=o.getLastRender(),r=o,n.forEach(function(t){r=r&&r.children?j(r.children,function(e){return e.domNode===t}):void 0}),r);return d.scheduleRender(),o&&(t=(null!=(n=null!=(n=o.properties["on".concat(e.type)])?n:o.properties.on[e.type].listener)?n:o.properties.on[e.type]).apply(o.properties.bind||this,arguments)),a("domEventProcessed",e),t}s.eventHandlerInterceptor=(d=f,a=p,function(e,t,r,o){return n}),i=e(t,r(),s),c.push(i),l.push(r)}function t(){if(o=void 0,n){n=!1,p("renderStart",void 0);for(var e=0;e<c.length;e++){var t=l[e]();p("rendered",void 0),c[e].update(t),p("patched",void 0)}p("renderDone",void 0),n=!0}}var o,s=u(e),p=s.performanceLogger,n=!0,i=!1,c=[],l=[],f={renderNow:t,scheduleRender:function(){o||i||(o=requestAnimationFrame(t))},stop:function(){o&&(cancelAnimationFrame(o),o=void 0),i=!0},resume:function(){n=!(i=!1),f.scheduleRender()},append:function(e,t){r(O.append,e,t)},insertBefore:function(e,t){r(O.insertBefore,e,t)},merge:function(e,t){r(O.merge,e,t)},replace:function(e,t){r(O.replace,e,t)},detach:function(e){for(var t=0;t<l.length;t++)if(l[t]===e)return l.splice(t,1),c.splice(t,1)[0];throw Error("renderFunction was not found")}};return f},e.dom=O,e.h=function(e,t,r){if(Array.isArray(t))r=t,t=void 0;else if(t&&("string"==typeof t||t.vnodeSelector)||r&&("string"==typeof r||r.vnodeSelector))throw Error("h called with invalid arguments");var o,n;return r&&1===r.length&&"string"==typeof r[0]?o=r[0]:r&&(function e(t,r,o){for(var n=0,i=r.length;n<i;n++){var d=r[n];Array.isArray(d)?e(t,d,o):null!=d&&!1!==d&&("string"==typeof d&&(d={vnodeSelector:"",properties:void 0,children:void 0,text:d.toString(),domNode:null}),o.push(d))}}(e,r,n=[]),0===n.length)&&(n=void 0),{vnodeSelector:e,properties:t,children:n,text:""===o?void 0:o,domNode:null}}});
@@ -125,14 +125,25 @@ var nodeToRemove = function (vNode) {
125
125
  scheduleNodeRemoval(vNode);
126
126
  }
127
127
  };
128
+ var vnodeOnlyProps = [
129
+ "afterCreate",
130
+ "afterUpdate",
131
+ "afterRemoved",
132
+ "enterAnimation",
133
+ "exitAnimation",
134
+ "updateAnimation",
135
+ ];
136
+ function filterVNodeOnlyProps(name) {
137
+ return !vnodeOnlyProps.includes(name);
138
+ }
128
139
  var setProperties = function (domNode, properties, projectionOptions) {
129
140
  if (!properties) {
130
141
  return;
131
142
  }
132
143
  var eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;
133
- var propNames = Object.keys(properties);
144
+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
134
145
  var propCount = propNames.length;
135
- var _loop_1 = function (i) {
146
+ for (var i = 0; i < propCount; i++) {
136
147
  var propName = propNames[i];
137
148
  var propValue = properties[propName];
138
149
  if (propName === "className") {
@@ -186,18 +197,8 @@ var setProperties = function (domNode, properties, projectionOptions) {
186
197
  if (eventHandlerInterceptor) {
187
198
  propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers
188
199
  }
189
- if (propName === "oninput") {
190
- (function () {
191
- // record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput
192
- var oldPropValue = propValue;
193
- propValue = function (evt) {
194
- oldPropValue.apply(this, [evt]);
195
- evt.target["oninput-value"] = evt.target.value; // may be HTMLTextAreaElement as well
196
- };
197
- })();
198
- }
199
- domNode[propName] = propValue;
200
200
  }
201
+ domNode[propName] = propValue;
201
202
  }
202
203
  else if (projectionOptions.namespace === NAMESPACE_SVG) {
203
204
  if (propName === "href") {
@@ -215,9 +216,6 @@ var setProperties = function (domNode, properties, projectionOptions) {
215
216
  domNode[propName] = propValue;
216
217
  }
217
218
  }
218
- };
219
- for (var i = 0; i < propCount; i++) {
220
- _loop_1(i);
221
219
  }
222
220
  };
223
221
  var addChildren = function (domNode, children, projectionOptions) {
@@ -332,7 +330,7 @@ var updateProperties = function (domNode, previousProperties, properties, projec
332
330
  return;
333
331
  }
334
332
  var propertiesUpdated = false;
335
- var propNames = Object.keys(properties);
333
+ var propNames = Object.keys(properties).filter(filterVNodeOnlyProps);
336
334
  var propCount = propNames.length;
337
335
  for (var i = 0; i < propCount; i++) {
338
336
  var propName = propNames[i];
@@ -393,13 +391,10 @@ var updateProperties = function (domNode, previousProperties, properties, projec
393
391
  // value can be manipulated by the user directly and using event.preventDefault() is not an option
394
392
  var domValue = domNode[propName];
395
393
  if (domValue !== propValue && // The 'value' in the DOM tree !== newValue
396
- (domNode["oninput-value"]
397
- ? domValue === domNode["oninput-value"] // If the last reported value to 'oninput' does not match domValue, do nothing and wait for oninput
398
- : propValue !== previousValue) // Only update the value if the vdom changed
394
+ propValue !== previousValue // Only update the value if the vdom changed
399
395
  ) {
400
396
  // The edge cases are described in the tests
401
397
  domNode[propName] = propValue; // Reset the value, even if the virtual DOM did not change
402
- domNode["oninput-value"] = undefined;
403
398
  } // else do not update the domNode, otherwise the cursor position would be changed
404
399
  if (propValue !== previousValue) {
405
400
  propertiesUpdated = true;
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Exports here are NOT re-exported to maquette\n */\nimport { EventHandler, Projection, ProjectionOptions, VNode, VNodeProperties } from \"./interfaces\";\n\nconst NAMESPACE_W3 = \"http://www.w3.org/\";\nconst NAMESPACE_SVG = `${NAMESPACE_W3}2000/svg`;\nconst NAMESPACE_XLINK = `${NAMESPACE_W3}1999/xlink`;\n\nlet emptyArray = <VNode[]>[];\n\nexport let extend = <T extends object>(base: T, overrides: any): T => {\n let result = {} as any;\n Object.keys(base).forEach((key) => {\n result[key] = (base as any)[key];\n });\n if (overrides) {\n Object.keys(overrides).forEach((key) => {\n result[key] = overrides[key];\n });\n }\n return result;\n};\n\nlet same = (vnode1: VNode, vnode2: VNode) => {\n if (vnode1.vnodeSelector !== vnode2.vnodeSelector) {\n return false;\n }\n if (vnode1.properties && vnode2.properties) {\n if (vnode1.properties.key !== vnode2.properties.key) {\n return false;\n }\n return vnode1.properties.bind === vnode2.properties.bind;\n }\n return !vnode1.properties && !vnode2.properties;\n};\n\nlet checkStyleValue = (styleValue: unknown) => {\n if (typeof styleValue !== \"string\") {\n throw new Error(\"Style values must be strings\");\n }\n};\n\nlet findIndexOfChild = (children: VNode[], sameAs: VNode, start: number) => {\n if (sameAs.vnodeSelector !== \"\") {\n // Never scan for text-nodes\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n }\n return -1;\n};\n\nlet checkDistinguishable = (\n childNodes: VNode[],\n indexToCheck: number,\n parentVNode: VNode,\n operation: string\n) => {\n let childNode = childNodes[indexToCheck];\n if (childNode.vnodeSelector === \"\") {\n return; // Text nodes need not be distinguishable\n }\n let properties = childNode.properties;\n let key = properties\n ? properties.key === undefined\n ? properties.bind\n : properties.key\n : undefined;\n if (!key) {\n // A key is just assumed to be unique\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n let node = childNodes[i];\n if (same(node, childNode)) {\n throw {\n error: new Error(\n `${parentVNode.vnodeSelector} had a ${childNode.vnodeSelector} child ${\n operation === \"added\" ? operation : \"removed\"\n }, but there is now more than one. You must add unique key properties to make them distinguishable.`\n ),\n parentNode: parentVNode,\n childNode,\n };\n }\n }\n }\n }\n};\n\nlet nodeAdded = (vNode: VNode) => {\n if (vNode.properties) {\n let enterAnimation = vNode.properties.enterAnimation;\n if (enterAnimation) {\n enterAnimation(vNode.domNode as Element, vNode.properties);\n }\n }\n};\n\nlet removedNodes: VNode[] = [];\nlet requestedIdleCallback = false;\n\nlet visitRemovedNode = (node: VNode) => {\n (node.children || []).forEach(visitRemovedNode);\n\n if (node.properties && node.properties.afterRemoved) {\n node.properties.afterRemoved.apply(node.properties.bind || node.properties, [\n <Element>node.domNode,\n ]);\n }\n};\n\nlet processPendingNodeRemovals = (): void => {\n requestedIdleCallback = false;\n\n removedNodes.forEach(visitRemovedNode);\n removedNodes.length = 0;\n};\n\nlet scheduleNodeRemoval = (vNode: VNode): void => {\n removedNodes.push(vNode);\n\n if (!requestedIdleCallback) {\n requestedIdleCallback = true;\n if (typeof window !== \"undefined\" && \"requestIdleCallback\" in window) {\n window.requestIdleCallback(processPendingNodeRemovals, { timeout: 16 });\n } else {\n setTimeout(processPendingNodeRemovals, 16);\n }\n }\n};\n\nlet nodeToRemove = (vNode: VNode) => {\n let domNode: Node = vNode.domNode!;\n if (vNode.properties) {\n let exitAnimation = vNode.properties.exitAnimation;\n if (exitAnimation) {\n (domNode as HTMLElement).style.pointerEvents = \"none\";\n let removeDomNode = () => {\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n };\n exitAnimation(domNode as Element, removeDomNode, vNode.properties);\n return;\n }\n }\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n};\n\nlet setProperties = (\n domNode: Node,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;\n let propNames = Object.keys(properties);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n let propValue = properties[propName];\n if (propName === \"className\") {\n throw new Error('Property \"className\" is not supported, use \"class\".');\n } else if (propName === \"class\") {\n toggleClasses(domNode as HTMLElement, propValue as string, true);\n } else if (propName === \"classes\") {\n // object with string keys and boolean values\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n if (propValue[className]) {\n (domNode as Element).classList.add(className);\n }\n }\n } else if (propName === \"styles\") {\n // object with string keys and string (!) values\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let styleValue = propValue[styleName];\n if (styleValue) {\n checkStyleValue(styleValue);\n projectionOptions.styleApplyer!(<HTMLElement>domNode, styleName, styleValue);\n }\n }\n } else if (propName === \"on\" && propValue) {\n // object with string keys and function values\n for (let [key, handler] of Object.entries(properties.on!)) {\n let listener: EventHandler | undefined =\n typeof handler === \"function\" ? handler : handler.listener;\n if (eventHandlerInterceptor) {\n listener = eventHandlerInterceptor(key, listener, domNode, properties);\n }\n if (listener) {\n domNode.addEventListener(\n key,\n listener,\n typeof handler === \"function\" ? undefined : handler.options\n );\n }\n }\n } else if (propName !== \"key\" && propValue !== null && propValue !== undefined) {\n let type = typeof propValue;\n if (type === \"function\") {\n if (propName.lastIndexOf(\"on\", 0) === 0) {\n // lastIndexOf(,0)===0 -> startsWith\n if (eventHandlerInterceptor) {\n propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers\n }\n if (propName === \"oninput\") {\n (function () {\n // record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput\n let oldPropValue = propValue;\n propValue = function (this: HTMLElement, evt: Event) {\n oldPropValue.apply(this, [evt]);\n (evt.target as any)[\"oninput-value\"] = (evt.target as HTMLInputElement).value; // may be HTMLTextAreaElement as well\n };\n })();\n }\n (domNode as any)[propName] = propValue;\n }\n } else if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"value\" && propName !== \"innerHTML\") {\n (domNode as Element).setAttribute(propName, propValue);\n } else {\n (domNode as any)[propName] = propValue;\n }\n }\n }\n};\n\nlet addChildren = (\n domNode: Node,\n children: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!children) {\n return;\n }\n for (let child of children) {\n createDom(child, domNode, undefined, projectionOptions);\n }\n};\n\nexport let initPropertiesAndChildren = (\n domNode: Node,\n vnode: VNode,\n projectionOptions: ProjectionOptions\n): void => {\n addChildren(domNode, vnode.children, projectionOptions); // children before properties, needed for value property of <select>.\n if (vnode.text) {\n domNode.textContent = vnode.text;\n }\n setProperties(domNode, vnode.properties, projectionOptions);\n if (vnode.properties && vnode.properties.afterCreate) {\n vnode.properties.afterCreate.apply(vnode.properties.bind || vnode.properties, [\n domNode as Element,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n};\n\nexport let createDom = (\n vnode: VNode,\n parentNode: Node,\n insertBefore: Node | null | undefined,\n projectionOptions: ProjectionOptions\n): void => {\n let domNode: Node | undefined;\n let start = 0;\n let vnodeSelector = vnode.vnodeSelector;\n let doc = parentNode.ownerDocument!;\n if (vnodeSelector === \"\") {\n if (vnode.domNode) {\n vnode.domNode.nodeValue = vnode.text!;\n } else {\n domNode = vnode.domNode = doc.createTextNode(vnode.text!);\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else {\n parentNode.appendChild(domNode);\n }\n }\n } else {\n for (let i = 0; i <= vnodeSelector.length; ++i) {\n let c = vnodeSelector.charAt(i);\n if (i === vnodeSelector.length || c === \".\" || c === \"#\") {\n let type = vnodeSelector.charAt(start - 1);\n let found = vnodeSelector.slice(start, i);\n if (type === \".\") {\n (domNode! as HTMLElement).classList.add(found);\n } else if (type === \"#\") {\n (domNode! as Element).id = found;\n } else {\n if (found === \"svg\") {\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = vnode.domNode = doc.createElementNS(projectionOptions.namespace, found);\n } else {\n domNode = vnode.domNode =\n vnode.domNode ||\n (vnode.properties?.is\n ? doc.createElement(found, { is: vnode.properties.is })\n : doc.createElement(found));\n if (found === \"input\" && vnode.properties && vnode.properties.type !== undefined) {\n // IE8 and older don't support setting input type after the DOM Node has been added to the document\n (domNode as Element).setAttribute(\"type\", vnode.properties.type);\n }\n }\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else if (domNode.parentNode !== parentNode) {\n parentNode.appendChild(domNode);\n }\n }\n start = i + 1;\n }\n }\n initPropertiesAndChildren(domNode!, vnode, projectionOptions);\n }\n};\n\nlet updateDom: (previous: VNode, vnode: VNode, projectionOptions: ProjectionOptions) => boolean;\n\n/**\n * Adds or removes classes from an Element\n * @param domNode the element\n * @param classes a string separated list of classes\n * @param on true means add classes, false means remove\n */\nlet toggleClasses = (domNode: HTMLElement, classes: string | null | undefined, on: boolean) => {\n if (!classes) {\n return;\n }\n classes.split(\" \").forEach((classToToggle) => {\n if (classToToggle) {\n domNode.classList.toggle(classToToggle, on);\n }\n });\n};\n\nlet updateProperties = (\n domNode: Node,\n previousProperties: VNodeProperties | undefined,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let propertiesUpdated = false;\n let propNames = Object.keys(properties);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n // assuming that properties will be nullified instead of missing is by design\n let propValue = properties[propName];\n let previousValue = previousProperties![propName];\n if (propName === \"class\") {\n if (previousValue !== propValue) {\n toggleClasses(domNode as HTMLElement, previousValue, false);\n toggleClasses(domNode as HTMLElement, propValue, true);\n }\n } else if (propName === \"classes\") {\n let classList = (domNode as Element).classList;\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n let on = !!propValue[className];\n let previousOn = !!previousValue[className];\n if (on === previousOn) {\n continue;\n }\n propertiesUpdated = true;\n if (on) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n } else if (propName === \"styles\") {\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let newStyleValue = propValue[styleName];\n let oldStyleValue = previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, newStyleValue);\n } else {\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, \"\");\n }\n }\n } else {\n if (!propValue && typeof previousValue === \"string\") {\n propValue = \"\";\n }\n if (propName === \"value\") {\n // value can be manipulated by the user directly and using event.preventDefault() is not an option\n let domValue = (domNode as any)[propName];\n if (\n domValue !== propValue && // The 'value' in the DOM tree !== newValue\n ((domNode as any)[\"oninput-value\"]\n ? domValue === (domNode as any)[\"oninput-value\"] // If the last reported value to 'oninput' does not match domValue, do nothing and wait for oninput\n : propValue !== previousValue) // Only update the value if the vdom changed\n ) {\n // The edge cases are described in the tests\n (domNode as any)[propName] = propValue; // Reset the value, even if the virtual DOM did not change\n (domNode as any)[\"oninput-value\"] = undefined;\n } // else do not update the domNode, otherwise the cursor position would be changed\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n } else if (propValue !== previousValue) {\n let type = typeof propValue;\n if (type !== \"function\" || !projectionOptions.eventHandlerInterceptor) {\n // Function updates are expected to be handled by the EventHandlerInterceptor\n if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"innerHTML\") {\n if (propName === \"role\" && propValue === \"\") {\n (domNode as any).removeAttribute(propName);\n } else {\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if ((domNode as any)[propName] !== propValue) {\n // Comparison is here for side-effects in Edge with scrollLeft and scrollTop\n (domNode as any)[propName] = propValue;\n }\n\n propertiesUpdated = true;\n }\n }\n }\n }\n return propertiesUpdated;\n};\n\nlet updateChildren = (\n vnode: VNode,\n domNode: Node,\n oldChildren: VNode[] | undefined,\n newChildren: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (oldChildren === newChildren) {\n return false;\n }\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren || emptyArray;\n let oldChildrenLength = oldChildren.length;\n let newChildrenLength = newChildren.length;\n\n let oldIndex = 0;\n let newIndex = 0;\n let i: number;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n let newChild = newChildren[newIndex];\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions) || textUpdated;\n oldIndex++;\n } else {\n let findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n if (findOldIndex >= 0) {\n // Remove preceding missing children\n for (i = oldIndex; i < findOldIndex; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n textUpdated =\n updateDom(oldChildren[findOldIndex], newChild, projectionOptions) || textUpdated;\n oldIndex = findOldIndex + 1;\n } else {\n // New child\n createDom(\n newChild,\n domNode,\n oldIndex < oldChildrenLength ? oldChildren[oldIndex].domNode : undefined,\n projectionOptions\n );\n nodeAdded(newChild);\n checkDistinguishable(newChildren, newIndex, vnode, \"added\");\n }\n }\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n }\n return textUpdated;\n};\n\nupdateDom = (previous, vnode, projectionOptions) => {\n let domNode = previous.domNode!;\n let textUpdated = false;\n if (previous === vnode) {\n return false; // By contract, VNode objects may not be modified anymore after passing them to maquette\n }\n let updated = false;\n if (vnode.vnodeSelector === \"\") {\n if (vnode.text !== previous.text) {\n let newTextNode = domNode.ownerDocument!.createTextNode(vnode.text!);\n domNode.parentNode!.replaceChild(newTextNode, domNode);\n vnode.domNode = newTextNode;\n textUpdated = true;\n return textUpdated;\n }\n vnode.domNode = domNode;\n } else {\n if (vnode.vnodeSelector.lastIndexOf(\"svg\", 0) === 0) {\n // lastIndexOf(needle,0)===0 means StartsWith\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (previous.text !== vnode.text) {\n updated = true;\n if (vnode.text === undefined) {\n domNode.removeChild(domNode.firstChild!); // the only textnode presumably\n } else {\n domNode.textContent = vnode.text;\n }\n }\n vnode.domNode = domNode;\n updated =\n updateChildren(vnode, domNode, previous.children, vnode.children, projectionOptions) ||\n updated;\n updated =\n updateProperties(domNode, previous.properties, vnode.properties, projectionOptions) ||\n updated;\n if (vnode.properties && vnode.properties.afterUpdate) {\n vnode.properties.afterUpdate.apply(vnode.properties.bind || vnode.properties, [\n <Element>domNode,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n }\n if (updated && vnode.properties && vnode.properties.updateAnimation) {\n vnode.properties.updateAnimation(<Element>domNode, vnode.properties, previous.properties);\n }\n return textUpdated;\n};\n\nexport let createProjection = (vnode: VNode, projectionOptions: ProjectionOptions): Projection => {\n return {\n getLastRender: () => vnode,\n update: (updatedVnode: VNode) => {\n if (vnode.vnodeSelector !== updatedVnode.vnodeSelector) {\n throw new Error(\n \"The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)\"\n );\n }\n let previousVNode = vnode;\n vnode = updatedVnode;\n updateDom(previousVNode, updatedVnode, projectionOptions);\n },\n domNode: <Element>vnode.domNode,\n };\n};\n"]}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Exports here are NOT re-exported to maquette\n */\nimport { EventHandler, Projection, ProjectionOptions, VNode, VNodeProperties } from \"./interfaces\";\n\nconst NAMESPACE_W3 = \"http://www.w3.org/\";\nconst NAMESPACE_SVG = `${NAMESPACE_W3}2000/svg`;\nconst NAMESPACE_XLINK = `${NAMESPACE_W3}1999/xlink`;\n\nlet emptyArray = <VNode[]>[];\n\nexport let extend = <T extends object>(base: T, overrides: any): T => {\n let result = {} as any;\n Object.keys(base).forEach((key) => {\n result[key] = (base as any)[key];\n });\n if (overrides) {\n Object.keys(overrides).forEach((key) => {\n result[key] = overrides[key];\n });\n }\n return result;\n};\n\nlet same = (vnode1: VNode, vnode2: VNode) => {\n if (vnode1.vnodeSelector !== vnode2.vnodeSelector) {\n return false;\n }\n if (vnode1.properties && vnode2.properties) {\n if (vnode1.properties.key !== vnode2.properties.key) {\n return false;\n }\n return vnode1.properties.bind === vnode2.properties.bind;\n }\n return !vnode1.properties && !vnode2.properties;\n};\n\nlet checkStyleValue = (styleValue: unknown) => {\n if (typeof styleValue !== \"string\") {\n throw new Error(\"Style values must be strings\");\n }\n};\n\nlet findIndexOfChild = (children: VNode[], sameAs: VNode, start: number) => {\n if (sameAs.vnodeSelector !== \"\") {\n // Never scan for text-nodes\n for (let i = start; i < children.length; i++) {\n if (same(children[i], sameAs)) {\n return i;\n }\n }\n }\n return -1;\n};\n\nlet checkDistinguishable = (\n childNodes: VNode[],\n indexToCheck: number,\n parentVNode: VNode,\n operation: string\n) => {\n let childNode = childNodes[indexToCheck];\n if (childNode.vnodeSelector === \"\") {\n return; // Text nodes need not be distinguishable\n }\n let properties = childNode.properties;\n let key = properties\n ? properties.key === undefined\n ? properties.bind\n : properties.key\n : undefined;\n if (!key) {\n // A key is just assumed to be unique\n for (let i = 0; i < childNodes.length; i++) {\n if (i !== indexToCheck) {\n let node = childNodes[i];\n if (same(node, childNode)) {\n throw {\n error: new Error(\n `${parentVNode.vnodeSelector} had a ${childNode.vnodeSelector} child ${\n operation === \"added\" ? operation : \"removed\"\n }, but there is now more than one. You must add unique key properties to make them distinguishable.`\n ),\n parentNode: parentVNode,\n childNode,\n };\n }\n }\n }\n }\n};\n\nlet nodeAdded = (vNode: VNode) => {\n if (vNode.properties) {\n let enterAnimation = vNode.properties.enterAnimation;\n if (enterAnimation) {\n enterAnimation(vNode.domNode as Element, vNode.properties);\n }\n }\n};\n\nlet removedNodes: VNode[] = [];\nlet requestedIdleCallback = false;\n\nlet visitRemovedNode = (node: VNode) => {\n (node.children || []).forEach(visitRemovedNode);\n\n if (node.properties && node.properties.afterRemoved) {\n node.properties.afterRemoved.apply(node.properties.bind || node.properties, [\n <Element>node.domNode,\n ]);\n }\n};\n\nlet processPendingNodeRemovals = (): void => {\n requestedIdleCallback = false;\n\n removedNodes.forEach(visitRemovedNode);\n removedNodes.length = 0;\n};\n\nlet scheduleNodeRemoval = (vNode: VNode): void => {\n removedNodes.push(vNode);\n\n if (!requestedIdleCallback) {\n requestedIdleCallback = true;\n if (typeof window !== \"undefined\" && \"requestIdleCallback\" in window) {\n window.requestIdleCallback(processPendingNodeRemovals, { timeout: 16 });\n } else {\n setTimeout(processPendingNodeRemovals, 16);\n }\n }\n};\n\nlet nodeToRemove = (vNode: VNode) => {\n let domNode: Node = vNode.domNode!;\n if (vNode.properties) {\n let exitAnimation = vNode.properties.exitAnimation;\n if (exitAnimation) {\n (domNode as HTMLElement).style.pointerEvents = \"none\";\n let removeDomNode = () => {\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n };\n exitAnimation(domNode as Element, removeDomNode, vNode.properties);\n return;\n }\n }\n if (domNode.parentNode) {\n domNode.parentNode.removeChild(domNode);\n scheduleNodeRemoval(vNode);\n }\n};\n\nconst vnodeOnlyProps = [\n \"afterCreate\",\n \"afterUpdate\",\n \"afterRemoved\",\n \"enterAnimation\",\n \"exitAnimation\",\n \"updateAnimation\",\n];\n\nfunction filterVNodeOnlyProps(name: string): boolean {\n return !vnodeOnlyProps.includes(name);\n}\n\nlet setProperties = (\n domNode: Node,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let eventHandlerInterceptor = projectionOptions.eventHandlerInterceptor;\n let propNames = Object.keys(properties).filter(filterVNodeOnlyProps);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n let propValue = properties[propName];\n if (propName === \"className\") {\n throw new Error('Property \"className\" is not supported, use \"class\".');\n } else if (propName === \"class\") {\n toggleClasses(domNode as HTMLElement, propValue as string, true);\n } else if (propName === \"classes\") {\n // object with string keys and boolean values\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n if (propValue[className]) {\n (domNode as Element).classList.add(className);\n }\n }\n } else if (propName === \"styles\") {\n // object with string keys and string (!) values\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let styleValue = propValue[styleName];\n if (styleValue) {\n checkStyleValue(styleValue);\n projectionOptions.styleApplyer!(<HTMLElement>domNode, styleName, styleValue);\n }\n }\n } else if (propName === \"on\" && propValue) {\n // object with string keys and function values\n for (let [key, handler] of Object.entries(properties.on!)) {\n let listener: EventHandler | undefined =\n typeof handler === \"function\" ? handler : handler.listener;\n if (eventHandlerInterceptor) {\n listener = eventHandlerInterceptor(key, listener, domNode, properties);\n }\n if (listener) {\n domNode.addEventListener(\n key,\n listener,\n typeof handler === \"function\" ? undefined : handler.options\n );\n }\n }\n } else if (propName !== \"key\" && propValue !== null && propValue !== undefined) {\n let type = typeof propValue;\n if (type === \"function\") {\n if (propName.lastIndexOf(\"on\", 0) === 0) {\n // lastIndexOf(,0)===0 -> startsWith\n if (eventHandlerInterceptor) {\n propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers\n }\n }\n (domNode as any)[propName] = propValue;\n } else if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"value\" && propName !== \"innerHTML\") {\n (domNode as Element).setAttribute(propName, propValue);\n } else {\n (domNode as any)[propName] = propValue;\n }\n }\n }\n};\n\nlet addChildren = (\n domNode: Node,\n children: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!children) {\n return;\n }\n for (let child of children) {\n createDom(child, domNode, undefined, projectionOptions);\n }\n};\n\nexport let initPropertiesAndChildren = (\n domNode: Node,\n vnode: VNode,\n projectionOptions: ProjectionOptions\n): void => {\n addChildren(domNode, vnode.children, projectionOptions); // children before properties, needed for value property of <select>.\n if (vnode.text) {\n domNode.textContent = vnode.text;\n }\n setProperties(domNode, vnode.properties, projectionOptions);\n if (vnode.properties && vnode.properties.afterCreate) {\n vnode.properties.afterCreate.apply(vnode.properties.bind || vnode.properties, [\n domNode as Element,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n};\n\nexport let createDom = (\n vnode: VNode,\n parentNode: Node,\n insertBefore: Node | null | undefined,\n projectionOptions: ProjectionOptions\n): void => {\n let domNode: Node | undefined;\n let start = 0;\n let vnodeSelector = vnode.vnodeSelector;\n let doc = parentNode.ownerDocument!;\n if (vnodeSelector === \"\") {\n if (vnode.domNode) {\n vnode.domNode.nodeValue = vnode.text!;\n } else {\n domNode = vnode.domNode = doc.createTextNode(vnode.text!);\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else {\n parentNode.appendChild(domNode);\n }\n }\n } else {\n for (let i = 0; i <= vnodeSelector.length; ++i) {\n let c = vnodeSelector.charAt(i);\n if (i === vnodeSelector.length || c === \".\" || c === \"#\") {\n let type = vnodeSelector.charAt(start - 1);\n let found = vnodeSelector.slice(start, i);\n if (type === \".\") {\n (domNode! as HTMLElement).classList.add(found);\n } else if (type === \"#\") {\n (domNode! as Element).id = found;\n } else {\n if (found === \"svg\") {\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (projectionOptions.namespace !== undefined) {\n domNode = vnode.domNode = doc.createElementNS(projectionOptions.namespace, found);\n } else {\n domNode = vnode.domNode =\n vnode.domNode ||\n (vnode.properties?.is\n ? doc.createElement(found, { is: vnode.properties.is })\n : doc.createElement(found));\n if (found === \"input\" && vnode.properties && vnode.properties.type !== undefined) {\n // IE8 and older don't support setting input type after the DOM Node has been added to the document\n (domNode as Element).setAttribute(\"type\", vnode.properties.type);\n }\n }\n if (insertBefore !== undefined) {\n parentNode.insertBefore(domNode, insertBefore);\n } else if (domNode.parentNode !== parentNode) {\n parentNode.appendChild(domNode);\n }\n }\n start = i + 1;\n }\n }\n initPropertiesAndChildren(domNode!, vnode, projectionOptions);\n }\n};\n\nlet updateDom: (previous: VNode, vnode: VNode, projectionOptions: ProjectionOptions) => boolean;\n\n/**\n * Adds or removes classes from an Element\n * @param domNode the element\n * @param classes a string separated list of classes\n * @param on true means add classes, false means remove\n */\nlet toggleClasses = (domNode: HTMLElement, classes: string | null | undefined, on: boolean) => {\n if (!classes) {\n return;\n }\n classes.split(\" \").forEach((classToToggle) => {\n if (classToToggle) {\n domNode.classList.toggle(classToToggle, on);\n }\n });\n};\n\nlet updateProperties = (\n domNode: Node,\n previousProperties: VNodeProperties | undefined,\n properties: VNodeProperties | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (!properties) {\n return;\n }\n let propertiesUpdated = false;\n\n let propNames = Object.keys(properties).filter(filterVNodeOnlyProps);\n let propCount = propNames.length;\n for (let i = 0; i < propCount; i++) {\n let propName = propNames[i];\n // assuming that properties will be nullified instead of missing is by design\n let propValue = properties[propName];\n let previousValue = previousProperties![propName];\n if (propName === \"class\") {\n if (previousValue !== propValue) {\n toggleClasses(domNode as HTMLElement, previousValue, false);\n toggleClasses(domNode as HTMLElement, propValue, true);\n }\n } else if (propName === \"classes\") {\n let classList = (domNode as Element).classList;\n let classNames = Object.keys(propValue);\n let classNameCount = classNames.length;\n for (let j = 0; j < classNameCount; j++) {\n let className = classNames[j];\n let on = !!propValue[className];\n let previousOn = !!previousValue[className];\n if (on === previousOn) {\n continue;\n }\n propertiesUpdated = true;\n if (on) {\n classList.add(className);\n } else {\n classList.remove(className);\n }\n }\n } else if (propName === \"styles\") {\n let styleNames = Object.keys(propValue);\n let styleCount = styleNames.length;\n for (let j = 0; j < styleCount; j++) {\n let styleName = styleNames[j];\n let newStyleValue = propValue[styleName];\n let oldStyleValue = previousValue[styleName];\n if (newStyleValue === oldStyleValue) {\n continue;\n }\n propertiesUpdated = true;\n if (newStyleValue) {\n checkStyleValue(newStyleValue);\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, newStyleValue);\n } else {\n projectionOptions.styleApplyer!(domNode as HTMLElement, styleName, \"\");\n }\n }\n } else {\n if (!propValue && typeof previousValue === \"string\") {\n propValue = \"\";\n }\n if (propName === \"value\") {\n // value can be manipulated by the user directly and using event.preventDefault() is not an option\n let domValue = (domNode as any)[propName];\n if (\n domValue !== propValue && // The 'value' in the DOM tree !== newValue\n propValue !== previousValue // Only update the value if the vdom changed\n ) {\n // The edge cases are described in the tests\n (domNode as any)[propName] = propValue; // Reset the value, even if the virtual DOM did not change\n } // else do not update the domNode, otherwise the cursor position would be changed\n if (propValue !== previousValue) {\n propertiesUpdated = true;\n }\n } else if (propValue !== previousValue) {\n let type = typeof propValue;\n if (type !== \"function\" || !projectionOptions.eventHandlerInterceptor) {\n // Function updates are expected to be handled by the EventHandlerInterceptor\n if (projectionOptions.namespace === NAMESPACE_SVG) {\n if (propName === \"href\") {\n (domNode as Element).setAttributeNS(NAMESPACE_XLINK, propName, propValue);\n } else {\n // all SVG attributes are read-only in DOM, so...\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if (type === \"string\" && propName !== \"innerHTML\") {\n if (propName === \"role\" && propValue === \"\") {\n (domNode as any).removeAttribute(propName);\n } else {\n (domNode as Element).setAttribute(propName, propValue);\n }\n } else if ((domNode as any)[propName] !== propValue) {\n // Comparison is here for side-effects in Edge with scrollLeft and scrollTop\n (domNode as any)[propName] = propValue;\n }\n\n propertiesUpdated = true;\n }\n }\n }\n }\n return propertiesUpdated;\n};\n\nlet updateChildren = (\n vnode: VNode,\n domNode: Node,\n oldChildren: VNode[] | undefined,\n newChildren: VNode[] | undefined,\n projectionOptions: ProjectionOptions\n) => {\n if (oldChildren === newChildren) {\n return false;\n }\n oldChildren = oldChildren || emptyArray;\n newChildren = newChildren || emptyArray;\n let oldChildrenLength = oldChildren.length;\n let newChildrenLength = newChildren.length;\n\n let oldIndex = 0;\n let newIndex = 0;\n let i: number;\n let textUpdated = false;\n while (newIndex < newChildrenLength) {\n let oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;\n let newChild = newChildren[newIndex];\n if (oldChild !== undefined && same(oldChild, newChild)) {\n textUpdated = updateDom(oldChild, newChild, projectionOptions) || textUpdated;\n oldIndex++;\n } else {\n let findOldIndex = findIndexOfChild(oldChildren, newChild, oldIndex + 1);\n if (findOldIndex >= 0) {\n // Remove preceding missing children\n for (i = oldIndex; i < findOldIndex; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n textUpdated =\n updateDom(oldChildren[findOldIndex], newChild, projectionOptions) || textUpdated;\n oldIndex = findOldIndex + 1;\n } else {\n // New child\n createDom(\n newChild,\n domNode,\n oldIndex < oldChildrenLength ? oldChildren[oldIndex].domNode : undefined,\n projectionOptions\n );\n nodeAdded(newChild);\n checkDistinguishable(newChildren, newIndex, vnode, \"added\");\n }\n }\n newIndex++;\n }\n if (oldChildrenLength > oldIndex) {\n // Remove child fragments\n for (i = oldIndex; i < oldChildrenLength; i++) {\n nodeToRemove(oldChildren[i]);\n checkDistinguishable(oldChildren, i, vnode, \"removed\");\n }\n }\n return textUpdated;\n};\n\nupdateDom = (previous, vnode, projectionOptions) => {\n let domNode = previous.domNode!;\n let textUpdated = false;\n if (previous === vnode) {\n return false; // By contract, VNode objects may not be modified anymore after passing them to maquette\n }\n let updated = false;\n if (vnode.vnodeSelector === \"\") {\n if (vnode.text !== previous.text) {\n let newTextNode = domNode.ownerDocument!.createTextNode(vnode.text!);\n domNode.parentNode!.replaceChild(newTextNode, domNode);\n vnode.domNode = newTextNode;\n textUpdated = true;\n return textUpdated;\n }\n vnode.domNode = domNode;\n } else {\n if (vnode.vnodeSelector.lastIndexOf(\"svg\", 0) === 0) {\n // lastIndexOf(needle,0)===0 means StartsWith\n projectionOptions = extend(projectionOptions, {\n namespace: NAMESPACE_SVG,\n });\n }\n if (previous.text !== vnode.text) {\n updated = true;\n if (vnode.text === undefined) {\n domNode.removeChild(domNode.firstChild!); // the only textnode presumably\n } else {\n domNode.textContent = vnode.text;\n }\n }\n vnode.domNode = domNode;\n updated =\n updateChildren(vnode, domNode, previous.children, vnode.children, projectionOptions) ||\n updated;\n updated =\n updateProperties(domNode, previous.properties, vnode.properties, projectionOptions) ||\n updated;\n if (vnode.properties && vnode.properties.afterUpdate) {\n vnode.properties.afterUpdate.apply(vnode.properties.bind || vnode.properties, [\n <Element>domNode,\n projectionOptions,\n vnode.vnodeSelector,\n vnode.properties,\n vnode.children,\n ]);\n }\n }\n if (updated && vnode.properties && vnode.properties.updateAnimation) {\n vnode.properties.updateAnimation(<Element>domNode, vnode.properties, previous.properties);\n }\n return textUpdated;\n};\n\nexport let createProjection = (vnode: VNode, projectionOptions: ProjectionOptions): Projection => {\n return {\n getLastRender: () => vnode,\n update: (updatedVnode: VNode) => {\n if (vnode.vnodeSelector !== updatedVnode.vnodeSelector) {\n throw new Error(\n \"The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)\"\n );\n }\n let previousVNode = vnode;\n vnode = updatedVnode;\n updateDom(previousVNode, updatedVnode, projectionOptions);\n },\n domNode: <Element>vnode.domNode,\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maquette",
3
- "version": "4.1.0",
3
+ "version": "4.1.2",
4
4
  "description": "Minimalistic Virtual DOM implementation with support for animated transitions.",
5
5
  "homepage": "https://maquettejs.org/",
6
6
  "keywords": [