UNPKG

mcuistore

Version:

This is a repository for storing the UI components for SCBT project. The following are the setup steps to setup.

67 lines (56 loc) 3.85 kB
ko.templateRewriting = (function () { 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 (allValidators.hasOwnProperty(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: function (template, templateEngine, templateDocument) { if (!templateEngine['isTemplateRewritten'](template, templateDocument)) templateEngine['rewriteTemplate'](template, function (htmlString) { return ko.templateRewriting.memoizeBindingAttributeSyntax(htmlString, templateEngine); }, templateDocument); }, memoizeBindingAttributeSyntax: function (htmlString, templateEngine) { return htmlString.replace(memoizeDataBindingAttributeSyntaxRegex, function () { return constructMemoizedTagReplacement(/* dataBindAttributeValue: */ arguments[4], /* tagToRetain: */ arguments[1], /* nodeName: */ arguments[2], templateEngine); }).replace(memoizeVirtualContainerBindingSyntaxRegex, function() { return constructMemoizedTagReplacement(/* dataBindAttributeValue: */ arguments[1], /* tagToRetain: */ "<!-- ko -->", /* nodeName: */ "#comment", templateEngine); }); }, applyMemoizedBindingsToNextSibling: function (bindings, nodeName) { return ko.memoization.memoize(function (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);