mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
KnockoutJS simplify renderMode because only 1 option is used
This commit is contained in:
parent
dde1183174
commit
97a369048e
1 changed files with 32 additions and 45 deletions
77
vendors/knockout/src/templating/templating.js
vendored
77
vendors/knockout/src/templating/templating.js
vendored
|
|
@ -1,5 +1,5 @@
|
||||||
(() => {
|
(() => {
|
||||||
var renderTemplateSource = templateSource => {
|
const renderTemplateSource = templateSource => {
|
||||||
var templateNodes = templateSource.nodes ? templateSource.nodes() : null;
|
var templateNodes = templateSource.nodes ? templateSource.nodes() : null;
|
||||||
return templateNodes
|
return templateNodes
|
||||||
? [...templateNodes.cloneNode(true).childNodes]
|
? [...templateNodes.cloneNode(true).childNodes]
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
: null;
|
: null;
|
||||||
},
|
},
|
||||||
|
|
||||||
executeTemplate = (targetNodeOrNodeArray, renderMode, template, bindingContext) => {
|
executeTemplate = (targetNodeOrNodeArray, replaceChildren, template, bindingContext) => {
|
||||||
var firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
var firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
||||||
var templateDocument = (firstTargetNode || template || {}).ownerDocument;
|
var templateDocument = (firstTargetNode || template || {}).ownerDocument;
|
||||||
|
|
||||||
|
|
@ -70,22 +70,10 @@
|
||||||
if ((typeof renderedNodesArray.length != "number") || (renderedNodesArray.length > 0 && typeof renderedNodesArray[0].nodeType != "number"))
|
if ((typeof renderedNodesArray.length != "number") || (renderedNodesArray.length > 0 && typeof renderedNodesArray[0].nodeType != "number"))
|
||||||
throw new Error("Template engine must return an array of DOM nodes");
|
throw new Error("Template engine must return an array of DOM nodes");
|
||||||
|
|
||||||
var haveAddedNodesToParent = false;
|
if (replaceChildren) {
|
||||||
switch (renderMode) {
|
ko.virtualElements.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray);
|
||||||
case "replaceChildren":
|
|
||||||
ko.virtualElements.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray);
|
|
||||||
haveAddedNodesToParent = true;
|
|
||||||
break;
|
|
||||||
case "ignoreTargetNode": break;
|
|
||||||
default:
|
|
||||||
throw new Error("Unknown renderMode: " + renderMode);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (haveAddedNodesToParent) {
|
|
||||||
activateBindingsOnContinuousNodeArray(renderedNodesArray, bindingContext);
|
activateBindingsOnContinuousNodeArray(renderedNodesArray, bindingContext);
|
||||||
if (renderMode == "replaceChildren") {
|
ko.bindingEvent.notify(targetNodeOrNodeArray, ko.bindingEvent.childrenComplete);
|
||||||
ko.bindingEvent.notify(targetNodeOrNodeArray, ko.bindingEvent.childrenComplete);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return renderedNodesArray;
|
return renderedNodesArray;
|
||||||
|
|
@ -99,34 +87,33 @@
|
||||||
}
|
}
|
||||||
// 2. A function of (data, context) returning a string ELSE 3. A string
|
// 2. A function of (data, context) returning a string ELSE 3. A string
|
||||||
return (typeof template === 'function') ? template(data, context) : template;
|
return (typeof template === 'function') ? template(data, context) : template;
|
||||||
|
},
|
||||||
|
|
||||||
|
renderTemplate = (template, dataOrBindingContext, options, targetNodeOrNodeArray) => {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
if (targetNodeOrNodeArray) {
|
||||||
|
var firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
||||||
|
|
||||||
|
var whenToDispose = () => (!firstTargetNode) || !ko.utils.domNodeIsAttachedToDocument(firstTargetNode); // Passive disposal (on next evaluation)
|
||||||
|
|
||||||
|
return ko.computed( // So the DOM is automatically updated when any dependency changes
|
||||||
|
() => {
|
||||||
|
// Ensure we've got a proper binding context to work with
|
||||||
|
var bindingContext = (dataOrBindingContext instanceof ko.bindingContext)
|
||||||
|
? dataOrBindingContext
|
||||||
|
: new ko.bindingContext(dataOrBindingContext, null, null, { "exportDependencies": true });
|
||||||
|
|
||||||
|
var templateName = resolveTemplateName(template, bindingContext['$data'], bindingContext);
|
||||||
|
executeTemplate(targetNodeOrNodeArray, true, templateName, bindingContext, options);
|
||||||
|
},
|
||||||
|
{ disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: firstTargetNode }
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log('no targetNodeOrNodeArray');
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ko.renderTemplate = function (template, dataOrBindingContext, options, targetNodeOrNodeArray, renderMode) {
|
|
||||||
options = options || {};
|
|
||||||
renderMode = renderMode || "replaceChildren";
|
|
||||||
|
|
||||||
if (targetNodeOrNodeArray) {
|
|
||||||
var firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
|
||||||
|
|
||||||
var whenToDispose = () => (!firstTargetNode) || !ko.utils.domNodeIsAttachedToDocument(firstTargetNode); // Passive disposal (on next evaluation)
|
|
||||||
|
|
||||||
return ko.computed( // So the DOM is automatically updated when any dependency changes
|
|
||||||
() => {
|
|
||||||
// Ensure we've got a proper binding context to work with
|
|
||||||
var bindingContext = (dataOrBindingContext instanceof ko.bindingContext)
|
|
||||||
? dataOrBindingContext
|
|
||||||
: new ko.bindingContext(dataOrBindingContext, null, null, { "exportDependencies": true });
|
|
||||||
|
|
||||||
var templateName = resolveTemplateName(template, bindingContext['$data'], bindingContext);
|
|
||||||
executeTemplate(targetNodeOrNodeArray, renderMode, templateName, bindingContext, options);
|
|
||||||
},
|
|
||||||
{ disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: firstTargetNode }
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
console.log('no targetNodeOrNodeArray');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
ko.renderTemplateForEach = (template, arrayOrObservableArray, options, targetNode, parentBindingContext) => {
|
ko.renderTemplateForEach = (template, arrayOrObservableArray, options, targetNode, parentBindingContext) => {
|
||||||
// Since setDomNodeChildrenFromArrayMapping always calls executeTemplateForArrayItem and then
|
// Since setDomNodeChildrenFromArrayMapping always calls executeTemplateForArrayItem and then
|
||||||
// activateBindingsCallback for added items, we can store the binding context in the former to use in the latter.
|
// activateBindingsCallback for added items, we can store the binding context in the former to use in the latter.
|
||||||
|
|
@ -140,7 +127,7 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
var templateName = resolveTemplateName(template, arrayValue, arrayItemContext);
|
var templateName = resolveTemplateName(template, arrayValue, arrayItemContext);
|
||||||
return executeTemplate(targetNode, "ignoreTargetNode", templateName, arrayItemContext, options);
|
return executeTemplate(targetNode, false, templateName, arrayItemContext, options);
|
||||||
};
|
};
|
||||||
|
|
||||||
// This will be called whenever setDomNodeChildrenFromArrayMapping has added nodes to targetNode
|
// This will be called whenever setDomNodeChildrenFromArrayMapping has added nodes to targetNode
|
||||||
|
|
@ -264,7 +251,7 @@
|
||||||
'exportDependencies': true
|
'exportDependencies': true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
templateComputed = ko.renderTemplate(template, innerBindingContext, options, element);
|
templateComputed = renderTemplate(template, innerBindingContext, options, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
// It only makes sense to have a single template computed per element (otherwise which one should have its output displayed?)
|
// It only makes sense to have a single template computed per element (otherwise which one should have its output displayed?)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue