Skip to content

Commit 0a626c3

Browse files
committed
添加callback回调
扩展[slide]方式 修改背景图片实现
1 parent bdf0513 commit 0a626c3

File tree

7 files changed

+119
-125
lines changed

7 files changed

+119
-125
lines changed

README.md

+10-89
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
nodePPT v0.4.6
1+
nodePPT v0.4.8
22
=============
33
![nodePPT演示](https://raw.github.com/ksky521/nodePPT/master/demo.gif "nodePPT演示")
44

@@ -36,18 +36,15 @@ speaker: Theo Wang
3636
url: https://github.com/ksky521/nodePPT
3737
transition: zoomin
3838

39-
[slide]
39+
[slide data-]
4040

4141
# 封面样式
4242
## h1是作为封面用的,内部的都用h2
4343

44-
[slide]
45-
46-
[bgimage]/img/bg1.png[/bgimage]
44+
[slide style="background-image:url('/img/bg1.png')"]
4745

4846
# 背景图片 {:&.flexbox.vleft}
49-
## 使用方法:[bgimage]/img/bg.jpg[/bgimage]
50-
47+
## 使用方法:[slide style="background-image:url('/img/bg1.png')"]
5148

5249
[slide]
5350

@@ -61,93 +58,15 @@ nodeppt:https://github.com/ksky521/nodePPT
6158

6259
[slide]
6360

64-
## 这是一个列表
65-
---
66-
67-
* 列表支持淡入淡出 {:&.build}
68-
* 上下左右方向键翻页 {:&.build}
69-
* 支持多级列表
70-
* 完全基于markdown语法哦
71-
72-
[slide]
73-
## 表格示例
74-
### 市面上主要的css预处理器:less\sass\stylus
75-
---
76-
|less| sass | stylus
77-
:-------|:------:|-------:|--------
78-
环境 |js/nodejs | Ruby | nodejs
79-
扩展名 | .less | .sass/.scss | .styl
80-
特点 | 老牌,用户多,支持js解析 | 功能全,有成型框架,发展快 | 语法多样,小众
81-
案例/框架 | [Bootstrap](http://getbootstrap.com/) | [compass](http://compass-style.org) [bourbon](http://bourbon.io) |
82-
83-
[slide]
84-
85-
## 代码格式化
86-
### 使用 **highlightjs**
87-
----
88-
89-
[slide]
90-
## iframe
91-
----
92-
<iframe data-src="http://www.google.com/doodle4google/resources/history.html" src="about:blank;"></iframe>
93-
[slide]
94-
[note]
95-
##这里是note
96-
97-
使用n键,才能显示
98-
[/note]
99-
## 使用note笔记
100-
### note笔记是多窗口,或者自己做一些笔记用的
101-
---
102-
按下键盘【n】键测试下note,
103-
104-
105-
[slide]
106-
107-
## 使用画笔
108-
### 使用画笔做标记哦~你也可以随便作画啊!
109-
---
110-
按下键盘【p】键。按下鼠标左键,在此处乱花下看看效果。
111-
112-
按下键盘【c】键。清空画板
113-
114-
[slide]
115-
116-
## 使用宽屏模式
117-
---
118-
按下键盘【w】键。看下效果。
119-
120-
再按下键盘【w】键。
121-
122-
[slide]
123-
124-
## 哦 忘记说了
125-
---
126-
本页面网址改成 url#client,支持多窗口演示哦!
127-
128-
另外支持多种动画哦:
129-
130-
* horizontal3d
131-
* horizontal
132-
* vertical3d
133-
* zoomin
134-
* zoomout
135-
* cards
136-
137-
当然你可以自己写更炫的动画啊,记得pull给我动画代码哦~
138-
139-
[slide]
140-
141-
## 更多玩法
142-
---
143-
https://github.com/ksky521/nodePPT
144-
14561
什么?这些功能还不够用?
14662

14763
极客模式:查看源码的nodeppt.js,相信你会找到牛逼的手机互动(摇一摇换页)功能
14864

65+
查看项目目录ppts获取更多帮助信息
14966
```
15067

68+
更多demo,查看 ```ppts``` 目录的demo
69+
15170
### 帮助
15271

15372
```shell
@@ -156,5 +75,7 @@ nodeppt -h
15675

15776
## demo演示 & 使用方法
15877

159-
* 启动 nodeppt
78+
* 执行 nodeppt start -p 8080
16079
* 访问 http://127.0.0.1:8080/
80+
81+

assets/markdown.tpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,6 @@ MixJS.use('event/broadcast', function($){
7878
});
7979
});
8080
</script>
81-
81+
<%= files %>
8282
</body>
8383
</html>

lib/md_parser.js

+52-25
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ var defaultJSON = {
1818
url: '',
1919
speaker: '',
2020
content: '',
21-
transition: 'zoomout'
21+
transition: 'zoomout',
22+
files: ''
2223
};
2324

