├── .gitattributes ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── build.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── screenshots ├── blog.png ├── editor.png ├── home.png ├── logo.png ├── posts.png └── resume.png └── src └── main ├── java ├── META-INF │ └── MANIFEST.MF └── me │ └── zbl │ └── fullstack │ ├── FullstackApplication.java │ ├── annotation │ └── package-info.java │ ├── aspect │ └── package-info.java │ ├── config │ ├── AspectConfig.java │ ├── MyBatisMapperScannerConfig.java │ ├── MybatisAutoConfiguration.java │ ├── MybatisProperties.java │ ├── ValidatorConfig.java │ └── WebConfAdapter.java │ ├── consts │ ├── DataConsts.java │ ├── SessionConstants.java │ ├── StatusCode.java │ ├── UrlConsts.java │ └── ViewConsts.java │ ├── controller │ ├── AdminController.java │ ├── AdminLoginController.java │ ├── FrontController.java │ ├── PostContoller.java │ ├── ResumeController.java │ ├── UserController.java │ └── base │ │ └── BaseController.java │ ├── entity │ ├── AdminUser.java │ ├── Article.java │ ├── Resume.java │ ├── Tag.java │ ├── TagArticle.java │ ├── User.java │ ├── dto │ │ ├── form │ │ │ ├── AdminUserPwdModifyForm.java │ │ │ ├── ArticleSearchForm.java │ │ │ ├── BlogAddForm.java │ │ │ ├── BlogModifyForm.java │ │ │ ├── ResumeModifyForm.java │ │ │ ├── UserLoginForm.java │ │ │ └── UserRegisterForm.java │ │ ├── request │ │ │ └── TableKeyModel.java │ │ └── response │ │ │ ├── GlobalResponse.java │ │ │ ├── RedirectResponse.java │ │ │ ├── SimpleResponse.java │ │ │ └── factory │ │ │ ├── GeneralJsonFactory.java │ │ │ └── JsonFactory.java │ └── vo │ │ ├── ArticleDataGridView.java │ │ ├── BlogModifyModel.java │ │ ├── PostView.java │ │ ├── ResumeModifyModel.java │ │ └── TagView.java │ ├── exception │ └── GlobalExceptionHandler.java │ ├── framework │ ├── mapper │ │ └── IMyMapper.java │ └── service │ │ ├── AbstractService.java │ │ └── IService.java │ ├── interceptor │ └── UserAuthenticationInterceptor.java │ ├── mapper │ ├── AdminUserMapper.java │ ├── ArticleMapper.java │ ├── ResumeMapper.java │ ├── TagArticleMapper.java │ ├── TagMapper.java │ ├── UserMapper.java │ └── provider │ │ └── ArticleSqlProvider.java │ ├── service │ ├── api │ │ ├── IAdminBlogService.java │ │ ├── IAdminUserService.java │ │ ├── IPostsService.java │ │ ├── IResumeService.java │ │ ├── ITagService.java │ │ └── IUserService.java │ ├── base │ │ └── BaseViewTransableService.java │ └── impl │ │ ├── AdminBlogServiceImpl.java │ │ ├── AdminUserServiceImpl.java │ │ ├── PostServiceImpl.java │ │ ├── ResumeServiceImpl.java │ │ ├── TagServiceImpl.java │ │ └── UserServiceImpl.java │ └── utils │ └── AspectUtil.java └── resources ├── application-dev.yml ├── application.yml ├── banner.txt ├── data.sql ├── ehcache.xml ├── favicon.ico ├── log4j2.xml ├── mapping ├── AdminUserMapper.xml ├── ArticleMapper.xml ├── TagArticleMapper.xml ├── TagMapper.xml └── UserMapper.xml ├── mybatis-config.xml ├── mybatisGenerator ├── config.properties └── generatorConfig.xml ├── schema.sql ├── static ├── css │ ├── full-slider │ │ └── full-slider.css │ ├── public.css │ └── sb-admin │ │ ├── sb-admin.css │ │ └── sb-admin.min.css ├── data │ ├── flot-data.js │ └── morris-data.js ├── dist │ └── admin │ │ ├── css │ │ ├── sb-admin-2.css │ │ └── sb-admin-2.min.css │ │ └── js │ │ ├── sb-admin-2.js │ │ └── sb-admin-2.min.js ├── img │ ├── 404.png │ ├── logo.png │ └── wechat_qr.png ├── js │ ├── b_admin_user_manage.js │ ├── b_admin_user_pwd_modify.js │ ├── b_admin_userlogin.js │ ├── b_blog_manage.js │ ├── b_blog_modify.js │ ├── b_blogadd.js │ ├── b_resume_modify.js │ ├── f_footer.js │ ├── f_register.js │ ├── f_userlogin.js │ └── public.js └── vendor │ ├── admin │ ├── bootstrap-social │ │ ├── bootstrap-social.css │ │ ├── bootstrap-social.less │ │ └── bootstrap-social.scss │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap.css │ │ │ └── bootstrap.min.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ └── js │ │ │ ├── bootstrap.js │ │ │ └── bootstrap.min.js │ ├── datatables-plugins │ │ ├── dataTables.bootstrap.css │ │ ├── dataTables.bootstrap.js │ │ ├── dataTables.bootstrap.min.js │ │ └── index.html │ ├── datatables-responsive │ │ ├── dataTables.responsive.css │ │ ├── dataTables.responsive.js │ │ └── dataTables.responsive.scss │ ├── datatables │ │ ├── css │ │ │ ├── dataTables.bootstrap.css │ │ │ ├── dataTables.bootstrap.min.css │ │ │ ├── dataTables.bootstrap4.css │ │ │ ├── dataTables.bootstrap4.min.css │ │ │ ├── dataTables.foundation.css │ │ │ ├── dataTables.foundation.min.css │ │ │ ├── dataTables.jqueryui.css │ │ │ ├── dataTables.jqueryui.min.css │ │ │ ├── dataTables.material.css │ │ │ ├── dataTables.material.min.css │ │ │ ├── dataTables.semanticui.css │ │ │ ├── dataTables.semanticui.min.css │ │ │ ├── dataTables.uikit.css │ │ │ ├── dataTables.uikit.min.css │ │ │ ├── jquery.dataTables.css │ │ │ ├── jquery.dataTables.min.css │ │ │ └── jquery.dataTables_themeroller.css │ │ ├── images │ │ │ ├── Sorting icons.psd │ │ │ ├── favicon.ico │ │ │ ├── sort_asc.png │ │ │ ├── sort_asc_disabled.png │ │ │ ├── sort_both.png │ │ │ ├── sort_desc.png │ │ │ └── sort_desc_disabled.png │ │ └── js │ │ │ ├── dataTables.bootstrap.js │ │ │ ├── dataTables.bootstrap.min.js │ │ │ ├── dataTables.bootstrap4.js │ │ │ ├── dataTables.bootstrap4.min.js │ │ │ ├── dataTables.foundation.js │ │ │ ├── dataTables.foundation.min.js │ │ │ ├── dataTables.jqueryui.js │ │ │ ├── dataTables.jqueryui.min.js │ │ │ ├── dataTables.material.js │ │ │ ├── dataTables.material.min.js │ │ │ ├── dataTables.semanticui.js │ │ │ ├── dataTables.semanticui.min.js │ │ │ ├── dataTables.uikit.js │ │ │ ├── dataTables.uikit.min.js │ │ │ ├── jquery.dataTables.js │ │ │ ├── jquery.dataTables.min.js │ │ │ └── jquery.js │ ├── flot-tooltip │ │ ├── jquery.flot.tooltip.js │ │ ├── jquery.flot.tooltip.min.js │ │ └── jquery.flot.tooltip.source.js │ ├── flot │ │ ├── excanvas.js │ │ ├── excanvas.min.js │ │ ├── jquery.colorhelpers.js │ │ ├── jquery.flot.canvas.js │ │ ├── jquery.flot.categories.js │ │ ├── jquery.flot.crosshair.js │ │ ├── jquery.flot.errorbars.js │ │ ├── jquery.flot.fillbetween.js │ │ ├── jquery.flot.image.js │ │ ├── jquery.flot.js │ │ ├── jquery.flot.navigate.js │ │ ├── jquery.flot.pie.js │ │ ├── jquery.flot.resize.js │ │ ├── jquery.flot.selection.js │ │ ├── jquery.flot.stack.js │ │ ├── jquery.flot.symbol.js │ │ ├── jquery.flot.threshold.js │ │ ├── jquery.flot.time.js │ │ └── jquery.js │ ├── font-awesome │ │ ├── HELP-US-OUT.txt │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ ├── font-awesome.css.map │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── animated.less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── extras.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── screen-reader.less │ │ │ ├── spinning.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _extras.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _screen-reader.scss │ │ │ ├── _spinning.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ ├── jquery │ │ ├── jquery.js │ │ └── jquery.min.js │ ├── metisMenu │ │ ├── metisMenu.css │ │ ├── metisMenu.js │ │ ├── metisMenu.min.css │ │ └── metisMenu.min.js │ ├── morrisjs │ │ ├── morris.css │ │ ├── morris.js │ │ └── morris.min.js │ └── raphael │ │ ├── raphael.js │ │ └── raphael.min.js │ ├── bootstrap │ ├── css │ │ ├── bootstrap-grid.css │ │ ├── bootstrap-grid.min.css │ │ ├── bootstrap-reboot.css │ │ ├── bootstrap-reboot.min.css │ │ ├── bootstrap.css │ │ └── bootstrap.min.css │ └── js │ │ ├── bootstrap.bundle.js │ │ ├── bootstrap.bundle.min.js │ │ ├── bootstrap.js │ │ └── bootstrap.min.js │ ├── editor │ ├── css │ │ ├── editormd.css │ │ ├── editormd.logo.css │ │ ├── editormd.logo.min.css │ │ ├── editormd.min.css │ │ ├── editormd.preview.css │ │ └── editormd.preview.min.css │ ├── editormd.min.js │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── editormd-logo.eot │ │ ├── editormd-logo.svg │ │ ├── editormd-logo.ttf │ │ ├── editormd-logo.woff │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── images │ │ ├── loading.gif │ │ ├── loading@2x.gif │ │ ├── loading@3x.gif │ │ └── logos │ │ │ ├── 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-16x16.png │ │ │ ├── editormd-logo-180x180.png │ │ │ ├── editormd-logo-240x240.png │ │ │ ├── editormd-logo-24x24.png │ │ │ ├── editormd-logo-320x320.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 │ │ │ └── vi.png │ ├── lib │ │ ├── codemirror │ │ │ ├── AUTHORS │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── addon │ │ │ │ ├── comment │ │ │ │ │ ├── comment.js │ │ │ │ │ └── continuecomment.js │ │ │ │ ├── dialog │ │ │ │ │ ├── dialog.css │ │ │ │ │ └── dialog.js │ │ │ │ ├── display │ │ │ │ │ ├── fullscreen.css │ │ │ │ │ ├── fullscreen.js │ │ │ │ │ ├── panel.js │ │ │ │ │ ├── placeholder.js │ │ │ │ │ └── rulers.js │ │ │ │ ├── edit │ │ │ │ │ ├── closebrackets.js │ │ │ │ │ ├── closetag.js │ │ │ │ │ ├── continuelist.js │ │ │ │ │ ├── matchbrackets.js │ │ │ │ │ ├── matchtags.js │ │ │ │ │ └── trailingspace.js │ │ │ │ ├── fold │ │ │ │ │ ├── brace-fold.js │ │ │ │ │ ├── comment-fold.js │ │ │ │ │ ├── foldcode.js │ │ │ │ │ ├── foldgutter.css │ │ │ │ │ ├── foldgutter.js │ │ │ │ │ ├── indent-fold.js │ │ │ │ │ ├── markdown-fold.js │ │ │ │ │ └── xml-fold.js │ │ │ │ ├── hint │ │ │ │ │ ├── anyword-hint.js │ │ │ │ │ ├── css-hint.js │ │ │ │ │ ├── html-hint.js │ │ │ │ │ ├── javascript-hint.js │ │ │ │ │ ├── show-hint.css │ │ │ │ │ ├── show-hint.js │ │ │ │ │ ├── sql-hint.js │ │ │ │ │ └── xml-hint.js │ │ │ │ ├── lint │ │ │ │ │ ├── coffeescript-lint.js │ │ │ │ │ ├── css-lint.js │ │ │ │ │ ├── javascript-lint.js │ │ │ │ │ ├── json-lint.js │ │ │ │ │ ├── lint.css │ │ │ │ │ ├── lint.js │ │ │ │ │ └── yaml-lint.js │ │ │ │ ├── merge │ │ │ │ │ ├── merge.css │ │ │ │ │ └── merge.js │ │ │ │ ├── mode │ │ │ │ │ ├── loadmode.js │ │ │ │ │ ├── multiplex.js │ │ │ │ │ ├── multiplex_test.js │ │ │ │ │ ├── overlay.js │ │ │ │ │ └── simple.js │ │ │ │ ├── runmode │ │ │ │ │ ├── colorize.js │ │ │ │ │ ├── runmode-standalone.js │ │ │ │ │ ├── runmode.js │ │ │ │ │ └── runmode.node.js │ │ │ │ ├── scroll │ │ │ │ │ ├── annotatescrollbar.js │ │ │ │ │ ├── scrollpastend.js │ │ │ │ │ ├── simplescrollbars.css │ │ │ │ │ └── simplescrollbars.js │ │ │ │ ├── search │ │ │ │ │ ├── match-highlighter.js │ │ │ │ │ ├── matchesonscrollbar.css │ │ │ │ │ ├── matchesonscrollbar.js │ │ │ │ │ ├── search.js │ │ │ │ │ └── searchcursor.js │ │ │ │ ├── selection │ │ │ │ │ ├── active-line.js │ │ │ │ │ ├── mark-selection.js │ │ │ │ │ └── selection-pointer.js │ │ │ │ ├── tern │ │ │ │ │ ├── tern.css │ │ │ │ │ ├── tern.js │ │ │ │ │ └── worker.js │ │ │ │ └── wrap │ │ │ │ │ └── hardwrap.js │ │ │ ├── addons.min.js │ │ │ ├── bower.json │ │ │ ├── codemirror.min.css │ │ │ ├── codemirror.min.js │ │ │ ├── lib │ │ │ │ ├── codemirror.css │ │ │ │ └── codemirror.js │ │ │ ├── mode │ │ │ │ ├── apl │ │ │ │ │ ├── apl.js │ │ │ │ │ └── index.html │ │ │ │ ├── asterisk │ │ │ │ │ ├── asterisk.js │ │ │ │ │ └── index.html │ │ │ │ ├── clike │ │ │ │ │ ├── clike.js │ │ │ │ │ ├── index.html │ │ │ │ │ └── scala.html │ │ │ │ ├── clojure │ │ │ │ │ ├── clojure.js │ │ │ │ │ └── index.html │ │ │ │ ├── cobol │ │ │ │ │ ├── cobol.js │ │ │ │ │ └── index.html │ │ │ │ ├── coffeescript │ │ │ │ │ ├── coffeescript.js │ │ │ │ │ └── index.html │ │ │ │ ├── commonlisp │ │ │ │ │ ├── commonlisp.js │ │ │ │ │ └── index.html │ │ │ │ ├── css │ │ │ │ │ ├── css.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── less.html │ │ │ │ │ ├── less_test.js │ │ │ │ │ ├── scss.html │ │ │ │ │ ├── scss_test.js │ │ │ │ │ └── test.js │ │ │ │ ├── cypher │ │ │ │ │ ├── cypher.js │ │ │ │ │ └── index.html │ │ │ │ ├── d │ │ │ │ │ ├── d.js │ │ │ │ │ └── index.html │ │ │ │ ├── dart │ │ │ │ │ ├── dart.js │ │ │ │ │ └── index.html │ │ │ │ ├── diff │ │ │ │ │ ├── diff.js │ │ │ │ │ └── index.html │ │ │ │ ├── django │ │ │ │ │ ├── django.js │ │ │ │ │ └── index.html │ │ │ │ ├── dockerfile │ │ │ │ │ ├── dockerfile.js │ │ │ │ │ └── index.html │ │ │ │ ├── dtd │ │ │ │ │ ├── dtd.js │ │ │ │ │ └── index.html │ │ │ │ ├── dylan │ │ │ │ │ ├── dylan.js │ │ │ │ │ └── index.html │ │ │ │ ├── ebnf │ │ │ │ │ ├── ebnf.js │ │ │ │ │ └── index.html │ │ │ │ ├── ecl │ │ │ │ │ ├── ecl.js │ │ │ │ │ └── index.html │ │ │ │ ├── eiffel │ │ │ │ │ ├── eiffel.js │ │ │ │ │ └── index.html │ │ │ │ ├── erlang │ │ │ │ │ ├── erlang.js │ │ │ │ │ └── index.html │ │ │ │ ├── forth │ │ │ │ │ ├── forth.js │ │ │ │ │ └── index.html │ │ │ │ ├── fortran │ │ │ │ │ ├── fortran.js │ │ │ │ │ └── index.html │ │ │ │ ├── gas │ │ │ │ │ ├── gas.js │ │ │ │ │ └── index.html │ │ │ │ ├── gfm │ │ │ │ │ ├── gfm.js │ │ │ │ │ ├── index.html │ │ │ │ │ └── test.js │ │ │ │ ├── gherkin │ │ │ │ │ ├── gherkin.js │ │ │ │ │ └── index.html │ │ │ │ ├── go │ │ │ │ │ ├── go.js │ │ │ │ │ └── index.html │ │ │ │ ├── groovy │ │ │ │ │ ├── groovy.js │ │ │ │ │ └── index.html │ │ │ │ ├── haml │ │ │ │ │ ├── haml.js │ │ │ │ │ ├── index.html │ │ │ │ │ └── test.js │ │ │ │ ├── haskell │ │ │ │ │ ├── haskell.js │ │ │ │ │ └── index.html │ │ │ │ ├── haxe │ │ │ │ │ ├── haxe.js │ │ │ │ │ └── index.html │ │ │ │ ├── htmlembedded │ │ │ │ │ ├── htmlembedded.js │ │ │ │ │ └── index.html │ │ │ │ ├── htmlmixed │ │ │ │ │ ├── htmlmixed.js │ │ │ │ │ └── index.html │ │ │ │ ├── http │ │ │ │ │ ├── http.js │ │ │ │ │ └── index.html │ │ │ │ ├── idl │ │ │ │ │ ├── idl.js │ │ │ │ │ └── index.html │ │ │ │ ├── index.html │ │ │ │ ├── jade │ │ │ │ │ ├── index.html │ │ │ │ │ └── jade.js │ │ │ │ ├── javascript │ │ │ │ │ ├── index.html │ │ │ │ │ ├── javascript.js │ │ │ │ │ ├── json-ld.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── typescript.html │ │ │ │ ├── jinja2 │ │ │ │ │ ├── index.html │ │ │ │ │ └── jinja2.js │ │ │ │ ├── julia │ │ │ │ │ ├── index.html │ │ │ │ │ └── julia.js │ │ │ │ ├── kotlin │ │ │ │ │ ├── index.html │ │ │ │ │ └── kotlin.js │ │ │ │ ├── livescript │ │ │ │ │ ├── index.html │ │ │ │ │ └── livescript.js │ │ │ │ ├── lua │ │ │ │ │ ├── index.html │ │ │ │ │ └── lua.js │ │ │ │ ├── markdown │ │ │ │ │ ├── index.html │ │ │ │ │ ├── markdown.js │ │ │ │ │ └── test.js │ │ │ │ ├── meta.js │ │ │ │ ├── mirc │ │ │ │ │ ├── index.html │ │ │ │ │ └── mirc.js │ │ │ │ ├── mllike │ │ │ │ │ ├── index.html │ │ │ │ │ └── mllike.js │ │ │ │ ├── modelica │ │ │ │ │ ├── index.html │ │ │ │ │ └── modelica.js │ │ │ │ ├── nginx │ │ │ │ │ ├── index.html │ │ │ │ │ └── nginx.js │ │ │ │ ├── ntriples │ │ │ │ │ ├── index.html │ │ │ │ │ └── ntriples.js │ │ │ │ ├── octave │ │ │ │ │ ├── index.html │ │ │ │ │ └── octave.js │ │ │ │ ├── pascal │ │ │ │ │ ├── index.html │ │ │ │ │ └── pascal.js │ │ │ │ ├── pegjs │ │ │ │ │ ├── index.html │ │ │ │ │ └── pegjs.js │ │ │ │ ├── perl │ │ │ │ │ ├── index.html │ │ │ │ │ └── perl.js │ │ │ │ ├── php │ │ │ │ │ ├── index.html │ │ │ │ │ ├── php.js │ │ │ │ │ └── test.js │ │ │ │ ├── pig │ │ │ │ │ ├── index.html │ │ │ │ │ └── pig.js │ │ │ │ ├── properties │ │ │ │ │ ├── index.html │ │ │ │ │ └── properties.js │ │ │ │ ├── puppet │ │ │ │ │ ├── index.html │ │ │ │ │ └── puppet.js │ │ │ │ ├── python │ │ │ │ │ ├── index.html │ │ │ │ │ └── python.js │ │ │ │ ├── q │ │ │ │ │ ├── index.html │ │ │ │ │ └── q.js │ │ │ │ ├── r │ │ │ │ │ ├── index.html │ │ │ │ │ └── r.js │ │ │ │ ├── rpm │ │ │ │ │ ├── changes │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── index.html │ │ │ │ │ └── rpm.js │ │ │ │ ├── rst │ │ │ │ │ ├── index.html │ │ │ │ │ └── rst.js │ │ │ │ ├── ruby │ │ │ │ │ ├── index.html │ │ │ │ │ ├── ruby.js │ │ │ │ │ └── test.js │ │ │ │ ├── rust │ │ │ │ │ ├── index.html │ │ │ │ │ └── rust.js │ │ │ │ ├── sass │ │ │ │ │ ├── index.html │ │ │ │ │ └── sass.js │ │ │ │ ├── scheme │ │ │ │ │ ├── index.html │ │ │ │ │ └── scheme.js │ │ │ │ ├── shell │ │ │ │ │ ├── index.html │ │ │ │ │ ├── shell.js │ │ │ │ │ └── test.js │ │ │ │ ├── sieve │ │ │ │ │ ├── index.html │ │ │ │ │ └── sieve.js │ │ │ │ ├── slim │ │ │ │ │ ├── index.html │ │ │ │ │ ├── slim.js │ │ │ │ │ └── test.js │ │ │ │ ├── smalltalk │ │ │ │ │ ├── index.html │ │ │ │ │ └── smalltalk.js │ │ │ │ ├── smarty │ │ │ │ │ ├── index.html │ │ │ │ │ └── smarty.js │ │ │ │ ├── smartymixed │ │ │ │ │ ├── index.html │ │ │ │ │ └── smartymixed.js │ │ │ │ ├── solr │ │ │ │ │ ├── index.html │ │ │ │ │ └── solr.js │ │ │ │ ├── soy │ │ │ │ │ ├── index.html │ │ │ │ │ └── soy.js │ │ │ │ ├── sparql │ │ │ │ │ ├── index.html │ │ │ │ │ └── sparql.js │ │ │ │ ├── spreadsheet │ │ │ │ │ ├── index.html │ │ │ │ │ └── spreadsheet.js │ │ │ │ ├── sql │ │ │ │ │ ├── index.html │ │ │ │ │ └── sql.js │ │ │ │ ├── stex │ │ │ │ │ ├── index.html │ │ │ │ │ ├── stex.js │ │ │ │ │ └── test.js │ │ │ │ ├── stylus │ │ │ │ │ ├── index.html │ │ │ │ │ └── stylus.js │ │ │ │ ├── tcl │ │ │ │ │ ├── index.html │ │ │ │ │ └── tcl.js │ │ │ │ ├── textile │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── textile.js │ │ │ │ ├── tiddlywiki │ │ │ │ │ ├── index.html │ │ │ │ │ ├── tiddlywiki.css │ │ │ │ │ └── tiddlywiki.js │ │ │ │ ├── tiki │ │ │ │ │ ├── index.html │ │ │ │ │ ├── tiki.css │ │ │ │ │ └── tiki.js │ │ │ │ ├── toml │ │ │ │ │ ├── index.html │ │ │ │ │ └── toml.js │ │ │ │ ├── tornado │ │ │ │ │ ├── index.html │ │ │ │ │ └── tornado.js │ │ │ │ ├── turtle │ │ │ │ │ ├── index.html │ │ │ │ │ └── turtle.js │ │ │ │ ├── vb │ │ │ │ │ ├── index.html │ │ │ │ │ └── vb.js │ │ │ │ ├── vbscript │ │ │ │ │ ├── index.html │ │ │ │ │ └── vbscript.js │ │ │ │ ├── velocity │ │ │ │ │ ├── index.html │ │ │ │ │ └── velocity.js │ │ │ │ ├── verilog │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── verilog.js │ │ │ │ ├── xml │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── xml.js │ │ │ │ ├── xquery │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── xquery.js │ │ │ │ ├── yaml │ │ │ │ │ ├── index.html │ │ │ │ │ └── yaml.js │ │ │ │ └── z80 │ │ │ │ │ ├── index.html │ │ │ │ │ └── z80.js │ │ │ ├── modes.min.js │ │ │ ├── package.json │ │ │ └── theme │ │ │ │ ├── 3024-day.css │ │ │ │ ├── 3024-night.css │ │ │ │ ├── ambiance-mobile.css │ │ │ │ ├── ambiance.css │ │ │ │ ├── base16-dark.css │ │ │ │ ├── base16-light.css │ │ │ │ ├── blackboard.css │ │ │ │ ├── cobalt.css │ │ │ │ ├── colorforth.css │ │ │ │ ├── eclipse.css │ │ │ │ ├── elegant.css │ │ │ │ ├── erlang-dark.css │ │ │ │ ├── lesser-dark.css │ │ │ │ ├── mbo.css │ │ │ │ ├── mdn-like.css │ │ │ │ ├── midnight.css │ │ │ │ ├── monokai.css │ │ │ │ ├── neat.css │ │ │ │ ├── neo.css │ │ │ │ ├── night.css │ │ │ │ ├── paraiso-dark.css │ │ │ │ ├── paraiso-light.css │ │ │ │ ├── pastel-on-dark.css │ │ │ │ ├── rubyblue.css │ │ │ │ ├── solarized.css │ │ │ │ ├── the-matrix.css │ │ │ │ ├── tomorrow-night-bright.css │ │ │ │ ├── tomorrow-night-eighties.css │ │ │ │ ├── twilight.css │ │ │ │ ├── vibrant-ink.css │ │ │ │ ├── xq-dark.css │ │ │ │ ├── xq-light.css │ │ │ │ └── zenburn.css │ │ ├── flowchart.min.js │ │ ├── jquery.flowchart.min.js │ │ ├── marked.min.js │ │ ├── prettify.min.js │ │ ├── raphael.min.js │ │ ├── sequence-diagram.min.js │ │ └── underscore.min.js │ ├── plugins │ │ ├── code-block-dialog │ │ │ └── code-block-dialog.js │ │ ├── emoji-dialog │ │ │ ├── emoji-dialog.js │ │ │ └── emoji.json │ │ ├── goto-line-dialog │ │ │ └── goto-line-dialog.js │ │ ├── help-dialog │ │ │ ├── help-dialog.js │ │ │ └── help.md │ │ ├── html-entities-dialog │ │ │ ├── html-entities-dialog.js │ │ │ └── html-entities.json │ │ ├── image-dialog │ │ │ └── image-dialog.js │ │ ├── link-dialog │ │ │ └── link-dialog.js │ │ ├── plugin-template.js │ │ ├── preformatted-text-dialog │ │ │ └── preformatted-text-dialog.js │ │ ├── reference-link-dialog │ │ │ └── reference-link-dialog.js │ │ ├── table-dialog │ │ │ └── table-dialog.js │ │ └── test-plugin │ │ │ └── test-plugin.js │ └── scss │ │ ├── editormd.codemirror.scss │ │ ├── editormd.dialog.scss │ │ ├── editormd.form.scss │ │ ├── editormd.grid.scss │ │ ├── editormd.logo.scss │ │ ├── editormd.menu.scss │ │ ├── editormd.preview.scss │ │ ├── editormd.preview.themes.scss │ │ ├── editormd.scss │ │ ├── editormd.tab.scss │ │ ├── editormd.themes.scss │ │ ├── font-awesome.scss │ │ ├── github-markdown.scss │ │ ├── lib │ │ ├── prefixes.scss │ │ └── variables.scss │ │ └── prettify.scss │ ├── jquery-easing │ ├── jquery.easing.compatibility.js │ ├── jquery.easing.js │ └── jquery.easing.min.js │ ├── jquery │ ├── jquery.js │ └── jquery.min.js │ ├── landing-page │ └── landing-page.min.css │ └── layui │ ├── css │ ├── layui.css │ ├── layui.mobile.css │ └── modules │ │ ├── code.css │ │ ├── laydate │ │ └── default │ │ │ └── laydate.css │ │ └── layer │ │ └── default │ │ ├── icon-ext.png │ │ ├── icon.png │ │ ├── layer.css │ │ ├── loading-0.gif │ │ ├── loading-1.gif │ │ └── loading-2.gif │ ├── font │ ├── iconfont.eot │ ├── iconfont.svg │ ├── iconfont.ttf │ └── iconfont.woff │ ├── images │ └── face │ │ ├── 0.gif │ │ ├── 1.gif │ │ ├── 10.gif │ │ ├── 11.gif │ │ ├── 12.gif │ │ ├── 13.gif │ │ ├── 14.gif │ │ ├── 15.gif │ │ ├── 16.gif │ │ ├── 17.gif │ │ ├── 18.gif │ │ ├── 19.gif │ │ ├── 2.gif │ │ ├── 20.gif │ │ ├── 21.gif │ │ ├── 22.gif │ │ ├── 23.gif │ │ ├── 24.gif │ │ ├── 25.gif │ │ ├── 26.gif │ │ ├── 27.gif │ │ ├── 28.gif │ │ ├── 29.gif │ │ ├── 3.gif │ │ ├── 30.gif │ │ ├── 31.gif │ │ ├── 32.gif │ │ ├── 33.gif │ │ ├── 34.gif │ │ ├── 35.gif │ │ ├── 36.gif │ │ ├── 37.gif │ │ ├── 38.gif │ │ ├── 39.gif │ │ ├── 4.gif │ │ ├── 40.gif │ │ ├── 41.gif │ │ ├── 42.gif │ │ ├── 43.gif │ │ ├── 44.gif │ │ ├── 45.gif │ │ ├── 46.gif │ │ ├── 47.gif │ │ ├── 48.gif │ │ ├── 49.gif │ │ ├── 5.gif │ │ ├── 50.gif │ │ ├── 51.gif │ │ ├── 52.gif │ │ ├── 53.gif │ │ ├── 54.gif │ │ ├── 55.gif │ │ ├── 56.gif │ │ ├── 57.gif │ │ ├── 58.gif │ │ ├── 59.gif │ │ ├── 6.gif │ │ ├── 60.gif │ │ ├── 61.gif │ │ ├── 62.gif │ │ ├── 63.gif │ │ ├── 64.gif │ │ ├── 65.gif │ │ ├── 66.gif │ │ ├── 67.gif │ │ ├── 68.gif │ │ ├── 69.gif │ │ ├── 7.gif │ │ ├── 70.gif │ │ ├── 71.gif │ │ ├── 8.gif │ │ └── 9.gif │ ├── lay │ └── modules │ │ ├── carousel.js │ │ ├── code.js │ │ ├── element.js │ │ ├── flow.js │ │ ├── form.js │ │ ├── jquery.js │ │ ├── laydate.js │ │ ├── layedit.js │ │ ├── layer.js │ │ ├── laypage.js │ │ ├── laytpl.js │ │ ├── mobile.js │ │ ├── table.js │ │ ├── tree.js │ │ ├── upload.js │ │ └── util.js │ ├── layui.all.js │ └── layui.js └── templates ├── admin ├── admin_user_manage.ftl ├── admin_user_pwd_modify.ftl ├── blog_manage.ftl ├── blog_modify.ftl ├── blogadd.ftl ├── index.ftl ├── public │ ├── nav.ftl │ ├── public_css.ftl │ └── public_js.ftl ├── resume_modify.ftl └── userlogin.ftl ├── article.ftl ├── error.ftl ├── index.ftl ├── posts.ftl ├── public ├── footer.ftl ├── front_css.ftl ├── front_custom_css.ftl ├── front_js.ftl └── nav.ftl ├── register.ftl ├── resume.ftl └── userlogin.ftl /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=Java 2 | *.css linguist-language=Java 3 | *.ftl linguist-language=Java -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### PRODUCE ### 2 | Dockerfile 3 | *-prod.yml 4 | 5 | ### STS ### 6 | .apt_generated 7 | .classpath 8 | .factorypath 9 | .project 10 | .settings 11 | .springBeans 12 | 13 | ### IntelliJ IDEA ### 14 | .idea 15 | *.iws 16 | *.iml 17 | *.ipr 18 | 19 | ### NetBeans ### 20 | nbproject/private/ 21 | build/ 22 | nbbuild/ 23 | nbdist/ 24 | .nb-gradle/ 25 | # Compiled class file 26 | *.class 27 | 28 | # Log file # 29 | *.log 30 | 31 | # BlueJ files 32 | *.ctxt 33 | 34 | # Mobile Tools for Java (J2ME) 35 | .mtj.tmp/ 36 | 37 | # Package Files # 38 | *.jar 39 | *.war 40 | *.ear 41 | *.zip 42 | *.tar.gz 43 | *.rar 44 | 45 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 46 | hs_err_pid* 47 | 48 | ### GRADLE ### 49 | !gradle/wrapper/gradle-wrapper.jar 50 | .gradle 51 | /build/ 52 | /gradlew 53 | /gradlew.bat -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | jdk: 3 | - oraclejdk8 4 | notifications: 5 | email: true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Oct 18 21:32:58 CST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-3.5.1-all.zip 7 | -------------------------------------------------------------------------------- /screenshots/blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/screenshots/blog.png -------------------------------------------------------------------------------- /screenshots/editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/screenshots/editor.png -------------------------------------------------------------------------------- /screenshots/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/screenshots/home.png -------------------------------------------------------------------------------- /screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/screenshots/logo.png -------------------------------------------------------------------------------- /screenshots/posts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/screenshots/posts.png -------------------------------------------------------------------------------- /screenshots/resume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/screenshots/resume.png -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/annotation/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 自定义注解 3 | *

