Skip to content

Commit 526bb7b

Browse files
authored
Merge pull request #84 from jviide/comment-support
Add support for HTML comments
2 parents 4d50d16 + 124dad8 commit 526bb7b

File tree

2 files changed

+44
-18
lines changed

2 files changed

+44
-18
lines changed

src/build.mjs

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ const MODE_SLASH = 0;
44
const MODE_TEXT = 1;
55
const MODE_WHITESPACE = 2;
66
const MODE_TAGNAME = 3;
7-
const MODE_PROP_SET = 4;
8-
const MODE_PROP_APPEND = 5;
7+
const MODE_COMMENT = 4;
8+
const MODE_PROP_SET = 5;
9+
const MODE_PROP_APPEND = 6;
910

1011
const TAG_SET = 1;
1112
const CHILD_APPEND = 0;
@@ -144,25 +145,28 @@ export const build = function(statics) {
144145
current.push(true, PROP_SET, buffer);
145146
}
146147
}
147-
else if (MINI && mode === MODE_PROP_SET) {
148-
(current[2] = current[2] || {})[propName] = field ? buffer ? (buffer + fields[field]) : fields[field] : buffer;
149-
mode = MODE_PROP_APPEND;
150-
}
151-
else if (MINI && mode === MODE_PROP_APPEND) {
152-
if (buffer || field) {
153-
current[2][propName] += field ? buffer + fields[field] : buffer;
154-
}
155-
}
156-
else if (!MINI && mode >= MODE_PROP_SET) {
157-
if (buffer || (!field && mode === MODE_PROP_SET)) {
158-
current.push(buffer, mode, propName);
159-
mode = MODE_PROP_APPEND;
148+
else if (mode >= MODE_PROP_SET) {
149+
if (MINI) {
150+
if (mode === MODE_PROP_SET) {
151+
(current[2] = current[2] || {})[propName] = field ? buffer ? (buffer + fields[field]) : fields[field] : buffer;
152+
mode = MODE_PROP_APPEND;
153+
}
154+
else if (field || buffer) {
155+
current[2][propName] += field ? buffer + fields[field] : buffer;
156+
}
160157
}
161-
if (field) {
162-
current.push(field, mode, propName);
163-
mode = MODE_PROP_APPEND;
158+
else {
159+
if (buffer || (!field && mode === MODE_PROP_SET)) {
160+
current.push(buffer, mode, propName);
161+
mode = MODE_PROP_APPEND;
162+
}
163+
if (field) {
164+
current.push(field, mode, propName);
165+
mode = MODE_PROP_APPEND;
166+
}
164167
}
165168
}
169+
166170
buffer = '';
167171
};
168172

@@ -193,6 +197,16 @@ export const build = function(statics) {
193197
buffer += char;
194198
}
195199
}
200+
else if (mode === MODE_COMMENT) {
201+
// Ignore everything until the last three characters are '-', '-' and '>'
202+
if (buffer === '--' && char === '>') {
203+
mode = MODE_TEXT;
204+
buffer = '';
205+
}
206+
else {
207+
buffer = char + buffer[0];
208+
}
209+
}
196210
else if (quote) {
197211
if (char === quote) {
198212
quote = '';
@@ -238,6 +252,11 @@ export const build = function(statics) {
238252
else {
239253
buffer += char;
240254
}
255+
256+
if (mode === MODE_TAGNAME && buffer === '!--') {
257+
mode = MODE_COMMENT;
258+
current = current[0];
259+
}
241260
}
242261
}
243262
commit();

test/index.test.mjs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,11 @@ describe('htm', () => {
195195
html`<a ...${obj} b="1" />`;
196196
expect(obj).toEqual({});
197197
});
198+
199+
test('ignore HTML comments', () => {
200+
expect(html`<a><!-- Hello, world! --></a>`).toEqual(h('a', null));
201+
expect(html`<a><!-- Hello,\nworld! --></a>`).toEqual(h('a', null));
202+
expect(html`<a><!-- ${'Hello, world!'} --></a>`).toEqual(h('a', null));
203+
expect(html`<a><!--> Hello, world <!--></a>`).toEqual(h('a', null));
204+
});
198205
});

0 commit comments

Comments
 (0)