├── .gitignore ├── static ├── ueditor │ ├── themes │ │ ├── iframe.css │ │ └── default │ │ │ ├── images │ │ │ ├── arrow.png │ │ │ ├── icons.gif │ │ │ ├── icons.png │ │ │ ├── lock.gif │ │ │ ├── scale.png │ │ │ ├── word.gif │ │ │ ├── anchor.gif │ │ │ ├── arrow_up.png │ │ │ ├── cursor_h.gif │ │ │ ├── cursor_h.png │ │ │ ├── cursor_v.gif │ │ │ ├── cursor_v.png │ │ │ ├── filescan.png │ │ │ ├── spacer.gif │ │ │ ├── upload.png │ │ │ ├── arrow_down.png │ │ │ ├── button-bg.gif │ │ │ ├── icons-all.gif │ │ │ ├── pagebreak.gif │ │ │ ├── sparator_v.png │ │ │ ├── toolbar_bg.png │ │ │ ├── videologo.gif │ │ │ ├── wordpaste.png │ │ │ ├── cancelbutton.gif │ │ │ ├── highlighted.gif │ │ │ ├── unhighlighted.gif │ │ │ ├── dialog-title-bg.png │ │ │ ├── neweditor-tab-bg.png │ │ │ ├── table-cell-align.png │ │ │ └── tangram-colorpicker.png │ │ │ └── dialogbase.css │ ├── dialogs │ │ ├── table │ │ │ ├── dragicon.png │ │ │ ├── edittip.html │ │ │ ├── edittable.css │ │ │ ├── edittd.html │ │ │ └── edittable.html │ │ ├── image │ │ │ ├── imageUploader.swf │ │ │ ├── images │ │ │ │ ├── left_focus.jpg │ │ │ │ ├── none_focus.jpg │ │ │ │ ├── right_focus.jpg │ │ │ │ └── center_focus.jpg │ │ │ └── image.css │ │ ├── template │ │ │ ├── images │ │ │ │ ├── bg.gif │ │ │ │ ├── pre0.png │ │ │ │ ├── pre1.png │ │ │ │ ├── pre2.png │ │ │ │ ├── pre3.png │ │ │ │ └── pre4.png │ │ │ ├── template.html │ │ │ ├── template.css │ │ │ └── template.js │ │ ├── video │ │ │ ├── images │ │ │ │ ├── left_focus.jpg │ │ │ │ ├── none_focus.jpg │ │ │ │ ├── right_focus.jpg │ │ │ │ └── center_focus.jpg │ │ │ ├── video.css │ │ │ └── video.html │ │ ├── attachment │ │ │ ├── fileTypeImages │ │ │ │ ├── icon_chm.gif │ │ │ │ ├── icon_doc.gif │ │ │ │ ├── icon_exe.gif │ │ │ │ ├── icon_mp3.gif │ │ │ │ ├── icon_mv.gif │ │ │ │ ├── icon_pdf.gif │ │ │ │ ├── icon_ppt.gif │ │ │ │ ├── icon_psd.gif │ │ │ │ ├── icon_rar.gif │ │ │ │ ├── icon_txt.gif │ │ │ │ ├── icon_xls.gif │ │ │ │ └── icon_default.png │ │ │ ├── fileTypeMaps.js │ │ │ └── attachment.css │ │ ├── spechars │ │ │ ├── spechars.html │ │ │ └── spechars.js │ │ ├── anchor │ │ │ └── anchor.html │ │ ├── internal.js │ │ ├── gmap │ │ │ └── gmap.html │ │ ├── map │ │ │ └── map.html │ │ └── link │ │ │ └── link.html │ ├── lang │ │ └── zh-cn │ │ │ └── images │ │ │ ├── copy.png │ │ │ ├── music.png │ │ │ ├── upload.png │ │ │ ├── imglabel.png │ │ │ └── localimage.png │ └── third-party │ │ ├── swfupload │ │ ├── swfupload.swf │ │ ├── swfupload_fp9.swf │ │ ├── swfupload.cookies.js │ │ ├── swfupload.proxy.js │ │ └── swfupload.queue.js │ │ └── codemirror │ │ └── codemirror.css ├── images │ ├── f.ico │ ├── es.png │ ├── qq_32.png │ ├── qzone_32.png │ ├── weibo_32.png │ ├── cover │ │ ├── cover.jpg │ │ ├── cover_default.jpg │ │ ├── 201703051349045432.jpg │ │ ├── 201703051847567306.jpg │ │ ├── 201703142313157316.jpg │ │ ├── 201703152314519971.jpg │ │ ├── 201703162101115908.jpg │ │ ├── 201703181708141811.jpg │ │ ├── 201703181740098218.jpg │ │ └── 201703181909057125.jpg │ ├── handshake.png │ └── wechat_32.png ├── plug │ ├── layui │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ │ ├── images │ │ │ └── face │ │ │ │ ├── 0.gif │ │ │ │ ├── 1.gif │ │ │ │ ├── 10.gif │ │ │ │ ├── 11.gif │ │ │ │ ├── 12.gif │ │ │ │ ├── 13.gif │ │ │ │ ├── 14.gif │ │ │ │ ├── 15.gif │ │ │ │ ├── 16.gif │ │ │ │ ├── 17.gif │ │ │ │ ├── 18.gif │ │ │ │ ├── 19.gif │ │ │ │ ├── 2.gif │ │ │ │ ├── 20.gif │ │ │ │ ├── 21.gif │ │ │ │ ├── 22.gif │ │ │ │ ├── 23.gif │ │ │ │ ├── 24.gif │ │ │ │ ├── 25.gif │ │ │ │ ├── 26.gif │ │ │ │ ├── 27.gif │ │ │ │ ├── 28.gif │ │ │ │ ├── 29.gif │ │ │ │ ├── 3.gif │ │ │ │ ├── 30.gif │ │ │ │ ├── 31.gif │ │ │ │ ├── 32.gif │ │ │ │ ├── 33.gif │ │ │ │ ├── 34.gif │ │ │ │ ├── 35.gif │ │ │ │ ├── 36.gif │ │ │ │ ├── 37.gif │ │ │ │ ├── 38.gif │ │ │ │ ├── 39.gif │ │ │ │ ├── 4.gif │ │ │ │ ├── 40.gif │ │ │ │ ├── 41.gif │ │ │ │ ├── 42.gif │ │ │ │ ├── 43.gif │ │ │ │ ├── 44.gif │ │ │ │ ├── 45.gif │ │ │ │ ├── 46.gif │ │ │ │ ├── 47.gif │ │ │ │ ├── 48.gif │ │ │ │ ├── 49.gif │ │ │ │ ├── 5.gif │ │ │ │ ├── 50.gif │ │ │ │ ├── 51.gif │ │ │ │ ├── 52.gif │ │ │ │ ├── 53.gif │ │ │ │ ├── 54.gif │ │ │ │ ├── 55.gif │ │ │ │ ├── 56.gif │ │ │ │ ├── 57.gif │ │ │ │ ├── 58.gif │ │ │ │ ├── 59.gif │ │ │ │ ├── 6.gif │ │ │ │ ├── 60.gif │ │ │ │ ├── 61.gif │ │ │ │ ├── 62.gif │ │ │ │ ├── 63.gif │ │ │ │ ├── 64.gif │ │ │ │ ├── 65.gif │ │ │ │ ├── 66.gif │ │ │ │ ├── 67.gif │ │ │ │ ├── 68.gif │ │ │ │ ├── 69.gif │ │ │ │ ├── 7.gif │ │ │ │ ├── 70.gif │ │ │ │ ├── 71.gif │ │ │ │ ├── 8.gif │ │ │ │ └── 9.gif │ │ ├── css │ │ │ └── modules │ │ │ │ ├── laydate │ │ │ │ └── icon.png │ │ │ │ ├── layer │ │ │ │ └── default │ │ │ │ │ ├── icon.png │ │ │ │ │ ├── icon-ext.png │ │ │ │ │ ├── loading-0.gif │ │ │ │ │ ├── loading-1.gif │ │ │ │ │ └── loading-2.gif │ │ │ │ └── code.css │ │ ├── lay │ │ │ └── modules │ │ │ │ ├── pagesize.js │ │ │ │ ├── util.js │ │ │ │ ├── code.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── flow.js │ │ │ │ ├── upload.js │ │ │ │ ├── tree.js │ │ │ │ └── laypage.js │ │ └── layui.js │ └── font-awesome │ │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ ├── screen-reader.less │ │ ├── fixed-width.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── core.less │ │ ├── stacked.less │ │ ├── font-awesome.less │ │ ├── bordered-pulled.less │ │ ├── rotated-flipped.less │ │ ├── path.less │ │ ├── animated.less │ │ └── mixins.less │ │ ├── scss │ │ ├── _fixed-width.scss │ │ ├── _screen-reader.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _core.scss │ │ ├── font-awesome.scss │ │ ├── _stacked.scss │ │ ├── _bordered-pulled.scss │ │ ├── _rotated-flipped.scss │ │ ├── _path.scss │ │ ├── _animated.scss │ │ └── _mixins.scss │ │ └── HELP-US-OUT.txt ├── css │ ├── detail.css │ ├── home.css │ ├── article.css │ ├── prettify.css │ ├── about.css │ ├── resource.css │ └── timeline.css └── js │ ├── detail.js │ └── fortree.js ├── .gitattributes ├── models ├── response.go ├── config.go ├── category.go ├── comment.go ├── user.go ├── post.go └── base.go ├── conf └── app.conf ├── main.go ├── util ├── functions.go └── pager.go ├── routers └── router.go ├── README.md ├── views ├── admin │ ├── category_add.tpl │ ├── category.tpl │ ├── config.html │ ├── login.html │ ├── list.html │ └── main.tpl └── blog │ ├── about.html │ ├── right.html │ ├── foot.html │ ├── resource.html │ ├── article.html │ ├── head.html │ └── detail.html └── controllers ├── base.go └── blog.go /.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | *.exe* 3 | -------------------------------------------------------------------------------- /static/ueditor/themes/iframe.css: -------------------------------------------------------------------------------- 1 | /*可以在这里添加你自己的css*/ 2 | pre{font-size:14px} -------------------------------------------------------------------------------- /static/images/f.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/f.ico -------------------------------------------------------------------------------- /static/images/es.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/es.png -------------------------------------------------------------------------------- /static/images/qq_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/qq_32.png -------------------------------------------------------------------------------- /static/images/qzone_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/qzone_32.png -------------------------------------------------------------------------------- /static/images/weibo_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/weibo_32.png -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.css linguist-language=go 2 | *.js linguist-language=go 3 | *.html linguist-language=go 4 | -------------------------------------------------------------------------------- /static/images/cover/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/cover.jpg -------------------------------------------------------------------------------- /static/images/handshake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/handshake.png -------------------------------------------------------------------------------- /static/images/wechat_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/wechat_32.png -------------------------------------------------------------------------------- /models/response.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | type Response struct { 4 | Code int 5 | Message interface{} 6 | } 7 | -------------------------------------------------------------------------------- /static/plug/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/font/iconfont.eot -------------------------------------------------------------------------------- /static/plug/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /static/plug/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/font/iconfont.woff -------------------------------------------------------------------------------- /static/plug/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/0.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/1.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/10.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/11.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/12.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/13.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/14.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/15.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/16.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/17.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/18.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/19.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/2.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/20.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/21.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/22.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/23.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/24.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/25.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/26.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/27.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/28.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/29.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/3.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/30.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/31.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/32.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/33.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/34.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/35.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/36.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/37.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/38.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/39.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/4.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/40.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/41.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/42.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/43.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/44.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/45.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/46.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/47.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/48.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/49.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/5.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/50.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/51.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/52.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/53.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/54.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/55.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/56.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/57.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/58.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/59.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/6.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/60.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/61.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/62.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/63.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/64.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/65.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/66.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/67.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/68.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/69.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/7.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/70.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/71.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/8.gif -------------------------------------------------------------------------------- /static/plug/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/images/face/9.gif -------------------------------------------------------------------------------- /static/images/cover/cover_default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/cover_default.jpg -------------------------------------------------------------------------------- /static/ueditor/dialogs/table/dragicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/table/dragicon.png -------------------------------------------------------------------------------- /static/ueditor/lang/zh-cn/images/copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/lang/zh-cn/images/copy.png -------------------------------------------------------------------------------- /static/images/cover/201703051349045432.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703051349045432.jpg -------------------------------------------------------------------------------- /static/images/cover/201703051847567306.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703051847567306.jpg -------------------------------------------------------------------------------- /static/images/cover/201703142313157316.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703142313157316.jpg -------------------------------------------------------------------------------- /static/images/cover/201703152314519971.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703152314519971.jpg -------------------------------------------------------------------------------- /static/images/cover/201703162101115908.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703162101115908.jpg -------------------------------------------------------------------------------- /static/images/cover/201703181708141811.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703181708141811.jpg -------------------------------------------------------------------------------- /static/images/cover/201703181740098218.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703181740098218.jpg -------------------------------------------------------------------------------- /static/images/cover/201703181909057125.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/images/cover/201703181909057125.jpg -------------------------------------------------------------------------------- /static/ueditor/lang/zh-cn/images/music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/lang/zh-cn/images/music.png -------------------------------------------------------------------------------- /static/ueditor/lang/zh-cn/images/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/lang/zh-cn/images/upload.png -------------------------------------------------------------------------------- /static/plug/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /static/plug/layui/css/modules/laydate/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/css/modules/laydate/icon.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/image/imageUploader.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/image/imageUploader.swf -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/images/bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/template/images/bg.gif -------------------------------------------------------------------------------- /static/ueditor/lang/zh-cn/images/imglabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/lang/zh-cn/images/imglabel.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/arrow.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/icons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/icons.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/icons.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/lock.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/lock.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/scale.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/word.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/word.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/images/pre0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/template/images/pre0.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/images/pre1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/template/images/pre1.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/images/pre2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/template/images/pre2.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/images/pre3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/template/images/pre3.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/images/pre4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/template/images/pre4.png -------------------------------------------------------------------------------- /static/ueditor/lang/zh-cn/images/localimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/lang/zh-cn/images/localimage.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/anchor.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/arrow_up.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/cursor_h.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/cursor_h.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/cursor_h.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/cursor_h.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/cursor_v.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/cursor_v.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/cursor_v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/cursor_v.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/filescan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/filescan.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/spacer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/spacer.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/upload.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/image/images/left_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/image/images/left_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/dialogs/image/images/none_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/image/images/none_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/dialogs/image/images/right_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/image/images/right_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/dialogs/video/images/left_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/video/images/left_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/dialogs/video/images/none_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/video/images/none_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/dialogs/video/images/right_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/video/images/right_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/arrow_down.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/button-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/button-bg.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/icons-all.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/icons-all.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/pagebreak.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/pagebreak.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/sparator_v.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/sparator_v.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/toolbar_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/toolbar_bg.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/videologo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/videologo.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/wordpaste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/wordpaste.png -------------------------------------------------------------------------------- /static/ueditor/third-party/swfupload/swfupload.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/third-party/swfupload/swfupload.swf -------------------------------------------------------------------------------- /static/plug/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/plug/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/plug/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/image/images/center_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/image/images/center_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/dialogs/video/images/center_focus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/video/images/center_focus.jpg -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/cancelbutton.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/cancelbutton.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/highlighted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/highlighted.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/unhighlighted.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/unhighlighted.gif -------------------------------------------------------------------------------- /static/ueditor/third-party/swfupload/swfupload_fp9.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/third-party/swfupload/swfupload_fp9.swf -------------------------------------------------------------------------------- /static/plug/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/plug/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/plug/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/dialog-title-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/dialog-title-bg.png -------------------------------------------------------------------------------- /static/plug/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /static/plug/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /static/plug/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/plug/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/neweditor-tab-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/neweditor-tab-bg.png -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/table-cell-align.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/table-cell-align.png -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif -------------------------------------------------------------------------------- /static/ueditor/themes/default/images/tangram-colorpicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/themes/default/images/tangram-colorpicker.png -------------------------------------------------------------------------------- /static/plug/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeImages/icon_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Echosong/beego_blog/HEAD/static/ueditor/dialogs/attachment/fileTypeImages/icon_default.png -------------------------------------------------------------------------------- /static/plug/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /models/config.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | type Config struct { 4 | Id int 5 | Name string 6 | Value string 7 | } 8 | 9 | func (m *Config) TableName() string { 10 | return TableName("config") 11 | } -------------------------------------------------------------------------------- /models/category.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import "time" 4 | 5 | type Category struct { 6 | Id int 7 | Name string 8 | Created time.Time 9 | Updated time.Time 10 | } 11 | 12 | func (m *Category) TableName() string { 13 | return TableName("category") 14 | } -------------------------------------------------------------------------------- /models/comment.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import "time" 4 | 5 | type Comment struct { 6 | Id int 7 | Username string 8 | Content string 9 | Created time.Time 10 | PostId int 11 | Ip string 12 | } 13 | 14 | func (m *Comment) TableName() string { 15 | return TableName("comment") 16 | } -------------------------------------------------------------------------------- /conf/app.conf: -------------------------------------------------------------------------------- 1 | appname = beego_blog 2 | httpport = 8099 3 | runmode = dev 4 | 5 | # MYSQL地址 6 | dbhost = localhost 7 | 8 | # MYSQL端口 9 | dbport = 3306 10 | 11 | # MYSQL用户名 12 | dbuser = root 13 | 14 | # MYSQL密码 15 | dbpassword = 16 | 17 | # MYSQL数据库名称 18 | dbname = db_beego 19 | 20 | # MYSQL表前缀 21 | dbprefix = tb_ 22 | 23 | -------------------------------------------------------------------------------- /models/user.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import "time" 4 | 5 | type User struct { 6 | Id int 7 | Username string 8 | Password string 9 | Email string 10 | LoginCount int 11 | LastTime time.Time 12 | LastIp string 13 | State int8 14 | Created time.Time 15 | Updated time.Time 16 | } 17 | 18 | func (m *User) TableName() string { 19 | return TableName("user") 20 | } -------------------------------------------------------------------------------- /static/plug/font-awesome/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | _ "github.com/Echosong/beego_blog/routers" 5 | "github.com/astaxie/beego" 6 | _ "github.com/go-sql-driver/mysql" 7 | "github.com/Echosong/beego_blog/models" 8 | ) 9 | 10 | 11 | func init() { 12 | models.Init() 13 | beego.BConfig.WebConfig.Session.SessionOn = true 14 | } 15 | 16 | 17 | func main() { 18 | beego.Run() 19 | } 20 | 21 | -------------------------------------------------------------------------------- /models/post.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import "time" 4 | 5 | type Post struct { 6 | Id int 7 | UserId int 8 | Title string 9 | Url string 10 | Content string 11 | Tags string 12 | Views int 13 | IsTop int8 14 | Created time.Time 15 | Updated time.Time 16 | CategoryId int 17 | Status int8 18 | Types int8 19 | Info string 20 | Image string 21 | } 22 | 23 | func (m *Post) TableName() string { 24 | return TableName("post") 25 | } 26 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /util/functions.go: -------------------------------------------------------------------------------- 1 | package util 2 | 3 | import ( 4 | "crypto/md5" 5 | "fmt" 6 | "strings" 7 | "net/url" 8 | "encoding/base64" 9 | "crypto/rand" 10 | "io" 11 | ) 12 | 13 | func Md5(str string) string { 14 | hash := md5.New() 15 | hash.Write([]byte(str) ) 16 | return fmt.Sprintf("%x", hash.Sum(nil)) 17 | } 18 | 19 | func Rawurlencode(str string) string { 20 | return strings.Replace(url.QueryEscape(str), "+", "%20", -1) 21 | } 22 | 23 | //生成Guid字串 24 | func UniqueId() string { 25 | b := make([]byte, 48) 26 | 27 | if _, err := io.ReadFull(rand.Reader, b); err != nil { 28 | return "" 29 | } 30 | return Md5(base64.URLEncoding.EncodeToString(b)) 31 | } 32 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /routers/router.go: -------------------------------------------------------------------------------- 1 | package routers 2 | 3 | import ( 4 | "github.com/Echosong/beego_blog/controllers" 5 | "github.com/astaxie/beego" 6 | ) 7 | 8 | func init() { 9 | 10 | beego.Router("/", &controllers.BlogController{}, "*:Home") 11 | beego.Router("/home", &controllers.BlogController{}, "*:Home") 12 | beego.Router("/article", &controllers.BlogController{}, "*:Article") 13 | beego.Router("/detail", &controllers.BlogController{}, "*:Detail") 14 | beego.Router("/about", &controllers.BlogController{}, "*:About") 15 | beego.Router("/timeline", &controllers.BlogController{}, "*:Timeline") 16 | beego.Router("/resource", &controllers.BlogController{}, "*:Resource") 17 | beego.Router("/comment", &controllers.BlogController{}, "post:Comment") 18 | 19 | beego.AutoRouter(&controllers.AdminController{}) 20 | } 21 | -------------------------------------------------------------------------------- /models/base.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | import ( 4 | "github.com/astaxie/beego/orm" 5 | "github.com/astaxie/beego" 6 | ) 7 | 8 | func Init() { 9 | dbhost := beego.AppConfig.String("dbhost") 10 | dbport := beego.AppConfig.String("dbport") 11 | dbuser := beego.AppConfig.String("dbuser") 12 | dbpassword := beego.AppConfig.String("dbpassword") 13 | dbname := beego.AppConfig.String("dbname") 14 | if dbport == "" { 15 | dbport = "3306" 16 | } 17 | dsn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8&loc=Asia%2FShanghai" 18 | orm.RegisterDataBase("default", "mysql", dsn) 19 | orm.RegisterModel(new(User), new(Category),new(Post), new(Config), new(Comment)) 20 | } 21 | 22 | //返回带前缀的表名 23 | func TableName(str string) string { 24 | return beego.AppConfig.String("dbprefix") + str 25 | } 26 | 27 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/fileTypeMaps.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by JetBrains PhpStorm. 3 | * User: taoqili 4 | * Date: 12-2-10 5 | * Time: 下午3:50 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | //文件类型图标索引 9 | var fileTypeMaps = { 10 | ".rar":"icon_rar.gif", 11 | ".zip":"icon_rar.gif", 12 | ".doc":"icon_doc.gif", 13 | ".docx":"icon_doc.gif", 14 | ".pdf":"icon_pdf.gif", 15 | ".mp3":"icon_mp3.gif", 16 | ".xls":"icon_xls.gif", 17 | ".chm":"icon_chm.gif", 18 | ".ppt":"icon_ppt.gif", 19 | ".pptx":"icon_ppt.gif", 20 | ".avi":"icon_mv.gif", 21 | ".rmvb":"icon_mv.gif", 22 | ".wmv":"icon_mv.gif", 23 | ".flv":"icon_mv.gif", 24 | ".swf":"icon_mv.gif", 25 | ".rm":"icon_mv.gif", 26 | ".exe":"icon_exe.gif", 27 | ".psd":"icon_psd.gif", 28 | ".txt":"icon_txt.gif" 29 | }; -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/spechars/spechars.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 14 | 15 | 16 |
17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/table/edittip.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 表格删除提示 5 | 6 | 17 | 18 | 19 |
20 |
21 | 22 |
23 |
24 | 25 |
26 |
27 | 32 | 33 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 | 19 |
20 |
21 |
22 |
23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /static/plug/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #ddd;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:30px;line-height:30px;border-bottom:1px solid #ddd}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #ddd;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /static/css/detail.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | @Name:不落阁整站模板源码 4 | @Author:Absolutely 5 | @Site:http://www.lyblogs.cn 6 | 7 | */ 8 | 9 | .article-detail { 10 | background: #fff; 11 | padding: 15px; 12 | box-shadow: 0 1px 8px #a6a6a6; 13 | margin-bottom: 15px; 14 | } 15 | 16 | .article-detail-title { 17 | text-align: center; 18 | margin: 20px 0px; 19 | color: white; 20 | font-weight: 700; 21 | text-shadow: 0 0 8px #000000; 22 | font-size: 24px; 23 | } 24 | 25 | .article-detail-info { 26 | border: 1px dashed #808080; 27 | font-size: 13px; 28 | color: #808080; 29 | padding: 5px 0; 30 | font-family: SimSun; 31 | text-align: center; 32 | margin: 0 0 10px; 33 | } 34 | 35 | .article-detail-info span { 36 | margin: 0 5px; 37 | } 38 | 39 | .article-detail-content { 40 | padding: 10px 5px; 41 | } 42 | 43 | 44 | 45 | /*代码区域*/ 46 | pre { 47 | background-color: #f5f5f5 !important; 48 | border-radius: 0px !important; 49 | border: 1px solid #ccc !important; 50 | font-size: 13px !important; 51 | } 52 | -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/pagesize.js: -------------------------------------------------------------------------------- 1 | 2 | layui.define('jquery', function (exports) { 3 | var $ = layui.jquery; 4 | function pagesize(id, pageSize) { 5 | $('#' + id + ' .layui-laypage').append('每页 '); 6 | $('#' + id + ' .laypage-extend-pagesize input[class=layui-laypage-skip]').val(pageSize); 7 | var pagesize = { 8 | btn: $('#' + id + ' .laypage-extend-pagesize .layui-laypage-btn'), 9 | callback: function (callback) { 10 | this.ok = callback; 11 | }, 12 | ok: null 13 | }; 14 | $(pagesize.btn).on('click', function () { 15 | pagesize.ok(pagesize.btn.siblings('input[class=layui-laypage-skip]').val()); 16 | }); 17 | return pagesize; 18 | } 19 | exports('pagesize', pagesize); 20 | }); -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/util.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(l){"use strict";var o=layui.jquery,i={fixbar:function(l){l=l||{},l.bgcolor=l.bgcolor?"background-color:"+l.bgcolor:"";var i,a,c="layui-fixbar-top",t=[l.bar1===!0?"":l.bar1,l.bar2===!0?"":l.bar2,""],r=o(['"].join("")),e=r.find("."+c),s=function(){var i=o(document).scrollTop();i>=(l.showHeight||200)?a||(e.show(),a=1):a&&(e.hide(),a=0)};o(".layui-fixbar")[0]||("object"==typeof l.css&&r.css(l.css),o("body").append(r),s(),r.find("li").on("click",function(){var i=o(this),a=i.attr("lay-type");"top"===a&&o("html,body").animate({scrollTop:0},200),l.click&&l.click.call(this,a)}),o(document).on("scroll",function(){i&&clearTimeout(i),i=setTimeout(function(){s()},100)}))}};l("util",i)}); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # beego_Blog 2 | 3 | 基于Go语言和beego框架 前端使用layui 布局 开发的个人博客系统 4 | 5 | cms 相关系统可以看 [beego cms] (https://github.com/Echosong/beego_element_cms) 6 | 7 | ## 编译安装说明: 8 | 9 | 1 . 设置GOPATH(安装目录) 10 | 11 | $ export GOPATH=/path/to/ 12 | 13 | 14 | 2 . 下载安装 15 | 16 | $ go get github.com/Echosong/beego_blog 17 | 18 | > 我们使用版本是beego 1.** 版本的,建议是用 升级 go get -u github.com/astaxie/beego 19 | 20 | 4 . 加入数据库 21 | 22 | mysql 新建db_beego数据库把根目录 db_beego.sql 导入 23 | 24 | 5 . 修改 app.conf 配置 25 | 26 | #MYSQL地址 27 | dbhost = localhost 28 | 29 | #MYSQL端口 30 | dbport = 3306 31 | 32 | #MYSQL用户名 33 | dbuser = root 34 | 35 | #MYSQL密码 36 | dbpassword = 37 | 38 | #MYSQL数据库名称 39 | dbname = db_beego 40 | 41 | #MYSQL表前缀 42 | dbprefix = tb_ 43 | 44 | 6 . 运行 45 | 46 | cd 到 beego_blog 目录 执行 47 | $ bee run 48 | 49 | 7 . 浏览器演示 50 | 51 | http://localhost:8099 (前台) 52 | 53 | http://localhost:8099/admin/login (后台) 54 | 55 | 56 | 57 | 58 | 59 | 账号: admin 密码 :123456 60 | 61 | 8 . 联系方式 62 | 63 | qq:313690636 64 | 65 | qq群: 571627871 66 | 67 | 68 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/template.css: -------------------------------------------------------------------------------- 1 | .wrap{ padding: 5px;font-size: 14px;} 2 | .left{width:425px;float: left;} 3 | .right{width:160px;border: 1px solid #ccc;float: right;padding: 5px;margin-right: 5px;} 4 | .right .pre{height: 332px;overflow-y: auto;} 5 | .right .preitem{border: white 1px solid;margin: 5px 0;padding: 2px 0;} 6 | .right .preitem:hover{background-color: lemonChiffon;cursor: pointer;border: #ccc 1px solid;} 7 | .right .preitem img{display: block;margin: 0 auto;width:100px;} 8 | .clear{clear: both;} 9 | .top{height:26px;line-height: 26px;padding: 5px;} 10 | .bottom{height:320px;width:100%;margin: 0 auto;} 11 | .transparent{ background: url("images/bg.gif") repeat;} 12 | .bottom table tr td{border:1px dashed #ccc;} 13 | #colorPicker{width: 17px;height: 17px;border: 1px solid #CCC;display: inline-block;border-radius: 3px;box-shadow: 2px 2px 5px #D3D6DA;} 14 | .border_style1{padding:2px;border: 1px solid #ccc;border-radius: 5px;box-shadow:2px 2px 5px #d3d6da;} 15 | p{margin: 5px 0} 16 | table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all;} 17 | li{clear:both} 18 | ol{padding-left:40px; } -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /views/admin/category_add.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 添加类目 8 | 9 | 10 | 11 | 12 |
13 |
14 | 15 |
16 | 17 | 18 |
19 |
20 | 21 |
22 |
23 | 24 | 25 |
26 |
27 |
28 | 29 | -------------------------------------------------------------------------------- /static/css/home.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | @Name:不落阁整站模板源码 4 | @Author:Absolutely 5 | @Site:http://www.lyblogs.cn 6 | 7 | */ 8 | 9 | /*博主信息*/ 10 | .blogerinfo { 11 | text-align: center; 12 | padding: 0 15px; 13 | background: #fff; 14 | margin-bottom: 15px; 15 | } 16 | 17 | .blogerinfo-figure { 18 | display: inline-block; 19 | margin: 20px auto; 20 | } 21 | 22 | .blogerinfo-figure img { 23 | border-radius: 50px; 24 | } 25 | 26 | .blogerinfo-nickname { 27 | font-size: 32px; 28 | font-weight: bold; 29 | margin: 0 0 15px 0; 30 | } 31 | 32 | .blogerinfo-introduce { 33 | margin: 15px auto; 34 | font-size: 18px; 35 | width: 90%; 36 | } 37 | 38 | .blogerinfo-location { 39 | color: #808080; 40 | margin: 15px; 41 | } 42 | 43 | .blogerinfo-contact { 44 | padding: 15px; 45 | padding-top: 5px; 46 | } 47 | 48 | .blogerinfo-contact > a { 49 | padding: 0 10px; 50 | } 51 | /*博主信息END*/ 52 | 53 | /*友情链接*/ 54 | .blogroll > li { 55 | display: inline-block; 56 | vertical-align: middle; 57 | padding: 2px 5px; 58 | } 59 | /*友情链接END*/ 60 | 61 | /*一路走来和后台记录*/ 62 | .footprint > dt { 63 | color: #01AAED; 64 | } 65 | 66 | .footprint > dd { 67 | text-indent: 1.3em; 68 | padding: 2px 0; 69 | } 70 | /*一路走来和后台记录END*/ -------------------------------------------------------------------------------- /static/ueditor/dialogs/table/edittable.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | margin: 10px auto 0; 3 | font-size: 12px; 4 | overflow: hidden; 5 | } 6 | 7 | .clear { 8 | clear: both; 9 | } 10 | 11 | .wrapper .left { 12 | float: left; 13 | margin-left: 10px;; 14 | } 15 | 16 | .wrapper .right { 17 | float: right; 18 | margin-right: 10px; 19 | border-left: 2px dotted #EDEDED; 20 | padding-left: 15px; 21 | } 22 | 23 | .section { 24 | margin-bottom: 20px; 25 | overflow: hidden; 26 | } 27 | 28 | .section h3 { 29 | font-weight: bold; 30 | padding: 5px 0; 31 | margin-bottom: 10px; 32 | border-bottom: 1px solid #EDEDED; 33 | font-size: 12px; 34 | } 35 | 36 | .section ul { 37 | list-style: none; 38 | overflow: hidden; 39 | } 40 | 41 | .section li { 42 | float: left; 43 | } 44 | 45 | .section .tone { 46 | width: 80px;; 47 | } 48 | 49 | .section .preview { 50 | width: 220px; 51 | } 52 | 53 | .section .preview table { 54 | text-align: center; 55 | vertical-align: middle; 56 | color: #666; 57 | } 58 | 59 | .section .preview caption { 60 | font-weight: bold; 61 | } 62 | 63 | .section .preview td { 64 | border-width: 1px; 65 | border-style: solid; 66 | height: 22px; 67 | } 68 | 69 | .section .preview th { 70 | border-style: solid; 71 | border-color: #DDD; 72 | border-width: 2px 1px 1px 1px; 73 | height: 22px; 74 | background-color: #F7F7F7; 75 | } -------------------------------------------------------------------------------- /static/css/article.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | @Name:不落阁整站模板源码 4 | @Author:Absolutely 5 | @Site:http://www.lyblogs.cn 6 | 7 | */ 8 | 9 | /*搜索(移动端不提供此功能)*/ 10 | .search-keywords, 11 | .search-submit { 12 | display: none; 13 | } 14 | 15 | @media (min-width: 992px) { 16 | .blog-search { 17 | margin-bottom: 15px; 18 | } 19 | 20 | .search-keywords, 21 | .search-submit { 22 | display: inline-block; 23 | 24 | } 25 | 26 | .search-keywords { 27 | width: 85%; 28 | float: left; 29 | position: relative; 30 | } 31 | 32 | .search-keywords > input { 33 | border-radius: 0; 34 | } 35 | 36 | .search-submit { 37 | width: 14%; 38 | float: right; 39 | } 40 | 41 | .search-submit > .search-btn { 42 | display: block; 43 | width: 100%; 44 | height: 36px; 45 | background: #fff; 46 | cursor: pointer; 47 | float: right; 48 | border-radius: 1px; 49 | border: 1px solid #e2e2e2; 50 | position: absolute; 51 | right: 2px; 52 | top: 2px; 53 | } 54 | 55 | .search-submit > .search-btn:hover { 56 | border: 1px solid #d2d2d2; 57 | } 58 | 59 | .search-submit > .search-btn i { 60 | width: 13px; 61 | line-height: 38px; 62 | display: block; 63 | margin: 0 auto; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /views/blog/about.html: -------------------------------------------------------------------------------- 1 | 2 | {{template "blog/head.html" .}} 3 | 4 |
5 |
6 |
7 | 网站首页 8 | 关于本站 9 |
10 | 11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 | 19 |
20 | 21 |
22 | 简介 23 |
24 | {{.post.Content}} 25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | {{template "blog/foot.html" .}} 35 | 36 | 37 | -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},n={exp:function(e){return new RegExp(e,"g")},query:function(e,n,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return c((n||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var n="Laytpl Error:";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e}},c=n.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=c("^"+r.open+"#",""),l=c(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(c(r.open+"#"),r.open+"# ").replace(c(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(/(?="|')/g,"\\").replace(n.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(n.query(1),function(e){var n='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(c(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),n='"+_escape_('),n+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,n.escape)}catch(u){return delete o.cache,n.error(u,p)}},t.pt.render=function(e,r){var c,t=this;return e?(c=t.cache?t.cache(e,n.escape):t.parse(t.tpl,e),r?void r(c):c):n.error("no data")};var o=function(e){return"string"!=typeof e?n.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var n in e)r[n]=e[n]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /static/css/prettify.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} 2 | 3 | pre.prettyprint { 4 | border: 1px solid #f2f2f2; 5 | border-radius:5px; 6 | margin-left: 2em; 7 | padding: 0.5em; 8 | font-size: 110%; 9 | display: block; 10 | font-family: "Consolas", "Monaco", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; 11 | margin: 1em 0px; 12 | /*white-space: pre;*/ 13 | background:#f7f7f7; 14 | } 15 | 16 | /*li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:decimal !important;}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} 17 | 18 | .prettyprint.linenums { 19 | -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; 20 | -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; 21 | box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; 22 | } 23 | 24 | ol.linenums { 25 | padding: 0 0 0 33px; 26 | } 27 | ol.linenums li { 28 | padding-left: 12px; 29 | color: #bebec5; 30 | line-height: 18px; 31 | text-shadow: 0 1px 0 #fff; 32 | }*/ -------------------------------------------------------------------------------- /views/blog/right.html: -------------------------------------------------------------------------------- 1 |
2 | 15 |
16 | 17 | {{range .cates}} 18 | {{if gt .Id 2}} 19 | {{.Name}} 20 | {{end}} 21 | {{end}} 22 |
23 |
24 |
25 |
热门文章
26 | 31 |
32 | 33 |
34 |
-------------------------------------------------------------------------------- /controllers/base.go: -------------------------------------------------------------------------------- 1 | package controllers 2 | 3 | import ( 4 | "github.com/Echosong/beego_blog/models" 5 | "github.com/astaxie/beego" 6 | "github.com/astaxie/beego/orm" 7 | "strings" 8 | ) 9 | 10 | type baseController struct { 11 | beego.Controller 12 | o orm.Ormer 13 | controllerName string 14 | actionName string 15 | } 16 | 17 | func (p *baseController) Prepare() { 18 | controllerName, actionName := p.GetControllerAndAction() 19 | p.controllerName = strings.ToLower(controllerName[0 : len(controllerName)-10]) 20 | p.actionName = strings.ToLower(actionName) 21 | p.o = orm.NewOrm() 22 | if strings.ToLower(p.controllerName) == "admin" && strings.ToLower(p.actionName) != "login" { 23 | if p.GetSession("user") == nil { 24 | p.History("未登录", "/admin/login") 25 | //p.Ctx.WriteString(p.controllerName +"==="+ p.actionName) 26 | } 27 | } 28 | 29 | //初始化前台页面相关元素 30 | if strings.ToLower(p.controllerName) == "blog" { 31 | 32 | p.Data["actionName"] = strings.ToLower(actionName) 33 | var result []*models.Config 34 | p.o.QueryTable(new(models.Config).TableName()).All(&result) 35 | configs := make(map[string]string) 36 | for _, v := range result { 37 | configs[v.Name] = v.Value 38 | } 39 | p.Data["config"] = configs 40 | } 41 | 42 | } 43 | 44 | func (p *baseController) History(msg string, url string) { 45 | if url == "" { 46 | p.Ctx.WriteString("") 47 | p.StopRun() 48 | } else { 49 | p.Redirect(url, 302) 50 | } 51 | } 52 | 53 | //获取用户IP地址 54 | func (p *baseController) getClientIp() string { 55 | s := strings.Split(p.Ctx.Request.RemoteAddr, ":") 56 | return s[0] 57 | } 58 | -------------------------------------------------------------------------------- /static/js/detail.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | @Name:不落阁整站模板源码 4 | @Author:Absolutely 5 | @Site:http://www.lyblogs.cn 6 | 7 | */ 8 | 9 | prettyPrint(); 10 | layui.use(['form', 'layedit'], function () { 11 | var form = layui.form(); 12 | var $ = layui.jquery; 13 | var layedit = layui.layedit; 14 | 15 | //评论和留言的编辑器 16 | var editIndex = layedit.build('remarkEditor', { 17 | height: 150, 18 | tool: ['face', '|', 'left', 'center', 'right', '|', 'link'], 19 | }); 20 | //评论和留言的编辑器的验证 21 | layui.form().verify({ 22 | content: function (value) { 23 | value = $.trim(layedit.getText(editIndex)); 24 | if (value == "") return "自少得有一个字吧"; 25 | layedit.sync(editIndex); 26 | } 27 | }); 28 | 29 | //监听评论提交 30 | form.on('submit(formRemark)', function (data) { 31 | var index = layer.load(1); 32 | //模拟评论提交 33 | setTimeout(function () { 34 | layer.close(index); 35 | var content = data.field.editorContent; 36 | var html = '
  • absolutely
    Absolutely2017-03-18 18:46:06
    ' + content + '
  • '; 37 | $('.blog-comment').append(html); 38 | $('#remarkEditor').val(''); 39 | editIndex = layui.layedit.build('remarkEditor', { 40 | height: 150, 41 | tool: ['face', '|', 'left', 'center', 'right', '|', 'link'], 42 | }); 43 | layer.msg("评论成功", { icon: 1 }); 44 | }, 500); 45 | return false; 46 | }); 47 | }); -------------------------------------------------------------------------------- /static/ueditor/dialogs/anchor/anchor.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 |
    16 | 17 |
    18 | 19 | 39 | 40 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/template/template.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains PhpStorm. 3 | * User: xuheng 4 | * Date: 12-8-8 5 | * Time: 下午2:09 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | (function () { 9 | var me = editor, 10 | preview = $G( "preview" ), 11 | preitem = $G( "preitem" ), 12 | tmps = templates, 13 | currentTmp; 14 | var initPre = function () { 15 | var str = ""; 16 | for ( var i = 0, tmp; tmp = tmps[i++]; ) { 17 | str += '
    '; 18 | } 19 | preitem.innerHTML = str; 20 | }; 21 | var pre = function ( n ) { 22 | var tmp = tmps[n - 1]; 23 | currentTmp = tmp; 24 | clearItem(); 25 | domUtils.setStyles( preitem.childNodes[n - 1], { 26 | "background-color":"lemonChiffon", 27 | "border":"#ccc 1px solid" 28 | } ); 29 | preview.innerHTML = tmp.preHtml ? tmp.preHtml : ""; 30 | }; 31 | var clearItem = function () { 32 | var items = preitem.children; 33 | for ( var i = 0, item; item = items[i++]; ) { 34 | domUtils.setStyles( item, { 35 | "background-color":"", 36 | "border":"white 1px solid" 37 | } ); 38 | } 39 | }; 40 | dialog.onok = function () { 41 | if ( !$G( "issave" ).checked ){ 42 | me.execCommand( "cleardoc" ); 43 | } 44 | var obj = { 45 | html:currentTmp && currentTmp.html 46 | }; 47 | me.execCommand( "template", obj ); 48 | }; 49 | initPre(); 50 | window.pre = pre; 51 | pre(2) 52 | 53 | })(); -------------------------------------------------------------------------------- /static/ueditor/dialogs/table/edittd.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 16 | 17 | 18 |
    19 | 20 | 21 |
    22 | 60 | 61 | -------------------------------------------------------------------------------- /views/admin/category.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 类目列表 8 | 9 | 10 | 11 |
    12 | 15 |
    16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | {{range $k, $v := .categorys}} 33 | 34 | 35 | 36 | 37 | 45 | {{end}} 46 | 47 | 48 |
    名称添加时间修改时间操作
    {{$v.Name}}{{$v.Created}}{{$v.Updated}} 38 | 39 | 修改 40 | 41 | 42 | 删除 43 | 44 |
    49 | 50 | 51 | 52 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /static/ueditor/third-party/swfupload/swfupload.cookies.js: -------------------------------------------------------------------------------- 1 | /* 2 | Cookie Plug-in 3 | 4 | This plug in automatically gets all the cookies for this site and adds them to the post_params. 5 | Cookies are loaded only on initialization. The refreshCookies function can be called to update the post_params. 6 | The cookies will override any other post params with the same name. 7 | */ 8 | 9 | var SWFUpload; 10 | if (typeof(SWFUpload) === "function") { 11 | SWFUpload.prototype.initSettings = function (oldInitSettings) { 12 | return function (userSettings) { 13 | if (typeof(oldInitSettings) === "function") { 14 | oldInitSettings.call(this, userSettings); 15 | } 16 | 17 | this.refreshCookies(false); // The false parameter must be sent since SWFUpload has not initialzed at this point 18 | }; 19 | }(SWFUpload.prototype.initSettings); 20 | 21 | // refreshes the post_params and updates SWFUpload. The sendToFlash parameters is optional and defaults to True 22 | SWFUpload.prototype.refreshCookies = function (sendToFlash) { 23 | if (sendToFlash === undefined) { 24 | sendToFlash = true; 25 | } 26 | sendToFlash = !!sendToFlash; 27 | 28 | // Get the post_params object 29 | var postParams = this.settings.post_params; 30 | 31 | // Get the cookies 32 | var i, cookieArray = document.cookie.split(';'), caLength = cookieArray.length, c, eqIndex, name, value; 33 | for (i = 0; i < caLength; i++) { 34 | c = cookieArray[i]; 35 | 36 | // Left Trim spaces 37 | while (c.charAt(0) === " ") { 38 | c = c.substring(1, c.length); 39 | } 40 | eqIndex = c.indexOf("="); 41 | if (eqIndex > 0) { 42 | name = c.substring(0, eqIndex); 43 | value = c.substring(eqIndex + 1); 44 | postParams[name] = value; 45 | } 46 | } 47 | 48 | if (sendToFlash) { 49 | this.setPostParams(postParams); 50 | } 51 | }; 52 | 53 | } 54 | -------------------------------------------------------------------------------- /static/plug/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /static/plug/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /views/blog/foot.html: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 24 | 25 |
    26 |
    27 |
    28 |
    29 | 30 | 31 | 32 | 33 |
    34 |
    35 |
    36 |
    37 | 38 |
    39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.jquery,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var u=l(e.elem);if(u[0]){var f=l(e.scrollElem||document),m=e.mb||50,s=!("isAuto"in e)||e.isAuto,y=e.end||"没有更多了",v=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('
    '+d+"
    ");u.find(".layui-flow-more")[0]||u.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(y):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(f.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=v?e.height():l(window).height(),n=v?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=m&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var f=e.attr("lay-src");layui.img(f,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",f).removeAttr("lay-src"),l[0]&&u(l),i++})}},u=function(e,o){var u=a?(o||n).height():l(window).height(),f=n.scrollTop(),m=f+u;if(t.lazyimg.elem=l(r),e)c(e,u);else for(var s=0;sm)break}};if(u(),!o){var f;n.on("scroll",function(){var e=l(this);f&&clearTimeout(f),f=setTimeout(function(){u(null,e)},50)}),o=!0}return u},e("flow",new o)}); -------------------------------------------------------------------------------- /views/blog/resource.html: -------------------------------------------------------------------------------- 1 | 2 | {{template "blog/head.html" .}} 3 | 4 |
    5 |
    6 |
    7 | 网站首页 8 | 资源分享 9 |
    10 |
    11 |
    12 | 13 |
    14 | {{range .list}} 15 | 16 |
    17 |
    18 | 19 | 20 | 21 |
    22 | 23 |

    {{.Title}}

    {{.Info}}

    24 |
    25 |  源码 26 | Echosong 27 |
    28 |
    29 | 33 |
    34 | {{end}} 35 | 36 |
    37 |
    38 |
    39 |
    40 |
    41 |
    42 | {{template "blog/foot.html" .}} 43 | 44 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/video/video.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .wrapper{ width: 570px;_width:575px;margin: 10px auto; zoom:1;position: relative} 3 | .tabbody{height:335px;} 4 | .panel { position: absolute;width:100%; height:100%;background: #fff;} 5 | .panel table td{vertical-align: middle;} 6 | #videoUrl { 7 | width: 490px; 8 | height: 21px; 9 | line-height: 21px; 10 | margin: 8px 5px; 11 | background: #FFF; 12 | border: 1px solid #d7d7d7; 13 | } 14 | #videoSearchTxt{margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;} 15 | #searchList{width: 570px;overflow: auto;zoom:1;height: 270px;} 16 | #searchList div{float: left;width: 120px;height: 135px;margin: 5px 15px;} 17 | #searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/ 18 | #searchList p{margin-left: 10px;} 19 | #videoType{ 20 | width: 65px; 21 | height: 23px; 22 | line-height: 22px; 23 | border: 1px solid #d7d7d7; 24 | } 25 | #videoSearchBtn,#videoSearchReset{ 26 | /*width: 80px;*/ 27 | height: 25px; 28 | line-height: 25px; 29 | background: #eee; 30 | border: 1px solid #d7d7d7; 31 | cursor: pointer; 32 | padding: 0 5px; 33 | } 34 | 35 | 36 | 37 | #preview{width: 420px; margin-left: 10px; _margin-left:5px; height: 280px;background-color: #ddd;float: left} 38 | #videoInfo {width: 120px;float: left;margin-left: 10px;_margin-left:7px;} 39 | fieldset{ 40 | border: 1px solid #ddd; 41 | padding-left: 5px; 42 | margin-bottom: 20px; 43 | padding-bottom: 5px; 44 | width: 115px; 45 | } 46 | fieldset legend{font-weight: bold;} 47 | fieldset p{line-height: 30px;} 48 | fieldset input.txt{ 49 | width: 65px; 50 | height: 21px; 51 | line-height: 21px; 52 | margin: 8px 5px; 53 | background: #FFF; 54 | border: 1px solid #d7d7d7; 55 | } 56 | label.url{font-weight: bold;margin-left: 5px;color: #06c;} 57 | #videoFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin:9px;_margin:5px;width:38px;height:36px;float:left;} 58 | #videoFloat .focus{opacity: 1;filter: alpha(opacity = 100)} 59 | span.view{display: inline-block;width: 30px;float: right;cursor: pointer;color: blue} -------------------------------------------------------------------------------- /static/ueditor/themes/default/dialogbase.css: -------------------------------------------------------------------------------- 1 | /*弹出对话框页面样式组件 2 | */ 3 | 4 | /*reset 5 | */ 6 | html, body, div, span, applet, object, iframe, 7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 8 | a, abbr, acronym, address, big, cite, code, 9 | del, dfn, em, font, img, ins, kbd, q, s, samp, 10 | small, strike, strong, sub, sup, tt, var, 11 | b, u, i, center, 12 | dl, dt, dd, ol, ul, li, 13 | fieldset, form, label, legend, 14 | table, caption, tbody, tfoot, thead, tr, th, td { 15 | margin: 0; 16 | padding: 0; 17 | outline: 0; 18 | font-size: 100%; 19 | } 20 | 21 | body { 22 | line-height: 1; 23 | } 24 | 25 | ol, ul { 26 | list-style: none; 27 | } 28 | 29 | blockquote, q { 30 | quotes: none; 31 | } 32 | 33 | ins { 34 | text-decoration: none; 35 | } 36 | 37 | del { 38 | text-decoration: line-through; 39 | } 40 | 41 | table { 42 | border-collapse: collapse; 43 | border-spacing: 0; 44 | } 45 | 46 | /*module 47 | */ 48 | body { 49 | background-color: #fff; 50 | font: 12px/1.5 "宋体", "Arial Narrow", HELVETICA; 51 | color: #646464; 52 | } 53 | 54 | /*tab*/ 55 | .tabhead { 56 | position: relative; 57 | z-index: 10; 58 | } 59 | 60 | .tabhead span { 61 | display: inline-block; 62 | padding: 0 5px; 63 | height: 30px; 64 | border: 1px solid #ccc; 65 | background: url("images/dialog-title-bg.png") repeat-x; 66 | text-align: center; 67 | line-height: 30px; 68 | cursor: pointer; 69 | *margin-right: 5px; 70 | } 71 | 72 | .tabhead span.focus { 73 | height: 31px; 74 | border-bottom: none; 75 | background: #fff; 76 | } 77 | 78 | .tabbody { 79 | position: relative; 80 | top: -1px; 81 | margin: 0 auto; 82 | border: 1px solid #ccc; 83 | } 84 | 85 | /*button*/ 86 | a.button { 87 | display: block; 88 | text-align: center; 89 | line-height: 24px; 90 | text-decoration: none; 91 | height: 24px; 92 | width: 95px; 93 | border: 0; 94 | color: #838383; 95 | background: url(../../themes/default/images/icons-all.gif) no-repeat; 96 | } 97 | 98 | a.button:hover { 99 | background-position: 0 -30px; 100 | } -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/upload.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;layui.define("layer",function(e){"use strict";var a=layui.jquery,t=layui.layer,i=(layui.device(),"layui-upload-enter"),n="layui-upload-iframe",r={icon:2,shift:6},o={file:"文件",video:"视频",audio:"音频"},s=function(e){this.options=e};s.prototype.init=function(){var e=this,t=e.options,r=a("body"),s=a(t.elem||".layui-upload-file"),u=a('');return a("#"+n)[0]||r.append(u),s.each(function(r,s){s=a(s);var u='
    ',l=s.attr("lay-type")||t.type;t.unwrap||(u='
    '+u+''+(s.attr("lay-title")||t.title||"上传"+(o[l]||"图片"))+"
    "),u=a(u),t.unwrap||u.on("dragover",function(e){e.preventDefault(),a(this).addClass(i)}).on("dragleave",function(){a(this).removeClass(i)}).on("drop",function(){a(this).removeClass(i)}),s.parent("form").attr("target")===n&&(t.unwrap?s.unwrap():(s.parent().next().remove(),s.unwrap().unwrap())),s.wrap(u),s.off("change").on("change",function(){e.action(this,l)})})},s.prototype.action=function(e,i){var o=this,s=o.options,u=e.value,l=a(e),p=l.attr("lay-ext")||s.ext||"";if(u){switch(i){case"file":if(p&&!RegExp("\\w\\.("+p+")$","i").test(escape(u)))return t.msg("不支持该文件格式",r),e.value="";break;case"video":if(!RegExp("\\w\\.("+(p||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(u)))return t.msg("不支持该视频格式",r),e.value="";break;case"audio":if(!RegExp("\\w\\.("+(p||"mp3|wav|mid")+")$","i").test(escape(u)))return t.msg("不支持该音频格式",r),e.value="";break;default:if(!RegExp("\\w\\.("+(p||"jpg|png|gif|bmp|jpeg")+")$","i").test(escape(u)))return t.msg("不支持该图片格式",r),e.value=""}s.before&&s.before(e),l.parent().submit();var c=a("#"+n),f=setInterval(function(){var a;try{a=c.contents().find("body").text()}catch(i){t.msg("上传接口存在跨域",r),clearInterval(f)}if(a){clearInterval(f),c.contents().find("body").html("");try{a=JSON.parse(a)}catch(i){return a={},t.msg("请对上传接口返回JSON字符",r)}"function"==typeof s.success&&s.success(a,e)}},30);e.value=""}},e("upload",function(e){var a=new s(e=e||{});a.init()})}); -------------------------------------------------------------------------------- /static/ueditor/dialogs/table/edittable.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
    10 |
    11 |
    12 |

    13 |
      14 |
    • 15 | 16 |
    • 17 |
    • 18 | 19 |
    • 20 |
    21 | 22 |
    23 |
    24 |
    25 |

    26 |
      27 |
    • 28 | 29 |
    • 30 |
    • 31 | 32 |
    • 33 |
    34 |
    35 |
    36 |
    37 |

    38 |
      39 |
    • 40 | 41 | 42 |
    • 43 |
    44 |
    45 |
    46 |
    47 |
    48 |
    49 |

    50 |
    51 |
    52 |
    53 |
    54 |
    55 | 56 | 57 | -------------------------------------------------------------------------------- /static/js/fortree.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 递归遍历树形类 3 | */ 4 | layui.define(function(exports) { 5 | /** 6 | * 导出接口 7 | */ 8 | exports('fortree', function (arr, idname, pidname, topid) { 9 | var _that = this; //对象本身 10 | var _father = []; //所有顶级节点 11 | var _children = []; //所有子节点 12 | var _idname = idname || 'id'; //id名称 13 | var _pidname = pidname || 'pid'; //父id名称 14 | var _topid = topid || 0; //顶级节点父id 15 | 16 | for(var i in arr) { 17 | if(arr[i][_pidname] == _topid) { 18 | _father.push(arr[i]); 19 | }else{ 20 | _children.push(arr[i]); 21 | } 22 | } 23 | 24 | /** 25 | * 循环之前回调 26 | */ 27 | this.forBefore = function(v, k, hasChildren) {}; 28 | /** 29 | * 循环时回调 30 | */ 31 | this.forcurr = function(v, k, hasChildren) {}; 32 | /** 33 | * 递归之前回调 34 | */ 35 | this.callBefore = function(v, k) {}; 36 | /** 37 | * 递归之后回调 38 | */ 39 | this.callAfter = function(v, k) {}; 40 | /** 41 | * 循环之后回调 42 | */ 43 | this.forAfter = function(v, k, hasChildren) {}; 44 | 45 | /** 46 | * 获取某个节点的一级子节点 47 | */ 48 | this.getChildren = function(id) { 49 | var son = []; 50 | 51 | for(var i in _children) { 52 | if(_children[i][_pidname] == id) { 53 | son.push(_children[i]); 54 | } 55 | } 56 | 57 | return son; 58 | }; 59 | 60 | /** 61 | * 开始循环 62 | */ 63 | this.each = function(arr) { 64 | if(arr == undefined) { 65 | arr = _father; 66 | } 67 | 68 | for(var i in arr) { 69 | var children = _that.getChildren(arr[i][_idname]); 70 | var counter = children.length; 71 | 72 | _that.forBefore(arr[i], i, counter); 73 | _that.forcurr(arr[i], i, counter); 74 | 75 | if(counter) { 76 | _that.callBefore(arr[i], i); 77 | _that.each(children); 78 | _that.callAfter(arr[i], i); 79 | } 80 | 81 | _that.forAfter(arr[i], i, counter); 82 | } 83 | } 84 | }); 85 | }); -------------------------------------------------------------------------------- /static/ueditor/dialogs/internal.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | var parent = window.parent; 3 | //dialog对象 4 | dialog = parent.$EDITORUI[window.frameElement.id.replace( /_iframe$/, '' )]; 5 | //当前打开dialog的编辑器实例 6 | editor = dialog.editor; 7 | 8 | UE = parent.UE; 9 | 10 | domUtils = UE.dom.domUtils; 11 | 12 | utils = UE.utils; 13 | 14 | browser = UE.browser; 15 | 16 | ajax = UE.ajax; 17 | 18 | $G = function ( id ) { 19 | return document.getElementById( id ) 20 | }; 21 | //focus元素 22 | $focus = function ( node ) { 23 | setTimeout( function () { 24 | if ( browser.ie ) { 25 | var r = node.createTextRange(); 26 | r.collapse( false ); 27 | r.select(); 28 | } else { 29 | node.focus() 30 | } 31 | }, 0 ) 32 | }; 33 | utils.loadFile(document,{ 34 | href:editor.options.themePath + editor.options.theme + "/dialogbase.css?cache="+Math.random(), 35 | tag:"link", 36 | type:"text/css", 37 | rel:"stylesheet" 38 | }); 39 | lang = editor.getLang(dialog.className.split( "-" )[2]); 40 | 41 | domUtils.on(window,'load',function () { 42 | 43 | var langImgPath = editor.options.langPath + editor.options.lang + "/images/"; 44 | //针对静态资源 45 | for ( var i in lang["static"] ) { 46 | var dom = $G( i ); 47 | if(!dom) continue; 48 | var tagName = dom.tagName, 49 | content = lang["static"][i]; 50 | if(content.src){ 51 | //clone 52 | content = utils.extend({},content,false); 53 | content.src = langImgPath + content.src; 54 | } 55 | if(content.style){ 56 | content = utils.extend({},content,false); 57 | content.style = content.style.replace(/url\s*\(/g,"url(" + langImgPath) 58 | } 59 | switch ( tagName.toLowerCase() ) { 60 | case "var": 61 | dom.parentNode.replaceChild( document.createTextNode( content ), dom ); 62 | break; 63 | case "select": 64 | var ops = dom.options; 65 | for ( var j = 0, oj; oj = ops[j]; ) { 66 | oj.innerHTML = content.options[j++]; 67 | } 68 | for ( var p in content ) { 69 | p != "options" && dom.setAttribute( p, content[p] ); 70 | } 71 | break; 72 | default : 73 | domUtils.setAttributes( dom, content); 74 | } 75 | } 76 | } ); 77 | 78 | })(); 79 | 80 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/image/image.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | .wrapper{ width: 623px;margin: 10px auto;zoom:1;position: relative;} 3 | .tabbody{ height:325px;_height:330px;}/*tab样式框大小*/ 4 | .panel { position: absolute;width:100%; height:100%;background: #fff;} 5 | 6 | #remote{ z-index: 200;} 7 | #remote table{border-collapse: collapse;width: 620px; height: 300px; margin-top: 5px;} 8 | #remote td.label{text-align: center;width: 80px; } 9 | #remote td{height: 40px;} 10 | td input { 11 | width: 150px; 12 | height: 21px; 13 | line-height: 21px; 14 | background: #FFF; 15 | border: 1px solid #d7d7d7; 16 | } 17 | #url {width: 520px;margin-bottom: 2px;} 18 | #preview{width: 260px; height: 260px; position: absolute;top:50px; left: 341px; z-index: 9999;background-color: #eee} 19 | .lock{ 20 | position: absolute; 21 | width: 45px; 22 | height: 40px; 23 | top: 68px; 24 | left: 260px; 25 | background: url("../../themes/default/images/lock.gif") 3px -4px no-repeat; 26 | line-height: 40px; 27 | padding-top:10px; 28 | } 29 | .saveDir{ 30 | /*width: 132px;*/ 31 | /*text-align: right;*/ 32 | height: 40px; 33 | line-height: 40px; 34 | margin-left: 30px; 35 | float: left; 36 | } 37 | .saveDir select{ 38 | height: 30px; 39 | } 40 | #duiqi{ width: 62px; height: 38px;float: left} 41 | #remoteFloat div,#localFloat div{cursor:pointer;opacity: 0.5;filter: alpha(opacity = 50);margin-left:1px;width:38px;height:36px;float:left;} 42 | #remoteFloat .focus,#localFloat .focus{opacity: 1;filter: alpha(opacity = 100)} 43 | #maskIframe{ width: 620px; height: 325px; position: absolute;z-index: 100; } 44 | #flashContainer { margin: 6px;position: relative;} 45 | #upload{width: 100px;height: 30px;float: right; margin:3px 6px 0 0;cursor: pointer;} 46 | #imageList{width: 620px;height: 315px; margin-top: 10px;overflow:hidden;overflow-y: auto;} 47 | #imageList img{cursor: pointer ;border: 2px solid #fff} 48 | #imgManager #imageList div{float: left;width: 100px;height: 100px;margin: 5px 10px;} 49 | #imgSearchTxt{padding-left:2px;margin-left:15px;background: #FFF;width:200px;height:21px;line-height:21px;border: 1px solid #d7d7d7;} 50 | #searchList{width: 620px;overflow: auto;zoom:1;height: 270px;} 51 | #searchList div{float: left;width: 116px;height: 135px;margin: 5px 15px;_margin:5px 10px;} 52 | #searchList img{margin: 2px 8px;cursor: pointer;border: 2px solid #fff} /*不用缩略图*/ 53 | #searchList p{margin-left: 10px;_margin-left:8px;} 54 | #imgType{ 55 | width: 65px; 56 | height: 23px; 57 | line-height: 22px; 58 | border: 1px solid #d7d7d7; 59 | } 60 | #imgSearchBtn,#imgSearchReset{ 61 | width: 100%; 62 | height: 25px; 63 | margin: 0 3px; 64 | line-height: 25px; 65 | background: #eee; 66 | border: 1px solid #d7d7d7; 67 | cursor: pointer 68 | } 69 | .msg{margin-left: 5px;} -------------------------------------------------------------------------------- /views/blog/article.html: -------------------------------------------------------------------------------- 1 | 2 | {{template "blog/head.html" .}} 3 | 4 |
    5 |
    6 |
    7 | 网站首页 8 | 文章专栏 9 |
    10 |
    11 |
    12 | {{if not .count }} 13 |
    14 | 未搜索到与【keywords】有关的文章,随便看看吧! 15 |
    16 | {{end}} 17 | {{range .list}} 18 |
    19 |
    20 | {{if .Image}} 21 | 22 | {{else}} 23 | 24 | {{end}} 25 |
    26 |
    27 |
    28 | {{.Title}} 29 |
    30 |
    31 | {{.Info}} 32 |
    33 |
    34 |
    35 | 42 |
    43 | {{end}} 44 | 45 |
    46 | {{str2html .pagebar}} 47 |
    48 | 49 |
    50 | 51 | {{template "blog/right.html" .}} 52 |
    53 |
    54 |
    55 |
    56 | {{template "blog/foot.html" .}} 57 | 58 | -------------------------------------------------------------------------------- /views/blog/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {{.actionName}}-{{.config.title}} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 58 | 63 | -------------------------------------------------------------------------------- /util/pager.go: -------------------------------------------------------------------------------- 1 | package util 2 | 3 | import ( 4 | "bytes" 5 | "fmt" 6 | "math" 7 | "strings" 8 | ) 9 | 10 | type Pager struct { 11 | Page int 12 | Totalnum int 13 | Pagesize int 14 | urlpath string 15 | urlquery string 16 | nopath bool 17 | } 18 | 19 | func NewPager(page, totalnum, pagesize int, url string, nopath ...bool) *Pager { 20 | p := new(Pager) 21 | p.Page = page 22 | p.Totalnum = totalnum 23 | p.Pagesize = pagesize 24 | 25 | arr := strings.Split(url, "?") 26 | p.urlpath = arr[0] 27 | if len(arr) > 1 { 28 | p.urlquery = "?" + arr[1] 29 | } else { 30 | p.urlquery = "" 31 | } 32 | 33 | if len(nopath) > 0 { 34 | p.nopath = nopath[0] 35 | } else { 36 | p.nopath = false 37 | } 38 | 39 | return p 40 | } 41 | 42 | func (this *Pager) url(page int) string { 43 | if this.nopath { //不使用目录形式 44 | if this.urlquery != "" { 45 | return fmt.Sprintf("%s%s&page=%d", this.urlpath, this.urlquery, page) 46 | } else { 47 | return fmt.Sprintf("%s?page=%d", this.urlpath, page) 48 | } 49 | } else { 50 | return fmt.Sprintf("%s/page/%d%s", this.urlpath, page, this.urlquery) 51 | } 52 | } 53 | 54 | func (this *Pager) ToString() string { 55 | if this.Totalnum <= this.Pagesize { 56 | return "" 57 | } 58 | 59 | var buf bytes.Buffer 60 | var from, to, linknum, offset, totalpage int 61 | 62 | offset = 5 63 | linknum = 10 64 | 65 | totalpage = int(math.Ceil(float64(this.Totalnum) / float64(this.Pagesize))) 66 | 67 | if totalpage < linknum { 68 | from = 1 69 | to = totalpage 70 | } else { 71 | from = this.Page - offset 72 | to = from + linknum 73 | if from < 1 { 74 | from = 1 75 | to = from + linknum - 1 76 | } else if to > totalpage { 77 | to = totalpage 78 | from = totalpage - linknum + 1 79 | } 80 | } 81 | 82 | if this.Page > 1 { 83 | buf.WriteString(fmt.Sprintf("上一页", this.url(this.Page-1))) 84 | } else { 85 | buf.WriteString("上一页") 86 | } 87 | 88 | if this.Page > linknum { 89 | buf.WriteString(fmt.Sprintf("1...", this.url(1))) 90 | } 91 | 92 | for i := from; i <= to; i++ { 93 | if i == this.Page { 94 | buf.WriteString(fmt.Sprintf("%d", i)) 95 | } else { 96 | buf.WriteString(fmt.Sprintf("%d", this.url(i), i)) 97 | } 98 | } 99 | 100 | if totalpage > to { 101 | buf.WriteString(fmt.Sprintf("末页", this.url(totalpage))) 102 | } 103 | 104 | if this.Page < totalpage { 105 | buf.WriteString(fmt.Sprintf("下一页", this.url(this.Page+1))) 106 | } else { 107 | buf.WriteString(fmt.Sprintf("下一页")) 108 | } 109 | return buf.String() 110 | } 111 | -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/tree.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var o=layui.jquery,a=layui.hint(),r="layui-tree-enter",i=function(e){this.options=e},t={arrow:["",""],checkbox:["",""],radio:["",""],branch:["",""],leaf:""};i.prototype.init=function(e){var o=this;e.addClass("layui-box layui-tree"),o.options.skin&&e.addClass("layui-tree-skin-"+o.options.skin),o.tree(e),o.on(e)},i.prototype.tree=function(e,a){var r=this,i=r.options,n=a||i.nodes;layui.each(n,function(a,n){var l=n.children&&n.children.length>0,c=o(''),s=o(["
  • ",function(){return l?''+(n.spread?t.arrow[1]:t.arrow[0])+"":""}(),function(){return i.check?''+("checkbox"===i.check?t.checkbox[0]:"radio"===i.check?t.radio[0]:"")+"":""}(),function(){return'"+(''+(l?n.spread?t.branch[1]:t.branch[0]:t.leaf)+"")+(""+(n.name||"未命名")+"")}(),"
  • "].join(""));l&&(s.append(c),r.tree(c,n.children)),e.append(s),"function"==typeof i.click&&r.click(s,n),r.spread(s,n),i.drag&&r.drag(s,n)})},i.prototype.click=function(e,o){var a=this,r=a.options;e.children("a").on("click",function(e){layui.stope(e),r.click(o)})},i.prototype.spread=function(e,o){var a=this,r=(a.options,e.children(".layui-tree-spread")),i=e.children("ul"),n=e.children("a"),l=function(){e.data("spread")?(e.data("spread",null),i.removeClass("layui-show"),r.html(t.arrow[0]),n.find(".layui-icon").html(t.branch[0])):(e.data("spread",!0),i.addClass("layui-show"),r.html(t.arrow[1]),n.find(".layui-icon").html(t.branch[1]))};i[0]&&(r.on("click",l),n.on("dblclick",l))},i.prototype.on=function(e){var a=this,i=a.options,t="layui-tree-drag";e.find("i").on("selectstart",function(e){return!1}),i.drag&&o(document).on("mousemove",function(e){var r=a.move;if(r.from){var i=(r.to,o('
    '));e.preventDefault(),o("."+t)[0]||o("body").append(i);var n=o("."+t)[0]?o("."+t):i;n.addClass("layui-show").html(r.from.elem.children("a").html()),n.css({left:e.pageX+10,top:e.pageY+10})}}).on("mouseup",function(){var e=a.move;e.from&&(e.from.elem.children("a").removeClass(r),e.to&&e.to.elem.children("a").removeClass(r),a.move={},o("."+t).remove())})},i.prototype.move={},i.prototype.drag=function(e,a){var i=this,t=(i.options,e.children("a")),n=function(){var t=o(this),n=i.move;n.from&&(n.to={item:a,elem:e},t.addClass(r))};t.on("mousedown",function(){var o=i.move;o.from={item:a,elem:e}}),t.on("mouseenter",n).on("mousemove",n).on("mouseleave",function(){var e=o(this),a=i.move;a.from&&(delete a.to,e.removeClass(r))})},e("tree",function(e){var r=new i(e=e||{}),t=o(e.elem);return t[0]?void r.init(t):a.error("layui.tree 没有找到"+e.elem+"元素")})}); -------------------------------------------------------------------------------- /views/admin/config.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 配置 8 | 9 | 10 | 11 | 12 | 13 | 14 |
    15 |
    16 | 17 |
    18 | 19 |
    20 |
    21 | 22 |
    23 | 24 |
    25 | 26 |
    27 |
    28 | 29 |
    30 | 31 |
    32 | 33 |
    34 |
    35 | 36 |
    37 | 38 |
    39 | 40 |
    41 |
    42 | 43 |
    44 | 45 |
    46 | 47 |
    48 |
    49 | 50 |
    51 | 52 |
    53 | 54 |
    55 |
    56 | 57 |
    58 | 59 |
    60 | 61 |
    62 |
    63 | 64 |
    65 |
    66 | 67 | 68 |
    69 |
    70 |
    71 | 72 | 79 | 80 | -------------------------------------------------------------------------------- /views/admin/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 后台登录 8 | 9 | 20 | 21 | 22 | 23 | 24 |
    25 |
    26 |
    27 |
    28 |
      29 |
    • 欢迎登录后台系统
    • 30 |
    31 |
    32 | 33 |
    34 | 35 |
    36 | 37 |
    38 | 40 |
    41 |
    42 |
    43 | 44 |
    45 | 47 |
    48 |
    49 | 50 |
    51 | 52 | 54 | 55 |
    56 | 57 |
    58 | 62 |
    63 |
    64 |
    65 |
    66 |
    67 |
    68 |
    69 | 70 | 71 | 76 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/attachment/attachment.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | * {margin: 0;padding: 0;} 4 | .wrapper { width: 460px;height: 340px; border: 1px solid #ddd;margin: 8px;overflow-y: hidden;} 5 | .controller { 6 | height: 30px; 7 | padding-top: 10px; 8 | padding-left: 6px; 9 | } 10 | #divStatus {display:inline-block; width:336px;color: #aaa;font-size: 12px; } 11 | #startUpload{cursor: pointer;margin-right: 10px; float: right; display: inline-block; width: 100px;height: 30px} 12 | div.fieldset { 13 | border: 1px solid #afe14c; 14 | padding: 10px 10px; 15 | } 16 | div.fieldset span.legend{position: relative;top:-20px;} 17 | div.flash { 18 | width: 420px; 19 | height: 236px; 20 | margin: 2px 5px 8px 9px; 21 | border-color: #D9E4FF; 22 | overflow-y: auto; 23 | -moz-border-radius-topleft : 5px; 24 | -webkit-border-top-left-radius : 5px; 25 | -moz-border-radius-topright : 5px; 26 | -webkit-border-top-right-radius : 5px; 27 | -moz-border-radius-bottomleft : 5px; 28 | -webkit-border-bottom-left-radius : 5px; 29 | -moz-border-radius-bottomright : 5px; 30 | -webkit-border-bottom-right-radius : 5px; 31 | 32 | } 33 | 34 | .progressWrapper { 35 | width: 412px; 36 | overflow: hidden; 37 | } 38 | 39 | .progressContainer { 40 | margin: 0 0px 5px 0; 41 | /*padding: 3px 0 3px 4px;*/ 42 | border: solid 1px #E8E8E8; 43 | background-color: #F7F7F7; 44 | overflow: hidden; 45 | } 46 | /* Message */ 47 | .message { 48 | margin: 1em 0; 49 | padding: 10px 20px; 50 | border: solid 1px #FFDD99; 51 | background-color: #FFFFCC; 52 | overflow: hidden; 53 | } 54 | /* Error */ 55 | .red { 56 | border: solid 1px #B50000; 57 | background-color: #FFEBEB; 58 | } 59 | 60 | /* Current */ 61 | .green { 62 | border: solid 1px #DDF0DD; 63 | background-color: #EBFFEB; 64 | } 65 | 66 | /* Complete */ 67 | .blue { 68 | border: solid 1px #CEE2F2; 69 | background-color: #F0F5FF; 70 | } 71 | 72 | .progressName { 73 | font-size: 10px; 74 | color: #555; 75 | width: 360px; 76 | height: 14px; 77 | text-align: left; 78 | white-space: nowrap; 79 | overflow: hidden; 80 | } 81 | 82 | .progressBarInProgress, 83 | .progressBarComplete, 84 | .progressBarError { 85 | font-size: 0; 86 | width: 0%; 87 | height: 2px; 88 | background-color: blue; 89 | margin-top: 2px; 90 | } 91 | 92 | .progressBarComplete { 93 | width: 100%; 94 | background-color: green; 95 | visibility: hidden; 96 | } 97 | 98 | .progressBarError { 99 | width: 100%; 100 | background-color: red; 101 | visibility: hidden; 102 | } 103 | a.progressCancel { 104 | font-size: 0; 105 | display: block; 106 | height: 14px; 107 | width: 14px; 108 | background: url(../../themes/default/images/cancelbutton.gif) -14px 0 no-repeat ; 109 | float: right; 110 | } 111 | 112 | a.progressCancel:hover { 113 | background-position: 0 0; 114 | } 115 | 116 | 117 | .progressBarStatus { 118 | margin-top: 2px; 119 | width: 337px; 120 | font-size: 7pt; 121 | text-align: left; 122 | white-space: nowrap; 123 | } 124 | 125 | /* -- SWFUpload Object Styles ------------------------------- */ 126 | .swfupload { 127 | vertical-align: top; 128 | } 129 | 130 | 131 | -------------------------------------------------------------------------------- /static/plug/layui/lay/modules/laypage.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;layui.define(function(a){"use strict";function t(a){new p(a)}var e=document,r="getElementById",n="getElementsByTagName",s=0,p=function(a){var t=this,e=t.config=a||{};e.item=s++,t.render(!0)};p.on=function(a,t,e){return a.attachEvent?a.attachEvent("on"+t,function(){e.call(a,window.even)}):a.addEventListener(t,e,!1),p},p.prototype.type=function(){var a=this.config;if("object"==typeof a.cont)return void 0===a.cont.length?2:3},p.prototype.view=function(){var a=this,t=a.config,e=[],r={};if(t.pages=0|t.pages,t.curr=0|t.curr||1,t.groups="groups"in t?0|t.groups:5,t.first="first"in t?t.first:"首页",t.last="last"in t?t.last:"末页",t.prev="prev"in t?t.prev:"上一页",t.next="next"in t?t.next:"下一页",t.pages<=1)return"";for(t.groups>t.pages&&(t.groups=t.pages),r.index=Math.ceil((t.curr+(t.groups>1&&t.groups!==t.pages?1:0))/(0===t.groups?1:t.groups)),t.curr>1&&t.prev&&e.push(''+t.prev+""),r.index>1&&t.first&&0!==t.groups&&e.push(''+t.first+""),r.poor=Math.floor((t.groups-1)/2),r.start=r.index>1?t.curr-r.poor:1,r.end=r.index>1?function(){var a=t.curr+(t.groups-r.poor-1);return a>t.pages?t.pages:a}():t.groups,r.end-r.start"+r.start+""):e.push(''+r.start+"");return t.pages>t.groups&&r.end'+t.last+""),r.flow=!t.prev&&0===t.groups,(t.curr!==t.pages&&t.next||r.flow)&&e.push(function(){return r.flow&&t.curr===t.pages?''+t.next+"":''+t.next+""}()),'
    '+e.join("")+function(){return t.skip?'到第 ':""}()+"
    "},p.prototype.jump=function(a){if(a){for(var t=this,e=t.config,r=a.children,s=a[n]("button")[0],i=a[n]("input")[0],u=0,o=r.length;u 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
    12 |
    13 |
    14 | 15 | 16 |
    17 |
    18 |
    19 |
    20 |
    21 |
    22 |
    23 | 24 | 25 | 26 | 27 |
    28 |
    29 |
    30 | 31 |
    32 |
    33 |
    34 |
    35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
    57 |
    58 |
    59 | 60 | 66 | 67 | -------------------------------------------------------------------------------- /static/ueditor/third-party/codemirror/codemirror.css: -------------------------------------------------------------------------------- 1 | .CodeMirror { 2 | line-height: 1em; 3 | font-family: monospace; 4 | } 5 | 6 | .CodeMirror-scroll { 7 | overflow: auto; 8 | height: 300px; 9 | /* This is needed to prevent an IE[67] bug where the scrolled content 10 | is visible outside of the scrolling box. */ 11 | position: relative; 12 | } 13 | 14 | .CodeMirror-gutter { 15 | position: absolute; left: 0; top: 0; 16 | z-index: 10; 17 | background-color: #f7f7f7; 18 | border-right: 1px solid #eee; 19 | min-width: 2em; 20 | height: 100%; 21 | } 22 | .CodeMirror-gutter-text { 23 | color: #aaa; 24 | text-align: right; 25 | padding: .4em .2em .4em .4em; 26 | white-space: pre !important; 27 | } 28 | .CodeMirror-lines { 29 | padding: .4em; 30 | } 31 | 32 | .CodeMirror pre { 33 | -moz-border-radius: 0; 34 | -webkit-border-radius: 0; 35 | -o-border-radius: 0; 36 | border-radius: 0; 37 | border-width: 0; margin: 0; padding: 0; background: transparent; 38 | font-family: inherit; 39 | font-size: inherit; 40 | padding: 0; margin: 0; 41 | white-space: pre; 42 | word-wrap: normal; 43 | } 44 | 45 | .CodeMirror-wrap pre { 46 | word-wrap: break-word; 47 | white-space: pre-wrap; 48 | } 49 | .CodeMirror-wrap .CodeMirror-scroll { 50 | overflow-x: hidden; 51 | } 52 | 53 | .CodeMirror textarea { 54 | outline: none !important; 55 | } 56 | 57 | .CodeMirror pre.CodeMirror-cursor { 58 | z-index: 10; 59 | position: absolute; 60 | visibility: hidden; 61 | border-left: 1px solid black; 62 | } 63 | .CodeMirror-focused pre.CodeMirror-cursor { 64 | visibility: visible; 65 | } 66 | 67 | span.CodeMirror-selected { background: #d9d9d9; } 68 | .CodeMirror-focused span.CodeMirror-selected { background: #d2dcf8; } 69 | 70 | .CodeMirror-searching {background: #ffa;} 71 | 72 | /* Default theme */ 73 | 74 | .cm-s-default span.cm-keyword {color: #708;} 75 | .cm-s-default span.cm-atom {color: #219;} 76 | .cm-s-default span.cm-number {color: #164;} 77 | .cm-s-default span.cm-def {color: #00f;} 78 | .cm-s-default span.cm-variable {color: black;} 79 | .cm-s-default span.cm-variable-2 {color: #05a;} 80 | .cm-s-default span.cm-variable-3 {color: #085;} 81 | .cm-s-default span.cm-property {color: black;} 82 | .cm-s-default span.cm-operator {color: black;} 83 | .cm-s-default span.cm-comment {color: #a50;} 84 | .cm-s-default span.cm-string {color: #a11;} 85 | .cm-s-default span.cm-string-2 {color: #f50;} 86 | .cm-s-default span.cm-meta {color: #555;} 87 | .cm-s-default span.cm-error {color: #f00;} 88 | .cm-s-default span.cm-qualifier {color: #555;} 89 | .cm-s-default span.cm-builtin {color: #30a;} 90 | .cm-s-default span.cm-bracket {color: #cc7;} 91 | .cm-s-default span.cm-tag {color: #170;} 92 | .cm-s-default span.cm-attribute {color: #00c;} 93 | .cm-s-default span.cm-header {color: #a0a;} 94 | .cm-s-default span.cm-quote {color: #090;} 95 | .cm-s-default span.cm-hr {color: #999;} 96 | .cm-s-default span.cm-link {color: #00c;} 97 | 98 | span.cm-header, span.cm-strong {font-weight: bold;} 99 | span.cm-em {font-style: italic;} 100 | span.cm-emstrong {font-style: italic; font-weight: bold;} 101 | span.cm-link {text-decoration: underline;} 102 | 103 | div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} 104 | div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} 105 | -------------------------------------------------------------------------------- /static/css/about.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | @Name:不落阁整站模板源码 4 | @Author:Absolutely 5 | @Site:http://www.lyblogs.cn 6 | 7 | */ 8 | .layui-tab-brief { 9 | background: #fff; 10 | min-height: 100vh; 11 | } 12 | 13 | .layui-tab-brief .layui-tab-title { 14 | text-align: center; 15 | border-bottom: 1px solid #5FB878; 16 | } 17 | 18 | .layui-tab-brief .layui-tab-title li { 19 | font-size: 12px; 20 | } 21 | 22 | .layui-tab-brief .layui-tab-content { 23 | padding: 0; 24 | } 25 | 26 | .aboutinfo { 27 | text-align: center; 28 | padding: 0 15px; 29 | } 30 | 31 | .aboutinfo-figure { 32 | display: inline-block; 33 | margin: 20px auto; 34 | } 35 | 36 | .aboutinfo-figure img { 37 | border-radius: 50px; 38 | } 39 | 40 | .aboutinfo-nickname { 41 | font-size: 32px; 42 | font-weight: bold; 43 | margin: 0 0 15px 0; 44 | } 45 | 46 | .aboutinfo-introduce { 47 | margin: 20px auto; 48 | font-size: 18px; 49 | width: 90%; 50 | } 51 | 52 | .aboutinfo-location { 53 | color: #808080; 54 | margin: 15px; 55 | } 56 | 57 | .aboutinfo-contact { 58 | margin: 15px; 59 | } 60 | 61 | .aboutinfo-contact > a { 62 | padding: 0 10px; 63 | } 64 | 65 | .aboutinfo-abstract { 66 | width: 90%; 67 | margin: 0 auto; 68 | } 69 | 70 | .aboutinfo-abstract > h1 { 71 | font-weight: bold; 72 | font-size: 16px; 73 | text-align: left; 74 | margin-top: 25px; 75 | } 76 | 77 | .aboutinfo-abstract > p { 78 | margin: 5px 0; 79 | font-size: 14px; 80 | text-align: left; 81 | text-indent: 2em; 82 | } 83 | 84 | #frinedlink { 85 | display: none; /*手机端不显示友情链接,样式没写好,会乱*/ 86 | } 87 | 88 | .friendlink { 89 | padding: 0 15px; 90 | } 91 | 92 | .friendlink li { 93 | width: 30%; 94 | margin: 0 1%; 95 | margin-top: 10px; 96 | float: left; 97 | } 98 | 99 | .friendlink-item { 100 | box-shadow: inset 0 0 2px #5FB878; 101 | width: 100%; 102 | display: block; 103 | padding: 10px 0; 104 | text-align: left; 105 | min-height: 45px; 106 | position: relative; 107 | } 108 | 109 | .friendlink-item:hover { 110 | box-shadow: 0 0 2px #5FB878; 111 | } 112 | 113 | .friendlink-item-pic { 114 | display: inline-block; 115 | position: absolute; 116 | left: 10%; 117 | margin: 0 10px; 118 | } 119 | 120 | .friendlink-item-pic img { 121 | width: 45px; 122 | height: 45px; 123 | position: relative; 124 | left: 0px; 125 | border-radius: 50px; 126 | } 127 | 128 | .friendlink-item-title { 129 | font-size: 17px; 130 | margin-left: 65px; 131 | text-align: center; 132 | line-height: 20px; 133 | } 134 | 135 | .friendlink-item-domain { 136 | font-size: 13px; 137 | margin-left: 65px; 138 | text-align: center; 139 | line-height: 20px; 140 | margin-top: 5px; 141 | } 142 | 143 | .leavemessage .blog-comment li:first-child { 144 | border-top: 1px dotted #01AAED; 145 | } 146 | 147 | /* 小屏幕(平板,大于等于 768px) */ 148 | @media (min-width: 768px) { 149 | .layui-tab-brief .layui-tab-title li { 150 | font-size: 14px; 151 | } 152 | 153 | #frinedlink { 154 | display: inline-block; 155 | } 156 | } 157 | 158 | /* 中等屏幕(桌面显示器,大于等于 992px) */ 159 | @media (min-width: 992px) { 160 | .blog-container { 161 | width: 962px; 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/spechars/spechars.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created with JetBrains PhpStorm. 3 | * User: xuheng 4 | * Date: 12-9-26 5 | * Time: 下午1:09 6 | * To change this template use File | Settings | File Templates. 7 | */ 8 | var charsContent = [ 9 | { name:"tsfh", title:lang.tsfh, content:toArray("、,。,·,ˉ,ˇ,¨,〃,々,—,~,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,$,¤,¢,£,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,¬,¦,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞")}, 10 | { name:"lmsz", title:lang.lmsz, content:toArray("ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ")}, 11 | { name:"szfh", title:lang.szfh, content:toArray("⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩")}, 12 | { name:"rwfh", title:lang.rwfh, content:toArray("ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ")}, 13 | { name:"xlzm", title:lang.xlzm, content:toArray("Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω")}, 14 | { name:"ewzm", title:lang.ewzm, content:toArray("А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я")}, 15 | { name:"pyzm", title:lang.pyzm, content:toArray("ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü")}, 16 | { name:"zyzf", title:lang.zyzf, content:toArray("ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ")} 17 | ]; 18 | (function createTab(content) { 19 | for (var i = 0, ci; ci = content[i++];) { 20 | var span = document.createElement("span"); 21 | span.setAttribute("tabSrc", ci.name); 22 | span.innerHTML = ci.title; 23 | if (i == 1)span.className = "focus"; 24 | domUtils.on(span, "click", function () { 25 | var tmps = $G("tabHeads").children; 26 | for (var k = 0, sk; sk = tmps[k++];) { 27 | sk.className = ""; 28 | } 29 | tmps = $G("tabBodys").children; 30 | for (var k = 0, sk; sk = tmps[k++];) { 31 | sk.style.display = "none"; 32 | } 33 | this.className = "focus"; 34 | $G(this.getAttribute("tabSrc")).style.display = ""; 35 | }); 36 | $G("tabHeads").appendChild(span); 37 | domUtils.insertAfter(span, document.createTextNode("\n")); 38 | var div = document.createElement("div"); 39 | div.id = ci.name; 40 | div.style.display = (i == 1) ? "" : "none"; 41 | var cons = ci.content; 42 | for (var j = 0, con; con = cons[j++];) { 43 | var charSpan = document.createElement("span"); 44 | charSpan.innerHTML = con; 45 | domUtils.on(charSpan, "click", function () { 46 | editor.execCommand("insertHTML", this.innerHTML); 47 | dialog.close(); 48 | }); 49 | div.appendChild(charSpan); 50 | } 51 | $G("tabBodys").appendChild(div); 52 | } 53 | })(charsContent); 54 | function toArray(str) { 55 | return str.split(","); 56 | } 57 | -------------------------------------------------------------------------------- /static/ueditor/third-party/swfupload/swfupload.proxy.js: -------------------------------------------------------------------------------- 1 | /* 2 | Proxy Plug-in 3 | 4 | Features: 5 | Times an upload to see if it appear suspiciously fast which might indicate a proxy server or anti-virus suite intercepting the upload. 6 | If the upload seems too fast an uploadError event is fired with PROXY error code after the final uploadProgress event. 7 | 8 | Adds a SWFUpload setting allowing you to tweak the bytes/s for triggering the error: 9 | proxy_detect_threshold : 256000 10 | 11 | Adds an UPLOAD_ERROR entry called PROXY: 12 | function uploadError(file, errorCode, message) { 13 | if (errorCode === SWFUpload.UPLOAD_ERROR.PROXY) { 14 | alert("You might have a proxy!"); 15 | } 16 | } 17 | */ 18 | 19 | var SWFUpload; 20 | if (typeof(SWFUpload) === "function") { 21 | SWFUpload.proxyDetect = {}; 22 | SWFUpload.UPLOAD_ERROR.PROXY = -30300; 23 | 24 | SWFUpload.prototype.initSettings = (function (oldInitSettings) { 25 | return function (userSettings) { 26 | if (typeof(oldInitSettings) === "function") { 27 | oldInitSettings.call(this, userSettings); 28 | } 29 | 30 | this.ensureDefault = function (settingName, defaultValue) { 31 | this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName]; 32 | }; 33 | 34 | // List used to keep the speed stats for the files we are tracking 35 | this.proxyDetectFileStartTimes = {}; 36 | this.proxyDetectSettings = {}; 37 | 38 | this.ensureDefault("proxy_detect_threshold", 256000); // Default is 250 KB per second 39 | 40 | this.proxyDetectSettings.user_upload_progress_handler = this.settings.upload_progress_handler; 41 | this.proxyDetectSettings.user_upload_complete_handler = this.settings.upload_complete_handler; 42 | 43 | this.settings.upload_progress_handler = SWFUpload.proxyDetect.uploadProgressHandler; 44 | this.settings.upload_complete_handler = SWFUpload.proxyDetect.uploadCompleteHandler; 45 | 46 | 47 | delete this.ensureDefault; 48 | }; 49 | }(SWFUpload.prototype.initSettings)); 50 | 51 | SWFUpload.proxyDetect.uploadProgressHandler = function (file, bytesComplete, bytesTotal) { 52 | var ex1 = null, time, differenceMS, bps; 53 | try { 54 | if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") { 55 | this.proxyDetectSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal); 56 | } 57 | } catch (ex1) { } 58 | 59 | 60 | if (bytesComplete === 0) { 61 | this.proxyDetectFileStartTimes[file.ID] = new Date(); 62 | 63 | } else if (bytesComplete === bytesTotal) { 64 | try { 65 | // Calculate the Bps and decide if we should trigger the error 66 | time = new Date(); 67 | differenceMS = time.getTime() - this.proxyDetectFileStartTimes[file.ID].getTime(); 68 | 69 | if (differenceMS === 0) { 70 | differenceMS = 1; 71 | } 72 | 73 | bps = bytesTotal / (differenceMS * 1000); 74 | if (bps > parseInt(this.settings.proxy_detect_threshold, 10)) { 75 | this.queueEvent("upload_error_handler", [file, SWFUpload.UPLOAD_ERROR.PROXY, bps]); 76 | } 77 | } catch (ex) { 78 | } 79 | } 80 | 81 | if (ex1 !== null) { 82 | throw(ex1); 83 | } 84 | }; 85 | 86 | SWFUpload.proxyDetect.uploadCompleteHandler = function (file) { 87 | try { 88 | delete this.proxyDetectFileStartTimes[file.ID]; 89 | } catch (ex) { 90 | } 91 | 92 | if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") { 93 | return this.proxyDetectSettings.user_upload_progress_handler.call(this, file); 94 | } 95 | }; 96 | } -------------------------------------------------------------------------------- /static/ueditor/third-party/swfupload/swfupload.queue.js: -------------------------------------------------------------------------------- 1 | /* 2 | Queue Plug-in 3 | 4 | Features: 5 | *Adds a cancelQueue() method for cancelling the entire queue. 6 | *All queued files are uploaded when startUpload() is called. 7 | *If false is returned from uploadComplete then the queue upload is stopped. 8 | If false is not returned (strict comparison) then the queue upload is continued. 9 | *Adds a QueueComplete event that is fired when all the queued files have finished uploading. 10 | Set the event handler with the queue_complete_handler setting. 11 | 12 | */ 13 | 14 | var SWFUpload; 15 | if (typeof(SWFUpload) === "function") { 16 | SWFUpload.queue = {}; 17 | 18 | SWFUpload.prototype.initSettings = (function (oldInitSettings) { 19 | return function (userSettings) { 20 | if (typeof(oldInitSettings) === "function") { 21 | oldInitSettings.call(this, userSettings); 22 | } 23 | 24 | this.queueSettings = {}; 25 | 26 | this.queueSettings.queue_cancelled_flag = false; 27 | this.queueSettings.queue_upload_count = 0; 28 | 29 | this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler; 30 | this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler; 31 | this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler; 32 | this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler; 33 | 34 | this.settings.queue_complete_handler = userSettings.queue_complete_handler || null; 35 | }; 36 | })(SWFUpload.prototype.initSettings); 37 | 38 | SWFUpload.prototype.startUpload = function (fileID) { 39 | this.queueSettings.queue_cancelled_flag = false; 40 | this.callFlash("StartUpload", [fileID]); 41 | }; 42 | 43 | SWFUpload.prototype.cancelQueue = function () { 44 | this.queueSettings.queue_cancelled_flag = true; 45 | this.stopUpload(); 46 | 47 | var stats = this.getStats(); 48 | while (stats.files_queued > 0) { 49 | this.cancelUpload(); 50 | stats = this.getStats(); 51 | } 52 | }; 53 | 54 | SWFUpload.queue.uploadStartHandler = function (file) { 55 | var returnValue; 56 | if (typeof(this.queueSettings.user_upload_start_handler) === "function") { 57 | returnValue = this.queueSettings.user_upload_start_handler.call(this, file); 58 | } 59 | 60 | // To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value. 61 | returnValue = (returnValue === false) ? false : true; 62 | 63 | this.queueSettings.queue_cancelled_flag = !returnValue; 64 | 65 | return returnValue; 66 | }; 67 | 68 | SWFUpload.queue.uploadCompleteHandler = function (file) { 69 | var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler; 70 | var continueUpload; 71 | 72 | if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) { 73 | this.queueSettings.queue_upload_count++; 74 | } 75 | 76 | if (typeof(user_upload_complete_handler) === "function") { 77 | continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true; 78 | } else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) { 79 | // If the file was stopped and re-queued don't restart the upload 80 | continueUpload = false; 81 | } else { 82 | continueUpload = true; 83 | } 84 | 85 | if (continueUpload) { 86 | var stats = this.getStats(); 87 | if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) { 88 | this.startUpload(); 89 | } else if (this.queueSettings.queue_cancelled_flag === false) { 90 | this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]); 91 | this.queueSettings.queue_upload_count = 0; 92 | } else { 93 | this.queueSettings.queue_cancelled_flag = false; 94 | this.queueSettings.queue_upload_count = 0; 95 | } 96 | } 97 | }; 98 | } -------------------------------------------------------------------------------- /views/admin/list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 个人客户列表 8 | 9 | 10 | 11 |
    12 | 13 |
    14 | 15 |
    16 | 21 |
    22 |
    23 | 24 |
    25 | 26 |
    27 | 28 |
    29 |
    30 | 31 |
    32 | 35 |
    36 | 37 |
    38 | 41 |
    42 | 43 |
    44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | {{range $o :=.list}} 58 | 59 | 60 | 61 | 68 | 75 | 78 | 88 | 89 | {{end}} 90 | 91 |
    标题时间分类置顶点击量操作
    {{.Title}}{{.Created}} 62 | {{range $elem := $.categorys }} 63 | {{if eq $elem.Id $o.CategoryId}} 64 | {{$elem.Name}} 65 | {{end}} 66 | {{end}} 67 | 69 | {{if .IsTop}} 70 | 置顶 71 | {{else}} 72 | 普通 73 | {{end}} 74 | 76 | {{.Views}} 77 | 79 | 80 | 修改 81 | 82 | {{if ne .CategoryId 1}} 83 | 84 | 删除 85 | 86 | {{end}} 87 |
    92 | 93 |
    94 | {{str2html .pagebar}} 95 |
    96 | 97 | 98 | 99 | 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /controllers/blog.go: -------------------------------------------------------------------------------- 1 | package controllers 2 | 3 | import ( 4 | "github.com/Echosong/beego_blog/models" 5 | "github.com/Echosong/beego_blog/util" 6 | "time" 7 | ) 8 | 9 | type BlogController struct { 10 | baseController 11 | } 12 | 13 | func (c *BlogController) list() { 14 | var ( 15 | page int 16 | pagesize int = 6 17 | offset int 18 | list []*models.Post 19 | hosts []*models.Post 20 | cateId int 21 | keyword string 22 | ) 23 | 24 | categorys := []*models.Category{} 25 | c.o.QueryTable(new(models.Category).TableName()).All(&categorys) 26 | c.Data["cates"] = categorys 27 | 28 | if page, _ = c.GetInt("page"); page < 1 { 29 | page = 1 30 | } 31 | offset = (page - 1) * pagesize 32 | query := c.o.QueryTable(new(models.Post).TableName()) 33 | 34 | if c.actionName == "resource" { 35 | query = query.Filter("types", 0) 36 | } else { 37 | query = query.Filter("types", 1) 38 | } 39 | 40 | if cateId, _ = c.GetInt("cate_id"); cateId != 0 { 41 | query = query.Filter("category_id", cateId) 42 | } 43 | keyword = c.Input().Get("keyword") 44 | if keyword != "" { 45 | query = query.Filter("title__contains", keyword) 46 | } 47 | query.OrderBy("-views").Limit(10, 0).All(&hosts) 48 | 49 | if c.actionName == "home" { 50 | query = query.Filter("is_top", 1) 51 | } 52 | count, _ := query.Count() 53 | c.Data["count"] = count 54 | query.OrderBy("-created").Limit(pagesize, offset).All(&list) 55 | 56 | c.Data["list"] = list 57 | c.Data["pagebar"] = util.NewPager(page, int(count), pagesize, "/"+c.actionName, true).ToString() 58 | c.Data["hosts"] = hosts 59 | } 60 | 61 | /** 62 | 首页 63 | */ 64 | func (c *BlogController) Home() { 65 | config := models.Config{Name: "start"} 66 | c.o.Read(&config, "Name") 67 | var notices []*models.Post 68 | c.o.QueryTable(new(models.Post).TableName()).Filter("category_id", 2).All(¬ices) 69 | c.Data["notices"] = notices 70 | if config.Value != "1" { 71 | c.Ctx.WriteString("系统维护.....") 72 | return 73 | } 74 | c.list() 75 | c.TplName = c.controllerName + "/home.html" 76 | } 77 | 78 | /** 79 | 列表页面 80 | */ 81 | func (c *BlogController) Article() { 82 | c.list() 83 | c.TplName = c.controllerName + "/article.html" 84 | } 85 | 86 | /** 87 | 详情 88 | */ 89 | func (c *BlogController) Detail() { 90 | if id, _ := c.GetInt("id"); id != 0 { 91 | post := models.Post{Id: id} 92 | c.o.Read(&post) 93 | c.Data["post"] = post 94 | comments := []*models.Comment{} 95 | query := c.o.QueryTable(new(models.Comment).TableName()).Filter("post_id", id) 96 | query.All(&comments) 97 | c.Data["comments"] = comments 98 | 99 | categorys := []*models.Category{} 100 | c.o.QueryTable(new(models.Category).TableName()).All(&categorys) 101 | c.Data["cates"] = categorys 102 | var hosts []*models.Post 103 | querys := c.o.QueryTable(new(models.Post).TableName()).Filter("types", 1) 104 | querys.OrderBy("-views").Limit(10, 0).All(&hosts) 105 | c.Data["hosts"] = hosts 106 | 107 | } 108 | c.TplName = c.controllerName + "/detail.html" 109 | } 110 | 111 | /** 112 | 关于我们 113 | */ 114 | func (c *BlogController) About() { 115 | post := models.Post{Id: 1} 116 | c.o.Read(&post) 117 | c.Data["post"] = post 118 | c.TplName = c.controllerName + "/about.html" 119 | } 120 | 121 | //时间线 122 | func (c *BlogController) Timeline() { 123 | c.TplName = c.controllerName + "/timeline.html" 124 | } 125 | 126 | //资源 127 | func (c *BlogController) Resource() { 128 | c.list() 129 | c.TplName = c.controllerName + "/resource.html" 130 | } 131 | 132 | //插入评价 133 | func (c *BlogController) Comment() { 134 | Comment := models.Comment{} 135 | Comment.Username = c.GetString("username") 136 | Comment.Content = c.GetString("content") 137 | Comment.Ip = c.getClientIp() 138 | Comment.PostId, _ = c.GetInt("post_id") 139 | Comment.Created = time.Now() 140 | if _, err := c.o.Insert(&Comment); err != nil { 141 | c.History("发布评价失败"+err.Error(), "") 142 | } else { 143 | c.History("发布评价成功", "") 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /views/blog/detail.html: -------------------------------------------------------------------------------- 1 | {{template "blog/head.html" .}} 2 | 3 |
    4 |
    5 |
    6 | 网站首页 7 | 文章专栏 8 | {{.post.Title}} 9 |
    10 |
    11 |
    12 | 13 |
    14 |
    15 | {{.post.Title}} 16 |
    17 |
    18 | 编辑时间:{{date .post.Updated "Y-m-d H:i:s"}} 19 | 作者:Echosong 20 | 浏览量:{{.post.Views}} 21 |
    22 |
    23 | {{.post.Content | str2html}} 24 |
    25 |
    26 | 27 |
    28 |
    29 | 来说两句吧 30 |
    31 |
    32 |
    33 | 34 | 35 | 36 |
    37 | 38 |
    39 | 40 | 42 |
    43 | 44 |
    45 | 47 |
    48 |
    49 |
    50 |
    51 |
    最新评论
    52 |
      53 | {{range .comments}} 54 |
    • 55 |
      56 |
      57 | {{.Username}} 58 | {{date .Created "Y-m-d H:i:s"}} 59 |
      60 |
      61 | {{str2html .Content}} 62 |
      63 |
      64 |
    • 65 | {{end}} 66 |
    67 |
    68 |
    69 | {{template "blog/right.html" .}} 70 |
    71 |
    72 |
    73 |
    74 | {{template "blog/foot.html" .}} 75 | 76 | 77 | 83 | 84 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/gmap/gmap.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 17 |
    18 | 19 | 20 | 21 | 22 | 23 | 24 |
    25 |
    26 |
    27 | 88 | 89 | -------------------------------------------------------------------------------- /static/css/resource.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | @Name:不落阁整站模板源码 4 | @Author:Absolutely 5 | @Site:http://www.lyblogs.cn 6 | 7 | */ 8 | 9 | .resource { 10 | width: 49%; 11 | margin: 0 1%; 12 | margin-bottom: 10px; 13 | background: #fff; 14 | height: 270px; 15 | float: left; 16 | padding: 8px 8px; 17 | -moz-box-sizing: border-box; 18 | -webkit-box-sizing: border-box; 19 | box-sizing: border-box; 20 | position: relative; 21 | } 22 | 23 | .resource-main .resource:nth-child(odd) { 24 | margin-left: 0; 25 | } 26 | 27 | .resource-main .resource:nth-child(even) { 28 | margin-right: 0; 29 | } 30 | 31 | .resource-cover { 32 | width: 100%; 33 | height: 92px; 34 | text-align: center; 35 | } 36 | 37 | .resource-cover a { 38 | display: inline-block; 39 | width: 100%; 40 | height: 100%; 41 | border: 1px solid #ddd; 42 | -moz-transition: all 1s; 43 | -o-transition: all 1s; 44 | -webkit-transition: all 1s; 45 | transition: all 1s; 46 | -moz-box-sizing: border-box; 47 | -webkit-box-sizing: border-box; 48 | box-sizing: border-box; 49 | } 50 | 51 | .resource-cover a:hover { 52 | opacity: .7; 53 | border: 1px solid #5FB878; 54 | } 55 | 56 | .resource-cover img { 57 | width: 100%; 58 | height: 100%; 59 | } 60 | 61 | .resource-title { 62 | text-align: center; 63 | padding: 5px 0; 64 | margin-top: 7px; 65 | margin-bottom: 5px; 66 | } 67 | 68 | .resource-title > a { 69 | font-size: 16px; 70 | font-weight: bold; 71 | line-height: 18px; 72 | color: #01AAED; 73 | } 74 | 75 | .resource-title > a:hover { 76 | color: #1E9FFF; 77 | } 78 | 79 | .resource-abstract { 80 | padding: 3px; 81 | text-align: center; 82 | font-size: smaller; 83 | color: #838383; 84 | overflow: hidden; 85 | } 86 | 87 | .resource-info { 88 | font-size: smaller; 89 | position: absolute; 90 | bottom: 50px; 91 | left: 0; 92 | right: 0; 93 | padding: 2px 10px; 94 | } 95 | 96 | .resource-info .category { 97 | float: left; 98 | } 99 | 100 | .resource-info .author { 101 | float: right; 102 | } 103 | 104 | .resource-footer { 105 | font-size: small; 106 | border-top: 1px solid #e7e7e7; 107 | box-shadow: 0 1px 0 0 #fff inset; 108 | color: #8B8B8C; 109 | height: 50px; 110 | position: absolute; 111 | bottom: 0; 112 | left: 0; 113 | right: 0; 114 | padding: 0 10px; 115 | line-height: 50px; 116 | text-align: center; 117 | } 118 | 119 | .resource-footer a:nth-child(2) { 120 | display: none; 121 | } 122 | 123 | .resource-footer i { 124 | font-size: 12px !important; 125 | } 126 | 127 | 128 | /* 小屏幕(平板,大于等于 768px) */ 129 | @media (min-width: 768px) { 130 | .resource { 131 | width: 32%; 132 | margin: 0 1%; 133 | margin-bottom: 10px; 134 | height: 320px; 135 | } 136 | 137 | .resource-main .resource:nth-child(odd) { 138 | margin-left: 1%; 139 | } 140 | 141 | .resource-main .resource:nth-child(even) { 142 | margin-right: 1%; 143 | } 144 | 145 | .resource-main .resource:nth-child(3n+1) { 146 | margin-left: 0; 147 | } 148 | 149 | .resource-main .resource:nth-child(3n+3) { 150 | margin-right: 0; 151 | } 152 | 153 | .resource-cover { 154 | width: 100%; 155 | height: 150px; 156 | text-align: center; 157 | } 158 | 159 | .resource-footer a:nth-child(2) { 160 | display: inline-block; 161 | } 162 | } 163 | 164 | /* 中等屏幕(桌面显示器,大于等于 992px) */ 165 | @media (min-width: 992px) { 166 | .resource { 167 | width: 23.5%; 168 | margin: 0 1%; 169 | margin-bottom: 10px; 170 | } 171 | 172 | .resource-main .resource:nth-child(odd) { 173 | margin-left: 1%; 174 | } 175 | 176 | .resource-main .resource:nth-child(even) { 177 | margin-right: 1%; 178 | } 179 | 180 | .resource-main .resource:nth-child(3n+1) { 181 | margin-left: 1%; 182 | } 183 | 184 | .resource-main .resource:nth-child(3n+3) { 185 | margin-right: 1%; 186 | } 187 | 188 | .resource-main .resource:nth-child(4n+1) { 189 | margin-left: 0; 190 | } 191 | 192 | .resource-main .resource:nth-child(4n) { 193 | margin-right: 0; 194 | } 195 | } -------------------------------------------------------------------------------- /views/admin/main.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 后台管理系统 10 | 11 | 12 | 13 | 14 | 15 | 16 |
    17 | 18 |
    19 |
    20 | 21 | 后台管理系统 22 | 23 | 42 |
    43 |
    44 | 45 | 46 |
    47 |
    48 |
      49 |
    50 |
    51 |
    52 | 53 | 54 |
    55 | 56 |
    57 |
      58 |
      59 |
      60 |
      61 | 62 | 63 | 66 |
      67 | 68 | 69 | 70 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/map/map.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 16 | 17 | 18 |
      19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
      ::
      28 |
      29 | 30 |
      31 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /static/ueditor/dialogs/link/link.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 33 | 34 | 35 | 36 | 37 |
      30 | 31 | 32 |
      38 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /static/css/timeline.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | @Name:不落阁整站模板源码 4 | @Author:Absolutely 5 | @Site:http://www.lyblogs.cn 6 | 7 | */ 8 | 9 | .timeline-box { 10 | background: #fff; 11 | padding: 8px; 12 | position: relative; 13 | min-height: 90vh; 14 | } 15 | 16 | .timeline-main { 17 | position: relative; 18 | min-height: 85vh; 19 | } 20 | 21 | .timeline-main > h1 { 22 | font-size: 18px; 23 | background: #fff; 24 | z-index: 1; 25 | position: relative; 26 | color: #009688; 27 | margin-left: 33%; /*写给不支持calc()的浏览器*/ 28 | margin-left: -moz-calc(35% - 7px); 29 | margin-left: -webkit-calc(35% - 7px); 30 | margin-left: calc(35% - 7px); 31 | } 32 | 33 | .timeline-main > h1 > i { 34 | padding-right: 10px; 35 | font-size: 20px; 36 | } 37 | 38 | .timeline-main > h1 > span { 39 | display: none; 40 | } 41 | 42 | .timeline-main h2, 43 | .timeline-main h3 { 44 | width: 31%; 45 | text-align: right; 46 | } 47 | 48 | .timeline-main h2, 49 | .timeline-main h2 > a { 50 | font-size: 16px; 51 | margin: 5px 0; 52 | color: #1E9FFF; 53 | } 54 | 55 | .timeline-main h3, 56 | .timeline-main h3 > a { 57 | font-size: 14px; 58 | margin: 2px 0; 59 | color: #FF5722; 60 | } 61 | 62 | .timeline-month > ul > li { 63 | padding: 10px 0; 64 | } 65 | 66 | .timeline-month > ul > li .h4 { 67 | display: inline-block; 68 | width: 31%; 69 | text-align: right; 70 | float: left; 71 | } 72 | 73 | .date { 74 | display: inline-block; 75 | padding: 2px 5px; 76 | color: #009688; 77 | } 78 | 79 | .dot-circle { 80 | color: #009688; 81 | width: 8%; 82 | text-align: center; 83 | font-size: 22px; 84 | z-index: 1; 85 | position: relative; 86 | background: #fff; 87 | float: left; 88 | } 89 | 90 | .content { 91 | max-width: 50%; 92 | float: left; 93 | padding: 10px; 94 | margin-left: 10px; 95 | position: relative; 96 | z-index: 1; 97 | background: #009688; 98 | color: #fff; 99 | } 100 | 101 | .content::before { 102 | position: absolute; 103 | left: -20px; 104 | top: 6px; 105 | height: 0; 106 | width: 0; 107 | content: ''; 108 | border: 10px solid rgba(255, 255, 255, 0.00); 109 | border-top: 6px solid rgba(255, 255, 255, 0.00); 110 | border-bottom: 6px solid rgba(255, 255, 255, 0.00); 111 | border-right-color: #009688; 112 | } 113 | 114 | .timeline-line { 115 | position: absolute; 116 | left: 35%; 117 | top: 0; 118 | height: 100%; 119 | width: 2px; 120 | background: #009688; 121 | z-index: 0; 122 | } 123 | 124 | .timeline-year { 125 | margin: 10px 0; 126 | } 127 | 128 | 129 | 130 | /* 小屏幕(平板,大于等于 768px) */ 131 | @media (min-width: 768px) { 132 | .timeline-box { 133 | background: #fff; 134 | padding: 15px; 135 | position: relative; 136 | min-height: 90vh; 137 | } 138 | 139 | .timeline-main > h1 { 140 | font-size: 26px; 141 | margin-left: 16%; /*写给不支持calc()的浏览器*/ 142 | margin-left: -moz-calc(18% - 13px); 143 | margin-left: -webkit-calc(18% - 13px); 144 | margin-left: calc(18% -13px); 145 | } 146 | 147 | .timeline-main > h1 > i { 148 | font-size: 30px; 149 | } 150 | 151 | .timeline-main > h1 > span { 152 | display: inline; 153 | } 154 | 155 | .timeline-main h2, 156 | .timeline-main h3 { 157 | width: 16%; 158 | } 159 | 160 | .timeline-main h2, 161 | .timeline-main h2 > a { 162 | font-size: 24px; 163 | } 164 | 165 | .timeline-main h3, 166 | .timeline-main h3 > a { 167 | font-size: 20px; 168 | } 169 | 170 | .timeline-month > ul > li .h4 { 171 | width: 16%; 172 | } 173 | 174 | .dot-circle { 175 | width: 4%; 176 | font-size: 22px; 177 | } 178 | 179 | .content { 180 | max-width: 70%; 181 | } 182 | 183 | .timeline-line { 184 | left: 18%; 185 | } 186 | } 187 | 188 | /* 中等屏幕(桌面显示器,大于等于 992px) */ 189 | @media (min-width: 992px) { 190 | .blog-container { 191 | /*width: 962px;*/ 192 | /*width:1050px;*/ 193 | } 194 | 195 | .timeline-main > h1 { 196 | font-size: 34px; 197 | background: #fff; 198 | z-index: 1; 199 | position: relative; 200 | color: #009688; 201 | margin-left: 17%; /*写给不支持calc()的浏览器*/ 202 | margin-left: -moz-calc(18% - 16px); 203 | margin-left: -webkit-calc(18% - 16px); 204 | margin-left: calc(18% - 16px); 205 | } 206 | 207 | .timeline-main > h1 > i { 208 | font-size: 36px; 209 | } 210 | 211 | .timeline-main h2, 212 | .timeline-main h2 > a { 213 | font-size: 30px; 214 | } 215 | 216 | .timeline-main h3, 217 | .timeline-main h3 > a { 218 | font-size: 24px; 219 | } 220 | } -------------------------------------------------------------------------------- /static/plug/layui/layui.js: -------------------------------------------------------------------------------- 1 | /** layui-v1.0.9_rls MIT License By http://www.layui.com */ 2 | ;!function(e){"use strict";var t=function(){this.v="1.0.9_rls"};t.fn=t.prototype;var n=document,o=t.fn.cache={},i=function(){var e=n.scripts,t=e[e.length-1].src;return t.substring(0,t.lastIndexOf("/")+1)}(),r=function(t){e.console&&console.error&&console.error("Layui hint: "+t)},l="undefined"!=typeof opera&&"[object Opera]"===opera.toString(),a={layer:"modules/layer",laydate:"modules/laydate",laypage:"modules/laypage",laytpl:"modules/laytpl",layim:"modules/layim",layedit:"modules/layedit",form:"modules/form",upload:"modules/upload",tree:"modules/tree",table:"modules/table",element:"modules/element",util:"modules/util",flow:"modules/flow",carousel:"modules/carousel",code:"modules/code",jquery:"modules/jquery",mobile:"modules/mobile","layui.all":"dest/layui.all"};o.modules={},o.status={},o.timeout=10,o.event={},t.fn.define=function(e,t){var n=this,i="function"==typeof e,r=function(){return"function"==typeof t&&t(function(e,t){layui[e]=t,o.status[e]=!0}),this};return i&&(t=e,e=[]),layui["layui.all"]||!layui["layui.all"]&&layui["layui.mobile"]?r.call(n):(n.use(e,r),n)},t.fn.use=function(e,t,u){function s(e,t){var n="PLaySTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/;("load"===e.type||n.test((e.currentTarget||e.srcElement).readyState))&&(o.modules[m]=t,y.removeChild(p),function i(){return++v>1e3*o.timeout/4?r(m+" is not a valid module"):void(o.status[m]?c():setTimeout(i,4))}())}function c(){u.push(layui[m]),e.length>1?f.use(e.slice(1),t,u):"function"==typeof t&&t.apply(layui,u)}var f=this,d=o.dir=o.dir?o.dir:i,y=n.getElementsByTagName("head")[0];e="string"==typeof e?[e]:e,window.jQuery&&jQuery.fn.on&&(f.each(e,function(t,n){"jquery"===n&&e.splice(t,1)}),layui.jquery=jQuery);var m=e[0],v=0;if(u=u||[],o.host=o.host||(d.match(/\/\/([\s\S]+?)\//)||["//"+location.host+"/"])[0],0===e.length||layui["layui.all"]&&a[m]||!layui["layui.all"]&&layui["layui.mobile"]&&a[m])return c(),f;var p=n.createElement("script"),h=(a[m]?d+"lay/":o.base||"")+(f.modules[m]||m)+".js";return p.async=!0,p.charset="utf-8",p.src=h+function(){var e=o.version===!0?o.v||(new Date).getTime():o.version||"";return e?"?v="+e:""}(),o.modules[m]?!function g(){return++v>1e3*o.timeout/4?r(m+" is not a valid module"):void("string"==typeof o.modules[m]&&o.status[m]?c():setTimeout(g,4))}():(y.appendChild(p),!p.attachEvent||p.attachEvent.toString&&p.attachEvent.toString().indexOf("[native code")<0||l?p.addEventListener("load",function(e){s(e,h)},!1):p.attachEvent("onreadystatechange",function(e){s(e,h)})),o.modules[m]=h,f},t.fn.getStyle=function(t,n){var o=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return o[o.getPropertyValue?"getPropertyValue":"getAttribute"](n)},t.fn.link=function(e,t,i){var l=this,a=n.createElement("link"),u=n.getElementsByTagName("head")[0];"string"==typeof t&&(i=t);var s=(i||e).replace(/\.|\//g,""),c=a.id="layuicss-"+s,f=0;a.rel="stylesheet",a.href=e+(o.debug?"?v="+(new Date).getTime():""),a.media="all",n.getElementById(c)||u.appendChild(a),"function"==typeof t&&!function d(){return++f>1e3*o.timeout/100?r(e+" timeout"):void(1989===parseInt(l.getStyle(n.getElementById(c),"width"))?function(){t()}():setTimeout(d,100))}()},t.fn.addcss=function(e,t,n){layui.link(o.dir+"css/"+e,t,n)},t.fn.img=function(e,t,n){var o=new Image;return o.src=e,o.complete?t(o):(o.onload=function(){o.onload=null,t(o)},void(o.onerror=function(e){o.onerror=null,n(e)}))},t.fn.config=function(e){e=e||{};for(var t in e)o[t]=e[t];return this},t.fn.modules=function(){var e={};for(var t in a)e[t]=a[t];return e}(),t.fn.extend=function(e){var t=this;e=e||{};for(var n in e)t[n]||t.modules[n]?r("模块名 "+n+" 已被占用"):t.modules[n]=e[n];return t},t.fn.router=function(e){for(var t,n=(e||location.hash).replace(/^#/,"").split("/")||[],o={dir:[]},i=0;i