4 | * Created by James on 17-12-3. 5 | */ 6 | package me.zbl.fullstack.annotation; -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/aspect/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 切面 3 | * Created by James on 17-12-2. 4 | */ 5 | package me.zbl.fullstack.aspect; -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/config/AspectConfig.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.context.annotation.EnableAspectJAutoProxy; 5 | 6 | /** 7 | * Spring AOP 的配置 8 | * 9 | * @author James 10 | */ 11 | @Configuration 12 | @EnableAspectJAutoProxy(proxyTargetClass = true) 13 | public class AspectConfig { 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/config/MyBatisMapperScannerConfig.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.config; 2 | 3 | import java.util.Properties; 4 | 5 | import me.zbl.fullstack.framework.mapper.IMyMapper; 6 | import org.springframework.boot.autoconfigure.AutoConfigureAfter; 7 | import org.springframework.context.annotation.Bean; 8 | import org.springframework.context.annotation.Configuration; 9 | 10 | import tk.mybatis.spring.mapper.MapperScannerConfigurer; 11 | 12 | /** 13 | * MyBatis扫描接口,使用的tk.mybatis.spring.mapper.MapperScannerConfigurer 14 | * 如果你不使用通用Mapper,可以改为org.xxx... 15 | * 由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解 @AutoConfigureAfter 16 | * 17 | * @author James 18 | */ 19 | @Configuration 20 | @AutoConfigureAfter(MybatisAutoConfiguration.class) 21 | public class MyBatisMapperScannerConfig { 22 | 23 | @Bean 24 | public MapperScannerConfigurer mapperScannerConfigurer() { 25 | MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); 26 | mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); 27 | mapperScannerConfigurer.setBasePackage("me.zbl.fullstack.mapper"); 28 | Properties properties = new Properties(); 29 | // 这里要特别注意,不要把MyMapper放到 basePackage 中,也就是不能同其他Mapper一样被扫描到。 30 | properties.setProperty("mappers", IMyMapper.class.getName()); 31 | properties.setProperty("notEmpty", "false"); 32 | properties.setProperty("IDENTITY", "MYSQL"); 33 | mapperScannerConfigurer.setProperties(properties); 34 | return mapperScannerConfigurer; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/config/ValidatorConfig.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.config; 2 | 3 | import org.hibernate.validator.HibernateValidator; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; 7 | 8 | /** 9 | * 配置 Hibernate Validator 10 | * 11 | * @author James 12 | */ 13 | @Configuration 14 | public class ValidatorConfig { 15 | 16 | @Bean(name = "validator") 17 | public LocalValidatorFactoryBean getValidator() { 18 | LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean(); 19 | bean.setProviderClass(HibernateValidator.class); 20 | return bean; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/consts/DataConsts.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.consts; 2 | 3 | /** 4 | * 关于数据的常量类 5 | * 6 | * @author James 7 | */ 8 | public class DataConsts { 9 | 10 | public static final int USERNAME_MAX_LENGTH = 20; 11 | public static final int PASSWORD_MAX_LENGTH = 15; 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/consts/SessionConstants.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.consts; 2 | 3 | /** 4 | * 关于 Sesion 的全局常量 5 | * 6 | * @author James 7 | */ 8 | public class SessionConstants { 9 | 10 | public static final String SESSION_CURRENT_USER = "session_current_user"; 11 | public static final String SESSION_ADMIN_CURRENT_USER = "session_current_admin_user"; 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/consts/StatusCode.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.consts; 2 | 3 | /** 4 | * 响应状态常量类 5 | * 6 | * @author James 7 | */ 8 | public class StatusCode { 9 | 10 | /** 11 | * 是否异常 12 | */ 13 | public static final boolean WITH_ERROR = true; 14 | public static final boolean NO_ERROR = false; 15 | /** 16 | * 认证成功 17 | */ 18 | public static final int AUTH_PASS = 101; 19 | /** 20 | * 认证失败 21 | */ 22 | public static final int AUTH_FAIL = 102; 23 | /** 24 | * 接收成功 25 | */ 26 | public static final int RESPONSE_OK = 201; 27 | /** 28 | * 重定向 29 | */ 30 | public static final int REDIRECT = 302; 31 | /** 32 | * 查询失败 33 | */ 34 | public static final int QUERY_ERROR = 501; 35 | /** 36 | * 服务器异常 37 | */ 38 | public static final int SERVER_EXCEPTION = 502; 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/consts/UrlConsts.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.consts; 2 | 3 | /** 4 | * URL 常量 5 | * 6 | * @author James 7 | */ 8 | public class UrlConsts { 9 | 10 | static final String IMG_LOCAL_PATH = ""; 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/consts/ViewConsts.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.consts; 2 | 3 | /** 4 | * 视图中用到的模型名常量 5 | * 6 | * @author James 7 | */ 8 | public class ViewConsts { 9 | 10 | public static final String VIEW_TITLE = "title"; 11 | public static final String VIEW_MSG = "msg"; 12 | public static final String VIEW_USERINFO = "userinfo"; 13 | public static final String VIEW_POSTLIST = "postlist"; 14 | public static final String VIEW_TAGLIST = "taglist"; 15 | public static final String VIEW_ARTICLE = "article"; 16 | 17 | public static final String VIEW_ARTICLE_MD = "article_md"; 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/controller/FrontController.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.controller; 2 | 3 | import me.zbl.fullstack.controller.base.BaseController; 4 | import me.zbl.fullstack.service.api.IAdminBlogService; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.stereotype.Controller; 7 | import org.springframework.ui.Model; 8 | import org.springframework.web.bind.annotation.GetMapping; 9 | import org.springframework.web.bind.annotation.PostMapping; 10 | 11 | import javax.servlet.http.HttpServletRequest; 12 | 13 | /** 14 | * 前台页面控制器 15 | * 16 | * @author James 17 | */ 18 | @Controller 19 | public class FrontController extends BaseController { 20 | 21 | @Autowired 22 | private IAdminBlogService mBlogService; 23 | 24 | /** 25 | * 错误页 26 | */ 27 | @GetMapping("/error") 28 | public String pErrorPage(HttpServletRequest request, Model model) { 29 | return "error"; 30 | } 31 | 32 | /** 33 | * 前台首页 34 | * GET 35 | */ 36 | @GetMapping("/index") 37 | public String pFrontIndex(HttpServletRequest request, Model model) { 38 | return "index"; 39 | } 40 | 41 | /** 42 | * 前台首页 43 | * POST 44 | */ 45 | @PostMapping("/index") 46 | public String pFrontIndexPost(HttpServletRequest request, Model model) { 47 | return "index"; 48 | } 49 | 50 | /** 51 | * 前台用户登录页 52 | */ 53 | @GetMapping("/userlogin") 54 | public String pFrontUserLogin(HttpServletRequest request, Model model) { 55 | return "userlogin"; 56 | } 57 | 58 | /** 59 | * 前台用户注册 60 | */ 61 | @GetMapping("/userregister") 62 | public String pFrontUserRegister(HttpServletRequest request, Model model) { 63 | return "register"; 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/Tag.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity; 2 | 3 | import java.util.Date; 4 | import javax.persistence.*; 5 | 6 | /** 7 | * 文章标签类 8 | * 9 | * @author James 10 | */ 11 | public class Tag { 12 | 13 | @Id 14 | @GeneratedValue(strategy = GenerationType.IDENTITY) 15 | private Integer id; 16 | 17 | private String name; 18 | 19 | @Column(name = "gmt_create") 20 | private Date gmtCreate; 21 | 22 | @Column(name = "gmt_modified") 23 | private Date gmtModified; 24 | 25 | /** 26 | * @return id 27 | */ 28 | public Integer getId() { 29 | return id; 30 | } 31 | 32 | /** 33 | * @param id 34 | */ 35 | public void setId(Integer id) { 36 | this.id = id; 37 | } 38 | 39 | /** 40 | * @return name 41 | */ 42 | public String getName() { 43 | return name; 44 | } 45 | 46 | /** 47 | * @param name 48 | */ 49 | public void setName(String name) { 50 | this.name = name == null ? null : name.trim(); 51 | } 52 | 53 | /** 54 | * @return gmt_create 55 | */ 56 | public Date getGmtCreate() { 57 | return gmtCreate; 58 | } 59 | 60 | /** 61 | * @param gmtCreate 62 | */ 63 | public void setGmtCreate(Date gmtCreate) { 64 | this.gmtCreate = gmtCreate; 65 | } 66 | 67 | /** 68 | * @return gmt_modified 69 | */ 70 | public Date getGmtModified() { 71 | return gmtModified; 72 | } 73 | 74 | /** 75 | * @param gmtModified 76 | */ 77 | public void setGmtModified(Date gmtModified) { 78 | this.gmtModified = gmtModified; 79 | } 80 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/form/AdminUserPwdModifyForm.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.form; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import me.zbl.fullstack.consts.DataConsts; 8 | import org.hibernate.validator.constraints.Length; 9 | import org.hibernate.validator.constraints.NotEmpty; 10 | 11 | /** 12 | * 后台用户密码修改 13 | * 14 | * @author James 15 | * @date 18-1-25 16 | */ 17 | @Getter 18 | @Setter 19 | @NoArgsConstructor 20 | @AllArgsConstructor 21 | public class AdminUserPwdModifyForm { 22 | 23 | @NotEmpty 24 | @Length(max = DataConsts.PASSWORD_MAX_LENGTH) 25 | private String oriPwd; 26 | @NotEmpty 27 | @Length(max = DataConsts.PASSWORD_MAX_LENGTH) 28 | private String newPwd; 29 | @NotEmpty 30 | @Length(max = DataConsts.PASSWORD_MAX_LENGTH) 31 | private String confirmPwd; 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/form/ArticleSearchForm.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.form; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.hibernate.validator.constraints.NotEmpty; 8 | 9 | /** 10 | * 查找文章表单 11 | * 12 | * @author James 13 | */ 14 | @Getter 15 | @Setter 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class ArticleSearchForm { 19 | 20 | /** 21 | * 文章标题 22 | */ 23 | @NotEmpty 24 | private String name; 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/form/BlogAddForm.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.form; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.hibernate.validator.constraints.NotEmpty; 8 | 9 | /** 10 | * 发布博客表单 11 | * 12 | * @author James 13 | */ 14 | @Setter 15 | @Getter 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class BlogAddForm { 19 | 20 | /** 21 | * 文章标题 22 | */ 23 | @NotEmpty 24 | private String title; 25 | 26 | /** 27 | * markdown 内容 28 | */ 29 | private String mdMaterial; 30 | 31 | /** 32 | * markdown 转 html 后的内容 33 | */ 34 | private String htmlMaterial; 35 | 36 | /** 37 | * 文章内容描述 38 | */ 39 | private String description; 40 | 41 | /** 42 | * 原始 tags 43 | */ 44 | private String rawTags; 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/form/BlogModifyForm.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.form; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.hibernate.validator.constraints.NotEmpty; 8 | 9 | /** 10 | * 修改博客表单 11 | * 12 | * @author James 13 | */ 14 | @Setter 15 | @Getter 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class BlogModifyForm { 19 | 20 | /** 21 | * 所修改博客的 id 22 | */ 23 | @NotEmpty 24 | private Integer id; 25 | 26 | /** 27 | * 文章标题 28 | */ 29 | @NotEmpty 30 | private String title; 31 | /** 32 | * markdown 内容 33 | */ 34 | private String mdMaterial; 35 | /** 36 | * markdown 转 html 后的内容 37 | */ 38 | private String htmlMaterial; 39 | /** 40 | * 文章内容描述 41 | */ 42 | private String description; 43 | 44 | /** 45 | * 原始 tags 46 | */ 47 | private String rawTags; 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/form/ResumeModifyForm.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.form; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.hibernate.validator.constraints.NotEmpty; 8 | 9 | /** 10 | * 修改简历表单 11 | * 12 | * @author James 13 | */ 14 | @Setter 15 | @Getter 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class ResumeModifyForm { 19 | 20 | /** 21 | * 所修改博客的 id 22 | */ 23 | @NotEmpty 24 | private Integer id; 25 | 26 | /** 27 | * 文章标题 28 | */ 29 | @NotEmpty 30 | private String title; 31 | /** 32 | * markdown 内容 33 | */ 34 | private String mdMaterial; 35 | /** 36 | * markdown 转 html 后的内容 37 | */ 38 | private String htmlMaterial; 39 | /** 40 | * 文章内容描述 41 | */ 42 | private String description; 43 | 44 | /** 45 | * 原始 tags 46 | */ 47 | private String rawTags; 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/form/UserLoginForm.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.form; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import org.hibernate.validator.constraints.NotEmpty; 8 | 9 | /** 10 | * 用户登录表单 11 | * 12 | * @author James 13 | */ 14 | @Getter 15 | @Setter 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class UserLoginForm { 19 | 20 | /** 21 | * 用户名 22 | */ 23 | @NotEmpty(message = "用户名不能为空") 24 | private String username; 25 | 26 | /** 27 | * 密码 28 | */ 29 | @NotEmpty(message = "密码不能为空") 30 | private String password; 31 | 32 | /** 33 | * 记住登录 34 | */ 35 | private String rememberme; 36 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/form/UserRegisterForm.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.form; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import me.zbl.fullstack.consts.DataConsts; 8 | import org.hibernate.validator.constraints.Length; 9 | import org.hibernate.validator.constraints.NotEmpty; 10 | 11 | /** 12 | * 用户注册表单 13 | * 14 | * @author James 15 | */ 16 | @Getter 17 | @Setter 18 | @NoArgsConstructor 19 | @AllArgsConstructor 20 | public class UserRegisterForm { 21 | 22 | /** 23 | * 用户名 24 | */ 25 | @Length(max = DataConsts.USERNAME_MAX_LENGTH) 26 | @NotEmpty(message = "用户名不能为空") 27 | private String username; 28 | 29 | /** 30 | * 密码 31 | */ 32 | @Length(max = DataConsts.PASSWORD_MAX_LENGTH) 33 | @NotEmpty(message = "密码不能为空") 34 | private String password; 35 | 36 | /** 37 | * 确认密码 38 | */ 39 | @Length(max = DataConsts.PASSWORD_MAX_LENGTH) 40 | @NotEmpty(message = "请再次确认密码") 41 | private String confirmpassword; 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/request/TableKeyModel.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.request; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | import lombok.ToString; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 批量操作对主键的封装 12 | * 13 | * @author James 14 | */ 15 | @Getter 16 | @Setter 17 | @NoArgsConstructor 18 | @ToString 19 | public class TableKeyModel { 20 | 21 | private List ids; 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/response/GlobalResponse.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.response; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 统一 Json 范围实体类 8 | * 9 | * @author James 10 | */ 11 | @Getter 12 | @Setter 13 | public class GlobalResponse { 14 | 15 | protected int resultCode; 16 | protected boolean hasError; 17 | 18 | private GlobalResponse() { 19 | 20 | } 21 | 22 | public GlobalResponse(int resultCode, boolean hasError) { 23 | this.resultCode = resultCode; 24 | this.hasError = hasError; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/response/RedirectResponse.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.response; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * 登录返回 Json 8 | * 9 | * @author James 10 | */ 11 | @Setter 12 | @Getter 13 | public class RedirectResponse extends GlobalResponse { 14 | 15 | private String redirectURL; 16 | 17 | public RedirectResponse(int resultCode, boolean hasError, String redirectURL) { 18 | super(resultCode, hasError); 19 | setRedirectURL(redirectURL); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/response/SimpleResponse.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.response; 2 | 3 | /** 4 | * 简单 Json 响应类 5 | * 6 | * @author James 7 | */ 8 | public class SimpleResponse extends GlobalResponse { 9 | 10 | public SimpleResponse(int resultCode, boolean hasError) { 11 | super(resultCode, hasError); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/response/factory/GeneralJsonFactory.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.response.factory; 2 | 3 | import me.zbl.fullstack.entity.dto.response.RedirectResponse; 4 | import me.zbl.fullstack.entity.dto.response.SimpleResponse; 5 | import org.springframework.stereotype.Component; 6 | 7 | import static me.zbl.fullstack.consts.StatusCode.*; 8 | 9 | /** 10 | * 通用 Json 工厂类 11 | * 12 | * @author James 13 | */ 14 | @Component(value = "generalJsonFactory") 15 | public class GeneralJsonFactory implements JsonFactory { 16 | 17 | /** 18 | * 通用正常响应 19 | */ 20 | @Override 21 | public SimpleResponse createSimpleResponse() { 22 | return new SimpleResponse(RESPONSE_OK, NO_ERROR); 23 | } 24 | 25 | @Override 26 | public SimpleResponse createtSimpleErrorResponse() { 27 | return new SimpleResponse(RESPONSE_OK, WITH_ERROR); 28 | } 29 | 30 | /** 31 | * 带参数的统一响应 32 | * param resultCode 状态码 33 | * 34 | * @param hasError 是否需异常 35 | */ 36 | @Override 37 | public SimpleResponse createSimpleResponse(int resultCode, boolean hasError) { 38 | return new SimpleResponse(resultCode, hasError); 39 | } 40 | 41 | @Override 42 | public RedirectResponse createRedirectResponse(int resultCode, boolean hasError, String redirectURL) { 43 | return new RedirectResponse(resultCode, hasError, redirectURL); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/dto/response/factory/JsonFactory.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.dto.response.factory; 2 | 3 | import me.zbl.fullstack.entity.dto.response.RedirectResponse; 4 | import me.zbl.fullstack.entity.dto.response.SimpleResponse; 5 | 6 | 7 | /** 8 | * Json 实体工厂类接口 9 | * 10 | * @author James 11 | */ 12 | public interface JsonFactory { 13 | 14 | /** 15 | * 获取简单响应实体 16 | * 17 | * @return 响应实体 18 | */ 19 | SimpleResponse createSimpleResponse(); 20 | 21 | /** 22 | * 获取简单错误实体 23 | * 24 | * @return 响应实体 25 | */ 26 | SimpleResponse createtSimpleErrorResponse(); 27 | 28 | /** 29 | * 获取简单响应实体 30 | * 31 | * @param resultCode 结果状态码 32 | * @param hasError 是否含有错误 33 | * 34 | * @return 响应实体 35 | */ 36 | SimpleResponse createSimpleResponse(int resultCode, boolean hasError); 37 | 38 | /** 39 | * 获取重定向响应实体 40 | * 41 | * @param resultCode 结果状态码 42 | * @param hasError 是否含有错误 43 | * @param redirectURL 重定向 url 44 | * 45 | * @return 46 | */ 47 | RedirectResponse createRedirectResponse(int resultCode, boolean hasError, String redirectURL); 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/vo/ArticleDataGridView.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import me.zbl.fullstack.entity.Article; 8 | 9 | import java.util.Date; 10 | 11 | /** 12 | * 博客批量管理列表视图 13 | * 14 | * @author James 15 | */ 16 | @Getter 17 | @Setter 18 | @NoArgsConstructor 19 | @AllArgsConstructor 20 | public class ArticleDataGridView { 21 | 22 | private Integer id; 23 | 24 | private String title; 25 | 26 | private Date gmtCreate; 27 | 28 | private Date gmtModified; 29 | 30 | private String introduction; 31 | 32 | public ArticleDataGridView(Article article) { 33 | this.id = article.getId(); 34 | this.title = article.getTitle(); 35 | this.gmtModified = article.getGmtModified(); 36 | this.gmtCreate = article.getGmtCreate(); 37 | this.introduction = article.getIntroduction(); 38 | } 39 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/vo/BlogModifyModel.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | import me.zbl.fullstack.entity.Article; 7 | import org.hibernate.validator.constraints.NotEmpty; 8 | 9 | /** 10 | * 修改博客表单 11 | *

12 | * 13 | * @author James 14 | * @date 17-12-4 15 | */ 16 | @Setter 17 | @Getter 18 | @NoArgsConstructor 19 | public class BlogModifyModel { 20 | 21 | @NotEmpty 22 | private Integer id; 23 | 24 | @NotEmpty 25 | private String title; 26 | 27 | private String mdMaterial; 28 | 29 | private String description; 30 | 31 | public BlogModifyModel(Article article) { 32 | this.id = article.getId(); 33 | this.title = article.getTitle(); 34 | this.mdMaterial = article.getMdMaterial(); 35 | this.description = article.getIntroduction(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/vo/PostView.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.Setter; 6 | import me.zbl.fullstack.entity.Article; 7 | import org.apache.commons.lang3.time.DateFormatUtils; 8 | 9 | /** 10 | * 博客列表视图 11 | * 12 | * @author James 13 | */ 14 | @Getter 15 | @Setter 16 | @AllArgsConstructor 17 | public class PostView { 18 | 19 | private Integer id; 20 | private String title; 21 | private String description; 22 | private String dateTime; 23 | private String htmlMaterial; 24 | 25 | /** 26 | * 拷贝构造方法 27 | * 28 | * @param article 文章 29 | */ 30 | public PostView(Article article) { 31 | id = article.getId(); 32 | title = article.getTitle(); 33 | description = article.getIntroduction(); 34 | dateTime = DateFormatUtils.format(article.getGmtCreate(), "yyyy-MM-dd HH:mm"); 35 | htmlMaterial = article.getHtmlMaterial(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/vo/ResumeModifyModel.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.vo; 2 | 3 | import lombok.Getter; 4 | import lombok.NoArgsConstructor; 5 | import lombok.Setter; 6 | import me.zbl.fullstack.entity.Article; 7 | import me.zbl.fullstack.entity.Resume; 8 | import org.hibernate.validator.constraints.NotEmpty; 9 | 10 | /** 11 | * 简历修改表单 12 | *

13 | * 14 | * @author James 15 | * @date 17-12-4 16 | */ 17 | @Setter 18 | @Getter 19 | @NoArgsConstructor 20 | public class ResumeModifyModel { 21 | 22 | @NotEmpty 23 | private Integer id; 24 | 25 | @NotEmpty 26 | private String title; 27 | 28 | private String mdMaterial; 29 | 30 | private String description; 31 | 32 | public ResumeModifyModel(Resume article) { 33 | this.id = article.getId(); 34 | this.title = article.getTitle(); 35 | this.mdMaterial = article.getMdMaterial(); 36 | this.description = article.getIntroduction(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/entity/vo/TagView.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.entity.vo; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import lombok.NoArgsConstructor; 6 | import lombok.Setter; 7 | import me.zbl.fullstack.entity.Tag; 8 | 9 | /** 10 | * 文章标签视图 11 | * 12 | * @author James 13 | */ 14 | @Getter 15 | @Setter 16 | @NoArgsConstructor 17 | @AllArgsConstructor 18 | public class TagView { 19 | 20 | private Integer tagId; 21 | private String tagName; 22 | private Integer articleCount; 23 | 24 | public TagView(Tag tag) { 25 | this.tagId = tag.getId(); 26 | this.tagName = tag.getName(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/exception/GlobalExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.exception; 2 | 3 | import org.slf4j.Logger; 4 | import org.slf4j.LoggerFactory; 5 | import org.springframework.http.HttpStatus; 6 | import org.springframework.ui.Model; 7 | import org.springframework.web.bind.annotation.ControllerAdvice; 8 | import org.springframework.web.bind.annotation.ExceptionHandler; 9 | import org.springframework.web.bind.annotation.ResponseStatus; 10 | 11 | /** 12 | * 全局常量处理器 13 | * 14 | * @author James 15 | */ 16 | @ControllerAdvice 17 | public class GlobalExceptionHandler { 18 | 19 | private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class); 20 | 21 | @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) 22 | @ExceptionHandler(Exception.class) 23 | public String handleException(Exception e, Model model) { 24 | model.addAttribute("msg", e.getLocalizedMessage()); 25 | e.printStackTrace(); 26 | return "redirect:error"; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/framework/mapper/IMyMapper.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.framework.mapper; 2 | 3 | import tk.mybatis.mapper.common.ConditionMapper; 4 | import tk.mybatis.mapper.common.ExampleMapper; 5 | import tk.mybatis.mapper.common.Mapper; 6 | import tk.mybatis.mapper.common.MySqlMapper; 7 | import tk.mybatis.mapper.common.ids.DeleteByIdsMapper; 8 | import tk.mybatis.mapper.common.ids.SelectByIdsMapper; 9 | 10 | /** 11 | * Mapper 基础接口 12 | * 其他 Mapper 接口需集成本接口 13 | * 14 | * @param 实体类型 15 | * @author James 16 | * 此接口不能被扫描到,否则出错 17 | */ 18 | public interface IMyMapper extends 19 | Mapper, 20 | MySqlMapper, 21 | DeleteByIdsMapper, 22 | ConditionMapper, 23 | ExampleMapper, 24 | SelectByIdsMapper { 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/interceptor/UserAuthenticationInterceptor.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.interceptor; 2 | 3 | import me.zbl.fullstack.consts.SessionConstants; 4 | import me.zbl.fullstack.entity.AdminUser; 5 | import org.springframework.stereotype.Component; 6 | import org.springframework.web.servlet.HandlerInterceptor; 7 | import org.springframework.web.servlet.ModelAndView; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | import javax.servlet.http.HttpServletResponse; 11 | 12 | /** 13 | * 用户权限验证的拦截器 14 | * 15 | * @author James 16 | */ 17 | @Component 18 | public class UserAuthenticationInterceptor implements HandlerInterceptor { 19 | 20 | @Override 21 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 22 | Object obj = request.getSession().getAttribute(SessionConstants.SESSION_ADMIN_CURRENT_USER); 23 | if (null == obj || !(obj instanceof AdminUser)) { 24 | response.sendRedirect(request.getContextPath() + "/adminlogin"); 25 | return false; 26 | } 27 | return true; 28 | } 29 | 30 | 31 | @Override 32 | public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 33 | 34 | } 35 | 36 | @Override 37 | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/mapper/AdminUserMapper.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.mapper; 2 | 3 | import me.zbl.fullstack.entity.AdminUser; 4 | import me.zbl.fullstack.framework.mapper.IMyMapper; 5 | 6 | /** 7 | * @author James 8 | */ 9 | public interface AdminUserMapper extends IMyMapper { 10 | 11 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/mapper/ArticleMapper.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.mapper; 2 | 3 | import me.zbl.fullstack.entity.Article; 4 | import me.zbl.fullstack.entity.dto.form.ArticleSearchForm; 5 | import me.zbl.fullstack.framework.mapper.IMyMapper; 6 | import me.zbl.fullstack.mapper.provider.ArticleSqlProvider; 7 | import org.apache.ibatis.annotations.Select; 8 | import org.apache.ibatis.annotations.SelectProvider; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @author James 14 | */ 15 | public interface ArticleMapper extends IMyMapper

{ 16 | 17 | String COLUMN_LIST = "article.id,title,introduction,article.gmt_create AS gmtCreate,article.gmt_modified AS gmtModified"; 18 | 19 | @Select({ 20 | "SELECT", 21 | COLUMN_LIST, 22 | "FROM", 23 | "article", 24 | "ORDER BY article.gmt_create DESC" 25 | }) 26 | List
getPostViewAllArticles(); 27 | 28 | /** 29 | * 通过 tag id 查找文章 30 | * 31 | * @param id tag id 32 | * 33 | * @return 符合条件的文章 34 | */ 35 | @Select({ 36 | "SELECT", 37 | COLUMN_LIST, 38 | "FROM article", 39 | "INNER JOIN tag_article", 40 | "ON tag_article.article_id = article.id", 41 | "AND tag_article.tag_id=#{id}", 42 | "ORDER BY article.gmt_create DESC" 43 | }) 44 | List
getArticleListByTagId(Integer id); 45 | 46 | /** 47 | * 通过条件查找文章 48 | * 49 | * @param form 条件表单 50 | * 51 | * @return 符合条件的文章 52 | */ 53 | @SelectProvider(type = ArticleSqlProvider.class, method = "getArticleByCondition") 54 | List
getArticleListByCondition(ArticleSearchForm form); 55 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/mapper/ResumeMapper.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.mapper; 2 | 3 | import me.zbl.fullstack.entity.Resume; 4 | import me.zbl.fullstack.framework.mapper.IMyMapper; 5 | 6 | /** 7 | * 简历 8 | * 9 | * @author James 10 | */ 11 | public interface ResumeMapper extends IMyMapper { 12 | 13 | String COLUMN_LIST = "resume.id,title,introduction,resume.gmt_create AS gmtCreate,resume.gmt_modified AS gmtModified"; 14 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/mapper/TagArticleMapper.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.mapper; 2 | 3 | import me.zbl.fullstack.entity.TagArticle; 4 | import me.zbl.fullstack.framework.mapper.IMyMapper; 5 | 6 | /** 7 | * @author James 8 | */ 9 | public interface TagArticleMapper extends IMyMapper { 10 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/mapper/TagMapper.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.mapper; 2 | 3 | import me.zbl.fullstack.entity.Article; 4 | import me.zbl.fullstack.entity.Tag; 5 | import me.zbl.fullstack.entity.vo.TagView; 6 | import me.zbl.fullstack.framework.mapper.IMyMapper; 7 | import org.apache.ibatis.annotations.Select; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author James 13 | */ 14 | public interface TagMapper extends IMyMapper { 15 | 16 | String COLUMN_LIST = "article.id,article.title,article.introduction,article.gmt_create AS gmtCreate,article.gmt_modified AS gmtModified"; 17 | 18 | /** 19 | * 根据 tag 的 id 获取文章 20 | * 21 | * @param id tag id 22 | * 23 | * @return 文章集合 24 | */ 25 | @Select({ 26 | "SELECT", 27 | COLUMN_LIST, 28 | "FROM article,tag,tag_article", 29 | "WHERE article.id = tag_article.article_id AND tag.id = tag_article.tag_id", 30 | "AND tag.id = #{id}" 31 | }) 32 | List
selectArticleByTagId(Integer id); 33 | 34 | /** 35 | * 获取所有 TagView 36 | * TagView 包括 tag 的名字/id 以及该 tag 对应的文章总数 37 | * 38 | * @return 文章集合 39 | */ 40 | @Select({ 41 | "SELECT tag.id AS tagId,", 42 | "tag.name AS tagName,", 43 | "COUNT(tag_article.article_id) AS articleCount", 44 | "FROM tag_article", 45 | "LEFT JOIN tag", 46 | "ON tag.id = tag_article.tag_id", 47 | "GROUP BY tag_article.tag_id" 48 | }) 49 | List selectAllTagView(); 50 | 51 | @Select({ 52 | "SELECT id,", 53 | "`name` FROM tag WHERE `name` = #{tagName}" 54 | }) 55 | Tag selectTagByName(String tagName); 56 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/mapper/UserMapper.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.mapper; 2 | 3 | import me.zbl.fullstack.entity.User; 4 | import me.zbl.fullstack.framework.mapper.IMyMapper; 5 | 6 | /** 7 | * @author James 8 | */ 9 | public interface UserMapper extends IMyMapper { 10 | } -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/mapper/provider/ArticleSqlProvider.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.mapper.provider; 2 | 3 | import me.zbl.fullstack.entity.dto.form.ArticleSearchForm; 4 | import org.apache.ibatis.jdbc.SQL; 5 | 6 | /** 7 | * Article 动态 SQL 提供者 8 | * 9 | * @author James 10 | */ 11 | public class ArticleSqlProvider { 12 | 13 | public String getArticleByCondition(ArticleSearchForm form) { 14 | return new SQL() {{ 15 | SELECT("article.id,title,introduction,article.gmt_create AS gmtCreate,article.gmt_modified AS gmtModified"); 16 | FROM("article"); 17 | if (form.getName() != null) { 18 | WHERE("article.title LIKE CONCAT ('%','" + form.getName() + "','%')"); 19 | } 20 | }}.toString(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/api/IAdminBlogService.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.service.api; 2 | 3 | import me.zbl.fullstack.entity.Article; 4 | import me.zbl.fullstack.entity.vo.ArticleDataGridView; 5 | import me.zbl.fullstack.entity.dto.request.TableKeyModel; 6 | import me.zbl.fullstack.entity.dto.form.BlogAddForm; 7 | import me.zbl.fullstack.entity.dto.form.BlogModifyForm; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 后台博客发布接口 13 | * 14 | * @author James 15 | */ 16 | public interface IAdminBlogService { 17 | 18 | /** 19 | * 添加 文章 20 | * 21 | * @param form 表单 22 | */ 23 | void blogAdd(BlogAddForm form); 24 | 25 | /** 26 | * 根据 id 获取文章 27 | * 28 | * @param id id 29 | * 30 | * @return 文章实体 31 | */ 32 | Article blogSelectByPrimaryKey(Integer id); 33 | 34 | /** 35 | * 获取所有文章列表 36 | * 37 | * @return 文章列表视图实体集合 38 | */ 39 | List getArticleList(); 40 | 41 | /** 42 | * 根据 id 删除文章 43 | * 44 | * @param model 数据模型 45 | */ 46 | void blogDelete(TableKeyModel model); 47 | 48 | /** 49 | * 修改已发布文章 50 | * 51 | * @param form 表单 52 | */ 53 | void blogModify(BlogModifyForm form); 54 | } 55 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/api/IPostsService.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.service.api; 2 | 3 | import me.zbl.fullstack.entity.vo.PostView; 4 | import me.zbl.fullstack.entity.dto.form.ArticleSearchForm; 5 | 6 | import java.util.Date; 7 | import java.util.List; 8 | 9 | /** 10 | * 博客服务接口 11 | * 12 | * @author James 13 | */ 14 | public interface IPostsService { 15 | 16 | /** 17 | * 获取所有博客 18 | * 19 | * @return 博客视图实体集合 20 | */ 21 | List getPostList(); 22 | 23 | /** 24 | * 根据日期条件获取博客 25 | * 26 | * @param start 起始时间 27 | * @param end 结束时间 28 | * 29 | * @return 博客视图集合 30 | */ 31 | List getPostListByDate(Date start, Date end); 32 | 33 | /** 34 | * 根据 Tag ID 查找文章 35 | * 36 | * @param tagId tag ID 37 | * 38 | * @return 文章 39 | */ 40 | List getPostListByTagId(Integer tagId); 41 | 42 | /** 43 | * 根据 具体条件筛选文章 44 | * 45 | * @param form 条件表单 46 | * 47 | * @return 文章 48 | */ 49 | List getPostListByArticleCondition(ArticleSearchForm form); 50 | } 51 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/api/IResumeService.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 JamesZBL 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | package me.zbl.fullstack.service.api; 18 | 19 | import me.zbl.fullstack.entity.Resume; 20 | import me.zbl.fullstack.entity.dto.form.ResumeModifyForm; 21 | 22 | /** 23 | * 简历业务接口 24 | * 25 | * @author JamesZBL 26 | * @date 2018-03-28 27 | */ 28 | public interface IResumeService { 29 | 30 | /** 31 | * 查询简历 32 | */ 33 | Resume getResume(); 34 | 35 | /** 36 | * 更新简历 37 | * 38 | * @param form 表单 39 | */ 40 | void updateResume(ResumeModifyForm form, Resume resume); 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/api/ITagService.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.service.api; 2 | 3 | import me.zbl.fullstack.entity.vo.TagView; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * 文章标签相关业务接口 9 | * 10 | * @author James 11 | */ 12 | public interface ITagService { 13 | 14 | /** 15 | * 获取所有 Tag 视图 16 | * 17 | * @return Tag 视图 18 | */ 19 | List getAllTagView(); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/api/IUserService.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.service.api; 2 | 3 | 4 | import me.zbl.fullstack.entity.User; 5 | import me.zbl.fullstack.entity.dto.form.UserLoginForm; 6 | import me.zbl.fullstack.entity.dto.form.UserRegisterForm; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | 10 | /** 11 | * 用户信息操作接口 12 | * 13 | * @author James 14 | */ 15 | public interface IUserService { 16 | 17 | /** 18 | * 进行登录验证 19 | * 20 | * @param loginForm 登录表单 21 | * 22 | * @return 如果验证通过返回 User 实体 23 | */ 24 | User loginAuthentication(UserLoginForm loginForm); 25 | 26 | /** 27 | * 进行用户注册中的用户名重复校验 28 | * 29 | * @param registerForm 注册表单 30 | * 31 | * @return 该用户民是否存在 32 | */ 33 | boolean registerUsernameCheckExist(UserRegisterForm registerForm); 34 | 35 | /** 36 | * 保存用户 37 | * 38 | * @param user 用户 39 | */ 40 | void insertUser(User user); 41 | 42 | /** 43 | * 将用户信息加入会话 44 | * 45 | * @param request 用户请求 46 | * @param user 当前用户的信息 47 | */ 48 | void joinSession(HttpServletRequest request, User user); 49 | 50 | /** 51 | * 从会话中销毁用户信息 52 | * 53 | * @param request 用户请求 54 | */ 55 | void destroySession(HttpServletRequest request); 56 | } 57 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/base/BaseViewTransableService.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.service.base; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * 通用包含视图转换功能的业务抽象类 7 | * 8 | * @param 数据查询结果实体类 9 | * @param 视图类 10 | * 11 | * @author James 12 | */ 13 | public abstract class BaseViewTransableService { 14 | 15 | /** 16 | * 将数据实体类对象转换为视图类对象 17 | * 18 | * @param entityList 数据实体类对象集合 19 | * 20 | * @return 视图模型类对象集合 21 | */ 22 | protected abstract List transEntityToView(List entityList); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/impl/ResumeServiceImpl.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2018 JamesZBL 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | package me.zbl.fullstack.service.impl; 18 | 19 | import me.zbl.fullstack.entity.Resume; 20 | import me.zbl.fullstack.entity.dto.form.ResumeModifyForm; 21 | import me.zbl.fullstack.mapper.ResumeMapper; 22 | import me.zbl.fullstack.service.api.IResumeService; 23 | import org.springframework.beans.factory.annotation.Autowired; 24 | import org.springframework.stereotype.Service; 25 | 26 | /** 27 | * @author JamesZBL 28 | * @date 2018-03-28 29 | */ 30 | @Service 31 | public class ResumeServiceImpl implements IResumeService { 32 | 33 | @Autowired 34 | private ResumeMapper mResumeMapper; 35 | 36 | 37 | @Override 38 | public Resume getResume() { 39 | return mResumeMapper.selectAll().get(0); 40 | } 41 | 42 | @Override 43 | public void updateResume(ResumeModifyForm form, Resume resume) { 44 | resume.setId(1); 45 | resume.setHtmlMaterial(form.getHtmlMaterial()); 46 | resume.setMdMaterial(form.getMdMaterial()); 47 | mResumeMapper.updateByPrimaryKeySelective(resume); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/service/impl/TagServiceImpl.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.service.impl; 2 | 3 | import me.zbl.fullstack.entity.Tag; 4 | import me.zbl.fullstack.entity.vo.TagView; 5 | import me.zbl.fullstack.mapper.TagMapper; 6 | import me.zbl.fullstack.service.api.ITagService; 7 | import me.zbl.fullstack.service.base.BaseViewTransableService; 8 | import org.springframework.beans.factory.annotation.Autowired; 9 | import org.springframework.stereotype.Service; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | /** 15 | * 文章标签相关业务实现类 16 | * 17 | * @author James 18 | */ 19 | @Service 20 | public class TagServiceImpl extends BaseViewTransableService implements ITagService { 21 | 22 | @Autowired 23 | TagMapper mTagMapper; 24 | 25 | @Override 26 | protected List transEntityToView(List entityList) { 27 | List tagViews = new ArrayList<>(); 28 | for (Tag tag : entityList) { 29 | TagView tagView = new TagView(tag); 30 | tagViews.add(tagView); 31 | } 32 | return tagViews; 33 | } 34 | 35 | @Override 36 | public List getAllTagView() { 37 | return mTagMapper.selectAllTagView(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/me/zbl/fullstack/utils/AspectUtil.java: -------------------------------------------------------------------------------- 1 | package me.zbl.fullstack.utils; 2 | 3 | import org.aspectj.lang.ProceedingJoinPoint; 4 | import org.aspectj.lang.Signature; 5 | import org.aspectj.lang.reflect.MethodSignature; 6 | 7 | import java.lang.annotation.Annotation; 8 | import java.lang.reflect.Method; 9 | 10 | /** 11 | * 切面操作工具 12 | * 13 | * @author James 14 | */ 15 | public class AspectUtil { 16 | 17 | /** 18 | * 获取连接点的制定类型的注解 19 | * 20 | * @param joinPoint 连接点 21 | * @param clazz 注解类 22 | * 23 | * @return 注解 24 | */ 25 | public static Annotation getAnnotation(ProceedingJoinPoint joinPoint, Class clazz) { 26 | try { 27 | // 拦截的对象 28 | Object object = joinPoint.getTarget(); 29 | Signature signature = joinPoint.getSignature(); 30 | // 拦截方法名 31 | String methodName = signature.getName(); 32 | Class[] parameterTypes = ((MethodSignature) signature).getMethod().getParameterTypes(); 33 | 34 | try { 35 | // 反射目标方法 36 | Method method = object.getClass().getDeclaredMethod(methodName, parameterTypes); 37 | // 获取注解 38 | return method.getDeclaredAnnotation(clazz); 39 | } catch (NoSuchMethodException e) { 40 | e.printStackTrace(); 41 | } 42 | } catch (Throwable throwable) { 43 | throwable.printStackTrace(); 44 | } 45 | return null; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | profiles: 3 | active: dev 4 | # active: prod -------------------------------------------------------------------------------- /src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | ______________________________________________________________ 2 | _____ __ 3 | / ' / / / ) / 4 | ---/__-------------/---/--------\------_/_----__----__---/-__- 5 | / / / / / === \ / / ) / ' /( 6 | _/________(___(__/___/_______(____/___(_ __(___(_(___ _/___\__ 7 | 8 | -------------------------------------------------------------------------------- /src/main/resources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/favicon.ico -------------------------------------------------------------------------------- /src/main/resources/mapping/AdminUserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/main/resources/mapping/ArticleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/main/resources/mapping/TagArticleMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/mapping/TagMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/mapping/UserMapper.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/main/resources/mybatis-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/main/resources/mybatisGenerator/config.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/mybatisGenerator/config.properties -------------------------------------------------------------------------------- /src/main/resources/static/css/full-slider/full-slider.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - Full Slider (https://startbootstrap.com/template-overviews/full-slider) 3 | * Copyright 2013-2017 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-full-slider/blob/master/LICENSE) 5 | */ 6 | 7 | .carousel-item { 8 | height: 100vh; 9 | min-height: 300px; 10 | background: no-repeat center center scroll; 11 | -webkit-background-size: cover; 12 | -moz-background-size: cover; 13 | -o-background-size: cover; 14 | background-size: cover; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/static/css/public.css: -------------------------------------------------------------------------------- 1 | /*******************************************************/ 2 | /*******************************************************/ 3 | 4 | /****************** 全局自定义样式 ********************/ 5 | 6 | /**** 自定义样式统一以 cus_ 开头,避免和框架中的类名混淆 ****/ 7 | /*******************************************************/ 8 | /*******************************************************/ 9 | 10 | /* 内容 用于有常驻顶部 nav.ftl 的页面*/ 11 | .cus_content { 12 | margin-top: 56px; 13 | } 14 | 15 | .cus_fixed_bottom { 16 | position: fixed; 17 | bottom: 0; 18 | } 19 | 20 | footer.footer { 21 | padding-top: 4rem; 22 | padding-bottom: 4rem; 23 | } 24 | 25 | textarea { 26 | resize: vertical; 27 | } 28 | 29 | .img_shadow{ 30 | box-shadow: 0px 0px 7px #333333; 31 | } 32 | 33 | .txt_shadow{ 34 | text-shadow:0px 0px 7px #2f2f2f; 35 | } -------------------------------------------------------------------------------- /src/main/resources/static/dist/admin/js/sb-admin-2.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Start Bootstrap - SB Admin 2 v3.3.7+1 (http://startbootstrap.com/template-overviews/sb-admin-2) 3 | * Copyright 2013-2016 Start Bootstrap 4 | * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap/blob/gh-pages/LICENSE) 5 | */ 6 | $(function(){$("#side-menu").metisMenu()}),$(function(){$(window).bind("load resize",function(){var i=50,n=this.window.innerWidth>0?this.window.innerWidth:this.screen.width;n<768?($("div.navbar-collapse").addClass("collapse"),i=100):$("div.navbar-collapse").removeClass("collapse");var e=(this.window.innerHeight>0?this.window.innerHeight:this.screen.height)-1;e-=i,e<1&&(e=1),e>i&&$("#page-wrapper").css("min-height",e+"px")});for(var i=window.location,n=$("ul.nav a").filter(function(){return this.href==i}).addClass("active").parent();;){if(!n.is("li"))break;n=n.parent().addClass("in").parent()}}); -------------------------------------------------------------------------------- /src/main/resources/static/img/404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/img/404.png -------------------------------------------------------------------------------- /src/main/resources/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/img/logo.png -------------------------------------------------------------------------------- /src/main/resources/static/img/wechat_qr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/img/wechat_qr.png -------------------------------------------------------------------------------- /src/main/resources/static/js/b_admin_user_pwd_modify.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | $("#id_btn_submit").bind("click", function () { 3 | $.ajax({ 4 | type: "POST", 5 | dataType: "json", 6 | url: "/admin/admin_user_pwd_modify.f", 7 | data: $('#id_form').serialize(), 8 | success: function (result) { 9 | if (!(result.hasError)) { 10 | msg("修改成功"); 11 | // 返回博客批量管理页 12 | c_location("/admin/blogmanage"); 13 | } else { 14 | msg("修改失败"); 15 | } 16 | }, 17 | error: function () { 18 | msg("失败"); 19 | } 20 | }); 21 | }); 22 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/b_admin_userlogin.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | $("#id_user_login_submit").bind("click", function () { 3 | var loginForm = document.forms[0]; 4 | loginForm.action = "/adminlogin/login.f"; 5 | loginForm.method = "post"; 6 | loginForm.submit(); 7 | }); 8 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/b_blog_modify.js: -------------------------------------------------------------------------------- 1 | /* 博客修改 */ 2 | // Markdown 编辑器 3 | var testEditor; 4 | 5 | $(function () { 6 | testEditor = editormd("test-editormd", { 7 | width: "100%", 8 | height: 640, 9 | syncScrolling: "single", 10 | path: "/vendor/editor/lib/", 11 | saveHTMLToTextarea: true 12 | }); 13 | 14 | $("#id_btn_blog_submit").bind("click", function () { 15 | /* markdown 格式文本 */ 16 | $("#id_input_md").val(testEditor.getMarkdown()); 17 | /* html 格式内容 */ 18 | $("#id_input_html").val($(".markdown-body").prop('outerHTML')); 19 | /* 展示文章描述填写的模态框 */ 20 | showDetailModal(); 21 | }); 22 | 23 | $('#id_btn_release_in_modal').bind('click', function () { 24 | saveDetailText(); 25 | submitBlogAddForm(); 26 | }); 27 | }); 28 | 29 | /** 30 | * 展示文章详情填写的模态框 31 | */ 32 | function showDetailModal() { 33 | $('#id_modal_article_detail').modal({ 34 | // backdrop: false 35 | }); 36 | } 37 | 38 | /** 39 | * 将模态框中填写的内容保存到表单中 40 | */ 41 | function saveDetailText() { 42 | // 内容描述 43 | $('#id_input_article_description').val($('#id_input_article_description_in_modal').val()); 44 | // Tags 45 | $('#id_input_article_tags').val($('#id_input_article_tags_in_modal').val()); 46 | } 47 | 48 | /** 49 | * 提交文章表单 50 | */ 51 | function submitBlogAddForm() { 52 | // 提交表单 53 | var form = document.forms[0]; 54 | form.action = "/admin/blog_modify.f"; 55 | form.method = "post"; 56 | form.submit(); 57 | } -------------------------------------------------------------------------------- /src/main/resources/static/js/b_blogadd.js: -------------------------------------------------------------------------------- 1 | /* 博客发布 */ 2 | // Markdown 编辑器 3 | var testEditor; 4 | 5 | $(function () { 6 | testEditor = editormd("test-editormd", { 7 | width: "100%", 8 | height: 640, 9 | syncScrolling: "single", 10 | path: "../vendor/editor/lib/", 11 | saveHTMLToTextarea: true 12 | }); 13 | 14 | /* 15 | // or 16 | testEditor = editormd({ 17 | id : "test-editormd", 18 | width : "90%", 19 | height : 640, 20 | path : "../lib/" 21 | }); 22 | */ 23 | 24 | $("#id_btn_blog_submit").bind("click", function () { 25 | /* markdown 格式文本 */ 26 | $("#id_input_md").val(testEditor.getMarkdown()); 27 | /* html 格式内容 */ 28 | $("#id_input_html").val($(".markdown-body").prop('outerHTML')); 29 | /* 展示文章描述填写的模态框 */ 30 | showDetailModal(); 31 | }); 32 | 33 | $('#id_btn_release_in_modal').bind('click', function () { 34 | saveDetailText(); 35 | submitBlogAddForm(); 36 | }); 37 | }); 38 | 39 | /** 40 | * 展示文章详情填写的模态框 41 | */ 42 | function showDetailModal() { 43 | $('#id_modal_article_detail').modal({ 44 | // backdrop: false 45 | }); 46 | } 47 | 48 | /** 49 | * 将模态框中填写的内容保存到表单中 50 | */ 51 | function saveDetailText() { 52 | // 内容描述 53 | $('#id_input_article_description').val($('#id_input_article_description_in_modal').val()); 54 | // Tags 55 | $('#id_input_article_tags').val($('#id_input_article_tags_in_modal').val()); 56 | } 57 | 58 | /** 59 | * 提交文章表单 60 | */ 61 | function submitBlogAddForm() { 62 | // 提交表单 63 | var form = document.forms[0]; 64 | form.action = "/admin/blogadd.f"; 65 | form.method = "post"; 66 | form.submit(); 67 | } -------------------------------------------------------------------------------- /src/main/resources/static/js/f_footer.js: -------------------------------------------------------------------------------- 1 | $('#id_a_wechat').hover(function () { 2 | $('#id_img_wechat_qrcode').fadeIn("fast"); 3 | },function () { 4 | $('#id_img_wechat_qrcode').fadeOut("fast"); 5 | 6 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/f_register.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 3 | $("#id_user_register_submit").bind("click", function () { 4 | var registerForm = document.forms[0]; 5 | registerForm.action = "userregister.f"; 6 | registerForm.method = "post"; 7 | registerForm.submit(); 8 | }); 9 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/f_userlogin.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | $("#id_user_login_submit").bind("click", function () { 3 | var loginForm = document.forms[0]; 4 | loginForm.action = "userlogin.f"; 5 | loginForm.method = "post"; 6 | loginForm.submit(); 7 | }); 8 | }); -------------------------------------------------------------------------------- /src/main/resources/static/js/public.js: -------------------------------------------------------------------------------- 1 | ;!function () { 2 | var layer = layui.layer, 3 | form = layui.form; 4 | }(); 5 | 6 | /** 7 | * 向指定 url 发送 get 请求 8 | * @param href 9 | */ 10 | function c_location(href) { 11 | window.location = href; 12 | } 13 | 14 | 15 | /** 16 | * Layer 确认框 17 | * 点击 “确认” 后执行回调函数,点击 “取消” 不做任何操作 18 | * 19 | * @param msg 确认消息 20 | * @param callback 回调函数 21 | */ 22 | function c_confirm(msg, callback) { 23 | layer.confirm(msg, {icon: 3, title: '提示'}, function (index) { 24 | callback(); 25 | layer.close(index); 26 | }); 27 | } 28 | 29 | /** 30 | * 弹出提示消息遮罩层 31 | * 32 | * @param msg 消息内容 33 | */ 34 | function msg(msg) { 35 | layer.msg(msg); 36 | } 37 | 38 | /** 39 | * 时间戳转日期字符串 40 | */ 41 | function formatDateTime(val, row, index) { 42 | var date = new Date(val); 43 | var y = date.getFullYear(); 44 | var m = date.getMonth() + 1; 45 | m = m < 10 ? ('0' + m) : m; 46 | var d = date.getDate(); 47 | d = d < 10 ? ('0' + d) : d; 48 | var h = date.getHours(); 49 | h = h < 10 ? ('0' + h) : h; 50 | var minute = date.getMinutes(); 51 | var second = date.getSeconds(); 52 | minute = minute < 10 ? ('0' + minute) : minute; 53 | second = second < 10 ? ('0' + second) : second; 54 | return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second; 55 | } 56 | 57 | /** 58 | * 截取指定长度的字符串 59 | * 在末尾添加 “...” 60 | */ 61 | function formatStrLength(val, row, index) { 62 | val = val.substring(0,20); 63 | val += "..."; 64 | return val; 65 | } -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/datatables/images/Sorting icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/datatables/images/Sorting icons.psd -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/datatables/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/datatables/images/favicon.ico -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/datatables/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/datatables/images/sort_asc.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/datatables/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/datatables/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/datatables/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/datatables/images/sort_both.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/datatables/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/datatables/images/sort_desc.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/datatables/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/datatables/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/admin/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/extras.less: -------------------------------------------------------------------------------- 1 | // Extras 2 | // -------------------------- 3 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/spinning.less: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_extras.scss: -------------------------------------------------------------------------------- 1 | /* EXTRAS 2 | * -------------------------- */ 3 | 4 | /* Stacked and layered icon */ 5 | 6 | /* Animated rotating icon */ 7 | .#{$fa-css-prefix}-spin { 8 | -webkit-animation: spin 2s infinite linear; 9 | -moz-animation: spin 2s infinite linear; 10 | -o-animation: spin 2s infinite linear; 11 | animation: spin 2s infinite linear; 12 | } 13 | 14 | @-moz-keyframes spin { 15 | 0% { -moz-transform: rotate(0deg); } 16 | 100% { -moz-transform: rotate(359deg); } 17 | } 18 | @-webkit-keyframes spin { 19 | 0% { -webkit-transform: rotate(0deg); } 20 | 100% { -webkit-transform: rotate(359deg); } 21 | } 22 | @-o-keyframes spin { 23 | 0% { -o-transform: rotate(0deg); } 24 | 100% { -o-transform: rotate(359deg); } 25 | } 26 | @-ms-keyframes spin { 27 | 0% { -ms-transform: rotate(0deg); } 28 | 100% { -ms-transform: rotate(359deg); } 29 | } 30 | @keyframes spin { 31 | 0% { transform: rotate(0deg); } 32 | 100% { transform: rotate(359deg); } 33 | } 34 | 35 | 36 | // Icon rotations & flipping 37 | // ------------------------- 38 | 39 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 40 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 41 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 42 | 43 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 44 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 45 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_spinning.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | @-webkit-keyframes fa-spin { 10 | 0% { 11 | -webkit-transform: rotate(0deg); 12 | transform: rotate(0deg); 13 | } 14 | 100% { 15 | -webkit-transform: rotate(359deg); 16 | transform: rotate(359deg); 17 | } 18 | } 19 | 20 | @keyframes fa-spin { 21 | 0% { 22 | -webkit-transform: rotate(0deg); 23 | transform: rotate(0deg); 24 | } 25 | 100% { 26 | -webkit-transform: rotate(359deg); 27 | transform: rotate(359deg); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/metisMenu/metisMenu.css: -------------------------------------------------------------------------------- 1 | /* 2 | * metismenu - v1.1.3 3 | * Easy menu jQuery plugin for Twitter Bootstrap 3 4 | * https://github.com/onokumus/metisMenu 5 | * 6 | * Made by Osman Nuri Okumus 7 | * Under MIT License 8 | */ 9 | .arrow { 10 | float: right; 11 | line-height: 1.42857; 12 | } 13 | 14 | .glyphicon.arrow:before { 15 | content: "\e079"; 16 | } 17 | 18 | .active > a > .glyphicon.arrow:before { 19 | content: "\e114"; 20 | } 21 | 22 | 23 | /* 24 | * Require Font-Awesome 25 | * http://fortawesome.github.io/Font-Awesome/ 26 | */ 27 | 28 | 29 | .fa.arrow:before { 30 | content: "\f104"; 31 | } 32 | 33 | .active > a > .fa.arrow:before { 34 | content: "\f107"; 35 | } 36 | 37 | .plus-times { 38 | float: right; 39 | } 40 | 41 | .fa.plus-times:before { 42 | content: "\f067"; 43 | } 44 | 45 | .active > a > .fa.plus-times { 46 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); 47 | -webkit-transform: rotate(45deg); 48 | -moz-transform: rotate(45deg); 49 | -ms-transform: rotate(45deg); 50 | -o-transform: rotate(45deg); 51 | transform: rotate(45deg); 52 | } 53 | 54 | .plus-minus { 55 | float: right; 56 | } 57 | 58 | .fa.plus-minus:before { 59 | content: "\f067"; 60 | } 61 | 62 | .active > a > .fa.plus-minus:before { 63 | content: "\f068"; 64 | } -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/metisMenu/metisMenu.min.css: -------------------------------------------------------------------------------- 1 | /* 2 | * metismenu - v1.1.3 3 | * Easy menu jQuery plugin for Twitter Bootstrap 3 4 | * https://github.com/onokumus/metisMenu 5 | * 6 | * Made by Osman Nuri Okumus 7 | * Under MIT License 8 | */ 9 | 10 | .arrow{float:right;line-height:1.42857}.glyphicon.arrow:before{content:"\e079"}.active>a>.glyphicon.arrow:before{content:"\e114"}.fa.arrow:before{content:"\f104"}.active>a>.fa.arrow:before{content:"\f107"}.plus-times{float:right}.fa.plus-times:before{content:"\f067"}.active>a>.fa.plus-times{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.plus-minus{float:right}.fa.plus-minus:before{content:"\f067"}.active>a>.fa.plus-minus:before{content:"\f068"} -------------------------------------------------------------------------------- /src/main/resources/static/vendor/admin/morrisjs/morris.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0} 3 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/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/vendor/editor/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/editormd-logo.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/editormd-logo.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/editormd-logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by IcoMoon 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/editormd-logo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/editormd-logo.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/editormd-logo.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/editormd-logo.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/loading.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/loading@2x.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/loading@3x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/loading@3x.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-favicon-16x16.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-favicon-16x16.ico -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-favicon-24x24.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-favicon-24x24.ico -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-favicon-32x32.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-favicon-32x32.ico -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-favicon-48x48.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-favicon-48x48.ico -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-favicon-64x64.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-favicon-64x64.ico -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-114x114.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-120x120.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-144x144.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-16x16.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-180x180.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-240x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-240x240.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-24x24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-24x24.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-320x320.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-320x320.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-32x32.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-48x48.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-57x57.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-64x64.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-72x72.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/editormd-logo-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/editormd-logo-96x96.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/images/logos/vi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/editor/images/logos/vi.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/static/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/resources/static/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/static/vendor/editor/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/vendor/editor/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/static/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/editor/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 | -------------------------------------------------------------------------------- /src/main/resources/static/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/resources/static/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/resources/static/vendor/editor/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/resources/static/vendor/editor/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/vendor/editor/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/vendor/editor/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/vendor/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.45 MIT License By http://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/font/iconfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/font/iconfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/0.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/1.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/10.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/11.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/12.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/13.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/14.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/15.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/16.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/17.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/18.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/19.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/2.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/20.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/21.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/22.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/23.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/24.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/25.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/26.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/27.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/28.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/29.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/3.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/30.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/31.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/32.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/33.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/34.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/35.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/36.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/37.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/38.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/39.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/4.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/40.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/41.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/42.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/43.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/44.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/45.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/46.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/47.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/48.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/49.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/5.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/50.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/51.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/52.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/53.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/54.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/55.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/56.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/57.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/58.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/59.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/6.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/60.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/61.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/62.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/63.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/64.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/65.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/66.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/67.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/68.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/69.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/7.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/70.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/71.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/8.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JamesZBL/FS-Blog/94a8ba71ef0cba75b7f1526b924b9d452d583015/src/main/resources/static/vendor/layui/images/face/9.gif -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.45 MIT License By http://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

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

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /src/main/resources/static/vendor/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.2.45 MIT License By http://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /src/main/resources/templates/admin/public/public_css.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/templates/admin/public/public_js.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/templates/article.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ${article.title!'全栈博客'} 11 | 12 | <#-- EditorMD --> 13 | 14 | 15 | <#-- 自定义 样式 --> 16 | <#include "public/front_custom_css.ftl"> 17 | 18 | <#-- CSS --> 19 | <#include "public/front_css.ftl"> 20 | 21 | 22 | 23 | 24 | <#-- s-nav.ftl --> 25 | <#include "public/nav.ftl"> 26 | <#-- e-nav.ftl --> 27 | 28 |
29 | <#-- 博客标题 --> 30 |
31 |
32 | <#-- 博客内容 --> 33 |
34 |

${article.title!'标题'}

35 |
36 |
37 |
38 |

${article.dateTime!""}

39 |
40 |
41 | ${article.htmlMaterial!'文章内容'} 42 |
43 |
44 |
45 |
46 | 47 | 48 | <#-- s-footer --> 49 | <#include "public/footer.ftl"> 50 | <#-- e-footer --> 51 | 52 | <#-- JS --> 53 | <#include "public/front_js.ftl"> 54 | 55 | 56 | -------------------------------------------------------------------------------- /src/main/resources/templates/error.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 出错啦 11 | 12 | <#-- 自定义 样式 --> 13 | <#include "public/front_custom_css.ftl"> 14 | 15 | <#-- CSS --> 16 | <#include "public/front_css.ftl"> 17 | 18 | 19 | 20 | 21 | <#-- s-nav.ftl --> 22 | <#include "public/nav.ftl"> 23 | <#-- e-nav.ftl --> 24 | 25 | 26 |
27 |
28 | <#--

${(msg)!"服务器需要冷静一下"}

--> 29 | <#--

错误代码:${(code)!"未知错误"}

--> 30 | 31 |

${(msg)!"服务器需要冷静一下"}

32 |

错误代码:${(code)!"未知错误"}

33 |
34 |
35 | 36 | <#-- s-footer --> 37 | <#--<#include "public/footer.ftl">--> 38 | <#-- e-footer --> 39 | 40 | <#-- JS --> 41 | <#include "public/front_js.ftl"> 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/main/resources/templates/public/front_css.ftl: -------------------------------------------------------------------------------- 1 | <#--########################### CSS ################################--> 2 | <#-- Bootstrap-Core CSS --> 3 | 4 | <#-- Font-Awesome--> 5 | 6 | -------------------------------------------------------------------------------- /src/main/resources/templates/public/front_custom_css.ftl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/main/resources/templates/public/front_js.ftl: -------------------------------------------------------------------------------- 1 | <#--########################## Javascript ##########################--> 2 | <#-- jQuery --> 3 | 4 | <#-- Bootstrap-Core JS --> 5 | 6 | <#-- Bootstrap-Bundle JS--> 7 | 8 | 9 | <#-- Fotter --> 10 | 11 | -------------------------------------------------------------------------------- /src/main/resources/templates/resume.ftl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ${article.title!'全栈博客'} 11 | 12 | <#-- EditorMD --> 13 | 14 | 15 | <#-- 自定义 样式 --> 16 | <#include "public/front_custom_css.ftl"> 17 | 18 | <#-- CSS --> 19 | <#include "public/front_css.ftl"> 20 | 21 | 22 | 23 | 24 | <#assign page_index = 2> 25 | <#-- s-nav.ftl --> 26 | <#include "public/nav.ftl"> 27 | <#-- e-nav.ftl --> 28 | 29 |
30 | <#-- 博客标题 --> 31 |
32 |
33 | <#-- 博客内容 --> 34 | ${article.htmlMaterial!'文章内容'} 35 |
36 |
37 |
38 | 39 | 40 | 41 | <#-- s-footer --> 42 | <#include "public/footer.ftl"> 43 | <#-- e-footer --> 44 | 45 | <#-- JS --> 46 | <#include "public/front_js.ftl"> 47 | 48 | 49 | --------------------------------------------------------------------------------