From 5f8ea88d2a06674eb5284581c19d6de82a713bac Mon Sep 17 00:00:00 2001 From: Kyle Mitchell Date: Wed, 2 Sep 2015 15:56:59 -0700 Subject: [PATCH 1/2] Preserve blanks and uses Return `{ use: "Term" }` and `{ blank: "Blank", value: "Value" }`, rather than convert those content elements to strings. This will allow downstream renderers to style term uses and blanks. --- README.md | 21 ++++----------------- element.js | 6 +++--- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 181ab9c..5cc0e7d 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,14 @@ assert.deepEqual( { content: [ 'A' ] }) ``` -Converts term uses to strings: +Passes term uses through: ```javascript assert.deepEqual( resolve( { content: [ { use: 'A' } ] }, { }), - { content: [ 'A' ] }) + { content: [ { use: 'A' } ] }) ``` Passes definitions through: @@ -34,14 +34,14 @@ assert.deepEqual( { content: [ { definition: 'A' } ] }) ``` -Replaces blanks with provided values, or a blank when none are provided: +Provides blank values: ```javascript assert.deepEqual( resolve( { content: [ { blank: 'A' } ] }, { A: '1' }), - { content: [ '1' ] }) + { content: [ { blank: 'A', value: '1' } ] }) assert.deepEqual( resolve( @@ -102,19 +102,6 @@ assert.deepEqual( ``` -Concatenates strings and contiguous objects that are resolved to strings: - -```javascript -assert.deepEqual( - resolve({ content: [ 'A', { use: 'B' } ] }, { }).content, - [ 'AB' ]) - -assert.deepEqual( - resolve({ content: [ { use: 'A' }, 'B' ] }, { }).content, - [ 'AB' ]) - -``` - Preserves conspicuous formatting flags: ```javascript diff --git a/element.js b/element.js index e64874f..97479fe 100644 --- a/element.js +++ b/element.js @@ -7,7 +7,7 @@ module.exports = function(element, values, numbering, headings) { if (predicate.text(element)) { return element } else if (predicate.use(element)) { - return element.use } + return element } else if (predicate.child(element)) { element.numbering = numbering.numbering element.form = resolve( @@ -44,9 +44,9 @@ module.exports = function(element, values, numbering, headings) { var value = element.blank // Filled if (values.hasOwnProperty(value)) { - return values[value] } + return { blank: value, value: values[value] } } // Empty else { - return {blank: value} } } + return { blank: value } } } else { throw new Error('Invalid content: ' + JSON.stringify(element)) } } From 07ced1b8b4af4d49446077fe0103167e75ce2329 Mon Sep 17 00:00:00 2001 From: Kyle Mitchell Date: Wed, 2 Sep 2015 16:00:54 -0700 Subject: [PATCH 2/2] Remove extra string concatenation logic All non-string content objects are now passed through as objects. There's no longer need to check whether resolution created contiguous strings in a content array. --- form.js | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/form.js b/form.js index 958e400..bf65e6a 100644 --- a/form.js +++ b/form.js @@ -2,7 +2,6 @@ var resolveElement = require('./element') module.exports = function(form, values, numberings, headings) { form.content = form.content - // resolve content .map(function(element, index) { var numbering = ( ( numberings && @@ -11,19 +10,4 @@ module.exports = function(form, values, numberings, headings) { numberings.content[index] : null ) return resolveElement(element, values, numbering, headings) }) - // Concatenate contiguous strings. - .reduce( - function(content, element, index) { - var count = content.length - var last = content[count - 1] - if ( - index > 0 && - typeof element === 'string' && - typeof last === 'string') - { content[count - 1] = last + element } - else { - content.push(element) } - return content }, - []) - return form }