Skip to content
This repository was archived by the owner on Mar 8, 2020. It is now read-only.

Commit 69d9776

Browse files
committed
Fix text interpolation, Fixes #8
1 parent ce90ca5 commit 69d9776

File tree

5 files changed

+116
-11
lines changed

5 files changed

+116
-11
lines changed

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "babel-plugin-jsx-dom-expressions",
33
"description": "A JSX to DOM plugin that wraps expressions for fine grained change detection",
4-
"version": "0.7.3",
4+
"version": "0.7.4",
55
"author": "Ryan Carniato",
66
"license": "MIT",
77
"repository": {

src/index.js

+4-9
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,7 @@ export default (babel) => {
9898
}
9999

100100
function trimWhitespace(text) {
101-
return text.split('\n').map((t, i) => {
102-
if (/^\s*$/.test(t)) return '';
103-
if (i === 0) return t.replace(/\s+/g, ' ');
104-
return t
105-
.replace(/^\s+/g, '')
106-
.replace(/\s+/g, ' ');
107-
}).join('');
101+
return text.replace(/\n\s*/g, '').replace(/\s+/g, ' ');
108102
}
109103

110104
function checkLength(children) {
@@ -337,8 +331,9 @@ export default (babel) => {
337331
transformChildren(path, jsx, opts, results);
338332
return results;
339333
} else if (t.isJSXText(jsx)) {
340-
if (/^\s*$/.test(jsx.value)) return null;
341-
let results = { template: trimWhitespace(jsx.value), decl: [], exprs: [] };
334+
const text = trimWhitespace(jsx.value);
335+
if (!text.length) return null;
336+
const results = { template: text, decl: [], exprs: [] };
342337
if (!info.skipId) results.id = path.scope.generateUidIdentifier("el$")
343338
return results;
344339
} else if (t.isJSXExpressionContainer(jsx)) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const name = 'Jake',
2+
greeting = 'Welcome';
3+
4+
const trailing = <span>Hello </span>;
5+
const leading = <span> John</span>;
6+
const extraSpaces = <span>Hello John</span>;
7+
8+
const trailingExpr = <span>Hello {name}</span>;
9+
const leadingExpr = <span>{greeting} John</span>;
10+
11+
const multiExpr = <span>{greeting} {name}</span>;
12+
const multiExprSpaced = <span> {greeting} {name} </span>;
13+
14+
const multiLine = <span>
15+
16+
Hello
17+
18+
</span>
19+
20+
const multiLineTrailingSpace = <span>
21+
Hello
22+
John
23+
</span>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
const _tmpl$9 = document.createElement("template");
2+
3+
_tmpl$9.innerHTML = "<span>Hello John</span>";
4+
5+
const _tmpl$8 = document.createElement("template");
6+
7+
_tmpl$8.innerHTML = "<span>Hello</span>";
8+
9+
const _tmpl$7 = document.createElement("template");
10+
11+
_tmpl$7.innerHTML = "<span> <!--15--> <!--17--> </span>";
12+
13+
const _tmpl$6 = document.createElement("template");
14+
15+
_tmpl$6.innerHTML = "<span><!--10--> <!--12--></span>";
16+
17+
const _tmpl$5 = document.createElement("template");
18+
19+
_tmpl$5.innerHTML = "<span><!--8--> John</span>";
20+
21+
const _tmpl$4 = document.createElement("template");
22+
23+
_tmpl$4.innerHTML = "<span>Hello <!--6--></span>";
24+
25+
const _tmpl$3 = document.createElement("template");
26+
27+
_tmpl$3.innerHTML = "<span>Hello John</span>";
28+
29+
const _tmpl$2 = document.createElement("template");
30+
31+
_tmpl$2.innerHTML = "<span> John</span>";
32+
33+
const _tmpl$ = document.createElement("template");
34+
35+
_tmpl$.innerHTML = "<span>Hello </span>";
36+
const name = 'Jake',
37+
greeting = 'Welcome';
38+
39+
const trailing = _tmpl$.content.firstChild.cloneNode(true);
40+
41+
const leading = _tmpl$2.content.firstChild.cloneNode(true);
42+
43+
const extraSpaces = _tmpl$3.content.firstChild.cloneNode(true);
44+
45+
const trailingExpr = function () {
46+
const _el$4 = _tmpl$4.content.firstChild.cloneNode(true),
47+
_el$5 = _el$4.firstChild,
48+
_el$6 = _el$5.nextSibling;
49+
50+
r.insert(_el$4, name, null, _el$6);
51+
return _el$4;
52+
}();
53+
54+
const leadingExpr = function () {
55+
const _el$7 = _tmpl$5.content.firstChild.cloneNode(true),
56+
_el$8 = _el$7.firstChild;
57+
58+
r.insert(_el$7, greeting, null, _el$8);
59+
return _el$7;
60+
}();
61+
62+
const multiExpr = function () {
63+
const _el$9 = _tmpl$6.content.firstChild.cloneNode(true),
64+
_el$10 = _el$9.firstChild,
65+
_el$11 = _el$10.nextSibling,
66+
_el$12 = _el$11.nextSibling;
67+
68+
r.insert(_el$9, greeting, null, _el$10);
69+
r.insert(_el$9, name, null, _el$12);
70+
return _el$9;
71+
}();
72+
73+
const multiExprSpaced = function () {
74+
const _el$13 = _tmpl$7.content.firstChild.cloneNode(true),
75+
_el$14 = _el$13.firstChild,
76+
_el$15 = _el$14.nextSibling,
77+
_el$16 = _el$15.nextSibling,
78+
_el$17 = _el$16.nextSibling;
79+
80+
r.insert(_el$13, greeting, null, _el$15);
81+
r.insert(_el$13, name, null, _el$17);
82+
return _el$13;
83+
}();
84+
85+
const multiLine = _tmpl$8.content.firstChild.cloneNode(true);
86+
87+
const multiLineTrailingSpace = _tmpl$9.content.firstChild.cloneNode(true);

0 commit comments

Comments
 (0)