From d58e70610e768c21d36ef4f01eb3454a544d8ecf Mon Sep 17 00:00:00 2001 From: David Greenspan Date: Mon, 13 May 2013 11:53:28 -0700 Subject: [PATCH] work on ui API --- packages/ui/html_builder.js | 66 ++++++++++++++++--------------------- packages/ui/package.js | 3 +- 2 files changed, 30 insertions(+), 39 deletions(-) diff --git a/packages/ui/html_builder.js b/packages/ui/html_builder.js index fe37362717..d4b898473b 100644 --- a/packages/ui/html_builder.js +++ b/packages/ui/html_builder.js @@ -1,19 +1,13 @@ -ComponentInfo = function (constructorName) { - this.constructorName = constructorName; -// this.children = {}; -// this.elements = {}; -}; - HtmlBuilder = function () { this.htmlBuf = []; - this.rootComponentInfo = null; - this.currentComponentInfo = null; - // parent chain of currentComponent - this.componentInfoStack = []; + //this.rootComponent = null; + //this.currentComponent = null; + // parent chain of currentComponent, exclusive + //this.componentStack = []; // this.builderId = Random.id(); // this.nextElementNum = 1; @@ -43,30 +37,20 @@ var escapeOne = function(c) { return escapeMap[c]; }; -var evaluateStringOrHelper = function (stringOrHelper, component) { - if ((typeof stringOrHelper) === 'string') - return stringOrHelper; - - if (! (component instanceof Component)) - throw new Error("Can only use a helper from a Component"); - if (! component.evaluateHelper) - throw new Error("Enclosing Component does not support helpers"); - - return component.evaluateHelper(stringOrHelper); +var encodeEntities = function (text, isQuoted) { + // All HTML entities in templates are decoded by the template parser + // and given to HtmlBuilder as Unicode. We then re-encode some + // characters into entities here, but not most characters. If + // you're trying to use entities to send ASCII representations of + // non-ASCII characters to the client, you'll need a different + // policy here. + return text.replace(isQuoted ? ESCAPED_CHARS_QUOTED_REGEX : + ESCAPED_CHARS_UNQUOTED_REGEX, escapeOne); }; _.extend(HtmlBuilder.prototype, { - encodeEntities: function (text, isQuoted) { - // All HTML entities in templates are decoded by the template - // parser and given to HtmlBuilder as Unicode. We then re-encode - // some characters into entities here, but not most characters. - // If you're trying to use entities to send ASCII representations - // of non-ASCII characters to the client, you'll need a different - // policy here. - return text.replace(isQuoted ? ESCAPED_CHARS_QUOTED_REGEX : - ESCAPED_CHARS_UNQUOTED_REGEX, escapeOne); - }, - computeAttributeValue: function (expression) { + _encodeEntities: encodeEntities, + /*computeAttributeValue: function (expression) { var self = this; if ((typeof expression) === 'string') @@ -86,7 +70,7 @@ _.extend(HtmlBuilder.prototype, { }); return initialValue; - }, + },*/ openTag: function (tagName, attrs, options) { var self = this; @@ -105,8 +89,9 @@ _.extend(HtmlBuilder.prototype, { throw new Error("Illegal HTML attribute name: " + attrName); buf.push(' ', attrName, '="'); - buf.push(self.encodeEntities(self.computeAttributeValue(attrValue), - true)); + var initialValue = (typeof attrValue === 'string' ? + attrValue : attrValue()); + buf.push(self._encodeEntities(initialValue, true)); buf.push('"'); }); if (options.selfClose) @@ -119,14 +104,19 @@ _.extend(HtmlBuilder.prototype, { throw new Error("Illegal HTML tag name: " + tagName); this.htmlBuf.push(''); }, - text: function (stringOrHelper) { - var text = evaluateStringOrHelper(stringOrHelper); + text: function (stringOrFunction) { + var text = (typeof stringOrFunction === 'string' ? + stringOrFunction : stringOrFunction()); this.htmlBuf.push(this.encodeEntities(text)); }, - rawHtml: function (stringOrHelper) { - var html = evaluateStringOrHelper(stringOrHelper); + rawHtml: function (stringOrFunction) { + var html = (typeof stringOrFunction === 'string' ? + stringOrFunction : stringOrFunction()); this.htmlBuf.push(html); }, + component: function (componentOrFunction) { + // XXX + }, finish: function () { return this.htmlBuf.join(''); } diff --git a/packages/ui/package.js b/packages/ui/package.js index a117b58d10..785291e434 100644 --- a/packages/ui/package.js +++ b/packages/ui/package.js @@ -11,7 +11,8 @@ Package.on_use(function (api) { Package.on_test(function (api) { api.use('tinytest'); - api.use(['test-helpers', 'dom-utils'], 'client'); + api.use('ui'); + api.use(['test-helpers', 'domutils'], 'client'); // api.add_files([ // 'component_tests.js'