Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge branch '2.0'

* 2.0: (21 commits)
  更新侧边栏 文章页加入标题 close #4
  修复ReadMe中config.json拼写错误 close#3
  导航中的pages动态生成
  皮肤公共部分改为用jade包含
  修复package.json示例中的错误
  更新说明
  兼容windows
  更新版本号
  更新git库
  带上皮肤
  增加pages
  2.0.1
  改进样式
  更新CNAME
  RSS构建完成
  基本完成和1.0功能等同的构建过程
  首页构建基本完成
  构建文章基本完成
  解析博客核心完成
  2.0文件结构调整
  ...
  • Loading branch information...
commit d93fa3ef2af3ad66a11cdb42343c602b56bd79f8 2 parents a4ef67c + eb25d67
@TooBug authored
Showing with 1,240 additions and 2,441 deletions.
  1. +0 −18 .gitignore
  2. +0 −1  CNAME
  3. +52 −31 README.md
  4. +0 −60 app.js
  5. +0 −78 article/tes2.html
  6. +0 −61 article/test.html
  7. +0 −78 article/test3.html
  8. +0 −76 article/test4.html
  9. +0 −76 article/test5.html
  10. +0 −76 article/test6.html
  11. +0 −76 article/test7.html
  12. +0 −6 bin/build.cmd
  13. BIN  favicon.ico
  14. BIN  image/miga_256x256.png
  15. BIN  image/stones.jpg
  16. +0 −136 index.html
  17. +0 −100 index_page2.html
  18. +0 −147 lib/build.js
  19. +0 −9 lib/config.js
  20. +170 −0 lib/coreparser.js
  21. +0 −20 lib/mime.js
  22. +49 −0 lib/plugins/buildArticles.js
  23. +73 −0 lib/plugins/buildIndex.js
  24. +50 −0 lib/plugins/buildPages.js
  25. +59 −0 lib/plugins/buildRss.js
  26. +10 −0 lib/plugins/copyGlobal.js
  27. +11 −0 lib/plugins/copySkin.js
  28. +0 −64 lib/publish.js
  29. +181 −28 lib/util.js
  30. +0 −22 md/article/tes2.md
  31. +0 −5 md/article/test.md
  32. +0 −22 md/article/test3.md
  33. +0 −20 md/article/test4.md
  34. +0 −20 md/article/test5.md
  35. +0 −20 md/article/test6.md
  36. +0 −20 md/article/test7.md
  37. +0 −7 md/page/404.md
  38. +0 −1  md/page/about.md
  39. +34 −28 package.json
  40. +0 −88 page/404.html
  41. +0 −82 page/about.html
  42. +371 −0 skin/css/light.css
  43. +0 −56 skin/default/article.html
  44. BIN  skin/default/css/image/arrow.gif
  45. BIN  skin/default/css/image/bullet.gif
  46. BIN  skin/default/css/image/bullet2.gif
  47. +0 −377 skin/default/css/light.css
  48. +0 −364 skin/default/css/light.less
  49. BIN  skin/default/images/sina_logo_16.png
  50. +0 −55 skin/default/index.html
  51. +0 −51 skin/default/page.html
  52. +0 −13 skin/default/slot/duoshuo.html
  53. +0 −14 skin/default/slot/ga.html
  54. +0 −19 skin/default/slot/link.html
  55. 0  skin/{default → }/fonts/HelveticaUltraLight.ttf
  56. +19 −0 skin/html/article.jade
  57. +11 −0 skin/html/include/comments.jade
  58. +3 −0  skin/html/include/footer.jade
  59. +11 −0 skin/html/include/head.jade
  60. +11 −0 skin/html/include/header.jade
  61. +14 −0 skin/html/include/sidebar.jade
  62. +30 −0 skin/html/index.jade
  63. +18 −0 skin/html/page.jade
  64. +20 −0 skin/html/rss.jade
  65. 0  { → skin}/js/index.js
  66. 0  { → skin}/js/jquery/jquery-1.7.2.min.js
  67. 0  { → skin}/js/prettify/lang-apollo.js
  68. 0  { → skin}/js/prettify/lang-clj.js
  69. 0  { → skin}/js/prettify/lang-css.js
  70. 0  { → skin}/js/prettify/lang-go.js
  71. 0  { → skin}/js/prettify/lang-hs.js
  72. 0  { → skin}/js/prettify/lang-lisp.js
  73. 0  { → skin}/js/prettify/lang-lua.js
  74. 0  { → skin}/js/prettify/lang-ml.js
  75. 0  { → skin}/js/prettify/lang-n.js
  76. 0  { → skin}/js/prettify/lang-proto.js
  77. 0  { → skin}/js/prettify/lang-scala.js
  78. 0  { → skin}/js/prettify/lang-sql.js
  79. 0  { → skin}/js/prettify/lang-tex.js
  80. 0  { → skin}/js/prettify/lang-vb.js
  81. 0  { → skin}/js/prettify/lang-vhdl.js
  82. 0  { → skin}/js/prettify/lang-wiki.js
  83. 0  { → skin}/js/prettify/lang-xq.js
  84. 0  { → skin}/js/prettify/lang-yaml.js
  85. 0  { → skin}/js/prettify/prettify.css
  86. 0  { → skin}/js/prettify/prettify.js
  87. +43 −0 solo.js
  88. +0 −7 test/markdown.test.js
  89. +0 −9 test/test.js
