diff --git a/README.md b/README.md index 4dc88b8..a8f1156 100644 --- a/README.md +++ b/README.md @@ -66,4 +66,4 @@ amWiki是一套非常简单基于atom编辑器的轻量级wiki文库系统。 ## 如何使用 1. 使用http访问项目的index.html 2. PC端使用左侧导航栏、移动端使用右上角导航弹出菜单切换页面 -3. 在导航栏或导航菜单顶部,可以使用![](https://raw.githubusercontent.com/TevinLi/amWiki/master/files/icon_filter.png)栏位对导航目录进行**包含筛选** +3. 在导航栏或导航菜单顶部,可以使用 ![](https://raw.githubusercontent.com/TevinLi/amWiki/master/files/icon_filter.png) 栏位对导航目录进行**包含筛选** diff --git a/files/amWiki.css b/files/amWiki.css index 24d329c..b348247 100644 --- a/files/amWiki.css +++ b/files/amWiki.css @@ -5,8 +5,12 @@ .markdown-body{font-size:14px;} .markdown-body code{padding-top:0.15em;padding-bottom:0.15em;margin:0 1px;font-size:90%;color:#000;background-color:rgba(0,0,0,0.05);} .markdown-body code.hljs{color:#333;} -.hljs-string{color:#183691;} -.hljs-built_in{color:#0086b3;} +.markdown-body .hljs-string{color:#183691;} +.markdown-body .hljs-built_in{color:#0086b3;} +.markdown-body .anchor{margin-right:2px;margin-left:-20px;} +.markdown-body blockquote{padding:8px 15px;background-color:#fafafa;} +.markdown-body .anchor img{visibility:hidden;} +.markdown-body h1:hover .anchor img,.markdown-body h2:hover .anchor img,.markdown-body h3:hover .anchor img{visibility:visible;} /* ---------- base ---------- */ body{background:#e7e8eb !important;min-width:720px;} @@ -58,9 +62,6 @@ body{background:#e7e8eb !important;min-width:720px;} .menubar ul li a.on{color:#007ed9;background:#f4f5f9;} .main{padding:45px;margin-left:250px;} -.main .markdown-body .anchor{margin-right:2px;margin-left:-20px;} -.main .anchor img{visibility:hidden;} -.main h1:hover .anchor img,.main h2:hover .anchor img,.main h3:hover .anchor img{visibility:visible;} /* ---------- response ---------- */ @media screen and (max-width:720px){ diff --git a/files/amWiki.js b/files/amWiki.js index 4160426..19f021c 100644 --- a/files/amWiki.js +++ b/files/amWiki.js @@ -19,14 +19,14 @@ $(function () { //菜单折叠 var $menuBar = $('#menuBar'); $menuBar.on('click', 'i', function () { - var $this = $(this); - if ($this.hasClass('on')) { - $this.removeClass('on'); - $menuBar.find('h5').removeClass('on').next('ul').hide(); - } else { - $this.addClass('on'); - $menuBar.find('h5').addClass('on').next('ul').show(); - } + var $this = $(this); + if ($this.hasClass('on')) { + $this.removeClass('on'); + $menuBar.find('h5').removeClass('on').next('ul').hide(); + } else { + $this.addClass('on'); + $menuBar.find('h5').addClass('on').next('ul').show(); + } }); $menuBar.on('click', 'h5', function () { var $this = $(this), @@ -83,7 +83,7 @@ $(function () { //读取导航目录 $.get('library/_navigation_.md', function (data) { $menuBar.html(marked(data)); - $menuBar.prepend(''); + $menuBar.prepend(''); setView(); }, 'text'); diff --git a/files/apidemo.md b/files/apidemo.md index 38821ea..2cbb9da 100644 --- a/files/apidemo.md +++ b/files/apidemo.md @@ -1,7 +1,12 @@ # 客户日志流水接口 +## 接口简介 +实时查询客户各种操作(例如登录,拓客等)的流水日志 + +## 接口详情 + ### 请求地址 -/cloud/customer-flow +/api/customer-flow ### 请求类型 GET diff --git a/lib/contents.js b/lib/contents.js new file mode 100644 index 0000000..61f88a8 --- /dev/null +++ b/lib/contents.js @@ -0,0 +1,46 @@ +var fs = require("fs"); + +module.exports = { + make: function (editorPath) { + console.log(editorPath); + var arc = fs.readFileSync(editorPath, 'utf-8'); + var lines = arc.split('\n'); + if (lines.length == 1) { + lines = lines[0].split('\r'); + } + var contents = ''; + var lineStr = ''; + var hashStr = ''; + var h1 = ''; + for (var i = 0; i < lines.length; i++) { + lines[i] = lines[i].replace(/^\s*/, ''); + switch (lines[i].split(/\s/)[0]) { + case '#': + lineStr = lines[i].split('# ')[1].replace(/^\s+|\s+$/g, ''); + h1 = h1 == '' ? lineStr.replace(/\[(.*?)\]\(.*?\)/g, '$1') : h1; + break; + case '##': + //去除首位空格 + lineStr = lines[i].split('## ')[1].replace(/^\s+|\s+$/g, ''); + //去除链接 + lineStr = lineStr.replace(/\[(.*?)\]\(.*?\)/g, '$1'); + //去除所有空格 + hashStr = lineStr.replace(/\s+/g, ''); + //添加内容 + contents += '1. [' + lineStr + '](#' + hashStr + ' "' + lineStr + '")\n'; + break; + case '###': + lineStr = lines[i].split('### ')[1].replace(/^\s+|\s+$/g, ''); + lineStr = lineStr.replace(/\[(.*?)\]\(.*?\)/g, '$1'); + hashStr = lineStr.replace(/\s+/g, ''); + contents += '\t1. [' + lineStr + '](#' + hashStr + ' "' + lineStr + '")\n'; + break; + } + } + if (contents.substr(0,2) != '1.') { + contents = '1. ' + h1 + '\n' + contents; + } + contents = '>' + contents; + return contents; + } +} diff --git a/lib/creator.js b/lib/creator.js index f7b6635..f24768c 100644 --- a/lib/creator.js +++ b/lib/creator.js @@ -19,44 +19,44 @@ var readDir = function (path, callback) { }; //复制文件 -var copyFile = function(from, to){ - var encoding = from.indexOf('png') >= 0 ? 'binary' : 'utf-8'; - var file = fs.readFileSync(from, encoding); - fs.writeFileSync(to, file, encoding); +var copyFile = function (from, to) { + var encoding = from.indexOf('png') >= 0 ? 'binary' : 'utf-8'; + var file = fs.readFileSync(from, encoding); + fs.writeFileSync(to, file, encoding); }; //创建amWiki需要的文件夹 -var createDir = function(outputPath){ - if(!fs.existsSync(outputPath + 'amWiki/')){ - fs.mkdirSync(outputPath + 'amWiki/', 0777); - } - if(!fs.existsSync(outputPath + 'amWiki/js/')){ - fs.mkdirSync(outputPath + 'amWiki/js/', 0777); - } - if(!fs.existsSync(outputPath + 'amWiki/css')){ - fs.mkdirSync(outputPath + 'amWiki/css', 0777); - } - if(!fs.existsSync(outputPath + 'amWiki/images')){ - fs.mkdirSync(outputPath + 'amWiki/images', 0777); - } - if(!fs.existsSync(outputPath + 'library/')){ - fs.mkdirSync(outputPath + 'library/', 0777); - if(!fs.existsSync(outputPath + 'library/01-关于amWiki')){ - fs.mkdirSync(outputPath + 'library/01-关于amWiki', 0777); - } - if(!fs.existsSync(outputPath + 'library/02-学习markdown')){ - fs.mkdirSync(outputPath + 'library/02-学习markdown', 0777); - } - if(!fs.existsSync(outputPath + 'library/03-文档示范')){ - fs.mkdirSync(outputPath + 'library/03-文档示范', 0777); - } - return false; - } - return true; +var createDir = function (outputPath) { + if (!fs.existsSync(outputPath + 'amWiki/')) { + fs.mkdirSync(outputPath + 'amWiki/', 0777); + } + if (!fs.existsSync(outputPath + 'amWiki/js/')) { + fs.mkdirSync(outputPath + 'amWiki/js/', 0777); + } + if (!fs.existsSync(outputPath + 'amWiki/css')) { + fs.mkdirSync(outputPath + 'amWiki/css', 0777); + } + if (!fs.existsSync(outputPath + 'amWiki/images')) { + fs.mkdirSync(outputPath + 'amWiki/images', 0777); + } + if (!fs.existsSync(outputPath + 'library/')) { + fs.mkdirSync(outputPath + 'library/', 0777); + if (!fs.existsSync(outputPath + 'library/01-关于amWiki')) { + fs.mkdirSync(outputPath + 'library/01-关于amWiki', 0777); + } + if (!fs.existsSync(outputPath + 'library/02-学习markdown')) { + fs.mkdirSync(outputPath + 'library/02-学习markdown', 0777); + } + if (!fs.existsSync(outputPath + 'library/03-文档示范')) { + fs.mkdirSync(outputPath + 'library/03-文档示范', 0777); + } + return false; + } + return true; }; module.exports = { - //创建amWiki本地文件 + //创建amWiki本地文件 buildAt: function (editorPath, configPath) { if (editorPath.indexOf('config.json') < 0) { alert('当前不是"config.json"文件!'); @@ -66,67 +66,69 @@ module.exports = { var outputPath = editorPath.split('config.json')[0].replace(/\\/g, '/'); var config = fs.readFileSync(editorPath, 'utf-8'); - if (config.length == 0) { - if (!confirm('没有读取到任何配置,继续创建么?')){ - return; - } + if (config.length == 0) { + if (!confirm('没有读取到任何配置,继续创建么?')) { + return; + } } //默认配置 config = JSON.parse(config); config.name = config.name || 'amWiki文档库系统'; config.version = typeof config.version == 'string' ? config.version : 'by Tevin'; - fs.readdir(outputPath, function (err, files) { - if (files.length > 1) { - if (!confirm('此处已有一些文件或文件夹,是否仍然在此创建amWiki?')) { - return; - } - } - var index = fs.readFileSync(filesPath + 'index.tmp', 'utf-8'); - index = index.replace(/\{\{name\}\}/g, config.name).replace('{{version}}', config.version); - fs.writeFileSync(outputPath + 'index.html', index, 'utf-8'); + fs.readdir(outputPath, function (err, files) { + if (files.length > 1) { + if (!confirm('此处已有一些文件或文件夹,是否仍然在此创建amWiki?')) { + return; + } + } + var index = fs.readFileSync(filesPath + 'index.tmp', 'utf-8'); + index = index.replace(/\{\{name\}\}/g, config.name).replace('{{version}}', config.version); + fs.writeFileSync(outputPath + 'index.html', index, 'utf-8'); - var hasLibrary = createDir(outputPath); - var fileList = [ - ['primercss.github.css', 'amWiki/css/primercss.github.css'], - ['lhjs.github-gist.css', 'amWiki/css/lhjs.github-gist.css'], - ['amWiki.css', 'amWiki/css/amWiki.css'], - ['forEach.js', 'amWiki/js/forEach.js'], - ['jquery-1.11.3.min.js', 'amWiki/js/jquery-1.11.3.min.js'], - ['marked.min.js', 'amWiki/js/marked.min.js'], - ['highlight.min.js', 'amWiki/js/highlight.min.js'], - ['amWiki.js', 'amWiki/js/amWiki.js'], - ['icon_close.png', 'amWiki/images/icon_close.png'], - ['icon_arrow_blue.png', 'amWiki/images/icon_arrow_blue.png'], - ['icon_arrow_gray.png', 'amWiki/images/icon_arrow_gray.png'], - ['icon_filter.png', 'amWiki/images/icon_filter.png'], - ['icon_link.png', 'amWiki/images/icon_link.png'], - ['icon_home.png', 'amWiki/images/icon_home.png'], - ['icon_menu.png', 'amWiki/images/icon_menu.png'], - ['logo.png', 'amWiki/images/logo.png'], - ['menubar_bg.png', 'amWiki/images/menubar_bg.png'], - ['point.png', 'amWiki/images/point.png'] - ] - for (var i = 0; i < fileList.length; i++) { - copyFile(filesPath + fileList[i][0], outputPath + fileList[i][1]); - } + var hasLibrary = createDir(outputPath); + var fileList = [ + ['primercss.github.css', 'amWiki/css/primercss.github.css'], + ['lhjs.github-gist.css', 'amWiki/css/lhjs.github-gist.css'], + ['amWiki.css', 'amWiki/css/amWiki.css'], + ['forEach.js', 'amWiki/js/forEach.js'], + ['jquery-1.11.3.min.js', 'amWiki/js/jquery-1.11.3.min.js'], + ['marked.min.js', 'amWiki/js/marked.min.js'], + ['highlight.min.js', 'amWiki/js/highlight.min.js'], + ['amWiki.js', 'amWiki/js/amWiki.js'], + ['icon_close.png', 'amWiki/images/icon_close.png'], + ['icon_arrow_blue.png', 'amWiki/images/icon_arrow_blue.png'], + ['icon_arrow_gray.png', 'amWiki/images/icon_arrow_gray.png'], + ['icon_filter.png', 'amWiki/images/icon_filter.png'], + ['icon_link.png', 'amWiki/images/icon_link.png'], + ['icon_to_unfolding.png', 'amWiki/images/icon_to_unfolding.png'], + ['icon_to_folding.png', 'amWiki/images/icon_to_folding.png'], + ['icon_home.png', 'amWiki/images/icon_home.png'], + ['icon_menu.png', 'amWiki/images/icon_menu.png'], + ['logo.png', 'amWiki/images/logo.png'], + ['menubar_bg.png', 'amWiki/images/menubar_bg.png'], + ['point.png', 'amWiki/images/point.png'] + ] + for (var i = 0; i < fileList.length; i++) { + copyFile(filesPath + fileList[i][0], outputPath + fileList[i][1]); + } - if(!hasLibrary){ - var home = fs.readFileSync(filesPath + 'home.md', 'utf-8'); - home = home.replace('{{name}}', config.name); - fs.writeFileSync(outputPath + 'library/首页.md', home, 'utf-8'); - var fileList2 = [ - ['../README.md', 'library/01-关于amWiki/001-了解amWiki文库.md'], - ['markdown.md', 'library/02-学习markdown/001-markdown快速开始.md'], - ['highlighting.md', 'library/02-学习markdown/002-markdown语法高亮.md'], - ['apidemo.md', 'library/03-文档示范/001-通用API文档示例.md'] - ]; - for (var j = 0; j < fileList2.length; j++) { - copyFile(filesPath + fileList2[j][0], outputPath + fileList2[j][1]); - } - } + if (!hasLibrary) { + var home = fs.readFileSync(filesPath + 'home.md', 'utf-8'); + home = home.replace('{{name}}', config.name); + fs.writeFileSync(outputPath + 'library/首页.md', home, 'utf-8'); + var fileList2 = [ + ['../README.md', 'library/01-关于amWiki/001-了解amWiki文库.md'], + ['markdown.md', 'library/02-学习markdown/001-markdown快速开始.md'], + ['highlighting.md', 'library/02-学习markdown/002-markdown语法高亮.md'], + ['apidemo.md', 'library/03-文档示范/001-通用API文档示例.md'] + ]; + for (var j = 0; j < fileList2.length; j++) { + copyFile(filesPath + fileList2[j][0], outputPath + fileList2[j][1]); + } + } - navUpdate.updateNav(outputPath + 'library/'); + navUpdate.updateNav(outputPath + 'library/'); }); } diff --git a/lib/main.coffee b/lib/main.coffee index f92fb65..34545f2 100644 --- a/lib/main.coffee +++ b/lib/main.coffee @@ -1,6 +1,7 @@ {CompositeDisposable,File,Directory} = require 'atom' navUpdate = require './navUpdate' -createLibrary = require './creator' +creator = require './creator' +contents = require './contents' module.exports = @@ -13,7 +14,8 @@ module.exports = 'amWiki:updateNav': => @updateNav() @subscriptions.add atom.commands.add 'atom-workspace', 'amWiki:create': => @createWiki() - + @subscriptions.add atom.commands.add 'atom-workspace', + 'amWiki:contents': => @makeContents() @subscriptions.add atom.commands.add 'atom-workspace', 'amWiki:pasteImg': => @pasterImg() @@ -32,7 +34,16 @@ module.exports = editor = atom.workspace.getActiveTextEditor() return unless editor # console.log(atom); - createLibrary.buildAt(editor.getPath(), atom.configDirPath) + creator.buildAt(editor.getPath(), atom.configDirPath) + + makeContents: -> + editor = atom.workspace.getActiveTextEditor() + return unless editor + grammar = editor.getGrammar() + return unless grammar + return unless grammar.scopeName is 'source.gfm' + ct = contents.make(editor.getPath()) or '' + @insertText ct, editor pasterImg: -> # console.log('pasterImg') @@ -70,7 +81,7 @@ module.exports = # ascClip = "assets/#{filename}" # clipboard.writeText(ascClip) - @insertUrl "![](library/assets/#{thefile.getParent().getBaseName()}/#{filename})",editor + @insertText "![](library/assets/#{thefile.getParent().getBaseName()}/#{filename})", editor return false @@ -92,7 +103,7 @@ module.exports = # console.log('finish clip image') callback() - insertUrl: (url,editor) -> + insertText: (url, editor) -> editor.insertText(url) deactivate: -> diff --git a/lib/navUpdate.js b/lib/navUpdate.js index f234c4d..339dfb3 100644 --- a/lib/navUpdate.js +++ b/lib/navUpdate.js @@ -19,20 +19,20 @@ var readDir = function (path, callback) { module.exports = { updateNav: function (editorPath) { if (editorPath.indexOf('library') < 0) { - alert('只有当你打开一个位于library文件夹下的文件时,才能更新“_navigation_.md”!'); + alert('只有当你打开一个位于library文件夹下的文件时,才能更新“_navigation_.md”!'); return; } var path = editorPath.split('library')[0] + 'library/'; readDir(path, function (err, data) { if (!err) { var markdown = ''; - markdown += '\n#### [首页](?file=首页 "返回首页") ####\n'; + markdown += '\n#### [首页](?file=首页 "返回首页")\n'; for (var dir in data) { if (data.hasOwnProperty(dir)) { if (dir == 'assets') { continue; } - markdown += '\n##### ' + dir.substring(3) + ' #####\n'; + markdown += '\n##### ' + dir.substring(3) + '\n'; for (var i = 0; i < data[dir].length; i++) { var name = data[dir][i].split('.md')[0]; markdown += '- [' + name.substring(4) + '](?file=' + diff --git a/menus/awiki.cson b/menus/awiki.cson index 16b460d..fecab06 100644 --- a/menus/awiki.cson +++ b/menus/awiki.cson @@ -1,18 +1,16 @@ -'menu': [ - { - 'label': 'Packages' - 'submenu': [{ - 'label': 'amWiki 文库', - 'submenu': [{ - 'label': '通过 “config.json” 创建新amWiki文库', - 'command': 'amWiki:create' - },{ - 'label': '提取h1-h3标题为页内目录', - 'command': 'amWiki:contents' - },{ - 'label': '手动刷新 “_navigation_.md”', - 'command': 'amWiki:updateNav' - }] +'menu': [{ + 'label': 'Packages', + 'submenu': [{ + 'label': 'amWiki 文库', + 'submenu': [{ + 'label': '通过 “config.json” 创建新amWiki文库', + 'command': 'amWiki:create' + }, { + 'label': '提取h2、h3标题为页内目录', + 'command': 'amWiki:contents' + }, { + 'label': '手动刷新 “_navigation_.md”', + 'command': 'amWiki:updateNav' + }] }] - } -] +}]