maquette 3.4.1 → 3.5.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.
- package/README.md +3 -3
- package/dist/cache.d.ts +1 -1
- package/dist/cache.js +1 -1
- package/dist/cache.js.map +1 -1
- package/dist/dom.d.ts +1 -1
- package/dist/dom.js +5 -5
- package/dist/dom.js.map +1 -1
- package/dist/h.d.ts +1 -1
- package/dist/h.js +9 -10
- package/dist/h.js.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +10 -8
- package/dist/interfaces.js +1 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/mapping.d.ts +1 -1
- package/dist/mapping.js +1 -1
- package/dist/mapping.js.map +1 -1
- package/dist/maquette.cjs.js +139 -104
- package/dist/maquette.umd.js +142 -107
- package/dist/maquette.umd.min.js +1 -1
- package/dist/projection.d.ts +1 -1
- package/dist/projection.js +106 -73
- package/dist/projection.js.map +1 -1
- package/dist/projector.d.ts +1 -1
- package/dist/projector.js +19 -16
- package/dist/projector.js.map +1 -1
- package/dist/utilities/window-performance-projector-logger.d.ts +1 -1
- package/dist/utilities/window-performance-projector-logger.js +8 -8
- package/dist/utilities/window-performance-projector-logger.js.map +1 -1
- package/package.json +17 -15
package/dist/maquette.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,
|
|
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 h(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)}function A(e){if("string"!=typeof e)throw Error("Style values must be strings")}function m(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&&h(e[d],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}}}function t(){p=!1,a.forEach(s),a.length=0}function o(e){a.push(e),p||(p=!0,"undefined"!=typeof window&&"requestIdleCallback"in window?window.requestIdleCallback(t,{timeout:16}):setTimeout(t,16))}function g(e){var t=e.domNode;if(e.properties){var r=e.properties.exitAnimation;if(r)return t.style.pointerEvents="none",r(t,function(){t.parentNode&&(t.parentNode.removeChild(t),o(e))},e.properties),0}t.parentNode&&(t.parentNode.removeChild(t),o(e))}function n(f,u,v){if(u)for(var h=v.eventHandlerInterceptor,m=Object.keys(u),e=m.length,g=0;g<e;g++)!function(e){var t,r=m[g],o=u[r];if("className"===r)throw Error('Property "className" is not supported, use "class".');if("class"===r)k(f,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]&&f.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&&(A(l),v.styleApplyer(f,c,l))}else"key"!==r&&null!=o&&("function"==(e=typeof o)?(r.lastIndexOf("on",0)||(h&&(o=h(r,o,f,u)),"oninput"===r&&(t=o,o=function(e){t.call(this,e),e.target["oninput-value"]=e.target.value})),f[r]=o):v.namespace===S?"href"===r?f.setAttributeNS(w,r,o):f.setAttribute(r,o):"string"==e&&"value"!==r&&"innerHTML"!==r?f.setAttribute(r,o):f[r]=o)}()}function f(e,t,r){!function(e,t,r){if(t)for(var o=0,n=t;o<n.length;o++){var i=n[o];N(i,e,void 0,r)}}(e,t.children,r),t.text&&(e.textContent=t.text),n(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 i(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)");b(t,t=e,r)},domNode:t.domNode}}function d(e){return l(c,e)}var r="http://www.w3.org/",S="".concat(r,"2000/svg"),w="".concat(r,"1999/xlink"),y=[],a=[],p=!1,s=function(e){(e.children||[]).forEach(s),e.properties&&e.properties.afterRemoved&&e.properties.afterRemoved.call(e.properties.bind||e.properties,e.domNode)},N=function(e,t,r,o){var n,i=0,d=e.vnodeSelector,a=t.ownerDocument;if(""===d)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||(s=d[0|i-1]||"",c=d.slice(i,p),"."==s?n.classList.add(c):"#"==s?n.id=c:(void 0!==(o="svg"===c?l(o,{namespace:S}):o).namespace?n=e.domNode=a.createElementNS(o.namespace,c):(n=e.domNode=e.domNode||a.createElement(c),"input"===c&&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)})},b=function(e,t,r){var o=e.domNode;if(e===t)return!1;var n=!1;if(""===t.vnodeSelector){if(t.text!==e.text){var i=o.ownerDocument.createTextNode(t.text);return o.parentNode.replaceChild(i,o),t.domNode=i,!0}t.domNode=o}else t.vnodeSelector.lastIndexOf("svg",0)||(r=l(r,{namespace:S})),e.text!==t.text&&(n=!0,void 0===t.text?o.removeChild(o.firstChild):o.textContent=t.text),t.domNode=o,n=function(e,t,r,o,n){if(r===o)return!1;for(var i,d,a=(r=r||y).length,p=(o=o||y).length,s=0,c=0,l=!1;c<p;){var f=s<a?r[s]:void 0,u=o[c];if(void 0!==f&&h(f,u))l=b(f,u,n)||l,s++;else{var v=function(e,t){if(""!==t.vnodeSelector)for(var r=s+1;r<e.length;r++)if(h(e[r],t))return r;return-1}(r,u);if(v<0)N(u,t,s<a?r[s].domNode:void 0,n),d=void 0,!(f=u).properties||(d=f.properties.enterAnimation)&&d(f.domNode,f.properties),m(o,c,e,"added");else{for(i=s;i<v;i++)g(r[i]),m(r,i,e,"removed");l=b(r[v],u,n)||l,s=v+1}}c++}if(s<a)for(i=s;i<a;i++)g(r[i]),m(r,i,e,"removed");return l}(t,o,e.children,t.children,r)||n,n=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?(A(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)||n,t.properties&&t.properties.afterUpdate&&t.properties.afterUpdate.call(t.properties.bind||t.properties,o,r,t.vnodeSelector,t.properties,t.children);return n&&t.properties&&t.properties.updateAnimation&&t.properties.updateAnimation(o,t.properties,e.properties),!1},c={namespace:void 0,performanceLogger:function(){},eventHandlerInterceptor:void 0,styleApplyer:function(e,t,r){"-"==(t[0]||"")?e.style.setProperty(t,r):e.style[t]=r}},u={create:function(e,t){return t=d(t),N(e,document.createElement("div"),void 0,t),i(e,t)},append:function(e,t,r){return r=d(r),N(t,e,void 0,r),i(t,r)},insertBefore:function(e,t,r){return r=d(r),N(t,e.parentNode,e,r),i(t,r)},merge:function(e,t,r){return r=d(r),f(t.domNode=e,t,r),i(t,r)},replace:function(e,t,r){return r=d(r),N(t,e.parentNode,e,r),e.parentNode.removeChild(e),i(t,r)}},v=function(e,t,r){for(var o=0,n=t.length;o<n;o++){var i=t[o];Array.isArray(i)?v(e,i,r):null!=i&&!1!==i&&("string"==typeof i&&(i={vnodeSelector:"",properties:void 0,children:void 0,text:i.toString(),domNode:null}),r.push(i))}},x=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=i;(n=function(e,t){for(var r=[];e&&e!==t;)r.push(e),e=e.parentNode;return r}(e.currentTarget,t.domNode)).reverse();var r,o,n=(t=t.getLastRender(),r=t,n.forEach(function(t){r=r&&r.children?x(r.children,function(e){return e.domNode===t}):void 0}),r);return d.scheduleRender(),n&&(o=n.properties["on".concat(e.type)].apply(n.properties.bind||this,arguments)),a("domEventProcessed",e),o}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(u.append,e,t)},insertBefore:function(e,t){r(u.insertBefore,e,t)},merge:function(e,t){r(u.merge,e,t)},replace:function(e,t){r(u.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=u,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&&(v(e,r,n=[]),0===n.length&&(n=void 0)),{vnodeSelector:e,properties:t,children:n,text:""===o?void 0:o,domNode:null}},Object.defineProperty(e,"__esModule",{value:!0})});
|
package/dist/projection.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Exports here are NOT re-exported to maquette
|
|
3
3
|
*/
|
|
4
|
-
import { Projection, ProjectionOptions, VNode } from
|
|
4
|
+
import { Projection, ProjectionOptions, VNode } from "./interfaces";
|
|
5
5
|
export declare let extend: <T>(base: T, overrides: any) => T;
|
|
6
6
|
export declare let initPropertiesAndChildren: (domNode: Node, vnode: VNode, projectionOptions: ProjectionOptions) => void;
|
|
7
7
|
export declare let createDom: (vnode: VNode, parentNode: Node, insertBefore: Node | null | undefined, projectionOptions: ProjectionOptions) => void;
|
package/dist/projection.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
var NAMESPACE_SVG = NAMESPACE_W3 + "2000/svg";
|
|
5
|
-
var NAMESPACE_XLINK = NAMESPACE_W3 + "1999/xlink";
|
|
1
|
+
var NAMESPACE_W3 = "http://www.w3.org/";
|
|
2
|
+
var NAMESPACE_SVG = "".concat(NAMESPACE_W3, "2000/svg");
|
|
3
|
+
var NAMESPACE_XLINK = "".concat(NAMESPACE_W3, "1999/xlink");
|
|
6
4
|
var emptyArray = [];
|
|
7
5
|
export var extend = function (base, overrides) {
|
|
8
6
|
var result = {};
|
|
@@ -29,12 +27,12 @@ var same = function (vnode1, vnode2) {
|
|
|
29
27
|
return !vnode1.properties && !vnode2.properties;
|
|
30
28
|
};
|
|
31
29
|
var checkStyleValue = function (styleValue) {
|
|
32
|
-
if (typeof styleValue !==
|
|
33
|
-
throw new Error(
|
|
30
|
+
if (typeof styleValue !== "string") {
|
|
31
|
+
throw new Error("Style values must be strings");
|
|
34
32
|
}
|
|
35
33
|
};
|
|
36
34
|
var findIndexOfChild = function (children, sameAs, start) {
|
|
37
|
-
if (sameAs.vnodeSelector !==
|
|
35
|
+
if (sameAs.vnodeSelector !== "") {
|
|
38
36
|
// Never scan for text-nodes
|
|
39
37
|
for (var i = start; i < children.length; i++) {
|
|
40
38
|
if (same(children[i], sameAs)) {
|
|
@@ -46,17 +44,26 @@ var findIndexOfChild = function (children, sameAs, start) {
|
|
|
46
44
|
};
|
|
47
45
|
var checkDistinguishable = function (childNodes, indexToCheck, parentVNode, operation) {
|
|
48
46
|
var childNode = childNodes[indexToCheck];
|
|
49
|
-
if (childNode.vnodeSelector ===
|
|
47
|
+
if (childNode.vnodeSelector === "") {
|
|
50
48
|
return; // Text nodes need not be distinguishable
|
|
51
49
|
}
|
|
52
50
|
var properties = childNode.properties;
|
|
53
|
-
var key = properties
|
|
54
|
-
|
|
51
|
+
var key = properties
|
|
52
|
+
? properties.key === undefined
|
|
53
|
+
? properties.bind
|
|
54
|
+
: properties.key
|
|
55
|
+
: undefined;
|
|
56
|
+
if (!key) {
|
|
57
|
+
// A key is just assumed to be unique
|
|
55
58
|
for (var i = 0; i < childNodes.length; i++) {
|
|
56
59
|
if (i !== indexToCheck) {
|
|
57
60
|
var node = childNodes[i];
|
|
58
61
|
if (same(node, childNode)) {
|
|
59
|
-
throw
|
|
62
|
+
throw {
|
|
63
|
+
error: new Error("".concat(parentVNode.vnodeSelector, " had a ").concat(childNode.vnodeSelector, " child ").concat(operation === "added" ? operation : "removed", ", but there is now more than one. You must add unique key properties to make them distinguishable.")),
|
|
64
|
+
parentNode: parentVNode,
|
|
65
|
+
childNode: childNode,
|
|
66
|
+
};
|
|
60
67
|
}
|
|
61
68
|
}
|
|
62
69
|
}
|
|
@@ -75,7 +82,9 @@ var requestedIdleCallback = false;
|
|
|
75
82
|
var visitRemovedNode = function (node) {
|
|
76
83
|
(node.children || []).forEach(visitRemovedNode);
|
|
77
84
|
if (node.properties && node.properties.afterRemoved) {
|
|
78
|
-
node.properties.afterRemoved.apply(node.properties.bind || node.properties, [
|
|
85
|
+
node.properties.afterRemoved.apply(node.properties.bind || node.properties, [
|
|
86
|
+
node.domNode,
|
|
87
|
+
]);
|
|
79
88
|
}
|
|
80
89
|
};
|
|
81
90
|
var processPendingNodeRemovals = function () {
|
|
@@ -87,7 +96,7 @@ var scheduleNodeRemoval = function (vNode) {
|
|
|
87
96
|
removedNodes.push(vNode);
|
|
88
97
|
if (!requestedIdleCallback) {
|
|
89
98
|
requestedIdleCallback = true;
|
|
90
|
-
if (typeof window !==
|
|
99
|
+
if (typeof window !== "undefined" && "requestIdleCallback" in window) {
|
|
91
100
|
window.requestIdleCallback(processPendingNodeRemovals, { timeout: 16 });
|
|
92
101
|
}
|
|
93
102
|
else {
|
|
@@ -100,7 +109,7 @@ var nodeToRemove = function (vNode) {
|
|
|
100
109
|
if (vNode.properties) {
|
|
101
110
|
var exitAnimation = vNode.properties.exitAnimation;
|
|
102
111
|
if (exitAnimation) {
|
|
103
|
-
domNode.style.pointerEvents =
|
|
112
|
+
domNode.style.pointerEvents = "none";
|
|
104
113
|
var removeDomNode = function () {
|
|
105
114
|
if (domNode.parentNode) {
|
|
106
115
|
domNode.parentNode.removeChild(domNode);
|
|
@@ -126,13 +135,13 @@ var setProperties = function (domNode, properties, projectionOptions) {
|
|
|
126
135
|
var _loop_1 = function (i) {
|
|
127
136
|
var propName = propNames[i];
|
|
128
137
|
var propValue = properties[propName];
|
|
129
|
-
if (propName ===
|
|
138
|
+
if (propName === "className") {
|
|
130
139
|
throw new Error('Property "className" is not supported, use "class".');
|
|
131
140
|
}
|
|
132
|
-
else if (propName ===
|
|
141
|
+
else if (propName === "class") {
|
|
133
142
|
toggleClasses(domNode, propValue, true);
|
|
134
143
|
}
|
|
135
|
-
else if (propName ===
|
|
144
|
+
else if (propName === "classes") {
|
|
136
145
|
// object with string keys and boolean values
|
|
137
146
|
var classNames = Object.keys(propValue);
|
|
138
147
|
var classNameCount = classNames.length;
|
|
@@ -143,7 +152,7 @@ var setProperties = function (domNode, properties, projectionOptions) {
|
|
|
143
152
|
}
|
|
144
153
|
}
|
|
145
154
|
}
|
|
146
|
-
else if (propName ===
|
|
155
|
+
else if (propName === "styles") {
|
|
147
156
|
// object with string keys and string (!) values
|
|
148
157
|
var styleNames = Object.keys(propValue);
|
|
149
158
|
var styleCount = styleNames.length;
|
|
@@ -156,30 +165,29 @@ var setProperties = function (domNode, properties, projectionOptions) {
|
|
|
156
165
|
}
|
|
157
166
|
}
|
|
158
167
|
}
|
|
159
|
-
else if (propName !==
|
|
168
|
+
else if (propName !== "key" && propValue !== null && propValue !== undefined) {
|
|
160
169
|
var type = typeof propValue;
|
|
161
|
-
if (type ===
|
|
162
|
-
if (propName.lastIndexOf(
|
|
170
|
+
if (type === "function") {
|
|
171
|
+
if (propName.lastIndexOf("on", 0) === 0) {
|
|
172
|
+
// lastIndexOf(,0)===0 -> startsWith
|
|
163
173
|
if (eventHandlerInterceptor) {
|
|
164
174
|
propValue = eventHandlerInterceptor(propName, propValue, domNode, properties); // intercept eventhandlers
|
|
165
175
|
}
|
|
166
|
-
if (propName ===
|
|
167
|
-
/* tslint:disable no-this-keyword no-invalid-this only-arrow-functions no-void-expression */
|
|
176
|
+
if (propName === "oninput") {
|
|
168
177
|
(function () {
|
|
169
178
|
// record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput
|
|
170
179
|
var oldPropValue = propValue;
|
|
171
180
|
propValue = function (evt) {
|
|
172
181
|
oldPropValue.apply(this, [evt]);
|
|
173
|
-
evt.target[
|
|
182
|
+
evt.target["oninput-value"] = evt.target.value; // may be HTMLTextAreaElement as well
|
|
174
183
|
};
|
|
175
|
-
}()
|
|
176
|
-
/* tslint:enable */
|
|
184
|
+
})();
|
|
177
185
|
}
|
|
178
|
-
domNode[propName] = propValue;
|
|
179
186
|
}
|
|
187
|
+
domNode[propName] = propValue;
|
|
180
188
|
}
|
|
181
189
|
else if (projectionOptions.namespace === NAMESPACE_SVG) {
|
|
182
|
-
if (propName ===
|
|
190
|
+
if (propName === "href") {
|
|
183
191
|
domNode.setAttributeNS(NAMESPACE_XLINK, propName, propValue);
|
|
184
192
|
}
|
|
185
193
|
else {
|
|
@@ -187,7 +195,7 @@ var setProperties = function (domNode, properties, projectionOptions) {
|
|
|
187
195
|
domNode.setAttribute(propName, propValue);
|
|
188
196
|
}
|
|
189
197
|
}
|
|
190
|
-
else if (type ===
|
|
198
|
+
else if (type === "string" && propName !== "value" && propName !== "innerHTML") {
|
|
191
199
|
domNode.setAttribute(propName, propValue);
|
|
192
200
|
}
|
|
193
201
|
else {
|
|
@@ -215,7 +223,13 @@ export var initPropertiesAndChildren = function (domNode, vnode, projectionOptio
|
|
|
215
223
|
}
|
|
216
224
|
setProperties(domNode, vnode.properties, projectionOptions);
|
|
217
225
|
if (vnode.properties && vnode.properties.afterCreate) {
|
|
218
|
-
vnode.properties.afterCreate.apply(vnode.properties.bind || vnode.properties, [
|
|
226
|
+
vnode.properties.afterCreate.apply(vnode.properties.bind || vnode.properties, [
|
|
227
|
+
domNode,
|
|
228
|
+
projectionOptions,
|
|
229
|
+
vnode.vnodeSelector,
|
|
230
|
+
vnode.properties,
|
|
231
|
+
vnode.children,
|
|
232
|
+
]);
|
|
219
233
|
}
|
|
220
234
|
};
|
|
221
235
|
export var createDom = function (vnode, parentNode, insertBefore, projectionOptions) {
|
|
@@ -223,7 +237,7 @@ export var createDom = function (vnode, parentNode, insertBefore, projectionOpti
|
|
|
223
237
|
var start = 0;
|
|
224
238
|
var vnodeSelector = vnode.vnodeSelector;
|
|
225
239
|
var doc = parentNode.ownerDocument;
|
|
226
|
-
if (vnodeSelector ===
|
|
240
|
+
if (vnodeSelector === "") {
|
|
227
241
|
domNode = vnode.domNode = doc.createTextNode(vnode.text);
|
|
228
242
|
if (insertBefore !== undefined) {
|
|
229
243
|
parentNode.insertBefore(domNode, insertBefore);
|
|
@@ -235,27 +249,29 @@ export var createDom = function (vnode, parentNode, insertBefore, projectionOpti
|
|
|
235
249
|
else {
|
|
236
250
|
for (var i = 0; i <= vnodeSelector.length; ++i) {
|
|
237
251
|
var c = vnodeSelector.charAt(i);
|
|
238
|
-
if (i === vnodeSelector.length || c ===
|
|
252
|
+
if (i === vnodeSelector.length || c === "." || c === "#") {
|
|
239
253
|
var type = vnodeSelector.charAt(start - 1);
|
|
240
254
|
var found = vnodeSelector.slice(start, i);
|
|
241
|
-
if (type ===
|
|
255
|
+
if (type === ".") {
|
|
242
256
|
domNode.classList.add(found);
|
|
243
257
|
}
|
|
244
|
-
else if (type ===
|
|
258
|
+
else if (type === "#") {
|
|
245
259
|
domNode.id = found;
|
|
246
260
|
}
|
|
247
261
|
else {
|
|
248
|
-
if (found ===
|
|
249
|
-
projectionOptions = extend(projectionOptions, {
|
|
262
|
+
if (found === "svg") {
|
|
263
|
+
projectionOptions = extend(projectionOptions, {
|
|
264
|
+
namespace: NAMESPACE_SVG,
|
|
265
|
+
});
|
|
250
266
|
}
|
|
251
267
|
if (projectionOptions.namespace !== undefined) {
|
|
252
268
|
domNode = vnode.domNode = doc.createElementNS(projectionOptions.namespace, found);
|
|
253
269
|
}
|
|
254
270
|
else {
|
|
255
|
-
domNode = vnode.domNode =
|
|
256
|
-
if (found ===
|
|
271
|
+
domNode = vnode.domNode = vnode.domNode || doc.createElement(found);
|
|
272
|
+
if (found === "input" && vnode.properties && vnode.properties.type !== undefined) {
|
|
257
273
|
// IE8 and older don't support setting input type after the DOM Node has been added to the document
|
|
258
|
-
domNode.setAttribute(
|
|
274
|
+
domNode.setAttribute("type", vnode.properties.type);
|
|
259
275
|
}
|
|
260
276
|
}
|
|
261
277
|
if (insertBefore !== undefined) {
|
|
@@ -282,7 +298,7 @@ var toggleClasses = function (domNode, classes, on) {
|
|
|
282
298
|
if (!classes) {
|
|
283
299
|
return;
|
|
284
300
|
}
|
|
285
|
-
classes.split(
|
|
301
|
+
classes.split(" ").forEach(function (classToToggle) {
|
|
286
302
|
if (classToToggle) {
|
|
287
303
|
domNode.classList.toggle(classToToggle, on);
|
|
288
304
|
}
|
|
@@ -300,13 +316,13 @@ var updateProperties = function (domNode, previousProperties, properties, projec
|
|
|
300
316
|
// assuming that properties will be nullified instead of missing is by design
|
|
301
317
|
var propValue = properties[propName];
|
|
302
318
|
var previousValue = previousProperties[propName];
|
|
303
|
-
if (propName ===
|
|
319
|
+
if (propName === "class") {
|
|
304
320
|
if (previousValue !== propValue) {
|
|
305
321
|
toggleClasses(domNode, previousValue, false);
|
|
306
322
|
toggleClasses(domNode, propValue, true);
|
|
307
323
|
}
|
|
308
324
|
}
|
|
309
|
-
else if (propName ===
|
|
325
|
+
else if (propName === "classes") {
|
|
310
326
|
var classList = domNode.classList;
|
|
311
327
|
var classNames = Object.keys(propValue);
|
|
312
328
|
var classNameCount = classNames.length;
|
|
@@ -326,7 +342,7 @@ var updateProperties = function (domNode, previousProperties, properties, projec
|
|
|
326
342
|
}
|
|
327
343
|
}
|
|
328
344
|
}
|
|
329
|
-
else if (propName ===
|
|
345
|
+
else if (propName === "styles") {
|
|
330
346
|
var styleNames = Object.keys(propValue);
|
|
331
347
|
var styleCount = styleNames.length;
|
|
332
348
|
for (var j = 0; j < styleCount; j++) {
|
|
@@ -342,24 +358,25 @@ var updateProperties = function (domNode, previousProperties, properties, projec
|
|
|
342
358
|
projectionOptions.styleApplyer(domNode, styleName, newStyleValue);
|
|
343
359
|
}
|
|
344
360
|
else {
|
|
345
|
-
projectionOptions.styleApplyer(domNode, styleName,
|
|
361
|
+
projectionOptions.styleApplyer(domNode, styleName, "");
|
|
346
362
|
}
|
|
347
363
|
}
|
|
348
364
|
}
|
|
349
365
|
else {
|
|
350
|
-
if (!propValue && typeof previousValue ===
|
|
351
|
-
propValue =
|
|
366
|
+
if (!propValue && typeof previousValue === "string") {
|
|
367
|
+
propValue = "";
|
|
352
368
|
}
|
|
353
|
-
if (propName ===
|
|
369
|
+
if (propName === "value") {
|
|
370
|
+
// value can be manipulated by the user directly and using event.preventDefault() is not an option
|
|
354
371
|
var domValue = domNode[propName];
|
|
355
|
-
if (domValue !== propValue // The 'value' in the DOM tree !== newValue
|
|
356
|
-
|
|
357
|
-
? domValue === domNode[
|
|
358
|
-
: propValue !== previousValue // Only update the value if the vdom changed
|
|
359
|
-
|
|
372
|
+
if (domValue !== propValue && // The 'value' in the DOM tree !== newValue
|
|
373
|
+
(domNode["oninput-value"]
|
|
374
|
+
? domValue === domNode["oninput-value"] // If the last reported value to 'oninput' does not match domValue, do nothing and wait for oninput
|
|
375
|
+
: propValue !== previousValue) // Only update the value if the vdom changed
|
|
376
|
+
) {
|
|
360
377
|
// The edge cases are described in the tests
|
|
361
378
|
domNode[propName] = propValue; // Reset the value, even if the virtual DOM did not change
|
|
362
|
-
domNode[
|
|
379
|
+
domNode["oninput-value"] = undefined;
|
|
363
380
|
} // else do not update the domNode, otherwise the cursor position would be changed
|
|
364
381
|
if (propValue !== previousValue) {
|
|
365
382
|
propertiesUpdated = true;
|
|
@@ -367,9 +384,10 @@ var updateProperties = function (domNode, previousProperties, properties, projec
|
|
|
367
384
|
}
|
|
368
385
|
else if (propValue !== previousValue) {
|
|
369
386
|
var type = typeof propValue;
|
|
370
|
-
if (type !==
|
|
387
|
+
if (type !== "function" || !projectionOptions.eventHandlerInterceptor) {
|
|
388
|
+
// Function updates are expected to be handled by the EventHandlerInterceptor
|
|
371
389
|
if (projectionOptions.namespace === NAMESPACE_SVG) {
|
|
372
|
-
if (propName ===
|
|
390
|
+
if (propName === "href") {
|
|
373
391
|
domNode.setAttributeNS(NAMESPACE_XLINK, propName, propValue);
|
|
374
392
|
}
|
|
375
393
|
else {
|
|
@@ -377,15 +395,16 @@ var updateProperties = function (domNode, previousProperties, properties, projec
|
|
|
377
395
|
domNode.setAttribute(propName, propValue);
|
|
378
396
|
}
|
|
379
397
|
}
|
|
380
|
-
else if (type ===
|
|
381
|
-
if (propName ===
|
|
398
|
+
else if (type === "string" && propName !== "innerHTML") {
|
|
399
|
+
if (propName === "role" && propValue === "") {
|
|
382
400
|
domNode.removeAttribute(propName);
|
|
383
401
|
}
|
|
384
402
|
else {
|
|
385
403
|
domNode.setAttribute(propName, propValue);
|
|
386
404
|
}
|
|
387
405
|
}
|
|
388
|
-
else if (domNode[propName] !== propValue) {
|
|
406
|
+
else if (domNode[propName] !== propValue) {
|
|
407
|
+
// Comparison is here for side-effects in Edge with scrollLeft and scrollTop
|
|
389
408
|
domNode[propName] = propValue;
|
|
390
409
|
}
|
|
391
410
|
propertiesUpdated = true;
|
|
@@ -408,7 +427,7 @@ var updateChildren = function (vnode, domNode, oldChildren, newChildren, project
|
|
|
408
427
|
var i;
|
|
409
428
|
var textUpdated = false;
|
|
410
429
|
while (newIndex < newChildrenLength) {
|
|
411
|
-
var oldChild =
|
|
430
|
+
var oldChild = oldIndex < oldChildrenLength ? oldChildren[oldIndex] : undefined;
|
|
412
431
|
var newChild = newChildren[newIndex];
|
|
413
432
|
if (oldChild !== undefined && same(oldChild, newChild)) {
|
|
414
433
|
textUpdated = updateDom(oldChild, newChild, projectionOptions) || textUpdated;
|
|
@@ -420,16 +439,17 @@ var updateChildren = function (vnode, domNode, oldChildren, newChildren, project
|
|
|
420
439
|
// Remove preceding missing children
|
|
421
440
|
for (i = oldIndex; i < findOldIndex; i++) {
|
|
422
441
|
nodeToRemove(oldChildren[i]);
|
|
423
|
-
checkDistinguishable(oldChildren, i, vnode,
|
|
442
|
+
checkDistinguishable(oldChildren, i, vnode, "removed");
|
|
424
443
|
}
|
|
425
|
-
textUpdated =
|
|
444
|
+
textUpdated =
|
|
445
|
+
updateDom(oldChildren[findOldIndex], newChild, projectionOptions) || textUpdated;
|
|
426
446
|
oldIndex = findOldIndex + 1;
|
|
427
447
|
}
|
|
428
448
|
else {
|
|
429
449
|
// New child
|
|
430
|
-
createDom(newChild, domNode,
|
|
450
|
+
createDom(newChild, domNode, oldIndex < oldChildrenLength ? oldChildren[oldIndex].domNode : undefined, projectionOptions);
|
|
431
451
|
nodeAdded(newChild);
|
|
432
|
-
checkDistinguishable(newChildren, newIndex, vnode,
|
|
452
|
+
checkDistinguishable(newChildren, newIndex, vnode, "added");
|
|
433
453
|
}
|
|
434
454
|
}
|
|
435
455
|
newIndex++;
|
|
@@ -438,7 +458,7 @@ var updateChildren = function (vnode, domNode, oldChildren, newChildren, project
|
|
|
438
458
|
// Remove child fragments
|
|
439
459
|
for (i = oldIndex; i < oldChildrenLength; i++) {
|
|
440
460
|
nodeToRemove(oldChildren[i]);
|
|
441
|
-
checkDistinguishable(oldChildren, i, vnode,
|
|
461
|
+
checkDistinguishable(oldChildren, i, vnode, "removed");
|
|
442
462
|
}
|
|
443
463
|
}
|
|
444
464
|
return textUpdated;
|
|
@@ -450,7 +470,7 @@ updateDom = function (previous, vnode, projectionOptions) {
|
|
|
450
470
|
return false; // By contract, VNode objects may not be modified anymore after passing them to maquette
|
|
451
471
|
}
|
|
452
472
|
var updated = false;
|
|
453
|
-
if (vnode.vnodeSelector ===
|
|
473
|
+
if (vnode.vnodeSelector === "") {
|
|
454
474
|
if (vnode.text !== previous.text) {
|
|
455
475
|
var newTextNode = domNode.ownerDocument.createTextNode(vnode.text);
|
|
456
476
|
domNode.parentNode.replaceChild(newTextNode, domNode);
|
|
@@ -461,8 +481,11 @@ updateDom = function (previous, vnode, projectionOptions) {
|
|
|
461
481
|
vnode.domNode = domNode;
|
|
462
482
|
}
|
|
463
483
|
else {
|
|
464
|
-
if (vnode.vnodeSelector.lastIndexOf(
|
|
465
|
-
|
|
484
|
+
if (vnode.vnodeSelector.lastIndexOf("svg", 0) === 0) {
|
|
485
|
+
// lastIndexOf(needle,0)===0 means StartsWith
|
|
486
|
+
projectionOptions = extend(projectionOptions, {
|
|
487
|
+
namespace: NAMESPACE_SVG,
|
|
488
|
+
});
|
|
466
489
|
}
|
|
467
490
|
if (previous.text !== vnode.text) {
|
|
468
491
|
updated = true;
|
|
@@ -474,10 +497,20 @@ updateDom = function (previous, vnode, projectionOptions) {
|
|
|
474
497
|
}
|
|
475
498
|
}
|
|
476
499
|
vnode.domNode = domNode;
|
|
477
|
-
updated =
|
|
478
|
-
|
|
500
|
+
updated =
|
|
501
|
+
updateChildren(vnode, domNode, previous.children, vnode.children, projectionOptions) ||
|
|
502
|
+
updated;
|
|
503
|
+
updated =
|
|
504
|
+
updateProperties(domNode, previous.properties, vnode.properties, projectionOptions) ||
|
|
505
|
+
updated;
|
|
479
506
|
if (vnode.properties && vnode.properties.afterUpdate) {
|
|
480
|
-
vnode.properties.afterUpdate.apply(vnode.properties.bind || vnode.properties, [
|
|
507
|
+
vnode.properties.afterUpdate.apply(vnode.properties.bind || vnode.properties, [
|
|
508
|
+
domNode,
|
|
509
|
+
projectionOptions,
|
|
510
|
+
vnode.vnodeSelector,
|
|
511
|
+
vnode.properties,
|
|
512
|
+
vnode.children,
|
|
513
|
+
]);
|
|
481
514
|
}
|
|
482
515
|
}
|
|
483
516
|
if (updated && vnode.properties && vnode.properties.updateAnimation) {
|
|
@@ -490,13 +523,13 @@ export var createProjection = function (vnode, projectionOptions) {
|
|
|
490
523
|
getLastRender: function () { return vnode; },
|
|
491
524
|
update: function (updatedVnode) {
|
|
492
525
|
if (vnode.vnodeSelector !== updatedVnode.vnodeSelector) {
|
|
493
|
-
throw new Error(
|
|
526
|
+
throw new Error("The selector for the root VNode may not be changed. (consider using dom.merge and add one extra level to the virtual DOM)");
|
|
494
527
|
}
|
|
495
528
|
var previousVNode = vnode;
|
|
496
529
|
vnode = updatedVnode;
|
|
497
530
|
updateDom(previousVNode, updatedVnode, projectionOptions);
|
|
498
531
|
},
|
|
499
|
-
domNode: vnode.domNode
|
|
532
|
+
domNode: vnode.domNode,
|
|
500
533
|
};
|
|
501
534
|
};
|
|
502
535
|
//# sourceMappingURL=projection.js.map
|