├── src ├── main │ ├── resources │ │ ├── application-prod.yml │ │ ├── application.yml │ │ ├── static │ │ │ ├── blog │ │ │ │ ├── image │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── bg.png │ │ │ │ │ ├── avatar.png │ │ │ │ │ ├── favicon.ico │ │ │ │ │ ├── kyrie.jpg │ │ │ │ │ ├── favicon1.ico │ │ │ │ │ └── social │ │ │ │ │ │ ├── Wechat.jpg │ │ │ │ │ │ ├── icon-px.png │ │ │ │ │ │ ├── profile.jpg │ │ │ │ │ │ ├── icon-csdn.png │ │ │ │ │ │ ├── icon-email.png │ │ │ │ │ │ ├── icon-uicn.png │ │ │ │ │ │ ├── icon-weibo.png │ │ │ │ │ │ ├── icon-zhihu.png │ │ │ │ │ │ ├── profile-1.png │ │ │ │ │ │ ├── icon-behance.png │ │ │ │ │ │ ├── icon-github.png │ │ │ │ │ │ ├── icon-jianshu.png │ │ │ │ │ │ ├── icon-resume.png │ │ │ │ │ │ ├── icon-twitter.png │ │ │ │ │ │ ├── icon-dribbble.png │ │ │ │ │ │ └── icon-instagram.png │ │ │ │ ├── font-awesome │ │ │ │ │ └── 4.6.2 │ │ │ │ │ │ └── fonts │ │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ │ ├── fontawesome-webfont.woff2 │ │ │ │ │ │ ├── .htaccess │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ │ │ │ └── glyphicons-halflings-regular.woff2 │ │ │ │ └── js │ │ │ │ │ ├── schemes │ │ │ │ │ └── pisces.js │ │ │ │ │ └── src │ │ │ │ │ └── bootstrap.js │ │ │ ├── error │ │ │ │ ├── img │ │ │ │ │ └── icons.png │ │ │ │ └── fonts │ │ │ │ │ ├── icons-.eot │ │ │ │ │ ├── icons-64c061773912345c985cb3365a710a98.eot │ │ │ │ │ ├── icons-64c061773912345c985cb3365a710a98.ttf │ │ │ │ │ └── icons-64c061773912345c985cb3365a710a98.woff │ │ │ └── admin │ │ │ │ ├── images │ │ │ │ ├── bg │ │ │ │ │ ├── 1.png │ │ │ │ │ ├── 2.png │ │ │ │ │ ├── 3.png │ │ │ │ │ ├── 4.png │ │ │ │ │ └── 5.png │ │ │ │ ├── kyrie.png │ │ │ │ ├── logo.png │ │ │ │ ├── attach.png │ │ │ │ ├── favicon.png │ │ │ │ ├── loading.gif │ │ │ │ ├── small │ │ │ │ │ └── bg.jpg │ │ │ │ └── icons │ │ │ │ │ ├── bg-box@2x.png │ │ │ │ │ ├── bg-cd@2x.png │ │ │ │ │ ├── bg-dvd@2x.png │ │ │ │ │ ├── bg-eco@2x.png │ │ │ │ │ ├── bg-hot@2x.png │ │ │ │ │ ├── bg-map@2x.png │ │ │ │ │ ├── bg-pig@2x.png │ │ │ │ │ ├── bg-apple@2x.png │ │ │ │ │ ├── bg-beer@2x.png │ │ │ │ │ ├── bg-books@2x.png │ │ │ │ │ ├── bg-cake@2x.png │ │ │ │ │ ├── bg-chart@2x.png │ │ │ │ │ ├── bg-chat@2x.png │ │ │ │ │ ├── bg-court@2x.png │ │ │ │ │ ├── bg-film@2x.png │ │ │ │ │ ├── bg-grape@2x.png │ │ │ │ │ ├── bg-house@2x.png │ │ │ │ │ ├── bg-like@2x.png │ │ │ │ │ ├── bg-link@2x.png │ │ │ │ │ ├── bg-magic@2x.png │ │ │ │ │ ├── bg-mail@2x.png │ │ │ │ │ ├── bg-notes@2x.png │ │ │ │ │ ├── bg-pulse@2x.png │ │ │ │ │ ├── bg-quote@2x.png │ │ │ │ │ ├── bg-radio@2x.png │ │ │ │ │ ├── bg-share@2x.png │ │ │ │ │ ├── bg-shop@2x.png │ │ │ │ │ ├── bg-sofa@2x.png │ │ │ │ │ ├── bg-tags@2x.png │ │ │ │ │ ├── bg-tape@2x.png │ │ │ │ │ ├── bg-team@2x.png │ │ │ │ │ ├── bg-time@2x.png │ │ │ │ │ ├── bg-video@2x.png │ │ │ │ │ ├── bg-works@2x.png │ │ │ │ │ ├── bg-zoom@2x.png │ │ │ │ │ ├── bg-adjust@2x.png │ │ │ │ │ ├── bg-balance@2x.png │ │ │ │ │ ├── bg-beaker@2x.png │ │ │ │ │ ├── bg-camera@2x.png │ │ │ │ │ ├── bg-cheese@2x.png │ │ │ │ │ ├── bg-commerce@2x.png │ │ │ │ │ ├── bg-delivery@2x.png │ │ │ │ │ ├── bg-document@2x.png │ │ │ │ │ ├── bg-icecream@2x.png │ │ │ │ │ ├── bg-joystick@2x.png │ │ │ │ │ ├── bg-keynote@2x.png │ │ │ │ │ ├── bg-network@2x.png │ │ │ │ │ ├── bg-palette@2x.png │ │ │ │ │ ├── bg-plaster@2x.png │ │ │ │ │ ├── bg-player@2x.png │ │ │ │ │ ├── bg-polaroid@2x.png │ │ │ │ │ ├── bg-printer@2x.png │ │ │ │ │ ├── bg-recorder@2x.png │ │ │ │ │ ├── bg-scissors@2x.png │ │ │ │ │ ├── bg-search@2x.png │ │ │ │ │ ├── bg-select@2x.png │ │ │ │ │ ├── bg-serving@2x.png │ │ │ │ │ ├── bg-shopping@2x.png │ │ │ │ │ ├── bg-social@2x.png │ │ │ │ │ ├── bg-syringe@2x.png │ │ │ │ │ ├── bg-target@2x.png │ │ │ │ │ ├── bg-upload@2x.png │ │ │ │ │ ├── bg-vector@2x.png │ │ │ │ │ ├── bg-walkman@2x.png │ │ │ │ │ ├── bg-winner@2x.png │ │ │ │ │ ├── bg-calcuLator@2x.png │ │ │ │ │ ├── bg-certified@2x.png │ │ │ │ │ ├── bg-champagne@2x.png │ │ │ │ │ ├── bg-mediation@2x.png │ │ │ │ │ ├── bg-microphone@2x.png │ │ │ │ │ ├── bg-smartphone@2x.png │ │ │ │ │ ├── bg-television@2x.png │ │ │ │ │ └── bg-illustration@2x.png │ │ │ │ ├── plugins │ │ │ │ ├── md │ │ │ │ │ ├── img │ │ │ │ │ │ └── editor.png │ │ │ │ │ └── js │ │ │ │ │ │ └── jquery.scrollto.js │ │ │ │ ├── select2.dist.css │ │ │ │ │ ├── select2.png │ │ │ │ │ ├── select2x2.png │ │ │ │ │ └── select2-spinner.gif │ │ │ │ ├── jquery-multi-select │ │ │ │ │ └── img │ │ │ │ │ │ └── switch.png │ │ │ │ └── tagsinput │ │ │ │ │ └── jquery.tagsinput.css │ │ │ │ ├── editormd │ │ │ │ ├── images │ │ │ │ │ ├── loading.gif │ │ │ │ │ ├── logos │ │ │ │ │ │ ├── vi.png │ │ │ │ │ │ ├── editormd-logo-16x16.png │ │ │ │ │ │ ├── editormd-logo-24x24.png │ │ │ │ │ │ ├── editormd-logo-32x32.png │ │ │ │ │ │ ├── editormd-logo-48x48.png │ │ │ │ │ │ ├── editormd-logo-57x57.png │ │ │ │ │ │ ├── editormd-logo-64x64.png │ │ │ │ │ │ ├── editormd-logo-72x72.png │ │ │ │ │ │ ├── editormd-logo-96x96.png │ │ │ │ │ │ ├── editormd-favicon-16x16.ico │ │ │ │ │ │ ├── editormd-favicon-24x24.ico │ │ │ │ │ │ ├── editormd-favicon-32x32.ico │ │ │ │ │ │ ├── editormd-favicon-48x48.ico │ │ │ │ │ │ ├── editormd-favicon-64x64.ico │ │ │ │ │ │ ├── editormd-logo-114x114.png │ │ │ │ │ │ ├── editormd-logo-120x120.png │ │ │ │ │ │ ├── editormd-logo-144x144.png │ │ │ │ │ │ ├── editormd-logo-180x180.png │ │ │ │ │ │ ├── editormd-logo-240x240.png │ │ │ │ │ │ └── editormd-logo-320x320.png │ │ │ │ │ ├── loading@2x.gif │ │ │ │ │ └── loading@3x.gif │ │ │ │ ├── fonts │ │ │ │ │ ├── FontAwesome.otf │ │ │ │ │ ├── editormd-logo.eot │ │ │ │ │ ├── editormd-logo.ttf │ │ │ │ │ ├── editormd-logo.woff │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ ├── fontawesome-webfont.woff2 │ │ │ │ │ └── editormd-logo.svg │ │ │ │ ├── lib │ │ │ │ │ ├── codemirror │ │ │ │ │ │ ├── theme │ │ │ │ │ │ │ ├── ambiance-mobile.css │ │ │ │ │ │ │ ├── neat.css │ │ │ │ │ │ │ ├── elegant.css │ │ │ │ │ │ │ ├── neo.css │ │ │ │ │ │ │ ├── eclipse.css │ │ │ │ │ │ │ ├── cobalt.css │ │ │ │ │ │ │ ├── monokai.css │ │ │ │ │ │ │ ├── rubyblue.css │ │ │ │ │ │ │ ├── night.css │ │ │ │ │ │ │ ├── the-matrix.css │ │ │ │ │ │ │ ├── colorforth.css │ │ │ │ │ │ │ ├── blackboard.css │ │ │ │ │ │ │ ├── 3024-day.css │ │ │ │ │ │ │ └── tomorrow-night-bright.css │ │ │ │ │ │ ├── addon │ │ │ │ │ │ │ ├── display │ │ │ │ │ │ │ │ ├── fullscreen.css │ │ │ │ │ │ │ │ └── fullscreen.js │ │ │ │ │ │ │ ├── search │ │ │ │ │ │ │ │ └── matchesonscrollbar.css │ │ │ │ │ │ │ ├── fold │ │ │ │ │ │ │ │ ├── foldgutter.css │ │ │ │ │ │ │ │ ├── indent-fold.js │ │ │ │ │ │ │ │ └── markdown-fold.js │ │ │ │ │ │ │ ├── dialog │ │ │ │ │ │ │ │ └── dialog.css │ │ │ │ │ │ │ ├── hint │ │ │ │ │ │ │ │ ├── show-hint.css │ │ │ │ │ │ │ │ └── anyword-hint.js │ │ │ │ │ │ │ ├── mode │ │ │ │ │ │ │ │ └── multiplex_test.js │ │ │ │ │ │ │ ├── lint │ │ │ │ │ │ │ │ ├── yaml-lint.js │ │ │ │ │ │ │ │ ├── json-lint.js │ │ │ │ │ │ │ │ ├── css-lint.js │ │ │ │ │ │ │ │ └── coffeescript-lint.js │ │ │ │ │ │ │ ├── edit │ │ │ │ │ │ │ │ └── trailingspace.js │ │ │ │ │ │ │ ├── tern │ │ │ │ │ │ │ │ └── worker.js │ │ │ │ │ │ │ ├── runmode │ │ │ │ │ │ │ │ └── colorize.js │ │ │ │ │ │ │ └── scroll │ │ │ │ │ │ │ │ ├── simplescrollbars.css │ │ │ │ │ │ │ │ └── scrollpastend.js │ │ │ │ │ │ ├── mode │ │ │ │ │ │ │ ├── tiddlywiki │ │ │ │ │ │ │ │ └── tiddlywiki.css │ │ │ │ │ │ │ ├── ruby │ │ │ │ │ │ │ │ └── test.js │ │ │ │ │ │ │ ├── tiki │ │ │ │ │ │ │ │ └── tiki.css │ │ │ │ │ │ │ ├── diff │ │ │ │ │ │ │ │ └── diff.js │ │ │ │ │ │ │ ├── ntriples │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── spreadsheet │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── http │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── solr │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── z80 │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── ecl │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── rust │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── turtle │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── pascal │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── pig │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── vbscript │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── gherkin │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── properties │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── javascript │ │ │ │ │ │ │ │ └── typescript.html │ │ │ │ │ │ │ ├── sass │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── perl │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ ├── idl │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ │ └── dart │ │ │ │ │ │ │ │ └── index.html │ │ │ │ │ │ ├── bower.json │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── package.json │ │ │ │ │ │ └── LICENSE │ │ │ │ │ └── jquery.flowchart.min.js │ │ │ │ ├── scss │ │ │ │ │ ├── lib │ │ │ │ │ │ └── variables.scss │ │ │ │ │ ├── editormd.themes.scss │ │ │ │ │ ├── editormd.grid.scss │ │ │ │ │ ├── editormd.tab.scss │ │ │ │ │ └── prettify.scss │ │ │ │ ├── .jshintrc │ │ │ │ ├── BUGS.md │ │ │ │ ├── bower.json │ │ │ │ ├── LICENSE │ │ │ │ ├── package.json │ │ │ │ ├── css │ │ │ │ │ └── editormd.logo.min.css │ │ │ │ └── plugins │ │ │ │ │ └── test-plugin │ │ │ │ │ └── test-plugin.js │ │ │ │ └── css │ │ │ │ ├── reset.css │ │ │ │ └── contact.css │ │ ├── templates │ │ │ ├── admin │ │ │ │ └── fragments │ │ │ │ │ └── footer.html │ │ │ ├── blog │ │ │ │ ├── fragments │ │ │ │ │ └── footer.html │ │ │ │ └── archives.html │ │ │ └── comm │ │ │ │ └── pagination.html │ │ ├── mapper │ │ │ ├── LogMapper.xml │ │ │ └── OptionMapper.xml │ │ └── application-dev.yml │ └── java │ │ └── com │ │ └── wip │ │ ├── utils │ │ ├── GsonUtils.java │ │ ├── DateKit.java │ │ ├── AdminCommons.java │ │ ├── IPKit.java │ │ ├── APIResponse.java │ │ └── Tools.java │ │ ├── dto │ │ ├── MetaDto.java │ │ ├── BaseDto.java │ │ ├── cond │ │ │ ├── MetaCond.java │ │ │ └── CommentCond.java │ │ ├── StatisticsDto.java │ │ └── AttAchDto.java │ │ ├── MyBlogApplication.java │ │ ├── dao │ │ ├── LogDao.java │ │ ├── OptionDao.java │ │ ├── UserDao.java │ │ ├── AttAchDao.java │ │ ├── RelationShipDao.java │ │ ├── CommentDao.java │ │ ├── ContentDao.java │ │ └── MetaDao.java │ │ ├── constant │ │ ├── LogActions.java │ │ ├── Types.java │ │ └── WebConst.java │ │ ├── model │ │ ├── RelationShipDomain.java │ │ ├── OptionsDomain.java │ │ ├── AttAchDomain.java │ │ └── LogDomain.java │ │ ├── service │ │ ├── log │ │ │ ├── LogService.java │ │ │ └── impl │ │ │ │ └── LogServiceImpl.java │ │ ├── user │ │ │ ├── UserService.java │ │ │ └── impl │ │ │ │ └── UserServiceImpl.java │ │ ├── site │ │ │ └── SiteService.java │ │ ├── option │ │ │ └── OptionService.java │ │ ├── attach │ │ │ └── AttAchService.java │ │ ├── comment │ │ │ └── CommentService.java │ │ └── article │ │ │ └── ContentService.java │ │ ├── interceptor │ │ └── WebMvcConfig.java │ │ └── controller │ │ └── BaseController.java └── test │ └── java │ └── com │ └── wip │ └── MyBlogApplicationTests.java ├── .gitattributes ├── .gitignore └── README.md /src/main/resources/application-prod.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | profiles: 3 | active: dev -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=java 2 | *.css linguist-language=java 3 | *.html linguist-language=java 4 | -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/1.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/bg.png -------------------------------------------------------------------------------- /src/main/resources/static/error/img/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/error/img/icons.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/bg/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/bg/1.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/bg/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/bg/2.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/bg/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/bg/3.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/bg/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/bg/4.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/bg/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/bg/5.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/kyrie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/kyrie.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/logo.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/avatar.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/favicon.ico -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/kyrie.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/kyrie.jpg -------------------------------------------------------------------------------- /src/main/resources/static/error/fonts/icons-.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/error/fonts/icons-.eot -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/attach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/attach.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/favicon.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/favicon1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/favicon1.ico -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/small/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/small/bg.jpg -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/Wechat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/Wechat.jpg -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-px.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/profile.jpg -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-box@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-box@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-cd@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-cd@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-dvd@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-dvd@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-eco@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-eco@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-hot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-hot@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-map@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-map@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-pig@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-pig@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/plugins/md/img/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/plugins/md/img/editor.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-csdn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-csdn.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-email.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-uicn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-uicn.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-weibo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-weibo.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-zhihu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-zhihu.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/profile-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/profile-1.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/vi.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-apple@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-apple@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-beer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-beer@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-books@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-books@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-cake@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-cake@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-chart@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-chart@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-chat@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-chat@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-court@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-court@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-film@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-film@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-grape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-grape@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-house@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-house@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-like@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-like@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-link@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-link@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-magic@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-magic@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-mail@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-mail@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-notes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-notes@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-pulse@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-pulse@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-quote@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-quote@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-radio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-radio@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-share@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-shop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-shop@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-sofa@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-sofa@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-tags@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-tags@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-tape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-tape@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-team@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-team@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-time@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-video@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-video@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-works@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-works@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-zoom@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-zoom@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-behance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-behance.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-github.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-jianshu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-jianshu.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-resume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-resume.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-twitter.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/loading@2x.gif -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/loading@3x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/loading@3x.gif -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-adjust@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-adjust@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-balance@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-balance@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-beaker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-beaker@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-camera@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-camera@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-cheese@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-cheese@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-commerce@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-commerce@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-delivery@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-delivery@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-document@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-document@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-icecream@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-icecream@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-joystick@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-joystick@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-keynote@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-keynote@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-network@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-network@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-palette@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-palette@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-plaster@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-plaster@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-player@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-player@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-polaroid@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-polaroid@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-printer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-printer@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-recorder@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-recorder@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-scissors@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-scissors@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-search@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-select@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-select@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-serving@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-serving@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-shopping@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-shopping@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-social@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-social@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-syringe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-syringe@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-target@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-target@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-upload@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-upload@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-vector@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-vector@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-walkman@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-walkman@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-winner@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-winner@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-dribbble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-dribbble.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/image/social/icon-instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/image/social/icon-instagram.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/editormd-logo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/editormd-logo.eot -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/editormd-logo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/editormd-logo.ttf -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/editormd-logo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/editormd-logo.woff -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-calcuLator@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-calcuLator@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-certified@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-certified@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-champagne@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-champagne@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-mediation@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-mediation@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-microphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-microphone@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-smartphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-smartphone@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-television@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-television@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/images/icons/bg-illustration@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/images/icons/bg-illustration@2x.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/plugins/select2.dist.css/select2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/plugins/select2.dist.css/select2.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/admin/plugins/select2.dist.css/select2x2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/plugins/select2.dist.css/select2x2.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/static/admin/plugins/jquery-multi-select/img/switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/plugins/jquery-multi-select/img/switch.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-16x16.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-24x24.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-32x32.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-48x48.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-57x57.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-64x64.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-72x72.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-96x96.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/ambiance-mobile.css: -------------------------------------------------------------------------------- 1 | .cm-s-ambiance.CodeMirror { 2 | -webkit-box-shadow: none; 3 | -moz-box-shadow: none; 4 | box-shadow: none; 5 | } 6 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/plugins/select2.dist.css/select2-spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/plugins/select2.dist.css/select2-spinner.gif -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-favicon-16x16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-favicon-16x16.ico -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-favicon-24x24.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-favicon-24x24.ico -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-favicon-32x32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-favicon-32x32.ico -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-favicon-48x48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-favicon-48x48.ico -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-favicon-64x64.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-favicon-64x64.ico -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-114x114.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-120x120.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-144x144.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-180x180.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-240x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-240x240.png -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/images/logos/editormd-logo-320x320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/admin/editormd/images/logos/editormd-logo-320x320.png -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/error/fonts/icons-64c061773912345c985cb3365a710a98.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/error/fonts/icons-64c061773912345c985cb3365a710a98.eot -------------------------------------------------------------------------------- /src/main/resources/static/error/fonts/icons-64c061773912345c985cb3365a710a98.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/error/fonts/icons-64c061773912345c985cb3365a710a98.ttf -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/error/fonts/icons-64c061773912345c985cb3365a710a98.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/error/fonts/icons-64c061773912345c985cb3365a710a98.woff -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Header set Access-Control-Allow-Origin "*" 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/display/fullscreen.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-fullscreen { 2 | position: fixed; 3 | top: 0; left: 0; right: 0; bottom: 0; 4 | height: auto; 5 | z-index: 9; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/littleworlf/Blog/HEAD/src/main/resources/static/blog/font-awesome/4.6.2/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/search/matchesonscrollbar.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-search-match { 2 | background: gold; 3 | border-top: 1px solid orange; 4 | border-bottom: 1px solid orange; 5 | -moz-box-sizing: border-box; 6 | box-sizing: border-box; 7 | opacity: .5; 8 | } 9 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/scss/lib/variables.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | // Global Variables 4 | 5 | $prefix : ".editormd-"; 6 | $color : #666; 7 | $mainColor : #2196F3; 8 | $primaryColor : $mainColor; 9 | $secondColor : #33CC66; 10 | $thirdColor : #999999; 11 | $borderColor : #ddd; -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/tiddlywiki/tiddlywiki.css: -------------------------------------------------------------------------------- 1 | span.cm-underlined { 2 | text-decoration: underline; 3 | } 4 | span.cm-strikethrough { 5 | text-decoration: line-through; 6 | } 7 | span.cm-brace { 8 | color: #170; 9 | font-weight: bold; 10 | } 11 | span.cm-table { 12 | color: blue; 13 | font-weight: bold; 14 | } 15 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version":"5.0.0", 4 | "main": ["lib/codemirror.js", "lib/codemirror.css"], 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components", 9 | "bin", 10 | "demo", 11 | "doc", 12 | "test", 13 | "index.html", 14 | "package.json" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "bitwise": true, 4 | "camelcase": true, 5 | "curly": true, 6 | "eqeqeq": true, 7 | "immed": true, 8 | "indent": 4, 9 | "latedef": true, 10 | "newcap": true, 11 | "noarg": true, 12 | "quotmark": "double", 13 | "regexp": true, 14 | "undef": true, 15 | "unused": true, 16 | "strict": true, 17 | "trailing": true, 18 | "smarttabs": true, 19 | "white": true 20 | } -------------------------------------------------------------------------------- /src/main/java/com/wip/utils/GsonUtils.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/24 11:46 5 | **/ 6 | package com.wip.utils; 7 | 8 | import com.google.gson.Gson; 9 | 10 | /** 11 | * json转换工具 12 | */ 13 | public class GsonUtils { 14 | private static final Gson gson = new Gson(); 15 | 16 | public static String toJsonString(Object object) { 17 | return object == null ? null : gson.toJson(object); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/BUGS.md: -------------------------------------------------------------------------------- 1 | #Bugs 2 | 3 | > 说明:删除线表示已经解决。 4 | 5 | ####IE8 6 | 7 | - ~~不能加载;~~ 8 | - flowChart(流程图)、sequenceDiagram(序列图)不支持IE8; 9 | - ~~不支持Markdown转HTML页面解析预览;~~ 10 | 11 | ####IE8 & IE9 & IE10 12 | 13 | - KaTeX会出现解析错误,但不影响程序运行; 14 | 15 | ####Sea.js 16 | 17 | - ~~Raphael.js无法加载;~~ 18 | 19 | ####Require.js 20 | 21 | - ~~CodeMirror编辑器的代码无法高亮;~~ 22 | - ~~sequenceDiagram不支持: `Uncaught TypeError: Cannot call method 'isArray' of undefined.`~~ 23 | -------------------------------------------------------------------------------- /src/test/java/com/wip/MyBlogApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.wip; 2 | 3 | import com.wip.utils.Commons; 4 | import org.junit.Test; 5 | import org.junit.runner.RunWith; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | import org.springframework.test.context.junit4.SpringRunner; 8 | 9 | @RunWith(SpringRunner.class) 10 | @SpringBootTest 11 | public class MyBlogApplicationTests { 12 | 13 | @Test 14 | public void contextLoads() { 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dto/MetaDto.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/24 16:59 5 | **/ 6 | package com.wip.dto; 7 | 8 | import com.wip.model.MetaDomain; 9 | 10 | /** 11 | * 标签、分类列表 12 | */ 13 | public class MetaDto extends MetaDomain { 14 | 15 | private int count; 16 | 17 | public int getCount() { 18 | return count; 19 | } 20 | 21 | public void setCount(int count) { 22 | this.count = count; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dto/BaseDto.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/8/3 16:30 5 | **/ 6 | package com.wip.dto; 7 | 8 | /** 9 | * 公共属性的类 10 | */ 11 | public class BaseDto { 12 | 13 | /** 14 | * 用户名 15 | */ 16 | private String userName; 17 | 18 | public void setUserName(String userName) { 19 | this.userName = userName; 20 | } 21 | 22 | public String getUserName() { 23 | return userName; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.js linguist-language=java 2 | *.css linguist-language=java 3 | *.html linguist-language=java 4 | target/ 5 | !.mvn/wrapper/maven-wrapper.jar 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | .mvn 22 | mvnw 23 | mvnw.cmd 24 | 25 | ### NetBeans ### 26 | /nbproject/private/ 27 | /build/ 28 | /nbbuild/ 29 | /dist/ 30 | /nbdist/ 31 | /.nb-gradle/ 32 | -------------------------------------------------------------------------------- /src/main/java/com/wip/MyBlogApplication.java: -------------------------------------------------------------------------------- 1 | package com.wip; 2 | 3 | import org.mybatis.spring.annotation.MapperScan; 4 | import org.springframework.boot.SpringApplication; 5 | import org.springframework.boot.autoconfigure.SpringBootApplication; 6 | import org.springframework.cache.annotation.EnableCaching; 7 | 8 | @SpringBootApplication 9 | @MapperScan("com.wip.dao") 10 | //@EnableCaching 11 | public class MyBlogApplication { 12 | 13 | public static void main(String[] args) { 14 | SpringApplication.run(MyBlogApplication.class, args); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "editor.md", 3 | "version": "1.5.0", 4 | "homepage": "https://github.com/pandao/editor.md", 5 | "authors": [ 6 | "Pandao " 7 | ], 8 | "description": "Open source online markdown editor.", 9 | "keywords": [ 10 | "editor.md", 11 | "markdown", 12 | "editor" 13 | ], 14 | "license": "MIT", 15 | "ignore": [ 16 | "**/.*", 17 | "research", 18 | "docs", 19 | "node_modules", 20 | "bower_components", 21 | "test", 22 | "tests" 23 | ] 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/fold/foldgutter.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-foldmarker { 2 | color: blue; 3 | text-shadow: #b9f 1px 1px 2px, #b9f -1px -1px 2px, #b9f 1px -1px 2px, #b9f -1px 1px 2px; 4 | font-family: arial; 5 | line-height: .3; 6 | cursor: pointer; 7 | } 8 | .CodeMirror-foldgutter { 9 | width: .7em; 10 | } 11 | .CodeMirror-foldgutter-open, 12 | .CodeMirror-foldgutter-folded { 13 | cursor: pointer; 14 | } 15 | .CodeMirror-foldgutter-open:after { 16 | content: "\25BE"; 17 | } 18 | .CodeMirror-foldgutter-folded:after { 19 | content: "\25B8"; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/ruby/test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | var mode = CodeMirror.getMode({indentUnit: 2}, "ruby"); 6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 7 | 8 | MT("divide_equal_operator", 9 | "[variable bar] [operator /=] [variable foo]"); 10 | 11 | MT("divide_equal_operator_no_spacing", 12 | "[variable foo][operator /=][number 42]"); 13 | 14 | })(); 15 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/LogDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/23 17:07 5 | **/ 6 | package com.wip.dao; 7 | 8 | 9 | import com.wip.model.LogDomain; 10 | import org.apache.ibatis.annotations.Mapper; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * 日志dao层接口 16 | */ 17 | @Mapper 18 | public interface LogDao { 19 | 20 | /** 21 | * 添加日志 22 | * @param logDomain 23 | * @return 24 | */ 25 | int addLog(LogDomain logDomain); 26 | 27 | /** 28 | * 获取日志 29 | * @return 30 | */ 31 | List getLogs(); 32 | } 33 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/tiki/tiki.css: -------------------------------------------------------------------------------- 1 | .cm-tw-syntaxerror { 2 | color: #FFF; 3 | background-color: #900; 4 | } 5 | 6 | .cm-tw-deleted { 7 | text-decoration: line-through; 8 | } 9 | 10 | .cm-tw-header5 { 11 | font-weight: bold; 12 | } 13 | .cm-tw-listitem:first-child { /*Added first child to fix duplicate padding when highlighting*/ 14 | padding-left: 10px; 15 | } 16 | 17 | .cm-tw-box { 18 | border-top-width: 0px ! important; 19 | border-style: solid; 20 | border-width: 1px; 21 | border-color: inherit; 22 | } 23 | 24 | .cm-tw-underline { 25 | text-decoration: underline; 26 | } -------------------------------------------------------------------------------- /src/main/java/com/wip/constant/LogActions.java: -------------------------------------------------------------------------------- 1 | package com.wip.constant; 2 | 3 | /** 4 | * 日志表的action字段 5 | */ 6 | public enum LogActions { 7 | 8 | LOGIN("登录后台"), 9 | UP_PWD("修改密码"), 10 | UP_INFO("修改个人信息"), 11 | DEL_ARTICLE("删除文章"), 12 | SYS_SETTING("保存系统设置"), 13 | DEL_ATTACH("删除附件"); 14 | 15 | private String action; 16 | 17 | public String getAction() { 18 | return action; 19 | } 20 | 21 | public void setAction(String action) { 22 | this.action = action; 23 | } 24 | 25 | LogActions(String action) { 26 | this.action = action; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/resources/static/blog/js/schemes/pisces.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | var $headerInner = $('.header-inner'); 3 | var $sidebar = $('#sidebar'); 4 | var getSidebarTop = function(){ 5 | return $headerInner.height() + CONFIG.sidebar.offset; 6 | }; 7 | var setSidebarMarginTop = function(sidebarTop){ 8 | return $sidebar.css({ 'margin-top': sidebarTop }); 9 | }; 10 | var mql = window.matchMedia('(min-width: 991px)'); 11 | setSidebarMarginTop(getSidebarTop()).show(); 12 | mql.addListener(function(e){ 13 | if(e.matches){ 14 | setSidebarMarginTop(getSidebarTop()); 15 | } 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/scss/editormd.themes.scss: -------------------------------------------------------------------------------- 1 | /* Editor.md Dark theme */ 2 | 3 | #{$prefix}theme-dark { 4 | border-color: #1a1a17; 5 | 6 | #{$prefix}toolbar { 7 | background: #1A1A17; 8 | border-color: #1a1a17; 9 | } 10 | 11 | #{$prefix}menu > li > a { 12 | color: #777; 13 | border-color: #1a1a17; 14 | 15 | &:hover, &.active { 16 | border-color: #333; 17 | background: #333; 18 | } 19 | } 20 | 21 | #{$prefix}menu > li.divider { 22 | border-right: 1px solid #111; 23 | } 24 | 25 | .CodeMirror { 26 | border-right: 1px solid rgba(0,0,0,0.1); 27 | } 28 | } -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/dialog/dialog.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-dialog { 2 | position: absolute; 3 | left: 0; right: 0; 4 | background: white; 5 | z-index: 15; 6 | padding: .1em .8em; 7 | overflow: hidden; 8 | color: #333; 9 | } 10 | 11 | .CodeMirror-dialog-top { 12 | border-bottom: 1px solid #eee; 13 | top: 0; 14 | } 15 | 16 | .CodeMirror-dialog-bottom { 17 | border-top: 1px solid #eee; 18 | bottom: 0; 19 | } 20 | 21 | .CodeMirror-dialog input { 22 | border: none; 23 | outline: none; 24 | background: transparent; 25 | width: 20em; 26 | color: inherit; 27 | font-family: monospace; 28 | } 29 | 30 | .CodeMirror-dialog button { 31 | font-size: 70%; 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dto/cond/MetaCond.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/24 16:59 5 | **/ 6 | package com.wip.dto.cond; 7 | 8 | /** 9 | * Meta查询条件 10 | */ 11 | public class MetaCond { 12 | 13 | /** 14 | * 名称 15 | */ 16 | private String name; 17 | 18 | /** 19 | * 类型 20 | */ 21 | private String type; 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | public String getName() { 28 | return name; 29 | } 30 | 31 | public void setType(String type) { 32 | this.type = type; 33 | } 34 | 35 | public String getType() { 36 | return type; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/wip/model/RelationShipDomain.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Administrator 4 | * DateTime: 2018/7/24 23:03 5 | **/ 6 | package com.wip.model; 7 | 8 | /** 9 | * 文章关联信息表 10 | */ 11 | public class RelationShipDomain { 12 | 13 | /** 14 | * 文章主键 15 | */ 16 | private Integer cid; 17 | 18 | /** 19 | * 项目编号 20 | */ 21 | private Integer mid; 22 | 23 | public Integer getCid() { 24 | return cid; 25 | } 26 | 27 | public void setCid(Integer cid) { 28 | this.cid = cid; 29 | } 30 | 31 | public Integer getMid() { 32 | return mid; 33 | } 34 | 35 | public void setMid(Integer mid) { 36 | this.mid = mid; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/OptionDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Administrator 4 | * DateTime: 2018/7/27 21:56 5 | **/ 6 | package com.wip.dao; 7 | 8 | import com.wip.model.OptionsDomain; 9 | import org.apache.ibatis.annotations.Mapper; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * 网站选项相关Dao接口 15 | */ 16 | @Mapper 17 | public interface OptionDao { 18 | 19 | /** 20 | * 获取网站全部信息 21 | * @return 22 | */ 23 | List getOptions(); 24 | 25 | /** 26 | * 更新网站配置 27 | * @param option 28 | */ 29 | void updateOptionByName(OptionsDomain option); 30 | 31 | /** 32 | * 通过名称网站配置 33 | * @param name 34 | * @return 35 | */ 36 | OptionsDomain getOptionByName(String name); 37 | } 38 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/fragments/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/log/LogService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/23 16:57 5 | **/ 6 | package com.wip.service.log; 7 | 8 | 9 | import com.github.pagehelper.PageInfo; 10 | import com.wip.model.LogDomain; 11 | 12 | /** 13 | * 日志相关Service接口 14 | */ 15 | public interface LogService { 16 | 17 | /** 18 | * 添加日志 19 | * @param action 触发动作 20 | * @param data 产生数据 21 | * @param ip 产生IP 22 | * @param authorId 产生人 23 | */ 24 | void addLog(String action, String data, String ip, Integer authorId); 25 | 26 | /** 27 | * 获取日志 28 | * @param pageNum 29 | * @param pageSize 30 | * @return 31 | */ 32 | PageInfo getLogs(int pageNum, int pageSize); 33 | } 34 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/neat.css: -------------------------------------------------------------------------------- 1 | .cm-s-neat span.cm-comment { color: #a86; } 2 | .cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; } 3 | .cm-s-neat span.cm-string { color: #a22; } 4 | .cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; } 5 | .cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; } 6 | .cm-s-neat span.cm-variable { color: black; } 7 | .cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; } 8 | .cm-s-neat span.cm-meta {color: #555;} 9 | .cm-s-neat span.cm-link { color: #3a3; } 10 | 11 | .cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;} 12 | .cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 13 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/user/UserService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/23 14:26 5 | **/ 6 | package com.wip.service.user; 7 | 8 | import com.wip.model.UserDomain; 9 | 10 | /** 11 | * 用户相关Service接口 12 | */ 13 | public interface UserService { 14 | 15 | /** 16 | * 用户登录 17 | * @param username 用户名 18 | * @param password 密码 19 | * @return 20 | */ 21 | UserDomain login(String username, String password); 22 | 23 | /** 24 | * 通过用户ID获取用户信息 25 | * @param uid 主键 26 | * @return 27 | */ 28 | UserDomain getUserInfoById(Integer uid); 29 | 30 | /** 31 | * 更改用户信息 32 | * @param user user对象 33 | * @return 34 | */ 35 | int updateUserInfo(UserDomain user); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/UserDao.java: -------------------------------------------------------------------------------- 1 | package com.wip.dao; 2 | 3 | import com.wip.model.UserDomain; 4 | import org.apache.ibatis.annotations.Mapper; 5 | import org.apache.ibatis.annotations.Param; 6 | 7 | /** 8 | * 用户dao层接口 9 | */ 10 | @Mapper 11 | public interface UserDao { 12 | 13 | /** 14 | * 根据用户名密码获取用户信息 15 | * @param username 用户名 16 | * @param password 密码 17 | * @return 18 | */ 19 | UserDomain getUserInfoByCond(@Param("username") String username, @Param("password") String password); 20 | 21 | /** 22 | * 通过用户ID获取用户信息 23 | * @param uid 24 | * @return 25 | */ 26 | UserDomain getUserInfoById(Integer uid); 27 | 28 | /** 29 | * 更改用户信息 30 | * @param user 31 | * @return 32 | */ 33 | int updateUserInfo(UserDomain user); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/site/SiteService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/8/2 8:48 5 | **/ 6 | package com.wip.service.site; 7 | 8 | import com.wip.dto.StatisticsDto; 9 | import com.wip.model.CommentDomain; 10 | import com.wip.model.ContentDomain; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * 网站相关Service接口 16 | */ 17 | public interface SiteService { 18 | 19 | /** 20 | * 获取评论列表 21 | * @param limit 22 | * @return 23 | */ 24 | List getComments(int limit); 25 | 26 | /** 27 | * 获取文章列表 28 | * @param limit 29 | * @return 30 | */ 31 | List getNewArticles(int limit); 32 | 33 | /** 34 | * 获取后台统计数 35 | * @return 36 | */ 37 | StatisticsDto getStatistics(); 38 | } 39 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/elegant.css: -------------------------------------------------------------------------------- 1 | .cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;} 2 | .cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;} 3 | .cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;} 4 | .cm-s-elegant span.cm-variable {color: black;} 5 | .cm-s-elegant span.cm-variable-2 {color: #b11;} 6 | .cm-s-elegant span.cm-qualifier {color: #555;} 7 | .cm-s-elegant span.cm-keyword {color: #730;} 8 | .cm-s-elegant span.cm-builtin {color: #30a;} 9 | .cm-s-elegant span.cm-link {color: #762;} 10 | .cm-s-elegant span.cm-error {background-color: #fdd;} 11 | 12 | .cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;} 13 | .cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 14 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/README.md: -------------------------------------------------------------------------------- 1 | # CodeMirror 2 | [![Build Status](https://travis-ci.org/codemirror/CodeMirror.svg)](https://travis-ci.org/codemirror/CodeMirror) 3 | [![NPM version](https://img.shields.io/npm/v/codemirror.svg)](https://www.npmjs.org/package/codemirror) 4 | [Funding status: ![maintainer happiness](https://marijnhaverbeke.nl/fund/status_s.png)](https://marijnhaverbeke.nl/fund/) 5 | 6 | CodeMirror is a JavaScript component that provides a code editor in 7 | the browser. When a mode is available for the language you are coding 8 | in, it will color your code, and optionally help with indentation. 9 | 10 | The project page is http://codemirror.net 11 | The manual is at http://codemirror.net/doc/manual.html 12 | The contributing guidelines are in [CONTRIBUTING.md](https://github.com/codemirror/CodeMirror/blob/master/CONTRIBUTING.md) 13 | -------------------------------------------------------------------------------- /src/main/java/com/wip/interceptor/WebMvcConfig.java: -------------------------------------------------------------------------------- 1 | package com.wip.interceptor; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.stereotype.Component; 6 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 8 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 9 | 10 | /** 11 | * 向MVC中添加自定义组件 12 | */ 13 | @Component 14 | public class WebMvcConfig extends WebMvcConfigurerAdapter { 15 | 16 | @Autowired 17 | private BaseInterceptor baseInterceptor; 18 | 19 | 20 | @Override 21 | public void addInterceptors(InterceptorRegistry registry) { 22 | // 注册拦截器 23 | registry.addInterceptor(baseInterceptor); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/hint/show-hint.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-hints { 2 | position: absolute; 3 | z-index: 10; 4 | overflow: hidden; 5 | list-style: none; 6 | 7 | margin: 0; 8 | padding: 2px; 9 | 10 | -webkit-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 11 | -moz-box-shadow: 2px 3px 5px rgba(0,0,0,.2); 12 | box-shadow: 2px 3px 5px rgba(0,0,0,.2); 13 | border-radius: 3px; 14 | border: 1px solid silver; 15 | 16 | background: white; 17 | font-size: 90%; 18 | font-family: monospace; 19 | 20 | max-height: 20em; 21 | overflow-y: auto; 22 | } 23 | 24 | .CodeMirror-hint { 25 | margin: 0; 26 | padding: 0 4px; 27 | border-radius: 2px; 28 | max-width: 19em; 29 | overflow: hidden; 30 | white-space: pre; 31 | color: black; 32 | cursor: pointer; 33 | } 34 | 35 | li.CodeMirror-hint-active { 36 | background: #08f; 37 | color: white; 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/option/OptionService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Administrator 4 | * DateTime: 2018/7/27 21:55 5 | **/ 6 | package com.wip.service.option; 7 | 8 | import com.wip.model.OptionsDomain; 9 | 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | /** 14 | * 网站选项相关Service接口 15 | */ 16 | public interface OptionService { 17 | 18 | /** 19 | * 获取全部网站配置 20 | * @return 21 | */ 22 | List getOptions(); 23 | 24 | /** 25 | * 保存系统设置 26 | * @param querys 27 | */ 28 | void saveOptions(Map querys); 29 | 30 | /** 31 | * 更新网站配置 32 | * @param s 33 | * @param s1 34 | */ 35 | void updateOptionByName(String name, String value); 36 | 37 | /** 38 | * 通过名称获取网站配置 39 | * @param site_record 40 | * @return 41 | */ 42 | OptionsDomain getOptionByName(String site_record); 43 | } 44 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/scss/editormd.grid.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .editormd-grid-table { 4 | width: 99%; 5 | display: table; 6 | border: 1px solid #ddd; 7 | border-collapse: collapse; 8 | } 9 | 10 | .editormd-grid-table-row { 11 | width: 100%; 12 | display: table-row; 13 | 14 | a { 15 | font-size: 1.4em; 16 | width: 5%; 17 | height: 36px; 18 | color: #999; 19 | text-align: center; 20 | display: table-cell; 21 | vertical-align: middle; 22 | border: 1px solid #ddd; 23 | text-decoration: none; 24 | @include transition(background-color 300ms ease-out, color 100ms ease-in); 25 | 26 | &.selected { 27 | color: #666; 28 | background-color: #eee; 29 | } 30 | 31 | &:hover { 32 | color: #777; 33 | background-color: #f6f6f6; 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /src/main/java/com/wip/service/attach/AttAchService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/8/3 16:23 5 | **/ 6 | package com.wip.service.attach; 7 | 8 | import com.github.pagehelper.PageInfo; 9 | import com.wip.dto.AttAchDto; 10 | import com.wip.model.AttAchDomain; 11 | 12 | /** 13 | * 文件相关接口 14 | */ 15 | public interface AttAchService { 16 | 17 | /** 18 | * 添加单个附件信息 19 | * @param attAchDomain 20 | */ 21 | void addAttAch(AttAchDomain attAchDomain); 22 | 23 | /** 24 | * 获取所有的附件信息 25 | * @param pageNum 26 | * @param pageSize 27 | * @return 28 | */ 29 | PageInfo getAtts(int pageNum, int pageSize); 30 | 31 | /** 32 | * 通过ID获取附件信息 33 | * @param id 34 | * @return 35 | */ 36 | AttAchDto getAttAchById(Integer id); 37 | 38 | /** 39 | * 通过ID删除附件信息 40 | * @param id 41 | */ 42 | void deleteAttAch(Integer id); 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/com/wip/utils/DateKit.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/26 15:48 5 | **/ 6 | package com.wip.utils; 7 | 8 | import java.text.SimpleDateFormat; 9 | import java.util.Date; 10 | 11 | /** 12 | * 时间工具类 13 | */ 14 | public class DateKit { 15 | 16 | 17 | 18 | public static String formatDateByUnixTime(long unixTime, String dateFormat) { 19 | return dateFormat(new Date(unixTime * 1000L), dateFormat); 20 | } 21 | 22 | public static String dateFormat(Date date, String dateFormat) { 23 | if (date != null) { 24 | SimpleDateFormat format = new SimpleDateFormat(dateFormat); 25 | return format.format(date); 26 | } 27 | return ""; 28 | } 29 | 30 | public static int getCurrentUnixTime() { 31 | return getUnixTimeByDate(new Date()); 32 | } 33 | 34 | public static int getUnixTimeByDate(Date date) { 35 | return (int)(date.getTime() / 1000L); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/com/wip/model/OptionsDomain.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Administrator 4 | * DateTime: 2018/7/27 21:52 5 | **/ 6 | package com.wip.model; 7 | 8 | /** 9 | * 网站配置项 10 | */ 11 | public class OptionsDomain { 12 | 13 | /** 14 | * 名称 15 | */ 16 | private String name; 17 | /** 18 | * 内容 19 | */ 20 | private String value; 21 | 22 | /** 23 | * 描述 24 | */ 25 | private String description; 26 | 27 | public String getName() { 28 | return name; 29 | } 30 | 31 | public void setName(String name) { 32 | this.name = name; 33 | } 34 | 35 | public String getValue() { 36 | return value; 37 | } 38 | 39 | public void setValue(String value) { 40 | this.value = value; 41 | } 42 | 43 | public String getDescription() { 44 | return description; 45 | } 46 | 47 | public void setDescription(String description) { 48 | this.description = description; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/mode/multiplex_test.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function() { 5 | CodeMirror.defineMode("markdown_with_stex", function(){ 6 | var inner = CodeMirror.getMode({}, "stex"); 7 | var outer = CodeMirror.getMode({}, "markdown"); 8 | 9 | var innerOptions = { 10 | open: '$', 11 | close: '$', 12 | mode: inner, 13 | delimStyle: 'delim', 14 | innerStyle: 'inner' 15 | }; 16 | 17 | return CodeMirror.multiplexingMode(outer, innerOptions); 18 | }); 19 | 20 | var mode = CodeMirror.getMode({}, "markdown_with_stex"); 21 | 22 | function MT(name) { 23 | test.mode( 24 | name, 25 | mode, 26 | Array.prototype.slice.call(arguments, 1), 27 | 'multiplexing'); 28 | } 29 | 30 | MT( 31 | "stexInsideMarkdown", 32 | "[strong **Equation:**] [delim $][inner&tag \\pi][delim $]"); 33 | })(); 34 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codemirror", 3 | "version":"5.0.0", 4 | "main": "lib/codemirror.js", 5 | "description": "In-browser code editing made bearable", 6 | "licenses": [{"type": "MIT", 7 | "url": "http://codemirror.net/LICENSE"}], 8 | "directories": {"lib": "./lib"}, 9 | "scripts": {"test": "node ./test/run.js"}, 10 | "devDependencies": {"node-static": "0.6.0", 11 | "phantomjs": "1.9.2-5", 12 | "blint": ">=0.1.1"}, 13 | "bugs": "http://github.com/codemirror/CodeMirror/issues", 14 | "keywords": ["JavaScript", "CodeMirror", "Editor"], 15 | "homepage": "http://codemirror.net", 16 | "maintainers":[{"name": "Marijn Haverbeke", 17 | "email": "marijnh@gmail.com", 18 | "web": "http://marijnhaverbeke.nl"}], 19 | "repository": {"type": "git", 20 | "url": "https://github.com/codemirror/CodeMirror.git"} 21 | } 22 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/lint/yaml-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | // Depends on js-yaml.js from https://github.com/nodeca/js-yaml 15 | 16 | // declare global: jsyaml 17 | 18 | CodeMirror.registerHelper("lint", "yaml", function(text) { 19 | var found = []; 20 | try { jsyaml.load(text); } 21 | catch(e) { 22 | var loc = e.mark; 23 | found.push({ from: CodeMirror.Pos(loc.line, loc.column), to: CodeMirror.Pos(loc.line, loc.column), message: e.message }); 24 | } 25 | return found; 26 | }); 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /src/main/resources/templates/blog/fragments/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 24 |
25 | 26 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/AttAchDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/8/3 16:25 5 | **/ 6 | package com.wip.dao; 7 | 8 | import com.wip.dto.AttAchDto; 9 | import com.wip.model.AttAchDomain; 10 | import org.apache.ibatis.annotations.Mapper; 11 | import org.apache.ibatis.annotations.Param; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 文件相关Dao接口 17 | */ 18 | @Mapper 19 | public interface AttAchDao { 20 | 21 | /** 22 | * 添加单个附件文件 23 | * @param attAchDomain 24 | */ 25 | void addAttAch(AttAchDomain attAchDomain); 26 | 27 | /** 28 | * 获取所有的附件信息 29 | * @return 30 | */ 31 | List getAtts(); 32 | 33 | /** 34 | * 获取附件总数 35 | * @return 36 | */ 37 | Long getAttAchCount(); 38 | 39 | /** 40 | * 通过ID获取附件信息 41 | * @param id 42 | * @return 43 | */ 44 | AttAchDto getAttAchById(@Param("id") Integer id); 45 | 46 | /** 47 | * 通过ID删除附件信息 48 | * @param id 49 | */ 50 | void deleteAttAch(@Param("id") Integer id); 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/wip/constant/Types.java: -------------------------------------------------------------------------------- 1 | package com.wip.constant; 2 | 3 | import com.wip.model.ContentDomain; 4 | 5 | /** 6 | * Created by IntelliJ IDEA. 7 | * User: Kyrie 8 | * DateTime: 2018/7/23 10:57 9 | **/ 10 | public enum Types { 11 | 12 | // 分类 13 | CATEGORY("category"), 14 | // 标签 15 | TAG("tag"), 16 | // 文章 17 | ARTICLE("post"), 18 | // csrf_token 19 | CSRF_TOKEN("csrf_token"), 20 | // 友情链接 21 | LINK("link"), 22 | // 评论 23 | COMMENTS_FREQUENCY("comments:frequency"), 24 | // 图片 25 | IMAGE("image"), 26 | // 文件 27 | FILE("file"), 28 | /** 29 | * 附件存在的URL,默认为网站地址,如集成第三方则为第三方CND域名 30 | */ 31 | // ATTACH_URL("attach_url"); 32 | ATTACH_URL("http://pb84kab39.bkt.clouddn.com/"); 33 | 34 | private String type; 35 | 36 | public java.lang.String getType() { 37 | return type; 38 | } 39 | 40 | public void setType(java.lang.String type) { 41 | this.type = type; 42 | } 43 | 44 | Types(java.lang.String type) { 45 | this.type = type; 46 | } 47 | } 48 | 49 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/fonts/editormd-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/lint/json-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on jsonlint.js from https://github.com/zaach/jsonlint 5 | 6 | // declare global: jsonlint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "json", function(text) { 19 | var found = []; 20 | jsonlint.parseError = function(str, hash) { 21 | var loc = hash.loc; 22 | found.push({from: CodeMirror.Pos(loc.first_line - 1, loc.first_column), 23 | to: CodeMirror.Pos(loc.last_line - 1, loc.last_column), 24 | message: str}); 25 | }; 26 | try { jsonlint.parse(text); } 27 | catch(e) {} 28 | return found; 29 | }); 30 | 31 | }); 32 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/neo.css: -------------------------------------------------------------------------------- 1 | /* neo theme for codemirror */ 2 | 3 | /* Color scheme */ 4 | 5 | .cm-s-neo.CodeMirror { 6 | background-color:#ffffff; 7 | color:#2e383c; 8 | line-height:1.4375; 9 | } 10 | .cm-s-neo .cm-comment {color:#75787b} 11 | .cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3} 12 | .cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a} 13 | .cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328} 14 | .cm-s-neo .cm-string {color:#b35e14} 15 | .cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65} 16 | 17 | 18 | /* Editor styling */ 19 | 20 | .cm-s-neo pre { 21 | padding:0; 22 | } 23 | 24 | .cm-s-neo .CodeMirror-gutters { 25 | border:none; 26 | border-right:10px solid transparent; 27 | background-color:transparent; 28 | } 29 | 30 | .cm-s-neo .CodeMirror-linenumber { 31 | padding:0; 32 | color:#e0e2e5; 33 | } 34 | 35 | .cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; } 36 | .cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; } 37 | 38 | .cm-s-neo div.CodeMirror-cursor { 39 | width: auto; 40 | border: 0; 41 | background: rgba(155,157,162,0.37); 42 | z-index: 1; 43 | } 44 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/edit/trailingspace.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | CodeMirror.defineOption("showTrailingSpace", false, function(cm, val, prev) { 13 | if (prev == CodeMirror.Init) prev = false; 14 | if (prev && !val) 15 | cm.removeOverlay("trailingspace"); 16 | else if (!prev && val) 17 | cm.addOverlay({ 18 | token: function(stream) { 19 | for (var l = stream.string.length, i = l; i && /\s/.test(stream.string.charAt(i - 1)); --i) {} 20 | if (i > stream.pos) { stream.pos = i; return null; } 21 | stream.pos = l; 22 | return "trailingspace"; 23 | }, 24 | name: "trailingspace" 25 | }); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /src/main/resources/templates/comm/pagination.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 pandao 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "editor.md", 3 | "version": "1.5.0", 4 | "description": "Open source online markdown editor.", 5 | "directories": { 6 | "doc": "docs", 7 | "example": "examples", 8 | "test": "tests" 9 | }, 10 | "scripts": { 11 | "test": "echo \"Error: no test specified\" && exit 1" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/pandao/editor.md.git" 16 | }, 17 | "keywords": [ 18 | "editor.md", 19 | "markdown", 20 | "editor" 21 | ], 22 | "author": "Pandao", 23 | "license": "MIT", 24 | "bugs": { 25 | "url": "https://github.com/pandao/editor.md/issues" 26 | }, 27 | "homepage": "https://github.com/pandao/editor.md", 28 | "devDependencies": { 29 | "dateformatter": "^0.1.0", 30 | "gulp": "^3.8.11", 31 | "gulp-concat": "^2.4.2", 32 | "gulp-header": "^1.2.2", 33 | "gulp-jshint": "^1.9.0", 34 | "gulp-minify-css": "^0.4.4", 35 | "gulp-notify": "^2.1.0", 36 | "gulp-rename": "^1.2.0", 37 | "gulp-replace": "^0.5.3", 38 | "gulp-ruby-sass": "^1.0.1", 39 | "gulp-uglifyjs": "^0.6.1", 40 | "gulp-util": "^3.0.1" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2014 by Marijn Haverbeke and others 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/scss/editormd.tab.scss: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | .editormd-tab { 4 | } 5 | 6 | .editormd-tab-head { 7 | list-style: none; 8 | border-bottom: 1px solid #ddd; 9 | 10 | li { 11 | display: inline-block; 12 | 13 | a { 14 | color: #999; 15 | display: block; 16 | padding: 6px 12px 5px; 17 | text-align: center; 18 | text-decoration: none; 19 | margin-bottom: -1px; 20 | border: 1px solid #ddd; 21 | @include border-top-left-radius(3px); 22 | @include border-top-right-radius(3px); 23 | background: #f6f6f6; 24 | @include transition(all 300ms ease-out); 25 | 26 | &:hover { 27 | color: #666; 28 | background: #eee; 29 | } 30 | } 31 | 32 | &.active a { 33 | color: #666; 34 | background: #fff; 35 | border-bottom-color: #fff; 36 | } 37 | } 38 | 39 | li + li { 40 | margin-left: 3px; 41 | } 42 | } 43 | 44 | .editormd-tab-container { 45 | } 46 | 47 | .editormd-tab-box { 48 | padding: 20px 0; 49 | } -------------------------------------------------------------------------------- /src/main/java/com/wip/constant/WebConst.java: -------------------------------------------------------------------------------- 1 | package com.wip.constant; 2 | 3 | import org.springframework.stereotype.Component; 4 | 5 | import java.util.HashMap; 6 | import java.util.Map; 7 | 8 | /** 9 | * 系统常量 10 | */ 11 | @Component 12 | public class WebConst { 13 | 14 | 15 | /** 16 | * 一些网站配置 17 | */ 18 | public static Map initConfig = new HashMap<>(); 19 | 20 | 21 | /** 22 | * 用户登录session的key 23 | */ 24 | public static String LOGIN_SESSION_KEY = "login_user"; 25 | 26 | public static final String USER_IN_COOKIE = "S_L_ID"; 27 | 28 | 29 | /** 30 | * aes加密加盐 31 | */ 32 | public static String AES_SALT = "0123456789abcdef"; 33 | /** 34 | * 最大获取文章条数 35 | */ 36 | public static final int MAX_POSTS = 9999; 37 | 38 | /** 39 | * 文章标题最多可以输入的文字个数 40 | */ 41 | public static final int MAX_TITLE_COUNT = 200; 42 | 43 | /** 44 | * 文章内容最多可以输入的文字个数 45 | */ 46 | public static final int MAX_CONTENT_COUNT = 200000; 47 | 48 | /** 49 | * 点击次数超过铄和更新到数据库 50 | */ 51 | public static final int HIT_EXEED = 10; 52 | 53 | /** 54 | * 上传文件最大1M 55 | */ 56 | public static Integer MAX_FILE_SIZE = 1048576; 57 | 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dto/StatisticsDto.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/8/2 9:25 5 | **/ 6 | package com.wip.dto; 7 | 8 | /** 9 | * 后台统计对象 10 | */ 11 | public class StatisticsDto { 12 | 13 | /** 14 | * 文章数 15 | */ 16 | private Long articles; 17 | 18 | /** 19 | * 评论数 20 | */ 21 | private Long comments; 22 | 23 | /** 24 | * 链接数 25 | */ 26 | private Long links; 27 | 28 | /** 29 | * 文件数 30 | */ 31 | private Long attachs; 32 | 33 | public Long getArticles() { 34 | return articles; 35 | } 36 | 37 | public void setArticles(Long articles) { 38 | this.articles = articles; 39 | } 40 | 41 | public Long getComments() { 42 | return comments; 43 | } 44 | 45 | public void setComments(Long comments) { 46 | this.comments = comments; 47 | } 48 | 49 | public Long getLinks() { 50 | return links; 51 | } 52 | 53 | public void setLinks(Long links) { 54 | this.links = links; 55 | } 56 | 57 | public Long getAttachs() { 58 | return attachs; 59 | } 60 | 61 | public void setAttachs(Long attachs) { 62 | this.attachs = attachs; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/eclipse.css: -------------------------------------------------------------------------------- 1 | .cm-s-eclipse span.cm-meta {color: #FF1717;} 2 | .cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; } 3 | .cm-s-eclipse span.cm-atom {color: #219;} 4 | .cm-s-eclipse span.cm-number {color: #164;} 5 | .cm-s-eclipse span.cm-def {color: #00f;} 6 | .cm-s-eclipse span.cm-variable {color: black;} 7 | .cm-s-eclipse span.cm-variable-2 {color: #0000C0;} 8 | .cm-s-eclipse span.cm-variable-3 {color: #0000C0;} 9 | .cm-s-eclipse span.cm-property {color: black;} 10 | .cm-s-eclipse span.cm-operator {color: black;} 11 | .cm-s-eclipse span.cm-comment {color: #3F7F5F;} 12 | .cm-s-eclipse span.cm-string {color: #2A00FF;} 13 | .cm-s-eclipse span.cm-string-2 {color: #f50;} 14 | .cm-s-eclipse span.cm-qualifier {color: #555;} 15 | .cm-s-eclipse span.cm-builtin {color: #30a;} 16 | .cm-s-eclipse span.cm-bracket {color: #cc7;} 17 | .cm-s-eclipse span.cm-tag {color: #170;} 18 | .cm-s-eclipse span.cm-attribute {color: #00c;} 19 | .cm-s-eclipse span.cm-link {color: #219;} 20 | .cm-s-eclipse span.cm-error {color: #f00;} 21 | 22 | .cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;} 23 | .cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;} 24 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/css/reset.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | html, 4 | body, 5 | div, 6 | span, 7 | applet, 8 | object, 9 | iframe, 10 | h1, 11 | h2, 12 | h3, 13 | h4, 14 | h5, 15 | h6, 16 | p, 17 | blockquote, 18 | pre, 19 | a, 20 | abbr, 21 | acronym, 22 | address, 23 | big, 24 | cite, 25 | code, 26 | del, 27 | dfn, 28 | em, 29 | font, 30 | img, 31 | ins, 32 | kbd, 33 | q, 34 | s, 35 | samp, 36 | small, 37 | strike, 38 | strong, 39 | sub, 40 | sup, 41 | tt, 42 | var, 43 | dl, 44 | dt, 45 | dd, 46 | ol, 47 | ul, 48 | li, 49 | fieldset, 50 | form, 51 | label, 52 | legend, 53 | table, 54 | caption, 55 | tbody, 56 | tfoot, 57 | thead, 58 | tr, 59 | th, 60 | td { 61 | margin: 0; 62 | padding: 0; 63 | border: 0; 64 | outline: 0; 65 | font-weight: inherit; 66 | font-style: inherit; 67 | font-size: 100%; 68 | font-family: inherit; 69 | vertical-align: baseline; 70 | } 71 | 72 | :focus { 73 | outline: 0; 74 | } 75 | 76 | body { 77 | line-height: 1; 78 | color: black; 79 | /*background: white;*/ 80 | } 81 | 82 | ol, 83 | ul { 84 | list-style: none; 85 | } 86 | 87 | table { 88 | border-collapse: separate; 89 | border-spacing: 0; 90 | } 91 | 92 | caption, 93 | th, 94 | td { 95 | text-align: left; 96 | font-weight: normal; 97 | } 98 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dto/cond/CommentCond.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Administrator 4 | * DateTime: 2018/7/31 22:39 5 | **/ 6 | package com.wip.dto.cond; 7 | 8 | /** 9 | * 评论的查找参数 10 | */ 11 | public class CommentCond { 12 | /** 13 | * 状态 14 | */ 15 | private String status; 16 | /** 17 | * 开始时间戳 18 | */ 19 | private Integer startTime; 20 | /** 21 | * 结束时间戳 22 | */ 23 | private Integer endTime; 24 | 25 | /** 26 | * 父评论编号 27 | */ 28 | private Integer parent; 29 | 30 | public String getStatus() { 31 | return status; 32 | } 33 | 34 | public void setStatus(String status) { 35 | this.status = status; 36 | } 37 | 38 | public Integer getStartTime() { 39 | return startTime; 40 | } 41 | 42 | public void setStartTime(Integer startTime) { 43 | this.startTime = startTime; 44 | } 45 | 46 | public Integer getEndTime() { 47 | return endTime; 48 | } 49 | 50 | public void setEndTime(Integer endTime) { 51 | this.endTime = endTime; 52 | } 53 | 54 | public Integer getParent() { 55 | return parent; 56 | } 57 | 58 | public void setParent(Integer parent) { 59 | this.parent = parent; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/comment/CommentService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/31 15:40 5 | **/ 6 | package com.wip.service.comment; 7 | 8 | import com.github.pagehelper.PageInfo; 9 | import com.wip.dto.cond.CommentCond; 10 | import com.wip.model.CommentDomain; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * 评论相关Service接口 16 | */ 17 | public interface CommentService { 18 | 19 | /** 20 | * 添加评论 21 | * @param comments 22 | */ 23 | void addComment(CommentDomain comments); 24 | 25 | /** 26 | * 通过文章ID获取评论 27 | * @param cid 28 | * @return 29 | */ 30 | List getCommentsByCId(Integer cid); 31 | 32 | /** 33 | * 根据条件获取评论列表 34 | * @param commentCond 查询条件 35 | * @param pageNum 分页参数 第几页 36 | * @param pageSize 分页参数 每页条数 37 | * @return 38 | */ 39 | PageInfo getCommentsByCond(CommentCond commentCond, int pageNum, int pageSize); 40 | 41 | /** 42 | * 通过ID获取评论 43 | * @param coid 44 | * @return 45 | */ 46 | CommentDomain getCommentById(Integer coid); 47 | 48 | /** 49 | * 更新评论状态 50 | * @param coid 51 | * @param status 52 | */ 53 | void updateCommentStatus(Integer coid, String status); 54 | } 55 | -------------------------------------------------------------------------------- /src/main/resources/mapper/LogMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | t_logs 7 | 8 | 9 | 10 | 11 | l.id, l.action, l.data, l.authorId, l.ip, l.created 12 | 13 | 14 | 15 | 16 | INSERT INTO 17 | 18 | 19 | action, data, authorId, ip, created, 20 | 21 | 22 | #{action, jdbcType=VARCHAR}, 23 | #{data, jdbcType=VARCHAR}, 24 | #{authorId, jdbcType=INTEGER}, 25 | #{ip, jdbcType=VARCHAR}, 26 | UNIX_TIMESTAMP(NOW()) 27 | 28 | 29 | 30 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/lint/css-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on csslint.js from https://github.com/stubbornella/csslint 5 | 6 | // declare global: CSSLint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "css", function(text) { 19 | var found = []; 20 | if (!window.CSSLint) return found; 21 | var results = CSSLint.verify(text), messages = results.messages, message = null; 22 | for ( var i = 0; i < messages.length; i++) { 23 | message = messages[i]; 24 | var startLine = message.line -1, endLine = message.line -1, startCol = message.col -1, endCol = message.col; 25 | found.push({ 26 | from: CodeMirror.Pos(startLine, startCol), 27 | to: CodeMirror.Pos(endLine, endCol), 28 | message: message.message, 29 | severity : message.type 30 | }); 31 | } 32 | return found; 33 | }); 34 | 35 | }); 36 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/RelationShipDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Administrator 4 | * DateTime: 2018/7/24 23:07 5 | **/ 6 | package com.wip.dao; 7 | 8 | import com.wip.model.RelationShipDomain; 9 | import org.apache.ibatis.annotations.Mapper; 10 | import org.apache.ibatis.annotations.Param; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * 文章和项目关联表 16 | */ 17 | @Mapper 18 | public interface RelationShipDao { 19 | 20 | /** 21 | * 根据meta编号获取关联 22 | * @param mid 23 | * @return 24 | */ 25 | List getRelationShipByMid(Integer mid); 26 | 27 | /** 28 | * 根据meta编号删除关联 29 | * @param mid 30 | */ 31 | void deleteRelationShipByMid(Integer mid); 32 | 33 | /** 34 | * 获取数量 35 | * @param cid 36 | * @param mid 37 | * @return 38 | */ 39 | Long getCountById(@Param("cid") Integer cid, @Param("mid") Integer mid); 40 | 41 | /** 42 | * 添加 43 | * @param relationShip 44 | * @return 45 | */ 46 | int addRelationShip(RelationShipDomain relationShip); 47 | 48 | /** 49 | * 根据文章编号删除关联 50 | * @param cid 51 | */ 52 | void deleteRelationShipByCid(int cid); 53 | 54 | /** 55 | * 根据文章ID获取关联 56 | * @param cid 57 | */ 58 | List getRelationShipByCid(Integer cid); 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/com/wip/utils/AdminCommons.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Administrator 4 | * DateTime: 2018/7/24 23:26 5 | **/ 6 | package com.wip.utils; 7 | 8 | import com.wip.model.MetaDomain; 9 | import org.apache.commons.lang3.StringUtils; 10 | import org.springframework.stereotype.Component; 11 | 12 | /** 13 | * 后台公共函数 14 | */ 15 | @Component 16 | public final class AdminCommons { 17 | 18 | 19 | /** 20 | * 判断category和cat的交集 21 | * @param category 22 | * @param cats 23 | * @return 24 | */ 25 | public static boolean exist_cat(MetaDomain category, String cats) { 26 | String[] arr = StringUtils.split(cats, ","); 27 | if (null != arr && arr.length > 0) { 28 | for (String c : arr) { 29 | if (c.trim().equals(category.getName())) { 30 | return true; 31 | } 32 | } 33 | } 34 | return false; 35 | } 36 | 37 | /** 38 | * 定义颜色样式数组 39 | */ 40 | private static final String[] COLORS = {"default", "primary", "success", "info", "warning", "danger", "inverse", "purple", "pink"}; 41 | 42 | /** 43 | * 随机样式 44 | * @return 45 | */ 46 | public static String rand_color() { 47 | int r = Tools.rand(0, COLORS.length - 1); 48 | return COLORS[r]; 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/log/impl/LogServiceImpl.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/23 16:59 5 | **/ 6 | package com.wip.service.log.impl; 7 | 8 | import com.github.pagehelper.PageHelper; 9 | import com.github.pagehelper.PageInfo; 10 | import com.wip.dao.LogDao; 11 | import com.wip.model.LogDomain; 12 | import com.wip.service.log.LogService; 13 | import org.springframework.beans.factory.annotation.Autowired; 14 | import org.springframework.stereotype.Service; 15 | 16 | import java.util.List; 17 | 18 | /** 19 | * 日志相关Service接口实现 20 | */ 21 | @Service 22 | public class LogServiceImpl implements LogService { 23 | 24 | 25 | @Autowired 26 | private LogDao logDao; 27 | 28 | 29 | @Override 30 | public void addLog(String action, String data, String ip, Integer authorId) { 31 | LogDomain logDomain = new LogDomain(); 32 | logDomain.setAuthorId(authorId); 33 | logDomain.setIp(ip); 34 | logDomain.setData(data); 35 | logDomain.setAction(action); 36 | logDao.addLog(logDomain); 37 | } 38 | 39 | @Override 40 | public PageInfo getLogs(int pageNum, int pageSize) { 41 | PageHelper.startPage(pageNum,pageSize); 42 | List logs = logDao.getLogs(); 43 | PageInfo pageInfo = new PageInfo<>(logs); 44 | return pageInfo; 45 | 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/jquery.flowchart.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery.flowchart.js v1.1.0 | jquery.flowchart.min.js | jQuery plugin for flowchart.js. | MIT License | By: Pandao | https://github.com/pandao/jquery.flowchart.js | 2015-03-09 */ 2 | (function(factory){if(typeof require==="function"&&typeof exports==="object"&&typeof module==="object"){module.exports=factory}else{if(typeof define==="function"){factory(jQuery,flowchart)}else{factory($,flowchart)}}}(function(jQuery,flowchart){(function($){$.fn.flowChart=function(options){options=options||{};var defaults={"x":0,"y":0,"line-width":2,"line-length":50,"text-margin":10,"font-size":14,"font-color":"black","line-color":"black","element-color":"black","fill":"white","yes-text":"yes","no-text":"no","arrow-end":"block","symbols":{"start":{"font-color":"black","element-color":"black","fill":"white"},"end":{"class":"end-element"}},"flowstate":{"past":{"fill":"#CCCCCC","font-size":12},"current":{"fill":"black","font-color":"white","font-weight":"bold"},"future":{"fill":"white"},"request":{"fill":"blue"},"invalid":{"fill":"#444444"},"approved":{"fill":"#58C4A3","font-size":12,"yes-text":"APPROVED","no-text":"n/a"},"rejected":{"fill":"#C45879","font-size":12,"yes-text":"n/a","no-text":"REJECTED"}}};return this.each(function(){var $this=$(this);var diagram=flowchart.parse($this.text());var settings=$.extend(true,defaults,options);$this.html("");diagram.drawSVG(this,settings)})}})(jQuery)})); -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/tern/worker.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // declare global: tern, server 5 | 6 | var server; 7 | 8 | this.onmessage = function(e) { 9 | var data = e.data; 10 | switch (data.type) { 11 | case "init": return startServer(data.defs, data.plugins, data.scripts); 12 | case "add": return server.addFile(data.name, data.text); 13 | case "del": return server.delFile(data.name); 14 | case "req": return server.request(data.body, function(err, reqData) { 15 | postMessage({id: data.id, body: reqData, err: err && String(err)}); 16 | }); 17 | case "getFile": 18 | var c = pending[data.id]; 19 | delete pending[data.id]; 20 | return c(data.err, data.text); 21 | default: throw new Error("Unknown message type: " + data.type); 22 | } 23 | }; 24 | 25 | var nextId = 0, pending = {}; 26 | function getFile(file, c) { 27 | postMessage({type: "getFile", name: file, id: ++nextId}); 28 | pending[nextId] = c; 29 | } 30 | 31 | function startServer(defs, plugins, scripts) { 32 | if (scripts) importScripts.apply(null, scripts); 33 | 34 | server = new tern.Server({ 35 | getFile: getFile, 36 | async: true, 37 | defs: defs, 38 | plugins: plugins 39 | }); 40 | } 41 | 42 | var console = { 43 | log: function(v) { postMessage({type: "debug", message: v}); } 44 | }; 45 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/plugins/tagsinput/jquery.tagsinput.css: -------------------------------------------------------------------------------- 1 | div.tagsinput { 2 | border:1px solid #ccc; 3 | background: #FFF; 4 | padding:5px; 5 | width:300px; 6 | height:100px; 7 | overflow-y: auto; 8 | -moz-border-radius: 2px; 9 | -webkit-border-radius: 2px; 10 | border-radius: 2px; 11 | } 12 | 13 | div.tagsinput span.tag { 14 | display: block; 15 | float: left; 16 | padding: 2px 5px; 17 | text-decoration:none; 18 | background: #317eeb; 19 | color: #fff; 20 | margin-right: 5px; 21 | margin-bottom:5px; 22 | font-size:13px; 23 | -moz-border-radius: 2px; 24 | -webkit-border-radius: 2px; 25 | border-radius: 2px; 26 | } 27 | 28 | div.tagsinput span.tag a { 29 | font-weight: bold; 30 | color: #fff; 31 | opacity: 0.5; 32 | text-decoration: none; 33 | font-size: 11px; 34 | } 35 | 36 | div.tagsinput span.tag a:hover { 37 | opacity: 1; 38 | } 39 | 40 | div.tagsinput input { 41 | width: 80px; 42 | margin: 0px; 43 | font-size: 13px; 44 | border: 1px solid transparent; 45 | padding: 5px; 46 | background: transparent; 47 | color: #000; 48 | outline: 0px; 49 | margin-right: 5px; 50 | margin-bottom: 5px; 51 | } 52 | 53 | div.tagsinput div { 54 | display: block; 55 | float: left; 56 | } 57 | 58 | .tags_clear { 59 | clear: both; 60 | width: 100%; 61 | height: 0px; 62 | } 63 | 64 | .not_valid { 65 | background: #FBD8DB !important; 66 | color: #90111A !important; 67 | } 68 | -------------------------------------------------------------------------------- /src/main/resources/static/blog/js/src/bootstrap.js: -------------------------------------------------------------------------------- 1 | /* global CLUAS: true */ 2 | 3 | $(document).ready(function () { 4 | 5 | $(document).trigger('bootstrap:before'); 6 | 7 | CLUAS.utils.isMobile() && window.FastClick.attach(document.body); 8 | 9 | CLUAS.utils.lazyLoadPostsImages(); 10 | 11 | CLUAS.utils.registerESCKeyEvent(); 12 | 13 | CLUAS.utils.registerBackToTop(); 14 | 15 | $('.site-nav-toggle button').on('click', function () { 16 | var $siteNav = $('.site-nav'); 17 | var ON_CLASS_NAME = 'site-nav-on'; 18 | var isSiteNavOn = $siteNav.hasClass(ON_CLASS_NAME); 19 | var animateAction = isSiteNavOn ? 'slideUp' : 'slideDown'; 20 | var animateCallback = isSiteNavOn ? 'removeClass' : 'addClass'; 21 | 22 | $siteNav.stop()[animateAction]('fast', function () { 23 | $siteNav[animateCallback](ON_CLASS_NAME); 24 | }); 25 | }); 26 | 27 | 28 | CONFIG.fancybox && CLUAS.utils.wrapImageWithFancyBox(); 29 | CLUAS.utils.embeddedVideoTransformer(); 30 | CLUAS.utils.addActiveClassToMenuItem(); 31 | 32 | 33 | // Define Motion Sequence. 34 | CLUAS.motion.integrator 35 | .add(CLUAS.motion.middleWares.logo) 36 | .add(CLUAS.motion.middleWares.menu) 37 | .add(CLUAS.motion.middleWares.postList) 38 | .add(CLUAS.motion.middleWares.sidebar); 39 | 40 | $(document).trigger('motion:before'); 41 | 42 | // Bootstrap Motion. 43 | CONFIG.motion && CLUAS.motion.integrator.bootstrap(); 44 | 45 | $(document).trigger('bootstrap:after'); 46 | }); 47 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/lint/coffeescript-lint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js 5 | 6 | // declare global: coffeelint 7 | 8 | (function(mod) { 9 | if (typeof exports == "object" && typeof module == "object") // CommonJS 10 | mod(require("../../lib/codemirror")); 11 | else if (typeof define == "function" && define.amd) // AMD 12 | define(["../../lib/codemirror"], mod); 13 | else // Plain browser env 14 | mod(CodeMirror); 15 | })(function(CodeMirror) { 16 | "use strict"; 17 | 18 | CodeMirror.registerHelper("lint", "coffeescript", function(text) { 19 | var found = []; 20 | var parseError = function(err) { 21 | var loc = err.lineNumber; 22 | found.push({from: CodeMirror.Pos(loc-1, 0), 23 | to: CodeMirror.Pos(loc, 0), 24 | severity: err.level, 25 | message: err.message}); 26 | }; 27 | try { 28 | var res = coffeelint.lint(text); 29 | for(var i = 0; i < res.length; i++) { 30 | parseError(res[i]); 31 | } 32 | } catch(e) { 33 | found.push({from: CodeMirror.Pos(e.location.first_line, 0), 34 | to: CodeMirror.Pos(e.location.last_line, e.location.last_column), 35 | severity: 'error', 36 | message: e.message}); 37 | } 38 | return found; 39 | }); 40 | 41 | }); 42 | -------------------------------------------------------------------------------- /src/main/java/com/wip/controller/BaseController.java: -------------------------------------------------------------------------------- 1 | package com.wip.controller; 2 | 3 | import com.wip.model.UserDomain; 4 | import com.wip.utils.MapCache; 5 | import com.wip.utils.TaleUtils; 6 | 7 | import javax.servlet.http.HttpServletRequest; 8 | 9 | public abstract class BaseController { 10 | 11 | 12 | protected MapCache cache = MapCache.single(); 13 | 14 | 15 | public BaseController title(HttpServletRequest request, String title) { 16 | request.setAttribute("title", title); 17 | return this; 18 | } 19 | 20 | /** 21 | * 获取请求绑定的登录对象 22 | * @param request 23 | * @return 24 | */ 25 | public UserDomain user(HttpServletRequest request) { 26 | return TaleUtils.getLoginUser(request); 27 | } 28 | 29 | /** 30 | * 获取请求绑定登录用户Uid 31 | * @param request 32 | * @return 33 | */ 34 | public Integer getUid(HttpServletRequest request) { 35 | return this.user(request).getUid(); 36 | } 37 | 38 | 39 | /** 40 | * 数组转字符串 41 | * @param arr 数组 42 | * @return String 43 | */ 44 | public String join(String[] arr) { 45 | StringBuffer buffer = new StringBuffer(); 46 | String[] temp = arr; 47 | int length = arr.length; 48 | 49 | for (int i = 0; i < length; i++) { 50 | String item = temp[i]; 51 | buffer.append(",").append(item); 52 | } 53 | 54 | return buffer.length() > 0 ? buffer.substring(1) : buffer.toString(); 55 | } 56 | 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/CommentDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/31 15:42 5 | **/ 6 | package com.wip.dao; 7 | 8 | import com.wip.dto.cond.CommentCond; 9 | import com.wip.model.CommentDomain; 10 | import org.apache.ibatis.annotations.Mapper; 11 | import org.apache.ibatis.annotations.Param; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 评论相关Dao接口 17 | */ 18 | @Mapper 19 | public interface CommentDao { 20 | 21 | /** 22 | * 添加评论 23 | * @param comments 24 | */ 25 | void addComment(CommentDomain comments); 26 | 27 | /** 28 | * 根据文章ID获取评论 29 | * @param cid 30 | * @return 31 | */ 32 | List getCommentByCId(@Param("cid") Integer cid); 33 | 34 | 35 | /** 36 | * 删除评论 37 | * @param coid 38 | */ 39 | void deleteComment(@Param("coid") Integer coid); 40 | 41 | /** 42 | * 获取评论总数 43 | * @return 44 | */ 45 | Long getCommentCount(); 46 | 47 | /** 48 | * 根据条件获取评论列表 49 | * @param commentCond 50 | * @return 51 | */ 52 | List getCommentsByCond(CommentCond commentCond); 53 | 54 | /** 55 | * 通过ID获取评论 56 | * @param coid 57 | * @return 58 | */ 59 | CommentDomain getCommentById(@Param("coid") Integer coid); 60 | 61 | /** 62 | * 更新评论状态 63 | * @param coid 64 | * @param status 65 | */ 66 | void updateCommentStatus(@Param("coid") Integer coid, @Param("status") String status); 67 | } 68 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/runmode/colorize.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror"), require("./runmode")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror", "./runmode"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var isBlock = /^(p|li|div|h\\d|pre|blockquote|td)$/; 15 | 16 | function textContent(node, out) { 17 | if (node.nodeType == 3) return out.push(node.nodeValue); 18 | for (var ch = node.firstChild; ch; ch = ch.nextSibling) { 19 | textContent(ch, out); 20 | if (isBlock.test(node.nodeType)) out.push("\n"); 21 | } 22 | } 23 | 24 | CodeMirror.colorize = function(collection, defaultMode) { 25 | if (!collection) collection = document.body.getElementsByTagName("pre"); 26 | 27 | for (var i = 0; i < collection.length; ++i) { 28 | var node = collection[i]; 29 | var mode = node.getAttribute("data-lang") || defaultMode; 30 | if (!mode) continue; 31 | 32 | var text = []; 33 | textContent(node, text); 34 | node.innerHTML = ""; 35 | CodeMirror.runMode(text.join(""), mode, node); 36 | 37 | node.className += " cm-s-default"; 38 | } 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /src/main/resources/mapper/OptionMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | t_options 8 | 9 | 10 | 11 | o.name, o.value, o.description 12 | 13 | 14 | 15 | 21 | 22 | 23 | 24 | UPDATE 25 | 26 | 27 | 28 | value = #{value, jdbcType=VARCHAR} 29 | 30 | 31 | description = #{description, jdbcType=VARCHAR} 32 | 33 | 34 | WHERE 35 | name = #{name, jdbcType=VARCHAR} 36 | 37 | 38 | 39 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/ntriples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: NTriples mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 28 | 29 |
30 |

NTriples mode

31 |
32 | 39 |
40 | 41 | 44 |

MIME types defined: text/n-triples.

45 |
46 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/spreadsheet/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Spreadsheet mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Spreadsheet mode

28 |
29 | 30 | 37 | 38 |

MIME types defined: text/x-spreadsheet.

39 | 40 |

The Spreadsheet Mode

41 |

Created by Robert Plummer

42 |
43 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/http/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: HTTP mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

HTTP mode

27 | 28 | 29 |
39 | 40 | 43 | 44 |

MIME types defined: message/http.

45 |
46 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/cobalt.css: -------------------------------------------------------------------------------- 1 | .cm-s-cobalt.CodeMirror { background: #002240; color: white; } 2 | .cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; } 3 | .cm-s-cobalt.CodeMirror ::selection { background: rgba(179, 101, 57, .99); } 4 | .cm-s-cobalt.CodeMirror ::-moz-selection { background: rgba(179, 101, 57, .99); } 5 | .cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; } 6 | .cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; } 7 | .cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 8 | .cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; } 9 | .cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; } 10 | 11 | .cm-s-cobalt span.cm-comment { color: #08f; } 12 | .cm-s-cobalt span.cm-atom { color: #845dc4; } 13 | .cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; } 14 | .cm-s-cobalt span.cm-keyword { color: #ffee80; } 15 | .cm-s-cobalt span.cm-string { color: #3ad900; } 16 | .cm-s-cobalt span.cm-meta { color: #ff9d00; } 17 | .cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } 18 | .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } 19 | .cm-s-cobalt span.cm-bracket { color: #d8d8d8; } 20 | .cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } 21 | .cm-s-cobalt span.cm-link { color: #845dc4; } 22 | .cm-s-cobalt span.cm-error { color: #9d1e15; } 23 | 24 | .cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;} 25 | .cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} 26 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/css/editormd.logo.min.css: -------------------------------------------------------------------------------- 1 | /*! Editor.md v1.5.0 | editormd.logo.min.css | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2015-06-09 */ 2 | /*! prefixes.scss v0.1.0 | Author: Pandao | https://github.com/pandao/prefixes.scss | MIT license | Copyright (c) 2015 */@font-face{font-family:editormd-logo;src:url(../fonts/editormd-logo.eot?-5y8q6h);src:url(.../fonts/editormd-logo.eot?#iefix-5y8q6h)format("embedded-opentype"),url(../fonts/editormd-logo.woff?-5y8q6h)format("woff"),url(../fonts/editormd-logo.ttf?-5y8q6h)format("truetype"),url(../fonts/editormd-logo.svg?-5y8q6h#icomoon)format("svg");font-weight:400;font-style:normal}.editormd-logo,.editormd-logo-1x,.editormd-logo-2x,.editormd-logo-3x,.editormd-logo-4x,.editormd-logo-5x,.editormd-logo-6x,.editormd-logo-7x,.editormd-logo-8x{font-family:editormd-logo;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;font-size:inherit;line-height:1;display:inline-block;text-rendering:auto;vertical-align:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.editormd-logo-1x:before,.editormd-logo-2x:before,.editormd-logo-3x:before,.editormd-logo-4x:before,.editormd-logo-5x:before,.editormd-logo-6x:before,.editormd-logo-7x:before,.editormd-logo-8x:before,.editormd-logo:before{content:"\e1987"}.editormd-logo-1x{font-size:1em}.editormd-logo-lg{font-size:1.2em}.editormd-logo-2x{font-size:2em}.editormd-logo-3x{font-size:3em}.editormd-logo-4x{font-size:4em}.editormd-logo-5x{font-size:5em}.editormd-logo-6x{font-size:6em}.editormd-logo-7x{font-size:7em}.editormd-logo-8x{font-size:8em}.editormd-logo-color{color:#2196F3} -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/solr/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Solr mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 20 | 33 | 34 |
35 |

Solr mode

36 | 37 |
38 | 47 |
48 | 49 | 55 | 56 |

MIME types defined: text/x-solr.

57 |
58 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/ContentDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/25 16:50 5 | **/ 6 | package com.wip.dao; 7 | 8 | import com.wip.dto.cond.ContentCond; 9 | import com.wip.model.ContentDomain; 10 | import com.wip.model.RelationShipDomain; 11 | import org.apache.ibatis.annotations.Mapper; 12 | import org.apache.ibatis.annotations.Param; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * 文章相关Dao接口 18 | */ 19 | @Mapper 20 | public interface ContentDao { 21 | 22 | /** 23 | * 添加文章 24 | * @param contentDomain 25 | */ 26 | void addArticle(ContentDomain contentDomain); 27 | 28 | /** 29 | * 根据编号获取文章 30 | * @param cid 31 | * @return 32 | */ 33 | ContentDomain getArticleById(Integer cid); 34 | 35 | /** 36 | * 更新文章 37 | * @param contentDomain 38 | */ 39 | void updateArticleById(ContentDomain contentDomain); 40 | 41 | /** 42 | * 根据条件获取文章列表 43 | * @param contentCond 44 | * @return 45 | */ 46 | List getArticleByCond(ContentCond contentCond); 47 | 48 | /** 49 | * 删除文章 50 | * @param cid 51 | */ 52 | void deleteArticleById(Integer cid); 53 | 54 | /** 55 | * 获取文章总数 56 | * @return 57 | */ 58 | Long getArticleCount(); 59 | 60 | /** 61 | * 通过分类名获取文章 62 | * @param category 63 | * @return 64 | */ 65 | List getArticleByCategory(@Param("category") String category); 66 | 67 | /** 68 | * 通过标签获取文章 69 | * @param cid 70 | * @return 71 | */ 72 | List getArticleByTags(List cid); 73 | } 74 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/z80/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Z80 assembly mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Z80 assembly mode

27 | 28 | 29 |
44 | 45 | 50 | 51 |

MIME type defined: text/x-z80.

52 |
53 | -------------------------------------------------------------------------------- /src/main/java/com/wip/utils/IPKit.java: -------------------------------------------------------------------------------- 1 | package com.wip.utils; 2 | 3 | import org.apache.commons.lang3.StringUtils; 4 | 5 | import javax.servlet.http.HttpServletRequest; 6 | 7 | /** 8 | * ip工具类 9 | */ 10 | public class IPKit { 11 | 12 | /** 13 | * 获取请求IP地址 14 | * @param request 15 | * @return 16 | */ 17 | public static String getIpAddressByRequest(HttpServletRequest request) { 18 | String ip = request.getHeader("x-forwarded-for"); 19 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 20 | ip = request.getHeader("Proxy-Client-IP"); 21 | } 22 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 23 | ip = request.getHeader("WL-Proxy-Client-IP"); 24 | } 25 | if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 26 | ip = request.getRemoteAddr(); 27 | } 28 | return ip; 29 | } 30 | 31 | public static String getIpAddressByRequest1(HttpServletRequest request) { 32 | String ip = request.getHeader("X-Forwarded-For"); 33 | if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){ 34 | //多次反向代理后会有多个ip值,第一个ip才是真实ip 35 | int index = ip.indexOf(","); 36 | if(index != -1){ 37 | return ip.substring(0,index); 38 | }else{ 39 | return ip; 40 | } 41 | } 42 | 43 | ip = request.getHeader("X-Real-IP"); 44 | if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){ 45 | return ip; 46 | } 47 | return request.getRemoteAddr(); 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/ecl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: ECL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

ECL mode

27 |
45 | 48 | 49 |

Based on CodeMirror's clike mode. For more information see HPCC Systems web site.

50 |

MIME types defined: text/x-ecl.

51 | 52 |
53 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/rust/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Rust mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Rust mode

27 | 28 | 29 |
52 | 53 | 58 | 59 |

MIME types defined: text/x-rustsrc.

60 |
61 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/monokai.css: -------------------------------------------------------------------------------- 1 | /* Based on Sublime Text's Monokai theme */ 2 | 3 | .cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;} 4 | .cm-s-monokai div.CodeMirror-selected {background: #49483E !important;} 5 | .cm-s-monokai.CodeMirror ::selection { background: rgba(73, 72, 62, .99); } 6 | .cm-s-monokai.CodeMirror ::-moz-selection { background: rgba(73, 72, 62, .99); } 7 | .cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;} 8 | .cm-s-monokai .CodeMirror-guttermarker { color: white; } 9 | .cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; } 10 | .cm-s-monokai .CodeMirror-linenumber {color: #d0d0d0;} 11 | .cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;} 12 | 13 | .cm-s-monokai span.cm-comment {color: #75715e;} 14 | .cm-s-monokai span.cm-atom {color: #ae81ff;} 15 | .cm-s-monokai span.cm-number {color: #ae81ff;} 16 | 17 | .cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;} 18 | .cm-s-monokai span.cm-keyword {color: #f92672;} 19 | .cm-s-monokai span.cm-string {color: #e6db74;} 20 | 21 | .cm-s-monokai span.cm-variable {color: #a6e22e;} 22 | .cm-s-monokai span.cm-variable-2 {color: #9effff;} 23 | .cm-s-monokai span.cm-def {color: #fd971f;} 24 | .cm-s-monokai span.cm-bracket {color: #f8f8f2;} 25 | .cm-s-monokai span.cm-tag {color: #f92672;} 26 | .cm-s-monokai span.cm-link {color: #ae81ff;} 27 | .cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;} 28 | 29 | .cm-s-monokai .CodeMirror-activeline-background {background: #373831 !important;} 30 | .cm-s-monokai .CodeMirror-matchingbracket { 31 | text-decoration: underline; 32 | color: white !important; 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/article/ContentService.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/25 16:48 5 | **/ 6 | package com.wip.service.article; 7 | 8 | import com.github.pagehelper.PageInfo; 9 | import com.wip.dto.cond.ContentCond; 10 | import com.wip.model.ContentDomain; 11 | import com.wip.model.MetaDomain; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 文章相关Service接口 17 | */ 18 | public interface ContentService { 19 | 20 | /*** 21 | * 添加文章 22 | * @param contentDomain 23 | */ 24 | void addArticle(ContentDomain contentDomain); 25 | 26 | /** 27 | * 根据编号获取文章 28 | * @param cid 29 | * @return 30 | */ 31 | ContentDomain getArticleById(Integer cid); 32 | 33 | /** 34 | * 更新文章 35 | * @param contentDomain 36 | */ 37 | void updateArticleById(ContentDomain contentDomain); 38 | 39 | /** 40 | * 根据条件获取文章列表 41 | * @param contentCond 42 | * @param page 43 | * @param limit 44 | * @return 45 | */ 46 | PageInfo getArticlesByCond(ContentCond contentCond, int page, int limit); 47 | 48 | /** 49 | * 删除文章 50 | * @param cid 51 | */ 52 | void deleteArticleById(Integer cid); 53 | 54 | /** 55 | * 添加文章点击量 56 | * @param content 57 | */ 58 | void updateContentByCid(ContentDomain content); 59 | 60 | /** 61 | * 通过分类获取文章 62 | * @param category 63 | * @return 64 | */ 65 | List getArticleByCategory(String category); 66 | 67 | /** 68 | * 通过标签获取文章 69 | * @param tags 70 | * @return 71 | */ 72 | List getArticleByTags(MetaDomain tags); 73 | } 74 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/scroll/simplescrollbars.css: -------------------------------------------------------------------------------- 1 | .CodeMirror-simplescroll-horizontal div, .CodeMirror-simplescroll-vertical div { 2 | position: absolute; 3 | background: #ccc; 4 | -moz-box-sizing: border-box; 5 | box-sizing: border-box; 6 | border: 1px solid #bbb; 7 | border-radius: 2px; 8 | } 9 | 10 | .CodeMirror-simplescroll-horizontal, .CodeMirror-simplescroll-vertical { 11 | position: absolute; 12 | z-index: 6; 13 | background: #eee; 14 | } 15 | 16 | .CodeMirror-simplescroll-horizontal { 17 | bottom: 0; left: 0; 18 | height: 8px; 19 | } 20 | .CodeMirror-simplescroll-horizontal div { 21 | bottom: 0; 22 | height: 100%; 23 | } 24 | 25 | .CodeMirror-simplescroll-vertical { 26 | right: 0; top: 0; 27 | width: 8px; 28 | } 29 | .CodeMirror-simplescroll-vertical div { 30 | right: 0; 31 | width: 100%; 32 | } 33 | 34 | 35 | .CodeMirror-overlayscroll .CodeMirror-scrollbar-filler, .CodeMirror-overlayscroll .CodeMirror-gutter-filler { 36 | display: none; 37 | } 38 | 39 | .CodeMirror-overlayscroll-horizontal div, .CodeMirror-overlayscroll-vertical div { 40 | position: absolute; 41 | background: #bcd; 42 | border-radius: 3px; 43 | } 44 | 45 | .CodeMirror-overlayscroll-horizontal, .CodeMirror-overlayscroll-vertical { 46 | position: absolute; 47 | z-index: 6; 48 | } 49 | 50 | .CodeMirror-overlayscroll-horizontal { 51 | bottom: 0; left: 0; 52 | height: 6px; 53 | } 54 | .CodeMirror-overlayscroll-horizontal div { 55 | bottom: 0; 56 | height: 100%; 57 | } 58 | 59 | .CodeMirror-overlayscroll-vertical { 60 | right: 0; top: 0; 61 | width: 6px; 62 | } 63 | .CodeMirror-overlayscroll-vertical div { 64 | right: 0; 65 | width: 100%; 66 | } 67 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/rubyblue.css: -------------------------------------------------------------------------------- 1 | .cm-s-rubyblue.CodeMirror { background: #112435; color: white; } 2 | .cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; } 3 | .cm-s-rubyblue.CodeMirror ::selection { background: rgba(56, 86, 111, 0.99); } 4 | .cm-s-rubyblue.CodeMirror ::-moz-selection { background: rgba(56, 86, 111, 0.99); } 5 | .cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; } 6 | .cm-s-rubyblue .CodeMirror-guttermarker { color: white; } 7 | .cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; } 8 | .cm-s-rubyblue .CodeMirror-linenumber { color: white; } 9 | .cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; } 10 | 11 | .cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; } 12 | .cm-s-rubyblue span.cm-atom { color: #F4C20B; } 13 | .cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; } 14 | .cm-s-rubyblue span.cm-keyword { color: #F0F; } 15 | .cm-s-rubyblue span.cm-string { color: #F08047; } 16 | .cm-s-rubyblue span.cm-meta { color: #F0F; } 17 | .cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } 18 | .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; } 19 | .cm-s-rubyblue span.cm-bracket { color: #F0F; } 20 | .cm-s-rubyblue span.cm-link { color: #F4C20B; } 21 | .cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; } 22 | .cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; } 23 | .cm-s-rubyblue span.cm-error { color: #AF2018; } 24 | 25 | .cm-s-rubyblue .CodeMirror-activeline-background {background: #173047 !important;} 26 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dto/AttAchDto.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/8/3 16:31 5 | **/ 6 | package com.wip.dto; 7 | 8 | public class AttAchDto extends BaseDto { 9 | /** 10 | * 主键编号 11 | */ 12 | private Integer id; 13 | 14 | /** 15 | * 文件名称 16 | */ 17 | private String fname; 18 | 19 | /** 20 | * 文件类型 21 | */ 22 | private String ftype; 23 | 24 | /** 25 | * 文件的地址 26 | */ 27 | private String fkey; 28 | 29 | /** 30 | * 上传人的ID 31 | */ 32 | private Integer authorId; 33 | 34 | /** 35 | * 创建的时间戳 36 | */ 37 | private Integer created; 38 | 39 | public Integer getId() { 40 | return id; 41 | } 42 | 43 | public void setId(Integer id) { 44 | this.id = id; 45 | } 46 | 47 | public String getFname() { 48 | return fname; 49 | } 50 | 51 | public void setFname(String fname) { 52 | this.fname = fname; 53 | } 54 | 55 | public String getFtype() { 56 | return ftype; 57 | } 58 | 59 | public void setFtype(String ftype) { 60 | this.ftype = ftype; 61 | } 62 | 63 | public String getFkey() { 64 | return fkey; 65 | } 66 | 67 | public void setFkey(String fkey) { 68 | this.fkey = fkey; 69 | } 70 | 71 | public Integer getAuthorId() { 72 | return authorId; 73 | } 74 | 75 | public void setAuthorId(Integer authorId) { 76 | this.authorId = authorId; 77 | } 78 | 79 | public Integer getCreated() { 80 | return created; 81 | } 82 | 83 | public void setCreated(Integer created) { 84 | this.created = created; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/display/fullscreen.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineOption("fullScreen", false, function(cm, val, old) { 15 | if (old == CodeMirror.Init) old = false; 16 | if (!old == !val) return; 17 | if (val) setFullscreen(cm); 18 | else setNormal(cm); 19 | }); 20 | 21 | function setFullscreen(cm) { 22 | var wrap = cm.getWrapperElement(); 23 | cm.state.fullScreenRestore = {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset, 24 | width: wrap.style.width, height: wrap.style.height}; 25 | wrap.style.width = ""; 26 | wrap.style.height = "auto"; 27 | wrap.className += " CodeMirror-fullscreen"; 28 | document.documentElement.style.overflow = "hidden"; 29 | cm.refresh(); 30 | } 31 | 32 | function setNormal(cm) { 33 | var wrap = cm.getWrapperElement(); 34 | wrap.className = wrap.className.replace(/\s*CodeMirror-fullscreen\b/, ""); 35 | document.documentElement.style.overflow = ""; 36 | var info = cm.state.fullScreenRestore; 37 | wrap.style.width = info.width; wrap.style.height = info.height; 38 | window.scrollTo(info.scrollLeft, info.scrollTop); 39 | cm.refresh(); 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/night.css: -------------------------------------------------------------------------------- 1 | /* Loosely based on the Midnight Textmate theme */ 2 | 3 | .cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; } 4 | .cm-s-night div.CodeMirror-selected { background: #447 !important; } 5 | .cm-s-night.CodeMirror ::selection { background: rgba(68, 68, 119, .99); } 6 | .cm-s-night.CodeMirror ::-moz-selection { background: rgba(68, 68, 119, .99); } 7 | .cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 8 | .cm-s-night .CodeMirror-guttermarker { color: white; } 9 | .cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; } 10 | .cm-s-night .CodeMirror-linenumber { color: #f8f8f8; } 11 | .cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; } 12 | 13 | .cm-s-night span.cm-comment { color: #6900a1; } 14 | .cm-s-night span.cm-atom { color: #845dc4; } 15 | .cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; } 16 | .cm-s-night span.cm-keyword { color: #599eff; } 17 | .cm-s-night span.cm-string { color: #37f14a; } 18 | .cm-s-night span.cm-meta { color: #7678e2; } 19 | .cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } 20 | .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; } 21 | .cm-s-night span.cm-bracket { color: #8da6ce; } 22 | .cm-s-night span.cm-comment { color: #6900a1; } 23 | .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } 24 | .cm-s-night span.cm-link { color: #845dc4; } 25 | .cm-s-night span.cm-error { color: #9d1e15; } 26 | 27 | .cm-s-night .CodeMirror-activeline-background {background: #1C005A !important;} 28 | .cm-s-night .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;} 29 | -------------------------------------------------------------------------------- /src/main/java/com/wip/dao/MetaDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/24 17:03 5 | **/ 6 | package com.wip.dao; 7 | 8 | import com.wip.dto.MetaDto; 9 | import com.wip.dto.cond.MetaCond; 10 | import com.wip.model.MetaDomain; 11 | import org.apache.ibatis.annotations.Mapper; 12 | import org.apache.ibatis.annotations.Param; 13 | 14 | import java.util.List; 15 | import java.util.Map; 16 | 17 | /** 18 | * 项目相关Dao接口 19 | */ 20 | @Mapper 21 | public interface MetaDao { 22 | 23 | /** 24 | * 添加项目 25 | * @param meta 项目对象 26 | * @return 27 | */ 28 | int addMeta(MetaDomain meta); 29 | 30 | /** 31 | * 更新项目 32 | * @param meta 项目对象 33 | * @return 34 | */ 35 | int updateMeta(MetaDomain meta); 36 | 37 | /** 38 | * 根据条件查询 39 | * @param metaCond 40 | * @return 41 | */ 42 | List getMetasByCond(MetaCond metaCond); 43 | 44 | /** 45 | * 根据ID获取项目 46 | * @param mid 47 | * @return 48 | */ 49 | MetaDomain getMetaById(@Param("mid") Integer mid); 50 | 51 | /** 52 | * 根据sql查询 53 | * @param parMap 54 | * @return 55 | */ 56 | List selectFromSql(Map parMap); 57 | 58 | /** 59 | * 删除项目 60 | * @param mid 61 | */ 62 | void deleteMetaById(Integer mid); 63 | 64 | /** 65 | * 根据类型获取meta数量 66 | * @param type 67 | * @return 68 | */ 69 | Long getMetasCountByType(@Param("type") String type); 70 | 71 | /** 72 | * 通过Meta名查找Meta项目 73 | * @param type 74 | * @param name 75 | * @return 76 | */ 77 | MetaDomain getMetaByName(@Param("type") String type, @Param("name") String name); 78 | } 79 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/turtle/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Turtle mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Turtle mode

27 |
41 | 47 | 48 |

MIME types defined: text/turtle.

49 | 50 |
51 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/scroll/scrollpastend.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineOption("scrollPastEnd", false, function(cm, val, old) { 15 | if (old && old != CodeMirror.Init) { 16 | cm.off("change", onChange); 17 | cm.off("refresh", updateBottomMargin); 18 | cm.display.lineSpace.parentNode.style.paddingBottom = ""; 19 | cm.state.scrollPastEndPadding = null; 20 | } 21 | if (val) { 22 | cm.on("change", onChange); 23 | cm.on("refresh", updateBottomMargin); 24 | updateBottomMargin(cm); 25 | } 26 | }); 27 | 28 | function onChange(cm, change) { 29 | if (CodeMirror.changeEnd(change).line == cm.lastLine()) 30 | updateBottomMargin(cm); 31 | } 32 | 33 | function updateBottomMargin(cm) { 34 | var padding = ""; 35 | if (cm.lineCount() > 1) { 36 | var totalH = cm.display.scroller.clientHeight - 30, 37 | lastLineH = cm.getLineHandle(cm.lastLine()).height; 38 | padding = (totalH - lastLineH) + "px"; 39 | } 40 | if (cm.state.scrollPastEndPadding != padding) { 41 | cm.state.scrollPastEndPadding = padding; 42 | cm.display.lineSpace.parentNode.style.paddingBottom = padding; 43 | cm.setSize(); 44 | } 45 | } 46 | }); 47 | -------------------------------------------------------------------------------- /src/main/java/com/wip/model/AttAchDomain.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/8/3 16:18 5 | **/ 6 | package com.wip.model; 7 | 8 | /** 9 | * 网站图片文件相关表 10 | */ 11 | public class AttAchDomain { 12 | 13 | /** 14 | * 主键编号 15 | */ 16 | private Integer id; 17 | 18 | /** 19 | * 文件名称 20 | */ 21 | private String fname; 22 | 23 | /** 24 | * 文件类型 25 | */ 26 | private String ftype; 27 | 28 | /** 29 | * 文件的地址 30 | */ 31 | private String fkey; 32 | 33 | /** 34 | * 上传人的ID 35 | */ 36 | private Integer authorId; 37 | 38 | /** 39 | * 创建的时间戳 40 | */ 41 | private Integer created; 42 | 43 | public Integer getId() { 44 | return id; 45 | } 46 | 47 | public void setId(Integer id) { 48 | this.id = id; 49 | } 50 | 51 | public String getFname() { 52 | return fname; 53 | } 54 | 55 | public void setFname(String fname) { 56 | this.fname = fname; 57 | } 58 | 59 | public String getFtype() { 60 | return ftype; 61 | } 62 | 63 | public void setFtype(String ftype) { 64 | this.ftype = ftype; 65 | } 66 | 67 | public String getFkey() { 68 | return fkey; 69 | } 70 | 71 | public void setFkey(String fkey) { 72 | this.fkey = fkey; 73 | } 74 | 75 | public Integer getAuthorId() { 76 | return authorId; 77 | } 78 | 79 | public void setAuthorId(Integer authorId) { 80 | this.authorId = authorId; 81 | } 82 | 83 | public Integer getCreated() { 84 | return created; 85 | } 86 | 87 | public void setCreated(Integer created) { 88 | this.created = created; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/pascal/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Pascal mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Pascal mode

27 | 28 | 29 |
52 | 53 | 59 | 60 |

MIME types defined: text/x-pascal.

61 |
62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kyrie Blog 2 | ## 个人博客系统 3 | Kyrie Blog是由SpringBoot1.5 + MyBatis + Thymeleaf等技术实现的个人网站。本项目在这个blog的基础上做了单元测试、集成测试、系统测试等。 4 | ### 技术栈 5 | #### 后端 6 | * 核心框架:SpringBoot 7 | * 持久层框架:MyBatis 8 | * 模板框架:Thymeleaf 9 | * 分页插件:PageHelper 10 | * 缓存框架:Ehcache 11 | * Markdown:Commonmark 12 | 13 | #### 前端 14 | * JS框架:Jquery 15 | * CSS框架:Bootstrap 16 | * 富文本编辑器:editor.md 17 | * 文件上传:dropzone 18 | * 弹框插件:sweetalert 19 | 20 | #### 第三方 21 | * 七牛云(文件上传) 22 | * 百度统计 23 | 24 | ### 预览效果 25 | #### 前端效果 26 | ![index](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/index.png) 27 | 28 | ![archives](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/archives.png) 29 | 30 | ![detail](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/detail.png) 31 | 32 | ![category](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/category.png) 33 | 34 | ![about](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/about.png) 35 | 36 | #### 后端效果 37 | ![adminlogin](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/adminlogin.png) 38 | 39 | ![adminindex](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/adminindex.png) 40 | 41 | ![articlepublish](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/articlepublish.png) 42 | 43 | ![articlemanager](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/articlemanager.png) 44 | 45 | ![filemanager](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/filemanager.png) 46 | 47 | ![setting](http://caozongpeng.oss-cn-shenzhen.aliyuncs.com/image/blog/setting.png) 48 | 49 | ### 安装 50 | 下载源码,执行sql文件,然后修改application-dev.yml文件中连接数据库的用户名、密码。运行项目即可。 51 | 52 | 前端访问地址:http://localhost:8888 53 | 54 | 后台访问地址:http://localhost:8888/admin 用户名:admin 密码:123456 55 | 56 | ### 更新日志 57 | 2018-08-04发布第一个版本 58 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/pig/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Pig Latin mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Pig Latin mode

27 |
39 | 40 | 47 | 48 |

49 | Simple mode that handles Pig Latin language. 50 |

51 | 52 |

MIME type defined: text/x-pig 53 | (PIG code) 54 | 55 |

56 | -------------------------------------------------------------------------------- /src/main/java/com/wip/utils/APIResponse.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/23 13:50 5 | **/ 6 | package com.wip.utils; 7 | 8 | public class APIResponse { 9 | 10 | private static final String CODE_SUCCESS = "success"; 11 | 12 | private static final String CODE_FAIL = "fail"; 13 | 14 | private String code; 15 | private T data; 16 | private String msg; 17 | 18 | public APIResponse() { 19 | 20 | } 21 | 22 | public APIResponse(String code) { 23 | this.code = code; 24 | } 25 | 26 | public APIResponse(String code, T data) { 27 | this.code = code; 28 | this.data = data; 29 | } 30 | 31 | public APIResponse(String code, String msg) { 32 | this.code = code; 33 | this.msg = msg; 34 | } 35 | 36 | public static APIResponse success() { 37 | return new APIResponse(CODE_SUCCESS); 38 | } 39 | 40 | public static APIResponse success(Object data) { 41 | return new APIResponse(CODE_SUCCESS, data); 42 | } 43 | 44 | public static APIResponse fail(String msg) { 45 | return new APIResponse(CODE_FAIL,msg); 46 | } 47 | 48 | public static APIResponse widthCode(String errorCode) { 49 | return new APIResponse(errorCode); 50 | } 51 | 52 | public String getCode() { 53 | return code; 54 | } 55 | 56 | public void setCode(String code) { 57 | this.code = code; 58 | } 59 | 60 | public T getData() { 61 | return data; 62 | } 63 | 64 | public void setData(T data) { 65 | this.data = data; 66 | } 67 | 68 | public String getMsg() { 69 | return msg; 70 | } 71 | 72 | public void setMsg(String msg) { 73 | this.msg = msg; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/plugins/test-plugin/test-plugin.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Test plugin for Editor.md 3 | * 4 | * @file test-plugin.js 5 | * @author pandao 6 | * @version 1.2.0 7 | * @updateTime 2015-03-07 8 | * {@link https://github.com/pandao/editor.md} 9 | * @license MIT 10 | */ 11 | 12 | (function() { 13 | 14 | var factory = function (exports) { 15 | 16 | var $ = jQuery; // if using module loader(Require.js/Sea.js). 17 | 18 | exports.testPlugin = function(){ 19 | alert("testPlugin"); 20 | }; 21 | 22 | exports.fn.testPluginMethodA = function() { 23 | /* 24 | var _this = this; // this == the current instance object of Editor.md 25 | var lang = _this.lang; 26 | var settings = _this.settings; 27 | var editor = this.editor; 28 | var cursor = cm.getCursor(); 29 | var selection = cm.getSelection(); 30 | var classPrefix = this.classPrefix; 31 | 32 | cm.focus(); 33 | */ 34 | //.... 35 | 36 | alert("testPluginMethodA"); 37 | }; 38 | 39 | }; 40 | 41 | // CommonJS/Node.js 42 | if (typeof require === "function" && typeof exports === "object" && typeof module === "object") 43 | { 44 | module.exports = factory; 45 | } 46 | else if (typeof define === "function") // AMD/CMD/Sea.js 47 | { 48 | if (define.amd) { // for Require.js 49 | 50 | define(["editormd"], function(editormd) { 51 | factory(editormd); 52 | }); 53 | 54 | } else { // for Sea.js 55 | define(function(require) { 56 | var editormd = require("./../../editormd"); 57 | factory(editormd); 58 | }); 59 | } 60 | } 61 | else 62 | { 63 | factory(window.editormd); 64 | } 65 | 66 | })(); 67 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/vbscript/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: VBScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

VBScript mode

27 | 28 | 29 |
46 | 47 | 53 | 54 |

MIME types defined: text/vbscript.

55 |
56 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/the-matrix.css: -------------------------------------------------------------------------------- 1 | .cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; } 2 | .cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D !important; } 3 | .cm-s-the-matrix.CodeMirror ::selection { background: rgba(45, 45, 45, 0.99); } 4 | .cm-s-the-matrix.CodeMirror ::-moz-selection { background: rgba(45, 45, 45, 0.99); } 5 | .cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; } 6 | .cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; } 7 | .cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; } 8 | .cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; } 9 | .cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00 !important; } 10 | 11 | .cm-s-the-matrix span.cm-keyword {color: #008803; font-weight: bold;} 12 | .cm-s-the-matrix span.cm-atom {color: #3FF;} 13 | .cm-s-the-matrix span.cm-number {color: #FFB94F;} 14 | .cm-s-the-matrix span.cm-def {color: #99C;} 15 | .cm-s-the-matrix span.cm-variable {color: #F6C;} 16 | .cm-s-the-matrix span.cm-variable-2 {color: #C6F;} 17 | .cm-s-the-matrix span.cm-variable-3 {color: #96F;} 18 | .cm-s-the-matrix span.cm-property {color: #62FFA0;} 19 | .cm-s-the-matrix span.cm-operator {color: #999} 20 | .cm-s-the-matrix span.cm-comment {color: #CCCCCC;} 21 | .cm-s-the-matrix span.cm-string {color: #39C;} 22 | .cm-s-the-matrix span.cm-meta {color: #C9F;} 23 | .cm-s-the-matrix span.cm-qualifier {color: #FFF700;} 24 | .cm-s-the-matrix span.cm-builtin {color: #30a;} 25 | .cm-s-the-matrix span.cm-bracket {color: #cc7;} 26 | .cm-s-the-matrix span.cm-tag {color: #FFBD40;} 27 | .cm-s-the-matrix span.cm-attribute {color: #FFF700;} 28 | .cm-s-the-matrix span.cm-error {color: #FF0000;} 29 | 30 | .cm-s-the-matrix .CodeMirror-activeline-background {background: #040;} 31 | -------------------------------------------------------------------------------- /src/main/java/com/wip/utils/Tools.java: -------------------------------------------------------------------------------- 1 | package com.wip.utils; 2 | 3 | import sun.misc.BASE64Decoder; 4 | import sun.misc.BASE64Encoder; 5 | 6 | import javax.crypto.Cipher; 7 | import javax.crypto.spec.SecretKeySpec; 8 | import java.util.Random; 9 | 10 | public class Tools { 11 | 12 | private static final Random random = new Random(); 13 | 14 | 15 | public static String enAes(String data, String key) throws Exception { 16 | Cipher cipher = Cipher.getInstance("AES"); 17 | SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"),"ASE"); 18 | cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); 19 | byte[] encryptedBytes = cipher.doFinal(data.getBytes()); 20 | return new BASE64Encoder().encode(encryptedBytes); 21 | } 22 | 23 | public static String deAes(String data, String key) throws Exception { 24 | Cipher cipher = Cipher.getInstance("AES"); 25 | SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); 26 | cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); 27 | byte[] cipherTextBytes = new BASE64Decoder().decodeBuffer(data); 28 | byte[] decValue = cipher.doFinal(cipherTextBytes); 29 | return new String(decValue); 30 | } 31 | 32 | /** 33 | * 判断字符串是否为数字和有正确的值 34 | * @param str 35 | * @return 36 | */ 37 | public static boolean isNumber(String str) { 38 | if (null != str && 0 != str.trim().length() && str.matches("\\d*")) { 39 | return true; 40 | } 41 | return false; 42 | } 43 | 44 | /** 45 | * 随机数 46 | * @param min 47 | * @param max 48 | * @return 49 | */ 50 | public static int rand(int min, int max) { 51 | return random.nextInt(max) % (max - min + 1) + min; 52 | } 53 | 54 | 55 | 56 | } 57 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/gherkin/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Gherkin mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Gherkin mode

27 |
42 | 45 | 46 |

MIME types defined: text/x-feature.

47 | 48 |
49 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/properties/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Properties files mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Properties files mode

27 |
46 | 49 | 50 |

MIME types defined: text/x-properties, 51 | text/x-ini.

52 | 53 |
54 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/scss/prettify.scss: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | 3 | /*! Pretty printing styles. Used with prettify.js. */ 4 | /* SPAN elements with the classes below are added by prettyprint. */ 5 | .pln { color: #000 } /* plain text */ 6 | 7 | @media screen { 8 | .str { color: #080 } /* string content */ 9 | .kwd { color: #008 } /* a keyword */ 10 | .com { color: #800 } /* a comment */ 11 | .typ { color: #606 } /* a type name */ 12 | .lit { color: #066 } /* a literal value */ 13 | /* punctuation, lisp open bracket, lisp close bracket */ 14 | .pun, .opn, .clo { color: #660 } 15 | .tag { color: #008 } /* a markup tag name */ 16 | .atn { color: #606 } /* a markup attribute name */ 17 | .atv { color: #080 } /* a markup attribute value */ 18 | .dec, .var { color: #606 } /* a declaration; a variable name */ 19 | .fun { color: red } /* a function name */ 20 | } 21 | 22 | /* Use higher contrast and text-weight for printable form. */ 23 | @media print, projection { 24 | .str { color: #060 } 25 | .kwd { color: #006; font-weight: bold } 26 | .com { color: #600; font-style: italic } 27 | .typ { color: #404; font-weight: bold } 28 | .lit { color: #044 } 29 | .pun, .opn, .clo { color: #440 } 30 | .tag { color: #006; font-weight: bold } 31 | .atn { color: #404 } 32 | .atv { color: #060 } 33 | } 34 | 35 | /* Put a border around prettyprinted code snippets. */ 36 | pre.prettyprint { padding: 2px; border: 1px solid #888 } 37 | 38 | /* Specify class=linenums on a pre to get line numbering */ 39 | ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */ 40 | li.L0, 41 | li.L1, 42 | li.L2, 43 | li.L3, 44 | li.L5, 45 | li.L6, 46 | li.L7, 47 | li.L8 { list-style-type: none } 48 | /* Alternate shading for lines */ 49 | li.L1, 50 | li.L3, 51 | li.L5, 52 | li.L7, 53 | li.L9 { background: #eee } -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/colorforth.css: -------------------------------------------------------------------------------- 1 | .cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; } 2 | .cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; } 3 | .cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; } 4 | .cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; } 5 | .cm-s-colorforth .CodeMirror-linenumber { color: #bababa; } 6 | .cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white !important; } 7 | 8 | .cm-s-colorforth span.cm-comment { color: #ededed; } 9 | .cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; } 10 | .cm-s-colorforth span.cm-keyword { color: #ffd900; } 11 | .cm-s-colorforth span.cm-builtin { color: #00d95a; } 12 | .cm-s-colorforth span.cm-variable { color: #73ff00; } 13 | .cm-s-colorforth span.cm-string { color: #007bff; } 14 | .cm-s-colorforth span.cm-number { color: #00c4ff; } 15 | .cm-s-colorforth span.cm-atom { color: #606060; } 16 | 17 | .cm-s-colorforth span.cm-variable-2 { color: #EEE; } 18 | .cm-s-colorforth span.cm-variable-3 { color: #DDD; } 19 | .cm-s-colorforth span.cm-property {} 20 | .cm-s-colorforth span.cm-operator {} 21 | 22 | .cm-s-colorforth span.cm-meta { color: yellow; } 23 | .cm-s-colorforth span.cm-qualifier { color: #FFF700; } 24 | .cm-s-colorforth span.cm-bracket { color: #cc7; } 25 | .cm-s-colorforth span.cm-tag { color: #FFBD40; } 26 | .cm-s-colorforth span.cm-attribute { color: #FFF700; } 27 | .cm-s-colorforth span.cm-error { color: #f00; } 28 | 29 | .cm-s-colorforth .CodeMirror-selected { background: #333d53 !important; } 30 | 31 | .cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); } 32 | 33 | .cm-s-colorforth .CodeMirror-activeline-background {background: #253540 !important;} 34 | -------------------------------------------------------------------------------- /src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | server: 2 | port: 8888 3 | spring: 4 | datasource: 5 | name: mysql_test 6 | type: com.alibaba.druid.pool.DruidDataSource 7 | #druid相关配置 8 | druid: 9 | #监控统计拦截的filters 10 | filters: stat 11 | driver-class-name: com.mysql.jdbc.Driver 12 | #基本属性 13 | url: jdbc:mysql://127.0.0.1:3306/blog?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=true 14 | username: root 15 | password: admin 16 | #配置初始化大小/最小/最大 17 | initial-size: 1 18 | min-idle: 1 19 | max-active: 20 20 | #获取连接等待超时时间 21 | max-wait: 60000 22 | #间隔多久进行一次检测,检测需要关闭的空闲连接 23 | time-between-eviction-runs-millis: 60000 24 | #一个连接在池中最小生存的时间 25 | min-evictable-idle-time-millis: 300000 26 | validation-query: SELECT 'x' 27 | test-while-idle: true 28 | test-on-borrow: false 29 | test-on-return: false 30 | #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false 31 | pool-prepared-statements: false 32 | max-pool-prepared-statement-per-connection-size: 20 33 | thymeleaf: 34 | prefix: classpath:/templates/ 35 | check-template-location: true 36 | suffix: .html 37 | encoding: utf-8 38 | cache: false 39 | 40 | aop: 41 | auto: true 42 | proxy-target-class: true 43 | 44 | servlet: 45 | multipart: 46 | max-file-size: 10Mb 47 | max-request-size: 100Mb 48 | 49 | 50 | 51 | logging: 52 | level: 53 | com.wip.dao: DEBUG 54 | 55 | 56 | 57 | mybatis: 58 | mapper-locations: classpath:mapper/*.xml 59 | type-aliases-package: com.wip.model 60 | 61 | swagger: 62 | show: true 63 | #分页 64 | pagehelper: 65 | helper-dialect: mysql 66 | reasonable: true 67 | support-methods-arguments: true 68 | params: count=countSql 69 | retrunPageInfo: check 70 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/fold/indent-fold.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.registerHelper("fold", "indent", function(cm, start) { 15 | var tabSize = cm.getOption("tabSize"), firstLine = cm.getLine(start.line); 16 | if (!/\S/.test(firstLine)) return; 17 | var getIndent = function(line) { 18 | return CodeMirror.countColumn(line, null, tabSize); 19 | }; 20 | var myIndent = getIndent(firstLine); 21 | var lastLineInFold = null; 22 | // Go through lines until we find a line that definitely doesn't belong in 23 | // the block we're folding, or to the end. 24 | for (var i = start.line + 1, end = cm.lastLine(); i <= end; ++i) { 25 | var curLine = cm.getLine(i); 26 | var curIndent = getIndent(curLine); 27 | if (curIndent > myIndent) { 28 | // Lines with a greater indent are considered part of the block. 29 | lastLineInFold = i; 30 | } else if (!/\S/.test(curLine)) { 31 | // Empty lines might be breaks within the block we're trying to fold. 32 | } else { 33 | // A non-empty line at an indent equal to or less than ours marks the 34 | // start of another block. 35 | break; 36 | } 37 | } 38 | if (lastLineInFold) return { 39 | from: CodeMirror.Pos(start.line, firstLine.length), 40 | to: CodeMirror.Pos(lastLineInFold, cm.getLine(lastLineInFold).length) 41 | }; 42 | }); 43 | 44 | }); 45 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/fold/markdown-fold.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.registerHelper("fold", "markdown", function(cm, start) { 15 | var maxDepth = 100; 16 | 17 | function isHeader(lineNo) { 18 | var tokentype = cm.getTokenTypeAt(CodeMirror.Pos(lineNo, 0)); 19 | return tokentype && /\bheader\b/.test(tokentype); 20 | } 21 | 22 | function headerLevel(lineNo, line, nextLine) { 23 | var match = line && line.match(/^#+/); 24 | if (match && isHeader(lineNo)) return match[0].length; 25 | match = nextLine && nextLine.match(/^[=\-]+\s*$/); 26 | if (match && isHeader(lineNo + 1)) return nextLine[0] == "=" ? 1 : 2; 27 | return maxDepth; 28 | } 29 | 30 | var firstLine = cm.getLine(start.line), nextLine = cm.getLine(start.line + 1); 31 | var level = headerLevel(start.line, firstLine, nextLine); 32 | if (level === maxDepth) return undefined; 33 | 34 | var lastLineNo = cm.lastLine(); 35 | var end = start.line, nextNextLine = cm.getLine(end + 2); 36 | while (end < lastLineNo) { 37 | if (headerLevel(end + 1, nextLine, nextNextLine) <= level) break; 38 | ++end; 39 | nextLine = nextNextLine; 40 | nextNextLine = cm.getLine(end + 2); 41 | } 42 | 43 | return { 44 | from: CodeMirror.Pos(start.line, firstLine.length), 45 | to: CodeMirror.Pos(end, cm.getLine(end).length) 46 | }; 47 | }); 48 | 49 | }); 50 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/addon/hint/anyword-hint.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | var WORD = /[\w$]+/, RANGE = 500; 15 | 16 | CodeMirror.registerHelper("hint", "anyword", function(editor, options) { 17 | var word = options && options.word || WORD; 18 | var range = options && options.range || RANGE; 19 | var cur = editor.getCursor(), curLine = editor.getLine(cur.line); 20 | var end = cur.ch, start = end; 21 | while (start && word.test(curLine.charAt(start - 1))) --start; 22 | var curWord = start != end && curLine.slice(start, end); 23 | 24 | var list = [], seen = {}; 25 | var re = new RegExp(word.source, "g"); 26 | for (var dir = -1; dir <= 1; dir += 2) { 27 | var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; 28 | for (; line != endLine; line += dir) { 29 | var text = editor.getLine(line), m; 30 | while (m = re.exec(text)) { 31 | if (line == cur.line && m[0] === curWord) continue; 32 | if ((!curWord || m[0].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[0])) { 33 | seen[m[0]] = true; 34 | list.push(m[0]); 35 | } 36 | } 37 | } 38 | } 39 | return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)}; 40 | }); 41 | }); 42 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/javascript/typescript.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: TypeScript mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

TypeScript mode

27 | 28 | 29 |
51 | 52 | 59 | 60 |

This is a specialization of the JavaScript mode.

61 |
62 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/blackboard.css: -------------------------------------------------------------------------------- 1 | /* Port of TextMate's Blackboard theme */ 2 | 3 | .cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; } 4 | .cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; } 5 | .cm-s-blackboard.CodeMirror ::selection { background: rgba(37, 59, 118, .99); } 6 | .cm-s-blackboard.CodeMirror ::-moz-selection { background: rgba(37, 59, 118, .99); } 7 | .cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; } 8 | .cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; } 9 | .cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; } 10 | .cm-s-blackboard .CodeMirror-linenumber { color: #888; } 11 | .cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; } 12 | 13 | .cm-s-blackboard .cm-keyword { color: #FBDE2D; } 14 | .cm-s-blackboard .cm-atom { color: #D8FA3C; } 15 | .cm-s-blackboard .cm-number { color: #D8FA3C; } 16 | .cm-s-blackboard .cm-def { color: #8DA6CE; } 17 | .cm-s-blackboard .cm-variable { color: #FF6400; } 18 | .cm-s-blackboard .cm-operator { color: #FBDE2D;} 19 | .cm-s-blackboard .cm-comment { color: #AEAEAE; } 20 | .cm-s-blackboard .cm-string { color: #61CE3C; } 21 | .cm-s-blackboard .cm-string-2 { color: #61CE3C; } 22 | .cm-s-blackboard .cm-meta { color: #D8FA3C; } 23 | .cm-s-blackboard .cm-builtin { color: #8DA6CE; } 24 | .cm-s-blackboard .cm-tag { color: #8DA6CE; } 25 | .cm-s-blackboard .cm-attribute { color: #8DA6CE; } 26 | .cm-s-blackboard .cm-header { color: #FF6400; } 27 | .cm-s-blackboard .cm-hr { color: #AEAEAE; } 28 | .cm-s-blackboard .cm-link { color: #8DA6CE; } 29 | .cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; } 30 | 31 | .cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;} 32 | .cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important} -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/sass/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Sass mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 25 | 26 |
27 |

Sass mode

28 |
58 | 64 | 65 |

MIME types defined: text/x-sass.

66 |
67 | -------------------------------------------------------------------------------- /src/main/java/com/wip/service/user/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/23 14:27 5 | **/ 6 | package com.wip.service.user.impl; 7 | 8 | import com.wip.constant.ErrorConstant; 9 | import com.wip.dao.UserDao; 10 | import com.wip.exception.BusinessException; 11 | import com.wip.model.UserDomain; 12 | import com.wip.service.user.UserService; 13 | import com.wip.utils.APIResponse; 14 | import com.wip.utils.TaleUtils; 15 | import org.apache.commons.lang3.StringUtils; 16 | import org.springframework.beans.factory.annotation.Autowired; 17 | import org.springframework.stereotype.Service; 18 | import org.springframework.transaction.annotation.Transactional; 19 | 20 | /** 21 | * 用户相关Service接口实现 22 | */ 23 | @Service 24 | public class UserServiceImpl implements UserService { 25 | 26 | @Autowired 27 | private UserDao userDao;//这里会报错,但是并不影响 28 | 29 | 30 | @Override 31 | public UserDomain login(String username, String password) { 32 | 33 | if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) 34 | throw BusinessException.withErrorCode(ErrorConstant.Auth.USERNAME_PASSWORD_IS_EMPTY); 35 | 36 | String pwd = TaleUtils.MD5encode(username + password); 37 | UserDomain user = userDao.getUserInfoByCond(username,pwd); 38 | if (null == user) 39 | throw BusinessException.withErrorCode(ErrorConstant.Auth.USERNAME_PASSWORD_ERROR); 40 | return user; 41 | } 42 | 43 | @Override 44 | public UserDomain getUserInfoById(Integer uid) { 45 | return userDao.getUserInfoById(uid); 46 | } 47 | 48 | // 开启事务 49 | @Transactional 50 | @Override 51 | public int updateUserInfo(UserDomain user) { 52 | if (null == user.getUid()) 53 | throw BusinessException.withErrorCode("用户编号不能为空"); 54 | return userDao.updateUserInfo(user); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/perl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Perl mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Perl mode

27 | 28 | 29 |
67 | 68 | 73 | 74 |

MIME types defined: text/x-perl.

75 |
76 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/css/contact.css: -------------------------------------------------------------------------------- 1 | /* Form style */ 2 | input, textarea, select { font-size: 15px; font-family:Lora, "Helvetica Neue", Helvetica, Arial, sans-serif; color:#888; border:0; -webkit-transition: all 0.2s ease 0s; -moz-transition: all 0.2s ease 0s; -o-transition: all 0.2s ease 0s; transition: all 0.2s ease 0s; float:none; display:block; margin:0px; -webkit-appearance: none; background:none } 3 | textarea { resize: none; } 4 | #message { margin: 0; padding: 0px; z-index:200; height:auto; } 5 | .error_message, #success_page { display: block; height:auto; color:#d31800; font-style:italic; font-size: 12px; padding: 10px 0px 0px 0px; line-height:1.5; margin-bottom:-10px; position:relative; } 6 | #success_page { color:#2b2b2b !important; } 7 | .loader { display:none; } 8 | 9 | /* Form Element Styling */ 10 | .form-part { padding: 0; margin-top:0px; } 11 | .form-part > textarea, .form-part > select, .form-part > input:not([type="submit"]):not([type="image"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]) { 12 | display: block; 13 | width: 100%; 14 | padding: 12px 15px 14px; margin-bottom: 10px; border:1px dotted #d8d8d8; text-align: left; border-radius:3px; line-height: 20px; 15 | } 16 | .lt-ie9 .form-part textarea, .lt-ie9 .form-part select, .lt-ie9 .form-part input { display: block; width: 100%; padding: 25px 29px; font-size: 17px; border-bottom:1px solid #d8d8d8; text-align: left; font-style: normal; } 17 | .form-part > textarea { height: 200px; resize: none; } 18 | .form-part > .input-wrapper { position: relative; } 19 | .send-btn { border-radius:30px; border:1px solid #d8d8d8; padding:10px 25px 12px; line-height:1; height:36px; display:inline-block; margin-bottom:20px; margin-top:20px; font-size:11px !important; text-transform:uppercase; font-weight:400; letter-spacing:1px; font-family:"Montserrat", Arial, Helvetica, sans-serif; color:#2b2b2b; position:relative; 20 | } 21 | .send-btn:hover { background:#d8d8d8; } 22 | -------------------------------------------------------------------------------- /src/main/resources/templates/blog/archives.html: -------------------------------------------------------------------------------- 1 | 2 | 5 |
6 | 7 |
8 |
9 |
10 |
11 | 12 | 不错! 目前共计 篇日志。 继续努力。 13 | 14 |
15 |

2018

16 |
17 | 18 | 19 |
20 |
21 |

22 | 23 | 24 | 25 |

26 | 29 |
30 |
31 |
32 |
33 | 34 |
35 |
36 |
37 |
38 | 39 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/3024-day.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: 3024 day 4 | Author: Jan T. Sott (http://github.com/idleberg) 5 | 6 | CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) 7 | Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) 8 | 9 | */ 10 | 11 | .cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;} 12 | .cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;} 13 | .cm-s-3024-day.CodeMirror ::selection { background: #d6d5d4; } 14 | .cm-s-3024-day.CodeMirror ::-moz-selection { background: #d9d9d9; } 15 | 16 | .cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;} 17 | .cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; } 18 | .cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; } 19 | .cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;} 20 | 21 | .cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;} 22 | 23 | .cm-s-3024-day span.cm-comment {color: #cdab53;} 24 | .cm-s-3024-day span.cm-atom {color: #a16a94;} 25 | .cm-s-3024-day span.cm-number {color: #a16a94;} 26 | 27 | .cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;} 28 | .cm-s-3024-day span.cm-keyword {color: #db2d20;} 29 | .cm-s-3024-day span.cm-string {color: #fded02;} 30 | 31 | .cm-s-3024-day span.cm-variable {color: #01a252;} 32 | .cm-s-3024-day span.cm-variable-2 {color: #01a0e4;} 33 | .cm-s-3024-day span.cm-def {color: #e8bbd0;} 34 | .cm-s-3024-day span.cm-bracket {color: #3a3432;} 35 | .cm-s-3024-day span.cm-tag {color: #db2d20;} 36 | .cm-s-3024-day span.cm-link {color: #a16a94;} 37 | .cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;} 38 | 39 | .cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;} 40 | .cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: #a16a94 !important;} 41 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/theme/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Name: Tomorrow Night - Bright 4 | Author: Chris Kempson 5 | 6 | Port done by Gerard Braad 7 | 8 | */ 9 | 10 | .cm-s-tomorrow-night-bright.CodeMirror {background: #000000; color: #eaeaea;} 11 | .cm-s-tomorrow-night-bright div.CodeMirror-selected {background: #424242 !important;} 12 | .cm-s-tomorrow-night-bright .CodeMirror-gutters {background: #000000; border-right: 0px;} 13 | .cm-s-tomorrow-night-bright .CodeMirror-guttermarker { color: #e78c45; } 14 | .cm-s-tomorrow-night-bright .CodeMirror-guttermarker-subtle { color: #777; } 15 | .cm-s-tomorrow-night-bright .CodeMirror-linenumber {color: #424242;} 16 | .cm-s-tomorrow-night-bright .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} 17 | 18 | .cm-s-tomorrow-night-bright span.cm-comment {color: #d27b53;} 19 | .cm-s-tomorrow-night-bright span.cm-atom {color: #a16a94;} 20 | .cm-s-tomorrow-night-bright span.cm-number {color: #a16a94;} 21 | 22 | .cm-s-tomorrow-night-bright span.cm-property, .cm-s-tomorrow-night-bright span.cm-attribute {color: #99cc99;} 23 | .cm-s-tomorrow-night-bright span.cm-keyword {color: #d54e53;} 24 | .cm-s-tomorrow-night-bright span.cm-string {color: #e7c547;} 25 | 26 | .cm-s-tomorrow-night-bright span.cm-variable {color: #b9ca4a;} 27 | .cm-s-tomorrow-night-bright span.cm-variable-2 {color: #7aa6da;} 28 | .cm-s-tomorrow-night-bright span.cm-def {color: #e78c45;} 29 | .cm-s-tomorrow-night-bright span.cm-bracket {color: #eaeaea;} 30 | .cm-s-tomorrow-night-bright span.cm-tag {color: #d54e53;} 31 | .cm-s-tomorrow-night-bright span.cm-link {color: #a16a94;} 32 | .cm-s-tomorrow-night-bright span.cm-error {background: #d54e53; color: #6A6A6A;} 33 | 34 | .cm-s-tomorrow-night-bright .CodeMirror-activeline-background {background: #2a2a2a !important;} 35 | .cm-s-tomorrow-night-bright .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} 36 | -------------------------------------------------------------------------------- /src/main/java/com/wip/model/LogDomain.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by IntelliJ IDEA. 3 | * User: Kyrie 4 | * DateTime: 2018/7/23 17:00 5 | **/ 6 | package com.wip.model; 7 | 8 | import java.io.Serializable; 9 | 10 | /** 11 | * 日志表 12 | */ 13 | public class LogDomain implements Serializable { 14 | 15 | private static final long serialVersionUID = 1L; 16 | 17 | /** 18 | * 日志主键 19 | */ 20 | private Integer id; 21 | 22 | /** 23 | * 产生的动作 24 | */ 25 | private String action; 26 | 27 | /** 28 | * 产生的数据 29 | */ 30 | private String data; 31 | 32 | /** 33 | * 发生人id 34 | */ 35 | private Integer authorId; 36 | 37 | /** 38 | * 日志产生的IP 39 | */ 40 | private String ip; 41 | 42 | /** 43 | * 日志创建时间 44 | */ 45 | private Integer created; 46 | 47 | public static long getSerialVersionUID() { 48 | return serialVersionUID; 49 | } 50 | 51 | public Integer getId() { 52 | return id; 53 | } 54 | 55 | public void setId(Integer id) { 56 | this.id = id; 57 | } 58 | 59 | public String getAction() { 60 | return action; 61 | } 62 | 63 | public void setAction(String action) { 64 | this.action = action; 65 | } 66 | 67 | public String getData() { 68 | return data; 69 | } 70 | 71 | public void setData(String data) { 72 | this.data = data; 73 | } 74 | 75 | public Integer getAuthorId() { 76 | return authorId; 77 | } 78 | 79 | public void setAuthorId(Integer authorId) { 80 | this.authorId = authorId; 81 | } 82 | 83 | public String getIp() { 84 | return ip; 85 | } 86 | 87 | public void setIp(String ip) { 88 | this.ip = ip; 89 | } 90 | 91 | public Integer getCreated() { 92 | return created; 93 | } 94 | 95 | public void setCreated(Integer created) { 96 | this.created = created; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/idl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: IDL mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

IDL mode

27 | 28 |
52 | 62 | 63 |

MIME types defined: text/x-idl.

64 |
65 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/editormd/lib/codemirror/mode/dart/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | CodeMirror: Dart mode 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 24 | 25 |
26 |

Dart mode

27 |
28 | 62 |
63 | 64 | 70 | 71 |
72 | -------------------------------------------------------------------------------- /src/main/resources/static/admin/plugins/md/js/jquery.scrollto.js: -------------------------------------------------------------------------------- 1 | (function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1,limit:true};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return/webkit/i.test(navigator.userAgent)||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){if(f==null){return}var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);if(!k.length){return}case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(d.limit&&/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery); --------------------------------------------------------------------------------