From 36c501ce440f90f6409394b38ed49e185e82d239 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Fri, 7 Aug 2020 14:36:01 -0700 Subject: [PATCH] fix: add support for nested tag long hand properties (#1592) (cherry picked from commit 8f595fd493d4462f8cc2b103d8ea77e04616edea) --- .../taglib/taglib-loader/loadTagFromProps.js | 17 +++++++++++--- .../fixtures/repeated-nested-tag/marko.json | 22 +++++++++++++++++++ .../fixtures/repeated-nested-tag/test.js | 20 +++++++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/marko.json create mode 100644 packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/test.js diff --git a/packages/marko/src/taglib/taglib-loader/loadTagFromProps.js b/packages/marko/src/taglib/taglib-loader/loadTagFromProps.js index cccb3a2bb..90aefd00a 100644 --- a/packages/marko/src/taglib/taglib-loader/loadTagFromProps.js +++ b/packages/marko/src/taglib/taglib-loader/loadTagFromProps.js @@ -288,7 +288,7 @@ class TagLoader { var nestedTagName = part.substring(1, part.length - 1); nestedTag.name = nestedTagName; - nestedTag.isRepeated = isNestedTagRepeated; + nestedTag.isRepeated = nestedTag.isRepeated || isNestedTagRepeated; // Use the name of the attribute as the target property unless // this target property was explicitly provided nestedTag.targetProperty = @@ -445,6 +445,17 @@ class TagLoader { var tag = this.tag; tag.type = value; } + + isRepeated(value) { + var tag = this.tag; + tag.isRepeated = value; + } + + targetProperty(value) { + var tag = this.tag; + tag.targetProperty = value; + } + /** * Declare a nested tag. * @@ -454,7 +465,7 @@ class TagLoader { * "nested-tags": { * "tab": { * "target-property": "tabs", - * "isRepeated": true + * "is-repeated": true * } * } * } @@ -465,7 +476,7 @@ class TagLoader { forEachEntry(value, (nestedTagName, nestedTagDef) => { var dependencyChain = this.dependencyChain.append( - `nestedTags["${nestedTagName}]` + `nestedTags["${nestedTagName}"]` ); var nestedTag = new types.Tag(filePath); diff --git a/packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/marko.json b/packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/marko.json new file mode 100644 index 000000000..bcdf50d87 --- /dev/null +++ b/packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/marko.json @@ -0,0 +1,22 @@ +{ + "tags": { + "longhand-tabs": { + "nested-tags": { + "tab": { + "target-property": "tabs", + "is-repeated": true, + "attributes": { + "label": { + "type": "string" + } + } + } + }, + "attributes": { + "orientation": { + "type": "string" + } + } + } + } +} diff --git a/packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/test.js b/packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/test.js new file mode 100644 index 000000000..addc728b9 --- /dev/null +++ b/packages/marko/test/taglib-loader/fixtures/repeated-nested-tag/test.js @@ -0,0 +1,20 @@ +var nodePath = require("path"); + +exports.check = function(taglibLoader, expect) { + var taglib = taglibLoader.loadTaglibFromFile( + nodePath.join(__dirname, "marko.json") + ); + expect(taglib != null).to.equal(true); + + expect(taglib.tags) + .has.property("longhand-tabs") + .with.property("nestedTags") + .with.property("tab"); + + const tab = taglib.tags["longhand-tabs"].nestedTags.tab; + expect(tab).has.property("isRepeated", true); + expect(tab).has.property("targetProperty", "tabs"); + expect(tab) + .has.property("attributes") + .with.property("label"); +};