golang实现markdown顶部导航移到左侧

victorl · · 1428 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

最近写一个文档,由于文档太长,加上页面导航后,发现页面导航只能在页面顶部,查看文档很不方便。所以就写了个工具可以把生成好的HTML页面顶部导航移到左侧。我自己觉得挺好用的就分享出来了。 ```text 程序使用方式: ./mdleft -s ./test.html -d ./test_v0.1.0.html -t markdown左侧导航 说明: -s 原HTML文件 -d 输出文件 -t 左侧导航标题和HTML文件标题 ``` --- ![left.jpg](https://static.studygolang.com/180712/0e2c77c48d66b7d21720fe80678ce5ae.jpg) --- --- ## 源码 ```go package main import ( "bytes" "flag" "fmt" "io/ioutil" "log" "os" "path/filepath" "strings" "github.com/PuerkitoBio/goquery" ) func main() { var err error var srcPath, destPath, title string flag.StringVar(&srcPath, "s", "", "source html file") flag.StringVar(&destPath, "d", "", "output html file") flag.StringVar(&title, "t", "", "title") flag.Parse() if srcPath == "" { flag.Usage() log.Fatalln("source file is empty") } srcPath, err = filepath.Abs(srcPath) if err != nil { flag.Usage() log.Fatalln(err) } if destPath == "" { fileName := filepath.Base(srcPath) if ind := strings.Index(fileName, "."); ind != -1 { fileName = fileName[:ind] + "_v0.0.0" + fileName[ind:] } else { fileName += "_v0.0.0" } destPath = filepath.Join(filepath.Dir(srcPath), fileName) } if !fileExists(srcPath) { log.Fatalf("file not exists:%s\n", srcPath) } // 读取文件 data, err := ioutil.ReadFile(srcPath) if err != nil { log.Fatalln(err) } doc, err := goquery.NewDocumentFromReader(bytes.NewBuffer(data)) if err != nil { log.Fatalln(err) } // 获取顶部导航列表 leftUl := doc.Find("body").Find("ul").First() doc.Find("body").Find("ul").First().Remove() // 获取主体 rightDiv := doc.Find("body").Find("div").First() doc.Find("body").Find("div").First().Remove() // 添加样式 doc.Find("head").AppendHtml(styleLeftRight) // 添加左侧导航列表 doc.Find("body").AppendHtml(leftDivStr) if title != "" { doc.Find("title").First().SetText(title) doc.Find("body").Find("div.left-div").AppendHtml(getDocTitle(title)) } doc.Find("body").Find("div.left-div").AppendSelection(leftUl) doc.Find("body").AppendHtml(rightDivStr) // 添加右侧主体 doc.Find("body").Find("div.right-div").AppendSelection(rightDiv) // 添加调整右侧宽度的js doc.Find("html").AppendHtml(scriptWidth) // 输出文件 ret, err := doc.Html() if err != nil { log.Fatalln(err) } err = ioutil.WriteFile(destPath, []byte(ret), 0644) if err != nil { log.Fatalln(err) } } func fileExists(name string) (ok bool) { if _, err := os.Stat(name); err != nil { if os.IsNotExist(err) { return false } } return true } func getDocTitle(s string) (title string) { return fmt.Sprintf(`<h2 style="color:rgb(40, 153, 206)" >%s</h2>`, s) } var ( leftDivStr = `<div id="left-001" class="left-div"></div>` rightDivStr = `<div id="right-001" class="right-div"></div>` styleLeftRight = ` <style> body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } .left-div { float: left; padding-right: 10px; position: fixed; overflow-y: scroll; height: 100% } .right-div { float: right; padding-left: 10px; } </style> ` scriptWidth = ` <script type="text/javascript"> var width = window.innerWidth - document.getElementById("left-001").offsetWidth-50; document.getElementById("right-001").style.width = width+"px"; </script> ` ) ````

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1428 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传