Skip to content

Commit 3c52465

Browse files
committed
Unescape namespace in all node types.
1 parent e20cfbc commit 3c52465

File tree

4 files changed

+29
-23
lines changed

4 files changed

+29
-23
lines changed

src/__tests__/namespaces.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,12 @@ test('namespace with qualified id selector', 'ns|h1#foo', (t, tree) => {
6767
test('namespace with qualified class selector', 'ns|h1.foo', (t, tree) => {
6868
t.deepEqual(tree.nodes[0].nodes[0].namespace, 'ns');
6969
});
70+
71+
test('ns alias for namespace', 'f\\oo|h1.foo', (t, tree) => {
72+
let tag = tree.nodes[0].nodes[0];
73+
t.deepEqual(tag.namespace, 'foo');
74+
t.deepEqual(tag.ns, 'foo');
75+
tag.ns = "bar";
76+
t.deepEqual(tag.namespace, 'bar');
77+
t.deepEqual(tag.ns, 'bar');
78+
});

src/parser.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ function unescapeProp (node, prop) {
6363
}
6464
if (value.indexOf("\\") !== -1) {
6565
ensureObject(node, 'raws');
66+
node[prop] = unesc(value);
6667
if (node.raws[prop] === undefined) {
6768
node.raws[prop] = value;
6869
}
69-
node[prop] = unesc(value);
7070
}
7171
return node;
7272
}
@@ -761,7 +761,8 @@ export default class Parser {
761761
source,
762762
sourceIndex,
763763
};
764-
node = new Tag(unescapeProp(tagOpts, "value"));
764+
unescapeProp(tagOpts, "value");
765+
node = new Tag(tagOpts);
765766
}
766767
this.newNode(node, namespace);
767768
// Ensure that the namespace is used only once
@@ -885,6 +886,7 @@ export default class Parser {
885886
namespace = true;
886887
}
887888
node.namespace = namespace;
889+
unescapeProp(node, "namespace");
888890
}
889891
if (this.spaces) {
890892
node.spaces.before = this.spaces;

src/selectors/attribute.js

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -273,22 +273,6 @@ export default class Attribute extends Namespace {
273273
}
274274
}
275275

276-
get namespace () {
277-
return this._namespace;
278-
}
279-
280-
set namespace (v) {
281-
if (v === "*") {
282-
// Don't escape this special value for the namespace.
283-
if (this._constructed) {
284-
delete this.raws.namespace;
285-
}
286-
} else {
287-
this._handleEscapes("namespace", v);
288-
}
289-
this._namespace = v;
290-
}
291-
292276
get attribute () {
293277
return this._attribute;
294278
}

src/selectors/namespace.js

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,34 @@
1+
import cssesc from 'cssesc';
2+
import {ensureObject} from '../util';
13
import Node from './node';
24

35
export default class Namespace extends Node {
46
get namespace () {
57
return this._namespace;
68
}
79
set namespace (namespace) {
10+
if (namespace === true || namespace === "*" || namespace === "&") {
11+
this._namespace = namespace;
12+
if (this.raws) {
13+
delete this.raws.namespace;
14+
}
15+
return;
16+
}
17+
18+
let escaped = cssesc(namespace, {isIdentifier: true});
819
this._namespace = namespace;
9-
if (this.raws) {
20+
if (escaped !== namespace) {
21+
ensureObject(this, "raws");
22+
this.raws.namespace = escaped;
23+
} else if (this.raws) {
1024
delete this.raws.namespace;
1125
}
1226
}
1327
get ns () {
1428
return this._namespace;
1529
}
1630
set ns (namespace) {
17-
this._namespace = namespace;
18-
if (this.raws) {
19-
delete this.raws.namespace;
20-
}
31+
this.namespace = namespace;
2132
}
2233

2334
get namespaceString () {

0 commit comments

Comments
 (0)