Skip to content
This repository was archived by the owner on Aug 16, 2022. It is now read-only.

Commit c3a9c74

Browse files
committed
support multiple script/style tags
1 parent b3b99d6 commit c3a9c74

File tree

6 files changed

+68
-29
lines changed

6 files changed

+68
-29
lines changed

index.js

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,53 +30,57 @@ exports.compile = function (content, filePath, cb) {
3030
filePath = process.cwd()
3131
}
3232

33-
var script
34-
var style
33+
// only 1 template tag is allowed, while styles and
34+
// scripts are concatenated.
3535
var template
36+
var script = ''
37+
var style = ''
3638
var output = ''
3739
var jobs = []
3840

3941
var fragment = parser.parseFragment(content)
4042
fragment.childNodes.forEach(function (node) {
4143
switch (node.nodeName) {
42-
case 'style':
43-
style = checkSrc(node, filePath) || serializer.serialize(node)
44+
case 'template':
45+
template = checkSrc(node, filePath) || serializeTemplate(node)
4446
var lang = checkLang(node)
45-
if (lang === 'scss') {
46-
lang = 'sass'
47-
}
48-
if (styleLangs.indexOf(lang) < 0) {
47+
if (templateLangs.indexOf(lang) < 0) {
4948
break
5049
}
5150
jobs.push(function (cb) {
52-
require('./compilers/' + lang)(style, function (err, res) {
53-
style = res
51+
require('./compilers/' + lang)(template, function (err, res) {
52+
template = res
5453
cb(err)
5554
})
5655
})
5756
break
58-
case 'template':
59-
template = checkSrc(node, filePath) || serializeTemplate(node)
57+
case 'style':
58+
var rawStyle = checkSrc(node, filePath) || serializer.serialize(node)
6059
var lang = checkLang(node)
61-
if (templateLangs.indexOf(lang) < 0) {
60+
if (lang === 'scss') {
61+
lang = 'sass'
62+
}
63+
if (styleLangs.indexOf(lang) < 0) {
64+
style += rawStyle
6265
break
6366
}
6467
jobs.push(function (cb) {
65-
require('./compilers/' + lang)(template, function (err, res) {
66-
template = res
68+
require('./compilers/' + lang)(rawStyle, function (err, res) {
69+
style += res
6770
cb(err)
6871
})
6972
})
7073
break
7174
case 'script':
72-
script = checkSrc(node, filePath) || serializer.serialize(node).trim()
75+
var rawScript = checkSrc(node, filePath) || serializer.serialize(node).trim()
7376
var lang = checkLang(node)
7477
if (scriptLangs.indexOf(lang) < 0) {
78+
script += (script ? '\n' : '') + rawScript
7579
break
7680
}
7781
jobs.push(function (cb) {
78-
require('./compilers/' + lang)(script, function (err, res) {
79-
script = res
82+
require('./compilers/' + lang)(rawScript, function (err, res) {
83+
script += (script ? '\n' : '') + res
8084
cb(err)
8185
})
8286
})

test/compiler_spec.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,8 @@ function test (name) {
2525
}
2626

2727
describe('Vue component compiler', function () {
28-
29-
test('basic')
30-
test('empty')
31-
test('less')
32-
test('sass')
33-
test('myth')
34-
test('jade')
35-
test('multiple')
36-
test('src')
37-
test('es6')
38-
28+
fs.readdirSync(path.resolve(__dirname, 'expects'))
29+
.forEach(function (file) {
30+
test(path.basename(file, '.js'))
31+
})
3932
})

test/expects/multiple-scripts.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
var a = 1
2+
var b;
3+
4+
b = x(function() {
5+
return x || 5;
6+
});
7+
8+
"use strict";
9+
10+
var p = function (x) {
11+
return x || 5;
12+
};

test/expects/multiple-styles.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require("insert-css")("h1{font-size:20px}h2{font-size:14px}#test h1{font-size:18px}");

test/fixtures/multiple-scripts.vue

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
var a = 1
3+
</script>
4+
5+
<script lang="coffee">
6+
b = x -> x or 5
7+
</script>
8+
9+
<script lang="es6">
10+
let p = x => x || 5
11+
</script>

test/fixtures/multiple-styles.vue

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<style>
2+
h1 {
3+
font-size: 20px;
4+
}
5+
</style>
6+
7+
<style lang="scss">
8+
#test {
9+
h1 {
10+
font-size: 18px;
11+
}
12+
}
13+
</style>
14+
15+
<style lang="stylus">
16+
h2
17+
font-size 14px
18+
</style>

0 commit comments

Comments
 (0)