Skip to content

Commit 37b94ff

Browse files
committed
add markdown
1 parent 4eb8910 commit 37b94ff

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1439
-2585
lines changed

build/webpack.base.conf.js

Lines changed: 71 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
var path = require('path')
2+
var glob = require('glob')
3+
var webpack = require('webpack')
24
var utils = require('./utils')
35
var config = require('../config')
46
var vueLoaderConfig = require('./vue-loader.conf')
5-
var glob = require('glob')
6-
var webpack = require('webpack')
7+
var markdown = require('./webpack.markdown.js');
78

89
function resolve(dir) {
910
return path.join(__dirname, '..', dir)
@@ -35,71 +36,77 @@ module.exports = {
3536
config.build.assetsPublicPath : config.dev.assetsPublicPath
3637
},
3738
resolve: {
38-
extensions: ['.js', '.vue', '.json'],
39-
modules: ['node_modules'],
40-
alias: {
41-
'vue$': 'vue/dist/vue.esm.js',
42-
'@': resolve('src'),
43-
'assets': resolve('src/assets'),
44-
'components': resolve('src/components'),
45-
'jspath': resolve('src/assets/js'),
46-
'bootstrap': resolve('src/assets/js/libs/bootstrap.min.js'),
47-
'modernizr': resolve('src/assets/js/libs/modernizr.custom.css3.js')
48-
}
39+
extensions: ['.js', '.vue', '.json'],
40+
modules: ['node_modules'],
41+
alias: {
42+
'vue$': 'vue/dist/vue.esm.js',
43+
'@': resolve('src'),
44+
'assets': resolve('src/assets'),
45+
'components': resolve('src/components'),
46+
'jspath': resolve('src/assets/js'),
47+
'bootstrap': resolve('src/assets/js/libs/bootstrap.min.js'),
48+
'modernizr': resolve('src/assets/js/libs/modernizr.custom.css3.js')
49+
}
4950
},
5051
module: {
51-
rules: [{
52-
test: /\.(js|vue)$/,
53-
loader: 'eslint-loader',
54-
enforce: 'pre',
55-
include: [resolve('src'), resolve('test')],
56-
options: {
57-
formatter: require('eslint-friendly-formatter')
58-
}
59-
},
60-
{
61-
test: /\.vue$/,
62-
loader: 'vue-loader',
63-
options: vueLoaderConfig
64-
},
65-
{
66-
test: /\.js$/,
67-
loader: 'babel-loader',
68-
include: [resolve('src'), resolve('test')]
69-
},
70-
{
71-
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
72-
loader: 'url-loader',
73-
options: {
74-
limit: 10000,
75-
name: utils.assetsPath('img/[name].[hash:7].[ext]')
76-
}
77-
},
78-
{
79-
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
80-
loader: 'url-loader',
81-
options: {
82-
limit: 10000,
83-
name: utils.assetsPath('media/[name].[hash:7].[ext]')
84-
}
85-
},
86-
{
87-
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
88-
loader: 'url-loader',
89-
options: {
90-
limit: 10000,
91-
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
92-
}
93-
}
94-
]
52+
rules: [
53+
{
54+
test: /\.(js|vue)$/,
55+
loader: 'eslint-loader',
56+
enforce: 'pre',
57+
include: [resolve('src'), resolve('test')],
58+
options: {
59+
formatter: require('eslint-friendly-formatter')
60+
}
61+
},
62+
{
63+
test: /\.vue$/,
64+
loader: 'vue-loader',
65+
options: vueLoaderConfig
66+
},
67+
{
68+
test: /\.js$/,
69+
loader: 'babel-loader',
70+
include: [resolve('src'), resolve('test')]
71+
},
72+
{
73+
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
74+
loader: 'url-loader',
75+
options: {
76+
limit: 10000,
77+
name: utils.assetsPath('img/[name].[hash:7].[ext]')
78+
}
79+
},
80+
{
81+
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
82+
loader: 'url-loader',
83+
options: {
84+
limit: 10000,
85+
name: utils.assetsPath('media/[name].[hash:7].[ext]')
86+
}
87+
},
88+
{
89+
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
90+
loader: 'url-loader',
91+
options: {
92+
limit: 10000,
93+
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
94+
}
95+
},
96+
{
97+
test: /\.md$/,
98+
loader: 'vue-markdown-loader',
99+
options: markdown.getMarkDownSetting()
100+
}
101+
]
95102
},
96103
plugins: [
97-
new webpack.ProvidePlugin({
98-
$: "jquery",
99-
jQuery: "jquery",
100-
'window.$': 'jquery',
101-
"window.jQuery": "jquery",
102-
"hljs": 'hljs'
103-
})
104+
new webpack.ProvidePlugin({
105+
$: "jquery",
106+
jQuery: "jquery",
107+
'window.$': 'jquery',
108+
"window.jQuery": "jquery",
109+
"hljs": 'hljs'
110+
})
104111
]
105112
}

build/webpack.markdown.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// var striptags = require('./strip-tags');
2+
3+
var hljs = require('highlight.js');
4+
var md = require('markdown-it')({
5+
highlight: function (str, lang) {
6+
if (lang && hljs.getLanguage(lang)) {
7+
try {
8+
return hljs.highlight(lang, str, true).value;
9+
} catch (__) {
10+
}
11+
}
12+
13+
return ''; // use external default escaping
14+
}
15+
});
16+
17+
function convert(str) {
18+
str = str.replace(/(&#x)(\w{4});/gi, function ($0) {
19+
return String.fromCharCode(parseInt(encodeURIComponent($0).replace(/(%26%23x)(\w{4})(%3B)/g, '$2'), 16));
20+
});
21+
return str;
22+
}
23+
24+
var wrap = function (render) {
25+
return function () {
26+
return render.apply(this, arguments)
27+
.replace('<code v-pre class="', '<code v-pre class="hljs ')
28+
.replace('<code>', '<code class="hljs">');
29+
};
30+
};
31+
32+
exports.getMarkDownSetting = function () {
33+
return {
34+
// markdown-it config
35+
preset: 'default',
36+
breaks: true,
37+
preprocess: function (MarkdownIt, source) {
38+
MarkdownIt.renderer.rules.table_open = function () {
39+
return '<table class="example-table">';
40+
};
41+
MarkdownIt.renderer.rules.fence = wrap(MarkdownIt.renderer.rules.fence);
42+
return source;
43+
},
44+
use: [
45+
[require('markdown-it-container'), 'demo', {
46+
validate: function (params) {
47+
return params.trim().match(/^demo/);
48+
},
49+
render: function (tokens, idx) {
50+
var m = tokens[idx].info.trim().match(/^demo\s*(.*)$/),
51+
showDemo = (m && m != 'demo,') ? true : false;
52+
if (tokens[idx].nesting === 1) {
53+
// opening tag
54+
var content = tokens[idx + 1].content;
55+
// var effectHtml = convert(striptags.strip(content, ['script', 'style'])).replace(/(<[^>]*)=""(?=.*>)/g, '$1');
56+
var effectHtml = content;
57+
var codeDescription = showDemo ? md.utils.escapeHtml(m[1]) : '';
58+
return `<demo-box :showDemo="${showDemo}">
59+
<div slot="effectHtml">${effectHtml}</div>
60+
<div slot="codeDescription">${codeDescription}</div>
61+
<div slot="codeHighlight">
62+
`
63+
} else {
64+
// closing tag
65+
return '</div></demo-box>\n';
66+
}
67+
}
68+
}]
69+
]
70+
}
71+
}
72+
73+

0 commit comments

Comments
 (0)