mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-03 06:27:02 +03:00
Drop unused Knockout functionality
Especially dropped memoization for improved speed.
This commit is contained in:
parent
e7975d4f82
commit
1e735bf4a9
30 changed files with 206 additions and 814 deletions
|
|
@ -16,5 +16,3 @@ ko.nativeTemplateEngine.prototype['renderTemplateSource'] = (templateSource, bin
|
|||
|
||||
ko.nativeTemplateEngine.instance = new ko.nativeTemplateEngine();
|
||||
ko.setTemplateEngine(ko.nativeTemplateEngine.instance);
|
||||
|
||||
ko.exportSymbol('nativeTemplateEngine', ko.nativeTemplateEngine);
|
||||
|
|
|
|||
|
|
@ -68,5 +68,3 @@ ko.templateEngine.prototype['rewriteTemplate'] = function (template, rewriterCal
|
|||
templateSource['text'](rewritten);
|
||||
templateSource['data']("isRewritten", true);
|
||||
};
|
||||
|
||||
ko.exportSymbol('templateEngine', ko.templateEngine);
|
||||
|
|
|
|||
|
|
@ -1,66 +0,0 @@
|
|||
|
||||
ko.templateRewriting = (() => {
|
||||
var memoizeDataBindingAttributeSyntaxRegex = /(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi;
|
||||
var memoizeVirtualContainerBindingSyntaxRegex = /<!--\s*ko\b\s*([\s\S]*?)\s*-->/g;
|
||||
|
||||
function validateDataBindValuesForRewriting(keyValueArray) {
|
||||
var allValidators = ko.expressionRewriting.bindingRewriteValidators;
|
||||
for (var i = 0; i < keyValueArray.length; i++) {
|
||||
var key = keyValueArray[i]['key'];
|
||||
if (Object.prototype.hasOwnProperty.call(allValidators, key)) {
|
||||
var validator = allValidators[key];
|
||||
|
||||
if (typeof validator === "function") {
|
||||
var possibleErrorMessage = validator(keyValueArray[i]['value']);
|
||||
if (possibleErrorMessage)
|
||||
throw new Error(possibleErrorMessage);
|
||||
} else if (!validator) {
|
||||
throw new Error("This template engine does not support the '" + key + "' binding within its templates");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function constructMemoizedTagReplacement(dataBindAttributeValue, tagToRetain, nodeName, templateEngine) {
|
||||
var dataBindKeyValueArray = ko.expressionRewriting.parseObjectLiteral(dataBindAttributeValue);
|
||||
validateDataBindValuesForRewriting(dataBindKeyValueArray);
|
||||
var rewrittenDataBindAttributeValue = ko.expressionRewriting.preProcessBindings(dataBindKeyValueArray, {'valueAccessors':true});
|
||||
|
||||
// For no obvious reason, Opera fails to evaluate rewrittenDataBindAttributeValue unless it's wrapped in an additional
|
||||
// anonymous function, even though Opera's built-in debugger can evaluate it anyway. No other browser requires this
|
||||
// extra indirection.
|
||||
var applyBindingsToNextSiblingScript =
|
||||
"ko.__tr_ambtns(function($context,$element){return(function(){return{ " + rewrittenDataBindAttributeValue + " } })()},'" + nodeName.toLowerCase() + "')";
|
||||
return templateEngine['createJavaScriptEvaluatorBlock'](applyBindingsToNextSiblingScript) + tagToRetain;
|
||||
}
|
||||
|
||||
return {
|
||||
ensureTemplateIsRewritten: (template, templateEngine, templateDocument) => {
|
||||
if (!templateEngine['isTemplateRewritten'](template, templateDocument))
|
||||
templateEngine['rewriteTemplate'](template, htmlString =>
|
||||
ko.templateRewriting.memoizeBindingAttributeSyntax(htmlString, templateEngine)
|
||||
, templateDocument);
|
||||
},
|
||||
|
||||
memoizeBindingAttributeSyntax: (htmlString, templateEngine) => {
|
||||
return htmlString.replace(memoizeDataBindingAttributeSyntaxRegex, (...args) =>
|
||||
constructMemoizedTagReplacement(/* dataBindAttributeValue: */ args[4], /* tagToRetain: */ args[1], /* nodeName: */ args[2], templateEngine)
|
||||
).replace(memoizeVirtualContainerBindingSyntaxRegex, (...args) =>
|
||||
constructMemoizedTagReplacement(/* dataBindAttributeValue: */ args[1], /* tagToRetain: */ "<!-- ko -->", /* nodeName: */ "#comment", templateEngine)
|
||||
);
|
||||
},
|
||||
|
||||
applyMemoizedBindingsToNextSibling: (bindings, nodeName) => {
|
||||
return ko.memoization.memoize((domNode, bindingContext) => {
|
||||
var nodeToBind = domNode.nextSibling;
|
||||
if (nodeToBind && nodeToBind.nodeName.toLowerCase() === nodeName) {
|
||||
ko.applyBindingAccessorsToNode(nodeToBind, bindings, bindingContext);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
|
||||
// Exported only because it has to be referenced by string lookup from within rewritten template
|
||||
ko.exportSymbol('__tr_ambtns', ko.templateRewriting.applyMemoizedBindingsToNextSibling);
|
||||
|
|
@ -125,8 +125,4 @@
|
|||
var valueToWrite = arguments[0];
|
||||
setTemplateDomData(this.domElement, {textData: valueToWrite});
|
||||
};
|
||||
|
||||
ko.exportSymbol('templateSources', ko.templateSources);
|
||||
ko.exportSymbol('templateSources.domElement', ko.templateSources.domElement);
|
||||
ko.exportSymbol('templateSources.anonymousTemplate', ko.templateSources.anonymousTemplate);
|
||||
})();
|
||||
|
|
|
|||
29
vendors/knockout/src/templating/templating.js
vendored
29
vendors/knockout/src/templating/templating.js
vendored
|
|
@ -61,10 +61,6 @@
|
|||
if (node.nodeType === 1 || node.nodeType === 8)
|
||||
ko.applyBindings(bindingContext, node);
|
||||
});
|
||||
invokeForEachNodeInContinuousRange(firstNode, lastNode, node => {
|
||||
if (node.nodeType === 1 || node.nodeType === 8)
|
||||
ko.memoization.unmemoizeDomNodeAndDescendants(node, [bindingContext]);
|
||||
});
|
||||
|
||||
// Make sure any changes done by applyBindings or unmemoize are reflected in the array
|
||||
ko.utils.fixUpContinuousNodeArray(continuousNodeArray, parentNode);
|
||||
|
|
@ -82,7 +78,10 @@
|
|||
var firstTargetNode = targetNodeOrNodeArray && getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
||||
var templateDocument = (firstTargetNode || template || {}).ownerDocument;
|
||||
var templateEngineToUse = (options['templateEngine'] || _templateEngine);
|
||||
ko.templateRewriting.ensureTemplateIsRewritten(template, templateEngineToUse, templateDocument);
|
||||
if (!templateEngineToUse['isTemplateRewritten'](template, templateDocument)) {
|
||||
templateEngineToUse['rewriteTemplate'](template, htmlString => htmlString, templateDocument);
|
||||
}
|
||||
|
||||
var renderedNodesArray = templateEngineToUse['renderTemplate'](template, bindingContext, options, templateDocument);
|
||||
|
||||
// Loosely check result is an array of DOM nodes
|
||||
|
|
@ -95,10 +94,6 @@
|
|||
ko.virtualElements.setDomNodeChildren(targetNodeOrNodeArray, renderedNodesArray);
|
||||
haveAddedNodesToParent = true;
|
||||
break;
|
||||
case "replaceNode":
|
||||
ko.utils.replaceDomNodes(targetNodeOrNodeArray, renderedNodesArray);
|
||||
haveAddedNodesToParent = true;
|
||||
break;
|
||||
case "ignoreTargetNode": break;
|
||||
default:
|
||||
throw new Error("Unknown renderMode: " + renderMode);
|
||||
|
|
@ -137,7 +132,6 @@
|
|||
var firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
||||
|
||||
var whenToDispose = () => (!firstTargetNode) || !ko.utils.domNodeIsAttachedToDocument(firstTargetNode); // Passive disposal (on next evaluation)
|
||||
var activelyDisposeWhenNodeIsRemoved = (firstTargetNode && renderMode == "replaceNode") ? firstTargetNode.parentNode : firstTargetNode;
|
||||
|
||||
return ko.computed( // So the DOM is automatically updated when any dependency changes
|
||||
() => {
|
||||
|
|
@ -148,20 +142,12 @@
|
|||
|
||||
var templateName = resolveTemplateName(template, bindingContext['$data'], bindingContext),
|
||||
renderedNodesArray = executeTemplate(targetNodeOrNodeArray, renderMode, templateName, bindingContext, options);
|
||||
|
||||
if (renderMode == "replaceNode") {
|
||||
targetNodeOrNodeArray = renderedNodesArray;
|
||||
firstTargetNode = getFirstNodeFromPossibleArray(targetNodeOrNodeArray);
|
||||
}
|
||||
},
|
||||
null,
|
||||
{ disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: activelyDisposeWhenNodeIsRemoved }
|
||||
{ disposeWhen: whenToDispose, disposeWhenNodeIsRemoved: firstTargetNode }
|
||||
);
|
||||
} else {
|
||||
// We don't yet have a DOM node to evaluate, so use a memo and render the template later when there is a DOM node
|
||||
return ko.memoization.memoize(domNode =>
|
||||
ko.renderTemplate(template, dataOrBindingContext, options, domNode, "replaceNode")
|
||||
);
|
||||
console.log('no targetNodeOrNodeArray');
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -343,6 +329,3 @@
|
|||
|
||||
ko.virtualElements.allowedBindings['template'] = true;
|
||||
})();
|
||||
|
||||
ko.exportSymbol('setTemplateEngine', ko.setTemplateEngine);
|
||||
ko.exportSymbol('renderTemplate', ko.renderTemplate);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue