UNPKG

mcuistore

Version:

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

96 lines (86 loc) 5.43 kB
(function() { // A template source represents a read/write way of accessing a template. This is to eliminate the need for template loading/saving // logic to be duplicated in every template engine (and means they can all work with anonymous templates, etc.) // // Two are provided by default: // 1. ko.templateSources.domElement - reads/writes the text content of an arbitrary DOM element // 2. ko.templateSources.anonymousElement - uses ko.utils.domData to read/write text *associated* with the DOM element, but // without reading/writing the actual element text content, since it will be overwritten // with the rendered template output. // You can implement your own template source if you want to fetch/store templates somewhere other than in DOM elements. // Template sources need to have the following functions: // text() - returns the template text from your storage location // text(value) - writes the supplied template text to your storage location // data(key) - reads values stored using data(key, value) - see below // data(key, value) - associates "value" with this template and the key "key". Is used to store information like "isRewritten". // // Optionally, template sources can also have the following functions: // nodes() - returns a DOM element containing the nodes of this template, where available // nodes(value) - writes the given DOM element to your storage location // If a DOM element is available for a given template source, template engines are encouraged to use it in preference over text() // for improved speed. However, all templateSources must supply text() even if they don't supply nodes(). // // Once you've implemented a templateSource, make your template engine use it by subclassing whatever template engine you were // using and overriding "makeTemplateSource" to return an instance of your custom template source. ko.templateSources = {}; // ---- ko.templateSources.domElement ----- ko.templateSources.domElement = function(element) { this.domElement = element; } ko.templateSources.domElement.prototype['text'] = function(/* valueToWrite */) { var tagNameLower = ko.utils.tagNameLower(this.domElement), elemContentsProperty = tagNameLower === "script" ? "text" : tagNameLower === "textarea" ? "value" : "innerHTML"; if (arguments.length == 0) { return this.domElement[elemContentsProperty]; } else { var valueToWrite = arguments[0]; if (elemContentsProperty === "innerHTML") ko.utils.setHtml(this.domElement, valueToWrite); else this.domElement[elemContentsProperty] = valueToWrite; } }; var dataDomDataPrefix = ko.utils.domData.nextKey() + "_"; ko.templateSources.domElement.prototype['data'] = function(key /*, valueToWrite */) { if (arguments.length === 1) { return ko.utils.domData.get(this.domElement, dataDomDataPrefix + key); } else { ko.utils.domData.set(this.domElement, dataDomDataPrefix + key, arguments[1]); } }; // ---- ko.templateSources.anonymousTemplate ----- // Anonymous templates are normally saved/retrieved as DOM nodes through "nodes". // For compatibility, you can also read "text"; it will be serialized from the nodes on demand. // Writing to "text" is still supported, but then the template data will not be available as DOM nodes. var anonymousTemplatesDomDataKey = ko.utils.domData.nextKey(); ko.templateSources.anonymousTemplate = function(element) { this.domElement = element; } ko.templateSources.anonymousTemplate.prototype = new ko.templateSources.domElement(); ko.templateSources.anonymousTemplate.prototype.constructor = ko.templateSources.anonymousTemplate; ko.templateSources.anonymousTemplate.prototype['text'] = function(/* valueToWrite */) { if (arguments.length == 0) { var templateData = ko.utils.domData.get(this.domElement, anonymousTemplatesDomDataKey) || {}; if (templateData.textData === undefined && templateData.containerData) templateData.textData = templateData.containerData.innerHTML; return templateData.textData; } else { var valueToWrite = arguments[0]; ko.utils.domData.set(this.domElement, anonymousTemplatesDomDataKey, {textData: valueToWrite}); } }; ko.templateSources.domElement.prototype['nodes'] = function(/* valueToWrite */) { if (arguments.length == 0) { var templateData = ko.utils.domData.get(this.domElement, anonymousTemplatesDomDataKey) || {}; return templateData.containerData; } else { var valueToWrite = arguments[0]; ko.utils.domData.set(this.domElement, anonymousTemplatesDomDataKey, {containerData: valueToWrite}); } }; ko.exportSymbol('templateSources', ko.templateSources); ko.exportSymbol('templateSources.domElement', ko.templateSources.domElement); ko.exportSymbol('templateSources.anonymousTemplate', ko.templateSources.anonymousTemplate); })();