2425
marked.setOptions({
@@ -35,13 +36,16 @@ marked.setOptions({
3536
});
3637

3738
var emptyFn = function(str) {
38-
console.log(str);
39+
// console.log(str);
3940
};
4041
var parser = function(string, callback) {
4142
if (typeof callback !== 'function') {
4243
callback = emptyFn;
4344
}
44-
var contents = string.split('[slide]');
45+
var splitReg = /\[slide\s*(.*)\]/ig;
46+
var slidesSetting = string.match(splitReg);
47+
var contents = string.split(/\[slide.*\]/i);
48+
// console.log(contents.length, slidesSetting);
4549
//第一个是封面
4650
var cover = contents.shift();
4751

@@ -50,16 +54,34 @@ var parser = function(string, callback) {
5054
json.nodeppt_version = config.version
5155
json.nodeppt_site = config.site;
5256
json = mix(defaultJSON, json);
53-
57+
if (json.files) {
58+
var files = json.files.split(/\s?,\s?/);
59+
json.files = files.map(function(v) {
60+
if (/.js$/i.test(v)) {
61+
//js文件
62+
return '<script src="' + v + '"></script>'
63+
} else if (/.css$/i.test(v)) {
64+
//css文件
65+
return '<link rel="stylesheet" href="' + v + '">'
66+
}
67+
return v;
68+
}).join(EOL);
69+
}
5470
var slides = [];
5571
var reg = /\[note\]([\s\S]+)\[\/note\]/im;
56-
contents.forEach(function(v) {
72+
contents.forEach(function(v, i) {
73+
var cfg = slidesSetting[i];
74+
cfg = cfg.match(/\[slide\s+(.+)\s?\]/);
75+
var attrs = '';
76+
if (cfg) {
77+
attrs = cfg[1];
78+
}
5779
var note = reg.exec(v);
5880
if (note) {
5981
v = v.replace(reg, '');
6082
note = marked(note[1]);
6183
}
62-
slides.push(parse(marked(v), note));
84+
slides.push(parse(marked(v), note, attrs));
6385
});
6486
//合并
6587
json.content = slides.join(EOL);
@@ -85,11 +107,11 @@ module.exports = parser;
85107
function mix(obj) {
86108
var i = 1,
87109
target, key;
88-
110+
var hasOwnProperty = Object.prototype.hasOwnProperty;
89111
for (; i < arguments.length; i++) {
90112
target = arguments[i];
91113
for (key in target) {
92-
if (Object.prototype.hasOwnProperty.call(target, key)) {
114+
if (hasOwnProperty.call(target, key)) {
93115
obj[key] = target[key];
94116
}
95117
}
@@ -117,16 +139,18 @@ function parseCover(str) {
117139

118140
/**
119141
* 解析 slide内容
120-
* @param {[type]} str [description]
121-
* @return {[type]} [description]
142+
* @param {[type]} str [description]
143+
* @param {[type]} note [description]
144+
* @param {[type]} sAttrs [description]
145+
* @return {[type]} [description]
122146
*/
123147

124-
function parse(str, note) {
148+
function parse(str, note, sAttrs) {
125149
var arr = str.split('<hr>');
126150
var head = '',
127151
article = '';
128152
if (note && note.length > 3) {
129-
note = '<aside class="note">\n<section>' + note + '</section>\n</aside>';
153+
note = ['<aside class="note">', '<section>', note, '</section>', '</aside>'].join(EOL);
130154
} else {
131155
note = '';
132156
}
@@ -138,14 +162,14 @@ function parse(str, note) {
138162
}
139163
if (head !== '') {
140164
head = do_attr(head);
141-
head = '<hgroup>\n' + head + '</hgroup>\n';
165+
head = ['<hgroup>', head, '</hgroup>'].join(EOL);
142166
}
143167

144168
var noHead = !head;
145169
var articleAttr;
146170
article = do_attr(article, true, noHead);
147171

148-
article = '<article>\n' + article + '</article>\n';
172+
article = ['<article>', article, '</article>'].join(EOL);
149173
//处理文章只用h1的情况,作为标题页面
150174
if (noHead && /<h1>.*<\/h1>/g.test(article)) {
151175

@@ -168,18 +192,21 @@ function parse(str, note) {
168192
}
169193
}
170194
var content = head + article;
171-
var bgimage;
172-
//背景图片
173-
if (/[bgimage].*[\/bgimage]/g.test(content)) {
174-
content = content.replace(/<(\w+)>\[bgimage\](.*)\[\/bgimage(?:\]|<\/a>])+<\/\1>/gm, function(input, tag, image) {
175-
bgimage = image.replace(/<(.*?)>/g, '');
176-
return '';
177-
})
178-
}
179195

180196
var tagStart = '<slide class="slide">';
181-
if (bgimage) {
182-
tagStart = '<slide class="slide fill" style="background-image:url(' + bgimage + ')">'
197+
if (sAttrs) {
198+
var cls = sAttrs.match(/class=['"]?([^'"]+)['"]?/);
199+
if (cls) {
200+
cls = cls[1] + ' slide';
201+
sAttrs = sAttrs.replace(cls[0], '');
202+
} else {
203+
cls = 'slide';
204+
}
205+
if (/background/.test(sAttrs)) {
206+
cls += ' fill';
207+
}
208+
tagStart = '<slide class="' + cls + '" ' + sAttrs + '>';
209+
// console.log(tagStart);
183210
}
184211
return tagStart + note + content + '</slide>';
185212
}
@@ -241,6 +268,6 @@ function parseAttr(idinput, attrs) {
241268
return attr;
242269
}
243270
///test
244-
// var str = fs.readFileSync('../test/basic.md').toString();
271+
// var str = fs.readFileSync('ppts/demo.md').toString();
245272

246273
// parser(str);

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "nodeppt",
33
"jsname": "nodeppt",
44
"description": "Create a PowerPoint presentation with Markdown",
5-
"version": "0.4.7",
5+
"version": "0.4.8",
66
"site": "https://github.com/ksky521/nodePPT",
77
"author": {
88
"name": "Theo Wang",

ppts/css/demo.css

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.file-setting{
2+
color: yellow;
3+
}

0 commit comments

Comments
 (0)