View
18 .gitignore
@@ -1,18 +0,0 @@
-lib-cov
-*.seed
-*.log
-*.csv
-*.dat
-*.out
-*.pid
-*.gz
-
-pids
-logs
-results
-
-node_modules
-npm-debug.log
-
-*.project
-*.idea
View
1  CNAME
@@ -1 +0,0 @@
-github.toobug.net
View
83 README.md
@@ -1,43 +1,64 @@
-# solo(独唱团)这是一个由Node构建的静态博客
+# solo 是一个由Node构建的静态博客
-+ 这个静态博客是用markdown来写文章,通过皮肤模板可以build出html页面。
-+ 你可以将他提交至GithubPages或者云端(七牛)或者一个Node服务器
-+ 这里有示例:[Pages](http://jinyang.mynah.org/)[七牛](http://qiniu.mynah.org/)
+- 这个静态博客是用markdown来写文章,通过皮肤模板可以build出html页面。
+- 你可以将他提交至Github Pages等任何网站空间
+- 示例:<http://solo.toobug.net>
-### 为什么会有这样一个静态博客
+## 2.0 预览版特性
-+ 以前的博客不方便添加自己的demo例子页面(前端开发的童鞋应该会有强烈的认同感)
-+ markdown语法简洁易用,所见即所得的html编辑器不好用也太重
-+ 不依赖于数据库,所有的内容都是文本,方便管理和迁移
-+ 不需要一个什么复杂的服务器,也不需要担心什么配额,可以托管html页面就可以
-+ 不用为图片文件等外链来发愁,直接放到相应的目录下,一起上传即可
+- 程序、源文件、构建结果完全分离,托管时只需要上传构建结果即可
+- 全插件构架,可以任意扩展你需要的功能(标签、分类、RSS等等)
-### 如何部署
+> 目前版本只供预览,尚有未开发完(分类和pages的导航、皮肤的公共部分等)或者不稳定的部分。
-+ 你可以在[这里](https://github.com/lambgao/solo)找到他。
-+ 如果你熟悉[Github Pages](http://pages.github.com/),可以直接Push到你的Pages仓库即可。
-+ 如果有一个Node服务器,那么你可以部署至你的服务器,启动app.js即可。
-+ 如果你有一个云端(七牛)服务,那么你可以上传至你的云端(运行lib/publish.js)。
+## 用法说明
-### 如何使用
+### 安装
-+ 你会发现根目录下md文件夹,这个里面存放的都是博客内容(markdown格式)。
-+ md下有article和page两个文件夹,从字面上就很容易理解,分别是文章和页面。
-+ md/article下面的文章在build之后会在article目录下生成同文件名的html页面
-+ md/page下面的页面在build之后会在根目录下生成同文件名的html页面
-+ 运行lib/build.js来build页面(请先安装[Node](http://www.nodejs.org/),并安装依赖npm install)
+ npm install -g toosolo
-###皮肤模板修改
+### 准备源文件目录
-+ 你会发现根目录下skin文件夹,这个文件夹里面存放的都是皮肤模板(html文件)。
-+ 上面提到了article和page两种页面,那么皮肤模板也提供了article.html和page.html两个模板文件。
-+ 如果两个页面用到了共同的内容那么你可以把共同的内容提取出来放到skin/slot文件夹下。
-+ 在模板文件中${slot}就可以将这个文件引入到当前模板文件中。
-+ ${article}这个变量用于引入文章或者页面的内容,即md文件夹下生成的内容。
-+ 根目录下你还会发现css、image、javascript文件夹,这些是存放模板使用到的静态文件
+请准备一个目录作为博客源文件,里面包含博客、pages、公用的文件等等,具体包含内容如下:
-###有疑问或者...
+- `blogs`目录,用于存放博客文件(.md后缀),可以包含任意子目录。
+- `pages`目录,用于存放pages(.md后续),可以包含任意子目录。
+- `global`目录,用于存放其它放到站点根目录的文件,如robots.txt等。可包含子目录(比如文章中的图片放在images子目录,构建时会被复制为/images)。
-+ 如果你有疑问、建议、bug提交或者想说“我艹,这里怎么能这样”都可以找我。
-+ 找我请这里新浪微博[@金氧](http://weibo.com/lambsand),或这里Github[@lambgao](https://github.com/lambgao)
+### 准备config.json
+
+ {
+
+ "blogName" : "SOLO",
+ "blogSubTitle" : "Life is Solo...",
+ "blogKeywords" : "SOLO,Blog,Node,博客",
+ "blogDescription" : "TooBug - 专注前端开发",
+
+ "domain" : "solo.toobug.net",
+
+ "sourcePath" : "./source",
+ "distPath" : "./dist"
+
+ }
+
+其中`domain`不需要加`http://`和最后的`/``sourcePath`是上面准备的源文件的路径,`distPath`是构建结果的路径。所有路径相对于`config.json`
+
+### 编译
+
+进入命令行,定位到`config.json`所在的目录,运行`toosolo`即可。
+
+### 更多
+
+如果有需要可以自定义皮肤,在`config.json`中添加一个配置项为`skinPath`即可。
+
+> 以下部分尚属于不稳定阶段,稍后放出皮肤自定义的功能。
+
+皮肤目录下的子目录说明
+
+- `html`目录,模板文件,使用`jade`模板引擎,目前包含`index.jade``page.jade``article.jade`三个文件。
+- 其它目录,直接被复制到站点根目录。
+
+编写模板时请注意路径,编译的结果中`index.html`在根目录,文章和pages分别在`/article``/page`目录。
+
+详细的皮肤编写指导稍后放出。
View
60 app.js
@@ -1,60 +0,0 @@
-var cluster = require('cluster');
-var http = require('http');
-var numCPUs = require('os').cpus().length;
-var url = require('url');
-var fs = require('fs');
-var path = require('path');
-var util = require("./lib/util");
-
-if (cluster.isMaster) {
- // Fork workers.
- for (var i = 0; i < numCPUs; i++) {
- cluster.fork();
- }
-
- cluster.on('exit', function (worker, code, signal) {
- console.log('worker ' + worker.pid + ' died');
- });
-} else {
- http.createServer(function (request, response) {
- var pathname = url.parse(request.url).pathname;
- if (pathname.charAt(pathname.length - 1) == "/")pathname += "index.html";
- var filename = __dirname + pathname;
- fs.exists(filename, function (exists) {
- if (!exists) {
- write404(response);
- } else {
- fs.stat(filename, function (err, stats) {
- if (err) {
- write404(response);
- } else {
- if (stats.isDirectory()) {
- write404(response);
- } else {
- fs.readFile(filename, "binary", function (err, file) {
- if (err) {
- write404(response);
- } else {
- writeFile(200, filename, response, file);
- }
- });
- }
- }
- });
- }
- });
- }).listen(80);
-}
-
-function write404(response) {
- fs.readFile(__dirname + "/404.html", "binary", function (err, file) {
- writeFile(404, __dirname + "/404.html", response, file);
- });
-}
-
-function writeFile(status, filename, response, file) {
- var contentType = util.getContentType(filename);
- response.writeHead(status, {'Content-Type' : contentType});
- response.write(file, "binary");
- response.end();
-}
View
78 article/tes2.html
@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="../skin/default/css/light.css" />
- <link rel="stylesheet" href="../js/prettify/prettify.css" />
- <script src="../js/prettify/prettify.js"></script>
- <script src="../js/jquery/jquery-1.7.2.min.js"></script>
- <script src="../js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
- <h1>这是文章的标题</h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落test</p>
-
-
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
- <div id="disqus_thread"></div>
- <script type="text/javascript">
- var disqus_shortname = 'toobug';
- (function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
- dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
- })();
- </script>
- <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
61 article/test.html
@@ -1,61 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="../skin/default/css/light.css" />
- <link rel="stylesheet" href="../js/prettify/prettify.css" />
- <script src="../js/prettify/prettify.js"></script>
- <script src="../js/jquery/jquery-1.7.2.min.js"></script>
- <script src="../js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
- <h1>你好,Solo &amp; GitHub!</h1>
-
-<p><em>2012-08-16 18:24</em></p>
-
-<p>曾经,有一部电影,名叫Solo(独行者)。其实情节很俗套,无非是生物科技发达,让人死而复生,变成“机器人”一样去打仗,同样俗套的是后面必须会有伦理的斗争,Solo获得意识,而类似的实验被终止。不过,令我一直念念不忘的是它的名字,Solo——独行者。</p>
- </div>
- <div id="disqus_thread"></div>
- <script type="text/javascript">
- var disqus_shortname = 'toobug';
- (function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
- dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
- })();
- </script>
- <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
78 article/test3.html
@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="../skin/default/css/light.css" />
- <link rel="stylesheet" href="../js/prettify/prettify.css" />
- <script src="../js/prettify/prettify.js"></script>
- <script src="../js/jquery/jquery-1.7.2.min.js"></script>
- <script src="../js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
- <h1>这是文章的标题</h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落MORE</p>
-
-
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
- <div id="disqus_thread"></div>
- <script type="text/javascript">
- var disqus_shortname = 'toobug';
- (function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
- dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
- })();
- </script>
- <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
76 article/test4.html
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="../skin/default/css/light.css" />
- <link rel="stylesheet" href="../js/prettify/prettify.css" />
- <script src="../js/prettify/prettify.js"></script>
- <script src="../js/jquery/jquery-1.7.2.min.js"></script>
- <script src="../js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
- <h1>这是文章的标题</h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
- <div id="disqus_thread"></div>
- <script type="text/javascript">
- var disqus_shortname = 'toobug';
- (function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
- dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
- })();
- </script>
- <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
76 article/test5.html
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="../skin/default/css/light.css" />
- <link rel="stylesheet" href="../js/prettify/prettify.css" />
- <script src="../js/prettify/prettify.js"></script>
- <script src="../js/jquery/jquery-1.7.2.min.js"></script>
- <script src="../js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
- <h1>这是文章的标题</h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
- <div id="disqus_thread"></div>
- <script type="text/javascript">
- var disqus_shortname = 'toobug';
- (function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
- dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
- })();
- </script>
- <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
76 article/test6.html
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="../skin/default/css/light.css" />
- <link rel="stylesheet" href="../js/prettify/prettify.css" />
- <script src="../js/prettify/prettify.js"></script>
- <script src="../js/jquery/jquery-1.7.2.min.js"></script>
- <script src="../js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
- <h1>这是文章的标题</h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
- <div id="disqus_thread"></div>
- <script type="text/javascript">
- var disqus_shortname = 'toobug';
- (function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
- dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
- })();
- </script>
- <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
76 article/test7.html
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="../skin/default/css/light.css" />
- <link rel="stylesheet" href="../js/prettify/prettify.css" />
- <script src="../js/prettify/prettify.js"></script>
- <script src="../js/jquery/jquery-1.7.2.min.js"></script>
- <script src="../js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
- <h1>这是文章的标题</h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
- <div id="disqus_thread"></div>
- <script type="text/javascript">
- var disqus_shortname = 'toobug';
- (function() {
- var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
- dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
- (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
- })();
- </script>
- <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
6 bin/build.cmd
@@ -1,6 +0,0 @@
-:: Created by npm, please don't edit manually.
-@IF EXIST "%~dp0\node.exe" (
- "%~dp0\node.exe" "%~dp0\..\lib\build.js" %*
-) ELSE (
- node "%~dp0\..\lib\build.js" %*
-)
View
BIN  favicon.ico
Binary file not shown
View
BIN  image/miga_256x256.png
Deleted file not rendered
View
BIN  image/stones.jpg
Deleted file not rendered
View
136 index.html
@@ -1,136 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="./skin/default/css/light.css" />
- <link rel="stylesheet" href="./js/prettify/prettify.css" />
- <script src="./js/prettify/prettify.js"></script>
- <script src="./js/jquery/jquery-1.7.2.min.js"></script>
- <script src="./js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
-
- <div class="indexarticle">
- <h1><a href="./article/test.html">你好,Solo &amp; GitHub!</a></h1>
-
-<p><em>2012-08-16 18:24</em></p>
-
-<p>曾经,有一部电影,名叫Solo(独行者)。其实情节很俗套,无非是生物科技发达,让人死而复生,变成“机器人”一样去打仗,同样俗套的是后面必须会有伦理的斗争,Solo获得意识,而类似的实验被终止。不过,令我一直念念不忘的是它的名字,Solo——独行者。</p>
- </div>
-
- <div class="indexarticle">
- <h1><a href="./article/tes2.html">这是文章的标题</a></h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落test</p>
-
-<div class="articlemore"><a href="./article/tes2.html">继续阅读</a></div>
- </div>
-
- <div class="indexarticle">
- <h1><a href="./article/test3.html">这是文章的标题</a></h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落MORE</p>
-
-<div class="articlemore"><a href="./article/test3.html">继续阅读</a></div>
- </div>
-
- <div class="indexarticle">
- <h1><a href="./article/test4.html">这是文章的标题</a></h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
-
- <div class="indexarticle">
- <h1><a href="./article/test5.html">这是文章的标题</a></h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
-
-
- <div id="pagination">
-
- <a href="index.html">1</a>
-
- <a href="index_page2.html">2</a>
-
- </div>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
100 index_page2.html
@@ -1,100 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
- <meta charset="utf-8" />
- <meta name="description" content="TooBug - 专注前端开发" />
- <meta name="keywords" content="TooBug,web前端,前端,HTML,CSS,JavaScript,js" />
- <title>TooBug</title>
- <link type="image/x-icon" rel="shortcut icon" href="/favicon.ico">
- <link rel="stylesheet" href="./skin/default/css/light.css" />
- <link rel="stylesheet" href="./js/prettify/prettify.css" />
- <script src="./js/prettify/prettify.js"></script>
- <script src="./js/jquery/jquery-1.7.2.min.js"></script>
- <script src="./js/index.js"></script>
-</head>
-<body>
-<header>
- <div id="logo">TooBug</div>
- <nav>
- <ul>
- <li><a href="../index.html">Index<br />首页</a></li>
- <li><a href="../index.html">Blogs<br />博客</a></li>
- <li><a href="../about.html">About<br />关于</a></li>
- </ul>
- </nav>
-</header>
-<section id="sidebar">
- <div id="intro">
- <p><strong>TooBug</strong>,前端工程师,目前就职于<a href="http://cdc.tencent.com" target="_blank">腾讯CDC</a>。关注体验设计,关注大前端生态圈。</p>
- <p>新浪微博:<a href="http://weibo.com/toooobug" target="_blank">@TooBug</a></p>
- <p>腾讯微博:<a href="http://t.qq.com/TooBug" target="_blank">@TooBug</a></p>
- <p>GitHub:<a href="https://github.com/toooobug" target="_blank">@TooBug</a></p>
- </div>
-</section>
-
-
-<section id="content">
- <div id="article">
-
- <div class="indexarticle">
- <h1><a href="./article/test6.html">这是文章的标题</a></h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
-
- <div class="indexarticle">
- <h1><a href="./article/test7.html">这是文章的标题</a></h1>
-
-<p><em>2012-07-19 16:56</em></p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<p>测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落</p>
-
-<pre><code>var fuck = '方滨兴';
-console.log(fuck == 404);
-// true
-</code></pre>
- </div>
-
-
- <div id="pagination">
-
- <a href="index.html">1</a>
-
- <a href="index_page2.html">2</a>
-
- </div>
- </div>
-</section>
-<div id="foot">
- <p>Powered by <a href="https://github.com/TooooBug/solo" target="_blank">Solo</a></p>
-</div>
-
-</body>
-</html>
View
147 lib/build.js
@@ -1,147 +0,0 @@
-var fs = require('fs');
-var md = require("node-markdown").Markdown;
-var tmpl = require("artTemplate");
-var config = require("./config").config;
-var path = require('path');
-var skinPath = '../skin/default/';
-var slotPath = '../skin/default/slot/';
-var mdArticlePath = '../md/article/';
-var articlePath = '../article/';
-var articleTemplate = skinPath + 'article.html';
-var pagePath = '../page/'
-var mdPagePath = '../md/page/';
-var pageTemplate = skinPath + 'page.html';
-var indexTemplate = skinPath + 'index.html';
-var charset = 'utf8';
-var tmpldata = {config:config,article:[]};
-
-build(mdPagePath, pagePath, pageTemplate);
-build(mdArticlePath, articlePath, articleTemplate);
-buildIndex();
-console.log('Done!');
-
-function buildIndex(){
- var files = fs.readdirSync(mdArticlePath),
- pageIndex = 0,
- pageBlogCount = 0,
- pubDate = {};
-
- //遍历一遍,取得时间
- files.forEach(function(file){
- dotLastIndex = file.lastIndexOf('.');
- if (dotLastIndex >= 0) {
- fileType = file.substr(dotLastIndex + 1);
- if (fileType === 'md') {
- content = fs.readFileSync(mdArticlePath+file, charset);
- pubDate[file] = content.match(/_(\d{4}-\d{2}-\d{2} \d{2}:\d{2})_/)[1];
- }
- }
- });
-
- //按时间排序
- files.sort(function(obj1,obj2){
- return pubDate[obj1]<pubDate[obj2]?1:-1;
- })
-
- files.forEach(function(file){
- dotLastIndex = file.lastIndexOf('.');
- if (dotLastIndex >= 0) {
- fileType = file.substr(dotLastIndex + 1);
- if (fileType === 'md') {
- // 替换模板内容
- content = fs.readFileSync(mdArticlePath+file, charset);
- content = md(content);
- var morearr = content.split('<p>$$solo_more$$</p>');
- content = morearr[0];
- if(morearr.length > 1){
- content += '<div class="articlemore"><a href="./article/'+file.replace(/\.md$/,'.html')+'">继续阅读</a></div>';
- }
- content = content.replace(/(['"])\.\.\//g,'$1');
- content = content.replace(/^<h1>(.*)<\/h1>/,'<h1><a href="./article/'+file.replace(/\.md$/,'.html')+'">$1</a></h1>');
-
- //每页第一篇
- if(pageBlogCount === 0){
- tmpldata.article[pageIndex] = [];
- }
-
- tmpldata.article[pageIndex].push(content);
- pageBlogCount ++;
-
- if(pageBlogCount === config.indexBlogCount){
- pageBlogCount = 0;
- pageIndex ++;
- }
- }
- }
- });
- //console.log(fs.readFileSync(indexTemplate,charset));
- //模板引擎
- tmpldata.article.forEach(function(articleInPage,index){
- var filename = 'index'+(index?'_page'+(index+1):'')+'.html';
- console.log('Build file: '+filename);
- var content = tmpl(fs.readFileSync(indexTemplate,charset))({config:config,article:articleInPage,pagecount:tmpldata.article.length});
- fs.writeFileSync('../'+filename, content);
- })
-}
-
-function build(from, to, template) {
-
- //console.log(fs.exists(to));
- //检查是否存在,不存在则创建
- if (fs.exists(to)) {
- fs.mkdirSync(to);
- }
-
- var files = fs.readdirSync(from);
- var file, dotLastIndex, fileType, fileName;
-
-// 对所有以 .md 为后缀的文件,进行转换
- for (var i = 0; i < files.length; i++) {
- file = files[i];
- dotLastIndex = file.lastIndexOf('.');
- if (dotLastIndex >= 0) {
- fileType = file.substr(dotLastIndex + 1);
- if (fileType === 'md') {
- fileName = file.substr(0, dotLastIndex);
- buildFile(file, fileName, from, to, template);
- }
- }
- }
-}
-
-// 转换 markdown 文件为html文件
-function buildFile(file, fileName, from, to, template) {
- console.log('Build file: ' + file);
- var text = fs.readFileSync(from + file, charset);
- var html = md(text);
- var content;
-
-
- //替换more标签
- html = html.replace('<p>$$solo_more$$</p>','');
-
- // 替换模板内容
- content = fs.readFileSync(template, charset).replace('${article}', html);
-
-
- // 替换slot
- content = includeSlot(content);
-
-
- //模板引擎
- content = tmpl(content)(tmpldata);
-
- fs.writeFileSync(to + fileName + '.html', content);
-}
-
-function includeSlot(content) {
- var slots = fs.readdirSync(slotPath);
- var slot;
- for (var i = 0; i < slots.length; i++) {
- slot = slots[i];
- var slot_text = fs.readFileSync(slotPath + slot, charset);
- content = content.replace('${slot}'.replace('slot', slot), slot_text);
- }
- return content;
-}
-
View
9 lib/config.js
@@ -1,9 +0,0 @@
-~function(global){
- global.config = {
- blogName : 'TooBug',
- blogKeywords : 'TooBug,web前端,前端,HTML,CSS,JavaScript,js',
- blogDescription : 'TooBug - 专注前端开发',
- blogSkin : 'default',
- indexBlogCount : 5
- }
-}(exports || window)
View
170 lib/coreparser.js
@@ -0,0 +1,170 @@
+var path = require('path'),
+ fs = require('fs'),
+ moment = require('moment'),
+ util = require('./util.js');
+ // sourcePath = path.normalize('./' + config.sourcePath),
+ // distPath = path.normalize('./' + config.distPath);
+
+function parseBlogs(){
+
+ var blogFileListPath = global.config.sourcePath + '/blogs',
+ blogFileList = util.readdirSyncRecursive(blogFileListPath);
+
+ blogFileList.forEach(function(blogFileName){
+
+ if(!/\.md$/.test(blogFileName)) return;
+
+ console.log(' ' + blogFileName);
+
+ var blogFileContent = fs.readFileSync(blogFileListPath + '/' + blogFileName,'utf-8'),
+ blogFileParseResult = _parseBlogContent(blogFileName,blogFileContent);
+
+ // 处理博客列表
+ global.blog.blogs.push(blogFileParseResult);
+
+ // 处理tags
+ _parseTags(blogFileParseResult);
+
+ // 处理archives
+ _parseArchives(blogFileParseResult);
+
+ // 处理分类
+ _parseCategory(blogFileParseResult);
+
+ });
+
+ // console.log(global.blog);
+
+}
+
+function parsePages(){
+
+ var pageFileListPath = global.config.sourcePath + '/pages',
+ pageFileList = util.readdirSyncRecursive(pageFileListPath);
+
+ pageFileList.forEach(function(pageFileName){
+
+ if(!/\.md$/.test(pageFileName)) return;
+
+ console.log(' ' + pageFileName);
+
+ var pageFileContent = fs.readFileSync(pageFileListPath + '/' + pageFileName,'utf-8'),
+ pageFileParseResult = _parseBlogContent(pageFileName,pageFileContent);
+
+ // 处理pages列表
+ global.blog.pages.push(pageFileParseResult);
+
+ });
+
+ // console.log(global.blog);
+
+}
+
+// 解析博客文件正文
+function _parseBlogContent(fileName,fileContent){
+
+ var patterns = {
+ title:/(?:Title ?: ?|\# ?)(.*)\n/i,
+ date:/(?:Date ?: ?|_)(.*?)_?\n/i,
+ status:/Status ?: ?(.*)\n/i,
+ tags:/Tags ?: ?(.*)\n/i,
+ category:/Category ?: ?(.*)\n/i,
+ url:/Url ?: ?(.*)\n/i
+ },
+ defaultValue = {
+ title:'',
+ date:new Date(),
+ status:'Public',
+ tags:'',
+ category:'',
+ url:fileName.replace(/\.md$/,'').replace(/.*\//,'')
+ },
+ blog = {};
+
+ fileContent = fileContent.replace(/\r\n/g,'\n');
+
+ for(var item in patterns){
+ if(patterns.hasOwnProperty(item)){
+
+ var matchResult = fileContent.match(patterns[item]);
+
+ blog[item] = matchResult && matchResult.length >=2 && matchResult[1] || defaultValue[item];
+
+ }
+
+ fileContent = fileContent.replace(patterns[item],'');
+
+ }
+
+ blog.date = moment(blog.date).toDate();
+ blog.tags = blog.tags.split(' ').filter(function(tag){return tag});
+ blog.content = fileContent.replace('\n\n$$solo_more$$','');
+ blog.summary = fileContent.split('\n\n$$solo_more$$')[0];
+ blog.id = util.getRandomId();
+
+ return blog;
+
+}
+
+// 处理tags
+function _parseTags(blog){
+
+ blog.tags.forEach(function(tag){
+
+ if(!global.blog.tags[tag]){
+ global.blog.tags[tag] = [];
+ }
+
+ global.blog.tags[tag].push(blog.id);
+
+ });
+
+}
+
+// 处理archives
+function _parseArchives(blog){
+
+ var archiveMonth = moment(blog.date).format('YYYY-MM');
+
+ if(!global.blog.archives[archiveMonth]){
+ global.blog.archives[archiveMonth] = [];
+ }
+
+ global.blog.archives[archiveMonth].push(blog.id);
+
+
+}
+
+// 处理分类
+function _parseCategory(blog){
+
+ var category = blog.category;
+
+ if(!category)return;
+
+ if(!global.blog.category[category]){
+ global.blog.category[category] = [];
+ }
+
+ global.blog.category[category].push(blog.id);
+
+
+}
+
+exports.parse = function(){
+
+ global.blog = {
+ blogs:[],
+ pages:[],
+ tags:{},
+ archives:{},
+ category:{}
+ };
+
+
+ console.log('\n 解析博客……');
+ parseBlogs();
+ console.log('\n 解析Pages……');
+ parsePages();
+
+};
View
20 lib/mime.js
@@ -1,20 +0,0 @@
-exports.types = {
- "css": "text/css",
- "gif": "image/gif",
- "html": "text/html",
- "ico": "image/x-icon",
- "jpeg": "image/jpeg",
- "jpg": "image/jpeg",
- "js": "text/javascript",
- "json": "application/json",
- "pdf": "application/pdf",
- "png": "image/png",
- "svg": "image/svg+xml",
- "swf": "application/x-shockwave-flash",
- "tiff": "image/tiff",
- "txt": "text/plain",
- "wav": "audio/x-wav",
- "wma": "audio/x-ms-wma",
- "wmv": "video/x-ms-wmv",
- "xml": "text/xml"
-};
View
49 lib/plugins/buildArticles.js
@@ -0,0 +1,49 @@
+var path = require('path'),
+ fs = require('fs'),
+ jade = require('jade'),
+ moment = require('moment'),
+ markdown = require('markdown-js').markdown,
+ util = require('../util.js'),
+ tmplPath = global.config.skinPath,
+ articlePath = path.resolve(global.config.distPath + '/article');
+
+var buildArticles = function(){
+
+ util.rmdirSyncRecursive(articlePath,function(){});
+ util.mkdirSyncRecursive(articlePath);
+
+ var articleTmpl = fs.readFileSync(tmplPath + '/html/article.jade','utf-8'),
+ articleCompileFunc = jade.compile(articleTmpl,{filename:tmplPath + '/html/article.jade',pretty:true}),
+ compileLocals = {};
+
+ compileLocals.blogName = global.config.blogName;
+ compileLocals.blogSubTitle = global.config.blogSubTitle;
+ compileLocals.blogKeywords = global.config.blogKeywords;
+ compileLocals.blogDescription = global.config.blogDescription;
+
+ compileLocals.pages = global.blog.pages;
+ compileLocals.category = global.blog.category;
+
+ global.blog.blogs.forEach(function(blog){
+ console.log(' ' + blog.url + '.html');
+ _buildArticle(blog,articleCompileFunc,compileLocals);
+ });
+
+}
+
+function _buildArticle(blog,articleCompileFunc,compileLocals){
+
+ compileLocals.title = blog.title;
+ compileLocals.pageTitle = compileLocals.title + ' - ' + compileLocals.blogName;
+ compileLocals.pubDate = moment(blog.date).format('YYYY-MM-DD HH:mm:ss');
+ compileLocals.content = markdown(blog.content);
+ fs.writeFileSync(articlePath + '/' + blog.url + '.html',articleCompileFunc(compileLocals));
+
+}
+
+module.exports = function(){
+
+ console.log('\n 博客文章页面构建……');
+ buildArticles();
+
+}
View
73 lib/plugins/buildIndex.js
@@ -0,0 +1,73 @@
+var path = require('path'),
+ fs = require('fs'),
+ moment = require('moment'),
+ jade = require('jade'),
+ markdown = require('markdown-js').markdown,
+ util = require('../util.js'),
+ tmplPath = global.config.skinPath,
+ indexPath = global.config.distPath;
+
+
+
+var buildIndex = function(){
+
+ util.mkdirSyncRecursive(indexPath);
+
+ // 删除旧首页文件
+ fs.readdirSync(indexPath).forEach(function(indexItem){
+ if(!/^index.*\.html$/.test(indexItem))return;
+ fs.unlinkSync(indexPath + '/' + indexItem);
+ });
+
+ var indexTmpl = fs.readFileSync(tmplPath + '/html/index.jade','utf-8'),
+ indexCompileFunc = jade.compile(indexTmpl,{filename:tmplPath + '/html/index.jade',pretty:true}),
+ compileLocals = {},
+ blogList,
+ pageCount = Math.ceil(global.blog.blogs.length / 5);
+
+ compileLocals.blogName = global.config.blogName;
+ compileLocals.pageTitle = compileLocals.blogName;
+ compileLocals.blogSubTitle = global.config.blogSubTitle;
+ compileLocals.blogKeywords = global.config.blogKeywords;
+ compileLocals.blogDescription = global.config.blogDescription;
+
+ compileLocals.pages = global.blog.pages;
+ compileLocals.category = global.blog.category;
+
+
+ compileLocals.pageCount = pageCount;
+
+ blogList = global.blog.blogs.slice();
+
+ blogList.sort(function(blog1,blog2){
+
+ var date1 = +blog1.date,
+ date2 = +blog2.date;
+
+ return date1<date2 ? 1:-1;
+
+ });
+
+ for(var i=0;i < pageCount;i++){
+ var fileName = 'index' + (i?('_page'+(i+1)):'') + '.html';
+ console.log(' ' + fileName);
+ compileLocals.blogList = blogList.slice().splice(5*i,5);
+ _buildIndexFile(fileName,indexCompileFunc,compileLocals);
+ }
+
+}
+
+function _buildIndexFile(fileName,indexCompileFunc,compileLocals){
+ compileLocals.blogList.forEach(function(blogItem){
+ blogItem.summary = markdown(blogItem.summary);
+ blogItem.pubDate = moment(blogItem.date).format('YYYY-MM-DD')
+ });
+ fs.writeFileSync(indexPath + '/' + fileName,indexCompileFunc(compileLocals));
+
+}
+
+module.exports = function(){
+
+ console.log('\n 首页构建……');
+ buildIndex();
+}
View
50 lib/plugins/buildPages.js
@@ -0,0 +1,50 @@
+var path = require('path'),
+ fs = require('fs'),
+ jade = require('jade'),
+ moment = require('moment'),
+ markdown = require('markdown-js').markdown,
+ util = require('../util.js'),
+ tmplPath = global.config.skinPath,
+ pagePath = global.config.distPath + '/page';
+
+var buildArticles = function(){
+
+ util.rmdirSyncRecursive(pagePath,function(){});
+ util.mkdirSyncRecursive(pagePath);
+
+ var pageTmpl = fs.readFileSync(tmplPath + '/html/page.jade','utf-8'),
+ pageCompileFunc = jade.compile(pageTmpl,{filename:tmplPath + '/html/page.jade',pretty:true}),
+ compileLocals = {};
+
+ compileLocals.blogName = global.config.blogName;
+ compileLocals.blogSubTitle = global.config.blogSubTitle;
+ compileLocals.blogKeywords = global.config.blogKeywords;
+ compileLocals.blogDescription = global.config.blogDescription;
+
+ compileLocals.pages = global.blog.pages;
+ compileLocals.category = global.blog.category;
+
+
+ global.blog.pages.forEach(function(page){
+ console.log(' ' + page.url + '.html');
+ _buildArticle(page,pageCompileFunc,compileLocals);
+ });
+
+}
+
+function _buildArticle(page,pageCompileFunc,compileLocals){
+
+ compileLocals.title = page.title;
+ compileLocals.pageTitle = compileLocals.title + ' - ' + compileLocals.blogName;
+ compileLocals.pubDate = moment(page.date).format('YYYY-MM-DD HH:mm:ss');
+ compileLocals.content = markdown(page.content);
+ fs.writeFileSync(pagePath + '/' + page.url + '.html',pageCompileFunc(compileLocals));
+
+}
+
+module.exports = function(){
+
+ console.log('\n Pages页面构建……');
+ buildArticles();
+
+}
View
59 lib/plugins/buildRss.js
@@ -0,0 +1,59 @@
+var path = require('path'),
+ fs = require('fs'),
+ moment = require('moment'),
+ jade = require('jade'),
+ markdown = require('markdown-js').markdown,
+ util = require('../util.js'),
+ tmplPath = global.config.skinPath,
+ rssPath = global.config.distPath + '/rss';
+
+var buildRss = function(){
+
+ // 删除旧rss文件
+ util.rmdirSyncRecursive(rssPath,function(){});
+ util.mkdirSyncRecursive(rssPath);
+
+ var rssTmpl = fs.readFileSync(tmplPath + '/html/rss.jade','utf-8'),
+ rssCompileFunc = jade.compile(rssTmpl,{pretty:true}),
+ compileLocals = {},
+ blogList;
+
+ compileLocals.blogName = global.config.blogName;
+ compileLocals.domain = global.config.domain;
+ compileLocals.blogDescription = global.config.blogDescription;
+
+ blogList = global.blog.blogs.slice(0,20);
+
+ blogList.sort(function(blog1,blog2){
+
+ var date1 = +blog1.date,
+ date2 = +blog2.date;
+
+ return date1<date2 ? 1:-1;
+
+ });
+
+ compileLocals.blogList = blogList;
+ // console.log(global.blog);
+ compileLocals.pubDate = util.formatToRfc822(blogList[0].date);
+
+ console.log(' rss.xml');
+ _buildRssFile('rss.xml',rssCompileFunc,compileLocals)
+
+}
+
+function _buildRssFile(fileName,rssCompileFunc,compileLocals){
+
+ compileLocals.blogList.forEach(function(blogItem){
+ blogItem.content = markdown(blogItem.content);
+ blogItem.pubDate = util.formatToRfc822(blogItem.date);
+ });
+ fs.writeFileSync(rssPath + '/' + fileName,rssCompileFunc(compileLocals));
+
+}
+
+module.exports = function(){
+
+ console.log('\n RSS构建……');
+ buildRss();
+}
View
10 lib/plugins/copyGlobal.js
@@ -0,0 +1,10 @@
+var path = require('path'),
+ fs = require('fs'),
+ util = require('../util.js'),
+ sourcePath = global.config.sourcePath + '/global',
+ distPath = global.config.distPath;
+
+module.exports = function(){
+ console.log('\n 复制全局文件……');
+ util.copyDirSyncRecursive(sourcePath,distPath,{preserve:true});
+}
View
11 lib/plugins/copySkin.js
@@ -0,0 +1,11 @@
+var path = require('path'),
+ fs = require('fs'),
+ util = require('../util.js'),
+ sourcePath = global.config.skinPath,
+ distPath = global.config.distPath;
+
+module.exports = function(){
+ console.log('\n 复制皮肤文件……');
+ util.copyDirSyncRecursive(sourcePath,distPath,{preserve:true});
+ util.rmdirSyncRecursive(distPath + '/html'); //删除掉html模板目录
+}
View
64 lib/publish.js
@@ -1,64 +0,0 @@
-var util = require("./util");
-var path = require('path');
-var fs = require('fs');
-var qiniu = require("qiniu");
-
-qiniu.conf.ACCESS_KEY = 'ezbZMkL_2LKi6fCkdVRdvrXch2oazWb3JyzymIhk';
-qiniu.conf.SECRET_KEY = 'jQcx25JfeZKfQXjgJdI1wD3e4Nm7IrIAXqDDP6Kl';
-
-var conn = new qiniu.digestauth.Client();
-var rs = new qiniu.rs.Service(conn, "test");
-
-var ignore = [".idea", ".git", "bin", "lib", "md", "node_modules", "skin", "test", ".gitignore", "app.js", "package.json", "README.md", "CNAME", ".project"];
-
-var domain = "qiniu.mynah.org";
-
-upload("../");
-publish();
-put404();
-
-function publish() {
- rs.publish(domain, function (resp) {
- console.log("\n===> publish result: ", resp);
- if (resp.code != 200) {
- return;
- }
- });
-}
-
-function upload(dir) {
- var files = fs.readdirSync(dir);
- files.forEach(function (file, index, array) {
- var filePath = dir + file;
- if (!util.inArray(file, ignore)) {
- if (util.isFile(filePath)) {
- putFile(filePath);
- } else {
- upload(filePath + "/");
- }
- }
- });
-}
-
-function putFile(file) {
- var key = file.replace("../", "");
- var mimeType = util.getContentType(key);
- rs.putFile(key, mimeType, file, function (resp) {
- console.log("\n===> PutFile result: ", resp);
- if (resp.code != 200) {
- return;
- }
- });
-}
-
-function put404(){
- var key = "errno-404";
- var mimeType = "text/html";
- var file = "../404.html"
- rs.putFile(key, mimeType, file, function (resp) {
- console.log("\n===> PutFile result: ", resp);
- if (resp.code != 200) {
- return;
- }
- });
-}
View
209 lib/util.js
@@ -1,30 +1,183 @@
-var path = require('path');
-var mime = require("./mime").types;
-var fs = require('fs');
-
-function getContentType(filename){
- var suffix = path.extname(filename);
- suffix = suffix ? suffix.slice(1) : 'unknown';
- return mime[suffix] || "text/plain";
-}
-
-function isFile(file) {
- var stats = fs.statSync(file);
- if (stats.isFile()) {
- return true;
- }
- return false;
-}
-
-function inArray(needle, haystack) {
- for (var i = 0; i < haystack.length; i++) {
- if (haystack[i] == needle) {
- return true;
+var path = require('path'),
+ fs = require('fs'),
+ moment = require('moment');
+
+/* wrench.readdirSyncRecursive("directory_path");
+ *
+ * Recursively dives through directories and read the contents of all the
+ * children directories.
+ */
+exports.readdirSyncRecursive = function(baseDir) {
+ baseDir = baseDir.replace(/\/$/, '');
+
+ var readdirSyncRecursive = function(baseDir) {
+ var files = [],
+ curFiles,
+ nextDirs,
+ isDir = function(fname){
+ return fs.statSync( path.join(baseDir, fname) ).isDirectory();
+ },
+ prependBaseDir = function(fname){
+ return path.join(baseDir, fname);
+ };
+
+ curFiles = fs.readdirSync(baseDir);
+ nextDirs = curFiles.filter(isDir);
+ curFiles = curFiles.map(prependBaseDir);
+
+ files = files.concat( curFiles );
+
+ while (nextDirs.length) {
+ files = files.concat( readdirSyncRecursive( path.join(baseDir, nextDirs.shift()) ) );
+ }
+
+ return files;
+ };
+
+ // convert absolute paths to relative
+ var fileList = readdirSyncRecursive(baseDir).map(function(val){
+ return path.relative(baseDir, val);
+ });
+
+ return fileList;
+};
+
+var mkdirSyncRecursive = function(pathName, mode) {
+ var self = this;
+
+ try {
+ fs.mkdirSync(pathName, mode);
+ } catch(err) {
+ if(err.code == "ENOENT") {
+ var slashIdx = pathName.lastIndexOf(path.sep);
+ if(slashIdx > 0) {
+ var parentPath = pathName.substring(0, slashIdx);
+ mkdirSyncRecursive(parentPath, mode);
+ mkdirSyncRecursive(pathName, mode);
+ } else {
+ throw err;
+ }
+ } else if(err.code == "EEXIST") {
+ return;
+ } else {
+ throw err;
+ }
}
- }
- return false;
-}
+};
+exports.mkdirSyncRecursive = mkdirSyncRecursive;
+
+/* wrench.rmdirSyncRecursive("directory_path", forceDelete, failSilent);
+ *
+ * Recursively dives through directories and obliterates everything about it. This is a
+ * Sync-function, which blocks things until it's done. No idea why anybody would want an
+ * Asynchronous version. :\
+ */
+exports.rmdirSyncRecursive = function(pathName, failSilent) {
+ var files;
+
+ try {
+ files = fs.readdirSync(pathName);
+ } catch (err) {
+ if(failSilent) return;
+ throw new Error(err.message);
+ }
+
+ /* Loop through and delete everything in the sub-tree after checking it */
+ for(var i = 0; i < files.length; i++) {
+ var currFile = fs.lstatSync(path.join(pathName, files[i]));
+
+ if(currFile.isDirectory()) // Recursive function back to the beginning
+ exports.rmdirSyncRecursive(path.join(pathName, files[i]));
+
+ else if(currFile.isSymbolicLink()) // Unlink symlinks
+ fs.unlinkSync(path.join(pathName, files[i]));
+
+ else // Assume it's a file - perhaps a try/catch belongs here?
+ fs.unlinkSync(path.join(pathName, files[i]));
+ }
+
+ /* Now that we know everything in the sub-tree has been deleted, we can delete the main
+ directory. Huzzah for the shopkeep. */
+ return fs.rmdirSync(pathName);
+};
+
+/* wrench.copyDirSyncRecursive("directory_to_copy", "new_directory_location", opts);
+ *
+ * Recursively dives through a directory and moves all its files to a new location. This is a
+ * Synchronous function, which blocks things until it's done. If you need/want to do this in
+ * an Asynchronous manner, look at wrench.copyDirRecursively() below.
+ *
+ * Note: Directories should be passed to this function without a trailing slash.
+ */
+exports.copyDirSyncRecursive = function(sourceDir, newDirLocation, opts) {
+ if (!opts || !opts.preserve) {
+ try {
+ if(fs.statSync(newDirLocation).isDirectory()) exports.rmdirSyncRecursive(newDirLocation);
+ } catch(e) { }
+ }
+
+ /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
+ var checkDir = fs.statSync(sourceDir);
+ try {
+ fs.mkdirSync(newDirLocation, checkDir.mode);
+ } catch (e) {
+ //if the directory already exists, that's okay
+ if (e.code !== 'EEXIST') throw e;
+ }
+
+ var files = fs.readdirSync(sourceDir);
+
+ for(var i = 0; i < files.length; i++) {
+ // ignores all files or directories which match the RegExp in opts.filter
+ if(typeof opts !== 'undefined') {
+ if(!opts.whitelist && opts.filter && files[i].match(opts.filter)) continue;
+ // if opts.whitelist is true every file or directory which doesn't match opts.filter will be ignored
+ if(opts.whitelist && opts.filter && !files[i].match(opts.filter)) continue;
+ if (opts.excludeHiddenUnix && /^\./.test(files[i])) continue;
+ }
+
+ var currFile = fs.lstatSync(path.join(sourceDir, files[i]));
+
+ var fCopyFile = function(srcFile, destFile) {
+ if(typeof opts !== 'undefined' && opts.preserveFiles && fs.existsSync(destFile)) return;
+
+ var contents = fs.readFileSync(srcFile);
+ fs.writeFileSync(destFile, contents);
+ };
+
+ if(currFile.isDirectory()) {
+ /* recursion this thing right on back. */
+ exports.copyDirSyncRecursive(path.join(sourceDir, files[i]), path.join(newDirLocation, files[i]), opts);
+ } else if(currFile.isSymbolicLink()) {
+ var symlinkFull = fs.readlinkSync(path.join(sourceDir, files[i]));
+
+ if (typeof opts !== 'undefined' && !opts.inflateSymlinks) {
+ fs.symlinkSync(symlinkFull, path.join(newDirLocation, files[i]));
+ continue;
+ }
+
+ var tmpCurrFile = fs.lstatSync(path.join(sourceDir, symlinkFull));
+ if (tmpCurrFile.isDirectory()) {
+ exports.copyDirSyncRecursive(path.join(sourceDir, symlinkFull), path.join(newDirLocation, files[i]), opts);
+ } else {
+ /* At this point, we've hit a file actually worth copying... so copy it on over. */
+ fCopyFile(path.join(sourceDir, symlinkFull), path.join(newDirLocation, files[i]));
+ }
+ } else {
+ /* At this point, we've hit a file actually worth copying... so copy it on over. */
+ fCopyFile(path.join(sourceDir, files[i]), path.join(newDirLocation, files[i]));
+ }
+ }
+};
+
+exports.formatToRfc822 = function(date){
+
+ return moment(date).format('ddd, DD MMM YYYY HH:mm:ss ZZ');
+
+};
+
+exports.getRandomId = function(){
+
+ return (Math.random()+'').substr(2);
-exports.getContentType = getContentType;
-exports.isFile = isFile;
-exports.inArray = inArray;
+};
View
22 md/article/tes2.md
@@ -1,22 +0,0 @@
-# 这是文章的标题
-_2012-07-19 16:56_
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落test
-
-$$solo_more$$
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
- var fuck = '方滨兴';
- console.log(fuck == 404);
- // true
View
5 md/article/test.md
@@ -1,5 +0,0 @@
-# 你好,Solo & GitHub!
-_2012-08-16 18:24_
-
-曾经,有一部电影,名叫Solo(独行者)。其实情节很俗套,无非是生物科技发达,让人死而复生,变成“机器人”一样去打仗,同样俗套的是后面必须会有伦理的斗争,Solo获得意识,而类似的实验被终止。不过,令我一直念念不忘的是它的名字,Solo——独行者。
-
View
22 md/article/test3.md
@@ -1,22 +0,0 @@
-# 这是文章的标题
-_2012-07-19 16:56_
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落MORE
-
-$$solo_more$$
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
- var fuck = '方滨兴';
- console.log(fuck == 404);
- // true
View
20 md/article/test4.md
@@ -1,20 +0,0 @@
-# 这是文章的标题
-_2012-07-19 16:56_
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
- var fuck = '方滨兴';
- console.log(fuck == 404);
- // true
View
20 md/article/test5.md
@@ -1,20 +0,0 @@
-# 这是文章的标题
-_2012-07-19 16:56_
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
- var fuck = '方滨兴';
- console.log(fuck == 404);
- // true
View
20 md/article/test6.md
@@ -1,20 +0,0 @@
-# 这是文章的标题
-_2012-07-19 16:56_
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
- var fuck = '方滨兴';
- console.log(fuck == 404);
- // true
View
20 md/article/test7.md
@@ -1,20 +0,0 @@
-# 这是文章的标题
-_2012-07-19 16:56_
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-测试段落测试段落
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
-
-测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落测试段落
-
- var fuck = '方滨兴';
- console.log(fuck == 404);
- // true